From f5e48839150ac58f09c40e204d9abaee5d7f3892 Mon Sep 17 00:00:00 2001 From: jaakko Date: Wed, 1 Apr 2026 23:55:27 +0300 Subject: [PATCH] poistettu target-native versionhallinnasta --- network-poc/target-native/.rustc_info.json | 1 - .../target-native/.rustdoc_fingerprint.json | 1 - network-poc/target-native/CACHEDIR.TAG | 3 - network-poc/target-native/doc/.lock | 0 .../doc/candle_transformers/all.html | 1 - .../generation/enum.Sampling.html | 46 - .../candle_transformers/generation/index.html | 5 - .../generation/sidebar-items.js | 1 - .../generation/struct.LogitsProcessor.html | 29 - .../doc/candle_transformers/index.html | 1 - .../models/based/index.html | 8 - .../models/based/sidebar-items.js | 1 - .../models/based/struct.Config.html | 29 - .../based/struct.LinearAttentionConfig.html | 29 - ...truct.LinearAttentionFeatureMapConfig.html | 29 - .../models/based/struct.Model.html | 31 - .../struct.SlidingWindowAttentionConfig.html | 29 - .../models/beit/fn.vit_base.html | 1 - .../models/beit/fn.vit_large.html | 1 - .../models/beit/index.html | 7 - .../models/beit/sidebar-items.js | 1 - .../beit/struct.BeitVisionTransformer.html | 38 - .../models/bert/constant.DTYPE.html | 1 - .../models/bert/enum.HiddenAct.html | 40 - .../bert/enum.PositionEmbeddingType.html | 38 - .../models/bert/index.html | 10 - .../models/bert/sidebar-items.js | 1 - .../models/bert/struct.BertEncoder.html | 34 - .../models/bert/struct.BertForMaskedLM.html | 30 - .../bert/struct.BertLMPredictionHead.html | 26 - .../models/bert/struct.BertLayer.html | 27 - .../models/bert/struct.BertModel.html | 33 - .../models/bert/struct.BertOnlyMLMHead.html | 26 - .../models/bert/struct.Config.html | 47 - .../models/bigcode/index.html | 17 - .../models/bigcode/sidebar-items.js | 1 - .../models/bigcode/struct.Config.html | 35 - .../models/bigcode/struct.GPTBigCode.html | 25 - .../models/blip/index.html | 9 - .../models/blip/sidebar-items.js | 1 - .../struct.BlipForConditionalGeneration.html | 27 - .../models/blip/struct.Config.html | 34 - .../models/blip/struct.VisionConfig.html | 39 - .../models/blip/struct.VisionModel.html | 28 - .../models/blip_text/index.html | 19 - .../models/blip_text/sidebar-items.js | 1 - .../models/blip_text/struct.Config.html | 41 - .../blip_text/struct.TextLMHeadModel.html | 31 - .../models/blip_text/struct.TextPooler.html | 28 - .../models/chatglm/index.html | 6 - .../models/chatglm/sidebar-items.js | 1 - .../models/chatglm/struct.Config.html | 47 - .../models/chatglm/struct.Model.html | 27 - .../models/chinese_clip/enum.Activation.html | 33 - .../chinese_clip/enum.EncoderConfig.html | 30 - .../models/chinese_clip/fn.div_l2_norm.html | 1 - .../models/chinese_clip/index.html | 8 - .../models/chinese_clip/sidebar-items.js | 1 - .../struct.ChineseClipConfig.html | 34 - .../chinese_clip/struct.ChineseClipModel.html | 38 - .../enum.PositionEmbeddingType.html | 36 - .../models/chinese_clip/text_model/index.html | 12 - .../chinese_clip/text_model/sidebar-items.js | 1 - .../struct.ChineseClipTextConfig.html | 45 - .../struct.ChineseClipTextEmbeddings.html | 27 - .../struct.ChineseClipTextTransformer.html | 35 - .../chinese_clip/vision_model/index.html | 8 - .../vision_model/sidebar-items.js | 1 - .../struct.ChineseClipVisionConfig.html | 42 - .../struct.ChineseClipVisionEmbeddings.html | 31 - .../struct.ChineseClipVisionEncoder.html | 35 - .../struct.ChineseClipVisionTransformer.html | 31 - .../models/clip/enum.EncoderConfig.html | 30 - .../models/clip/fn.div_l2_norm.html | 1 - .../models/clip/index.html | 9 - .../models/clip/sidebar-items.js | 1 - .../models/clip/struct.ClipConfig.html | 32 - .../models/clip/struct.ClipModel.html | 31 - .../clip/text_model/enum.Activation.html | 30 - .../models/clip/text_model/index.html | 8 - .../models/clip/text_model/sidebar-items.js | 1 - .../clip/text_model/struct.ClipEncoder.html | 35 - .../text_model/struct.ClipTextConfig.html | 37 - .../struct.ClipTextTransformer.html | 33 - .../models/clip/vision_model/index.html | 6 - .../models/clip/vision_model/sidebar-items.js | 1 - .../vision_model/struct.ClipVisionConfig.html | 37 - .../struct.ClipVisionTransformer.html | 28 - .../models/codegeex4_9b/index.html | 7 - .../models/codegeex4_9b/sidebar-items.js | 1 - .../models/codegeex4_9b/struct.Config.html | 50 - .../models/codegeex4_9b/struct.Model.html | 27 - .../models/colpali/index.html | 3 - .../models/colpali/sidebar-items.js | 1 - .../models/colpali/struct.Model.html | 32 - .../models/convmixer/fn.c1024_20.html | 1 - .../models/convmixer/fn.c1536_20.html | 1 - .../models/convmixer/index.html | 7 - .../models/convmixer/sidebar-items.js | 1 - .../models/convnext/fn.convnext.html | 5 - .../convnext/fn.convnext_no_final_layer.html | 4 - .../models/convnext/index.html | 13 - .../models/convnext/sidebar-items.js | 1 - .../models/convnext/struct.Config.html | 27 - .../candle_transformers/models/dac/index.html | 3 - .../models/dac/sidebar-items.js | 1 - .../models/dac/struct.Config.html | 36 - .../models/dac/struct.Decoder.html | 34 - .../models/dac/struct.DecoderBlock.html | 33 - .../models/dac/struct.Encoder.html | 33 - .../models/dac/struct.EncoderBlock.html | 28 - .../models/dac/struct.Model.html | 31 - .../models/dac/struct.ResidualUnit.html | 28 - .../dac/struct.ResidualVectorQuantizer.html | 33 - .../models/dac/struct.Snake1d.html | 28 - .../models/dac/struct.VectorQuantizer.html | 32 - .../models/debertav2/constant.DTYPE.html | 1 - .../models/debertav2/enum.HiddenAct.html | 40 - .../models/debertav2/index.html | 1 - .../models/debertav2/sidebar-items.js | 1 - .../models/debertav2/struct.Config.html | 62 - .../models/debertav2/struct.ConvLayer.html | 30 - .../debertav2/struct.DebertaV2Attention.html | 25 - .../struct.DebertaV2ContextPooler.html | 25 - ...ct.DebertaV2DisentangledSelfAttention.html | 32 - .../debertav2/struct.DebertaV2Embeddings.html | 32 - .../debertav2/struct.DebertaV2Encoder.html | 31 - .../struct.DebertaV2Intermediate.html | 25 - .../debertav2/struct.DebertaV2Layer.html | 25 - .../debertav2/struct.DebertaV2Model.html | 33 - .../debertav2/struct.DebertaV2NERModel.html | 37 - .../debertav2/struct.DebertaV2Output.html | 29 - .../debertav2/struct.DebertaV2SelfOutput.html | 29 - ...truct.DebertaV2SeqClassificationModel.html | 37 - .../debertav2/struct.HiddenActLayer.html | 25 - .../models/debertav2/struct.NERItem.html | 32 - .../debertav2/struct.StableDropout.html | 25 - .../struct.TextClassificationItem.html | 28 - .../models/debertav2/type.Id2Label.html | 1 - .../models/debertav2/type.Label2Id.html | 1 - .../deepseek2/enum.DeepSeekV2RopeScaling.html | 43 - .../models/deepseek2/enum.ScaledRopeType.html | 34 - .../models/deepseek2/index.html | 1 - .../models/deepseek2/sidebar-items.js | 1 - .../models/deepseek2/struct.DeepSeekV2.html | 29 - .../deepseek2/struct.DeepSeekV2Config.html | 29 - .../struct.DeepSeekV2RopeConfig.html | 30 - .../struct.DeepSeekV2RotaryEmbedding.html | 36 - .../models/deepseek2/struct.TopKOutput.html | 28 - .../models/deepseek2/trait.BincountOp.html | 4 - .../models/deepseek2/trait.NonZeroOp.html | 4 - .../models/deepseek2/trait.SplitOp.html | 4 - .../models/deepseek2/trait.TopKLastDimOp.html | 11 - .../models/depth_anything_v2/index.html | 6 - .../models/depth_anything_v2/sidebar-items.js | 1 - .../depth_anything_v2/struct.DPTHead.html | 26 - .../struct.DepthAnythingV2.html | 30 - .../struct.DepthAnythingV2Config.html | 34 - .../struct.FeatureFusionBlock.html | 31 - .../struct.ResidualConvUnit.html | 30 - .../depth_anything_v2/struct.Scratch.html | 25 - .../models/dinov2/fn.vit_small.html | 1 - .../models/dinov2/index.html | 24 - .../models/dinov2/sidebar-items.js | 1 - .../dinov2/struct.DinoVisionTransformer.html | 38 - .../models/dinov2reg4/fn.vit_base.html | 1 - .../models/dinov2reg4/fn.vit_small.html | 1 - .../models/dinov2reg4/index.html | 25 - .../models/dinov2reg4/sidebar-items.js | 1 - .../struct.DinoVisionTransformer.html | 31 - .../models/distilbert/constant.DTYPE.html | 1 - .../models/distilbert/index.html | 6 - .../models/distilbert/sidebar-items.js | 1 - .../models/distilbert/struct.Config.html | 30 - .../distilbert/struct.DistilBertModel.html | 32 - .../models/efficientnet/index.html | 6 - .../models/efficientnet/sidebar-items.js | 1 - .../efficientnet/struct.EfficientNet.html | 30 - .../efficientnet/struct.MBConvConfig.html | 27 - .../models/efficientvit/fn.efficientvit.html | 5 - .../fn.efficientvit_no_final_layer.html | 4 - .../models/efficientvit/index.html | 26 - .../models/efficientvit/sidebar-items.js | 1 - .../models/efficientvit/struct.Config.html | 27 - .../models/encodec/enum.NormType.html | 40 - .../models/encodec/enum.PadMode.html | 40 - .../models/encodec/fn.conv1d_weight_norm.html | 7 - .../fn.conv_transpose1d_weight_norm.html | 8 - .../models/encodec/index.html | 4 - .../models/encodec/sidebar-items.js | 1 - .../models/encodec/struct.Config.html | 54 - .../models/encodec/struct.Decoder.html | 28 - .../models/encodec/struct.EncodecConv1d.html | 36 - .../struct.EncodecConvTranspose1d.html | 28 - .../models/encodec/struct.EncodecLSTM.html | 28 - .../encodec/struct.EncodecResnetBlock.html | 33 - .../models/encodec/struct.Encoder.html | 28 - .../encodec/struct.EuclideanCodebook.html | 27 - .../models/encodec/struct.Model.html | 25 - .../struct.ResidualVectorQuantizer.html | 27 - .../encodec/struct.VectorQuantization.html | 27 - .../models/eva2/fn.vit_base.html | 1 - .../models/eva2/fn.vit_large.html | 1 - .../models/eva2/index.html | 21 - .../models/eva2/sidebar-items.js | 1 - .../eva2/struct.EVA2VisionTransformer.html | 38 - .../models/falcon/index.html | 4 - .../models/falcon/sidebar-items.js | 1 - .../models/falcon/struct.Config.html | 47 - .../models/falcon/struct.Falcon.html | 27 - .../models/fastvit/fn.fastvit.html | 5 - .../fastvit/fn.fastvit_no_final_layer.html | 4 - .../models/fastvit/index.html | 4 - .../models/fastvit/sidebar-items.js | 1 - .../models/fastvit/struct.Config.html | 36 - .../models/flux/autoencoder/index.html | 1 - .../models/flux/autoencoder/sidebar-items.js | 1 - .../flux/autoencoder/struct.AutoEncoder.html | 28 - .../flux/autoencoder/struct.Config.html | 37 - .../flux/autoencoder/struct.Decoder.html | 28 - .../autoencoder/struct.DiagonalGaussian.html | 28 - .../flux/autoencoder/struct.Encoder.html | 28 - .../models/flux/index.html | 15 - .../models/flux/model/index.html | 1 - .../models/flux/model/sidebar-items.js | 1 - .../models/flux/model/struct.Config.html | 40 - .../flux/model/struct.DoubleStreamBlock.html | 27 - .../models/flux/model/struct.EmbedNd.html | 28 - .../models/flux/model/struct.Flux.html | 36 - .../models/flux/model/struct.LastLayer.html | 27 - .../models/flux/model/struct.MlpEmbedder.html | 28 - .../models/flux/model/struct.QkNorm.html | 27 - .../flux/model/struct.SelfAttention.html | 27 - .../flux/model/struct.SingleStreamBlock.html | 27 - .../models/flux/quantized_model/index.html | 1 - .../flux/quantized_model/sidebar-items.js | 1 - .../struct.DoubleStreamBlock.html | 27 - .../flux/quantized_model/struct.Flux.html | 36 - .../quantized_model/struct.LastLayer.html | 27 - .../quantized_model/struct.MlpEmbedder.html | 28 - .../flux/quantized_model/struct.QkNorm.html | 27 - .../quantized_model/struct.SelfAttention.html | 27 - .../struct.SingleStreamBlock.html | 27 - .../models/flux/sampling/fn.denoise.html | 10 - .../models/flux/sampling/fn.get_noise.html | 6 - .../models/flux/sampling/fn.get_schedule.html | 5 - .../models/flux/sampling/fn.unpack.html | 1 - .../models/flux/sampling/index.html | 1 - .../models/flux/sampling/sidebar-items.js | 1 - .../models/flux/sampling/struct.State.html | 33 - .../models/flux/sidebar-items.js | 1 - .../models/flux/trait.WithForward.html | 22 - .../models/gemma/index.html | 4 - .../models/gemma/sidebar-items.js | 1 - .../models/gemma/struct.Config.html | 43 - .../models/gemma/struct.Model.html | 45 - .../models/gemma2/index.html | 4 - .../models/gemma2/sidebar-items.js | 1 - .../models/gemma2/struct.Config.html | 46 - .../models/gemma2/struct.Model.html | 35 - .../models/gemma3/index.html | 4 - .../models/gemma3/sidebar-items.js | 1 - .../models/gemma3/struct.Config.html | 47 - .../models/gemma3/struct.Model.html | 35 - .../models/glm4/index.html | 4 - .../models/glm4/sidebar-items.js | 1 - .../models/glm4/struct.Config.html | 50 - .../models/glm4/struct.Model.html | 27 - .../granite/constant.DEFAULT_MAX_SEQ_LEN.html | 1 - .../models/granite/enum.GraniteEosToks.html | 32 - .../models/granite/enum.GraniteRopeType.html | 32 - .../models/granite/index.html | 5 - .../models/granite/sidebar-items.js | 1 - .../models/granite/struct.Cache.html | 35 - .../models/granite/struct.Config.html | 41 - .../models/granite/struct.Granite.html | 32 - .../models/granite/struct.GraniteConfig.html | 42 - .../granite/struct.GraniteRopeConfig.html | 35 - .../models/helium/index.html | 3 - .../models/helium/sidebar-items.js | 1 - .../models/helium/struct.Config.html | 47 - .../models/helium/struct.Model.html | 31 - .../models/hiera/fn.hiera.html | 5 - .../models/hiera/fn.hiera_no_final_layer.html | 4 - .../models/hiera/index.html | 6 - .../models/hiera/sidebar-items.js | 1 - .../models/hiera/struct.Config.html | 29 - .../doc/candle_transformers/models/index.html | 14 - .../models/jina_bert/constant.DTYPE.html | 1 - .../jina_bert/enum.PositionEmbeddingType.html | 39 - .../models/jina_bert/index.html | 4 - .../models/jina_bert/sidebar-items.js | 1 - .../models/jina_bert/struct.BertModel.html | 31 - .../models/jina_bert/struct.Config.html | 56 - .../llama/constant.DEFAULT_MAX_SEQ_LEN.html | 1 - .../models/llama/enum.Llama3RopeType.html | 32 - .../models/llama/enum.LlamaEosToks.html | 32 - .../models/llama/index.html | 4 - .../models/llama/sidebar-items.js | 1 - .../models/llama/struct.Cache.html | 35 - .../models/llama/struct.Config.html | 42 - .../models/llama/struct.Llama.html | 37 - .../models/llama/struct.Llama3RopeConfig.html | 35 - .../models/llama/struct.LlamaConfig.html | 43 - .../models/llama2_c/index.html | 7 - .../models/llama2_c/sidebar-items.js | 1 - .../models/llama2_c/struct.Cache.html | 33 - .../models/llama2_c/struct.Config.html | 36 - .../models/llama2_c/struct.Llama.html | 35 - .../models/llama2_c_weights/index.html | 4 - .../models/llama2_c_weights/sidebar-items.js | 1 - .../struct.TransformerWeights.html | 29 - .../models/llava/config/index.html | 1 - .../models/llava/config/sidebar-items.js | 1 - .../config/struct.HFGenerationConfig.html | 35 - .../llava/config/struct.HFLLaVAConfig.html | 48 - .../config/struct.HFLLaVATextConfig.html | 46 - .../config/struct.HFLLaVAVisionConfig.html | 40 - .../config/struct.HFPreProcessorConfig.html | 43 - .../llava/config/struct.LLaVAConfig.html | 62 - .../models/llava/index.html | 8 - .../models/llava/sidebar-items.js | 1 - .../models/llava/struct.ClipVisionTower.html | 33 - .../models/llava/struct.IdentityMap.html | 26 - .../models/llava/struct.LLaVA.html | 45 - .../models/llava/struct.MMProjector.html | 27 - .../utils/fn.get_anyres_image_grid_shape.html | 5 - .../utils/fn.select_best_resolution.html | 4 - .../models/llava/utils/index.html | 1 - .../models/llava/utils/sidebar-items.js | 1 - .../models/mamba/index.html | 6 - .../models/mamba/sidebar-items.js | 1 - .../models/mamba/struct.Config.html | 34 - .../models/mamba/struct.MambaBlock.html | 27 - .../models/mamba/struct.Model.html | 27 - .../models/mamba/struct.ResidualBlock.html | 27 - .../models/mamba/struct.State.html | 34 - .../models/marian/index.html | 7 - .../models/marian/sidebar-items.js | 1 - .../models/marian/struct.Config.html | 49 - .../models/marian/struct.Decoder.html | 33 - .../models/marian/struct.Encoder.html | 27 - .../models/marian/struct.MTModel.html | 32 - .../models/metavoice/adapters/index.html | 1 - .../metavoice/adapters/sidebar-items.js | 1 - ....FlattenedInterleavedEncodec2Codebook.html | 25 - .../adapters/struct.TiltedEncodec.html | 25 - .../metavoice/gpt/enum.AttnKernelType.html | 40 - .../metavoice/gpt/enum.NonLinearityType.html | 39 - .../models/metavoice/gpt/enum.NormType.html | 39 - .../models/metavoice/gpt/index.html | 1 - .../models/metavoice/gpt/sidebar-items.js | 1 - .../models/metavoice/gpt/struct.Config.html | 43 - .../models/metavoice/gpt/struct.Model.html | 25 - .../models/metavoice/index.html | 7 - .../models/metavoice/sidebar-items.js | 1 - .../metavoice/speaker_encoder/index.html | 1 - .../speaker_encoder/sidebar-items.js | 1 - .../speaker_encoder/struct.Config.html | 38 - .../speaker_encoder/struct.Model.html | 33 - .../models/metavoice/tokenizers/index.html | 1 - .../metavoice/tokenizers/sidebar-items.js | 1 - .../metavoice/tokenizers/struct.BPE.html | 31 - .../models/metavoice/transformer/index.html | 1 - .../metavoice/transformer/sidebar-items.js | 1 - .../metavoice/transformer/struct.Config.html | 39 - .../metavoice/transformer/struct.Model.html | 32 - .../models/mimi/conv/enum.Norm.html | 38 - .../models/mimi/conv/enum.PadMode.html | 38 - .../models/mimi/conv/index.html | 1 - .../models/mimi/conv/sidebar-items.js | 1 - .../mimi/conv/struct.ConvDownsample1d.html | 34 - .../mimi/conv/struct.ConvTrUpsample1d.html | 34 - .../models/mimi/conv/struct.NormConv1d.html | 37 - .../mimi/conv/struct.NormConvTranspose1d.html | 38 - .../mimi/conv/struct.StreamableConv1d.html | 40 - .../struct.StreamableConvTranspose1d.html | 38 - .../mimi/encodec/enum.ResampleMethod.html | 37 - .../models/mimi/encodec/fn.load.html | 5 - .../models/mimi/encodec/index.html | 1 - .../models/mimi/encodec/sidebar-items.js | 1 - .../models/mimi/encodec/struct.Config.html | 38 - .../models/mimi/encodec/struct.Encodec.html | 27 - .../models/mimi/enum.NormType.html | 37 - .../models/mimi/index.html | 20 - .../models/mimi/quantization/index.html | 1 - .../models/mimi/quantization/sidebar-items.js | 1 - .../struct.EuclideanCodebook.html | 27 - .../struct.ResidualVectorQuantization.html | 33 - .../struct.ResidualVectorQuantizer.html | 35 - .../struct.SplitResidualVectorQuantizer.html | 34 - .../struct.VectorQuantization.html | 32 - .../models/mimi/seanet/index.html | 1 - .../models/mimi/seanet/sidebar-items.js | 1 - .../models/mimi/seanet/struct.Config.html | 46 - .../mimi/seanet/struct.SeaNetDecoder.html | 28 - .../mimi/seanet/struct.SeaNetEncoder.html | 28 - .../mimi/seanet/struct.SeaNetResnetBlock.html | 38 - .../models/mimi/sidebar-items.js | 1 - .../models/mimi/transformer/enum.Mlp.html | 42 - .../models/mimi/transformer/enum.Norm.html | 31 - .../transformer/enum.PositionalEmbedding.html | 38 - .../models/mimi/transformer/index.html | 1 - .../models/mimi/transformer/sidebar-items.js | 1 - .../mimi/transformer/struct.Config.html | 49 - .../mimi/transformer/struct.LayerScale.html | 28 - .../struct.ProjectedTransformer.html | 32 - .../mimi/transformer/struct.RmsNorm.html | 28 - .../transformer/struct.RotaryEmbedding.html | 36 - .../struct.StreamingMultiheadAttention.html | 31 - ...ruct.StreamingMultiheadCrossAttention.html | 32 - .../struct.StreamingTransformer.html | 31 - .../struct.StreamingTransformerLayer.html | 36 - .../models/mistral/index.html | 7 - .../models/mistral/sidebar-items.js | 1 - .../models/mistral/struct.Config.html | 44 - .../models/mistral/struct.Model.html | 36 - .../models/mixformer/index.html | 7 - .../models/mixformer/sidebar-items.js | 1 - .../models/mixformer/struct.Config.html | 30 - ...struct.MixFormerSequentialForCausalLM.html | 32 - .../models/mixtral/index.html | 19 - .../models/mixtral/sidebar-items.js | 1 - .../models/mixtral/struct.Config.html | 32 - .../models/mixtral/struct.Model.html | 31 - .../models/mmdit/blocks/index.html | 1 - .../models/mmdit/blocks/sidebar-items.js | 1 - .../struct.ContextQkvOnlyJointBlock.html | 35 - .../models/mmdit/blocks/struct.DiTBlock.html | 38 - .../mmdit/blocks/struct.FinalLayer.html | 30 - .../blocks/struct.LayerNormNoAffine.html | 26 - .../mmdit/blocks/struct.MMDiTJointBlock.html | 35 - .../mmdit/blocks/struct.MMDiTXJointBlock.html | 35 - .../blocks/struct.ModulateIntermediates.html | 25 - .../mmdit/blocks/struct.QkvOnlyDiTBlock.html | 29 - .../mmdit/blocks/struct.SelfAttnDiTBlock.html | 39 - .../struct.SelfAttnModulateIntermediates.html | 25 - .../models/mmdit/blocks/trait.JointBlock.html | 14 - .../models/mmdit/embedding/index.html | 1 - .../models/mmdit/embedding/sidebar-items.js | 1 - .../mmdit/embedding/struct.PatchEmbedder.html | 31 - .../embedding/struct.PositionEmbedder.html | 30 - .../embedding/struct.TimestepEmbedder.html | 30 - .../mmdit/embedding/struct.Unpatchifier.html | 25 - .../embedding/struct.VectorEmbedder.html | 30 - .../models/mmdit/index.html | 13 - .../models/mmdit/model/index.html | 1 - .../models/mmdit/model/sidebar-items.js | 1 - .../models/mmdit/model/struct.Config.html | 37 - .../models/mmdit/model/struct.MMDiT.html | 36 - .../models/mmdit/model/struct.MMDiTCore.html | 39 - .../models/mmdit/projections/index.html | 1 - .../models/mmdit/projections/sidebar-items.js | 1 - .../projections/struct.AttnProjections.html | 25 - .../models/mmdit/projections/struct.Mlp.html | 30 - .../models/mmdit/projections/struct.Qkv.html | 29 - .../struct.QkvOnlyAttnProjections.html | 25 - .../models/mmdit/sidebar-items.js | 1 - .../models/mobileclip/fn.div_l2_norm.html | 1 - .../models/mobileclip/index.html | 18 - .../models/mobileclip/sidebar-items.js | 1 - .../mobileclip/struct.MobileClipConfig.html | 31 - .../mobileclip/struct.MobileClipModel.html | 31 - .../models/mobilenetv4/fn.mobilenetv4.html | 5 - .../fn.mobilenetv4_no_final_layer.html | 4 - .../models/mobilenetv4/index.html | 9 - .../models/mobilenetv4/sidebar-items.js | 1 - .../models/mobilenetv4/struct.Config.html | 27 - .../models/mobileone/fn.mobileone.html | 5 - .../fn.mobileone_no_final_layer.html | 4 - .../models/mobileone/index.html | 4 - .../models/mobileone/sidebar-items.js | 1 - .../models/mobileone/struct.Config.html | 27 - .../modernbert/enum.ClassifierPooling.html | 35 - .../models/modernbert/index.html | 8 - .../models/modernbert/sidebar-items.js | 1 - .../modernbert/struct.ClassifierConfig.html | 34 - .../models/modernbert/struct.Config.html | 44 - .../models/modernbert/struct.ModernBert.html | 27 - .../struct.ModernBertClassifier.html | 28 - .../modernbert/struct.ModernBertDecoder.html | 28 - .../struct.ModernBertForMaskedLM.html | 27 - ...t.ModernBertForSequenceClassification.html | 27 - .../modernbert/struct.ModernBertHead.html | 28 - .../modernbert/struct.ModernBertLayer.html | 27 - .../modernbert/struct.ModernBertMLP.html | 28 - .../models/moondream/index.html | 29 - .../models/moondream/sidebar-items.js | 1 - .../models/moondream/struct.Config.html | 32 - .../models/moondream/struct.Encoder.html | 28 - .../models/moondream/struct.Model.html | 30 - .../models/moondream/struct.VisionConfig.html | 30 - .../moondream/struct.VisionEncoder.html | 28 - .../candle_transformers/models/mpt/index.html | 8 - .../models/mpt/sidebar-items.js | 1 - .../models/mpt/struct.Config.html | 28 - .../models/mpt/struct.Model.html | 27 - .../models/nvembed_v2/embedding/index.html | 1 - .../nvembed_v2/embedding/sidebar-items.js | 1 - .../nvembed_v2/embedding/struct.Model.html | 35 - .../models/nvembed_v2/index.html | 4 - .../models/nvembed_v2/model/index.html | 1 - .../models/nvembed_v2/model/sidebar-items.js | 1 - .../models/nvembed_v2/model/struct.Model.html | 34 - .../models/nvembed_v2/sidebar-items.js | 1 - .../models/olmo/index.html | 18 - .../models/olmo/sidebar-items.js | 1 - .../models/olmo/struct.Config.html | 42 - .../models/olmo/struct.Model.html | 31 - .../models/openclip/index.html | 11 - .../models/openclip/sidebar-items.js | 1 - .../models/openclip/text_model/index.html | 3 - .../openclip/text_model/sidebar-items.js | 1 - .../openclip/text_model/struct.Config.html | 36 - .../openclip/text_model/struct.Encoder.html | 27 - .../struct.OpenClipTextTransformer.html | 29 - .../models/paligemma/index.html | 18 - .../models/paligemma/sidebar-items.js | 1 - .../models/paligemma/struct.Config.html | 33 - .../models/paligemma/struct.Model.html | 38 - .../paligemma/struct.MultiModalProjector.html | 28 - .../models/parler_tts/index.html | 15 - .../models/parler_tts/sidebar-items.js | 1 - .../models/parler_tts/struct.Attention.html | 27 - .../models/parler_tts/struct.Config.html | 36 - .../models/parler_tts/struct.Decoder.html | 35 - .../parler_tts/struct.DecoderConfig.html | 47 - .../parler_tts/struct.DecoderLayer.html | 27 - .../models/parler_tts/struct.Model.html | 42 - .../models/persimmon/constant.DTYPE.html | 1 - .../persimmon/enum.PositionEmbeddingType.html | 39 - .../models/persimmon/index.html | 15 - .../models/persimmon/sidebar-items.js | 1 - .../models/persimmon/struct.Config.html | 47 - .../candle_transformers/models/phi/index.html | 24 - .../models/phi/sidebar-items.js | 1 - .../models/phi/struct.Config.html | 30 - .../models/phi/struct.Model.html | 27 - .../models/phi3/index.html | 21 - .../models/phi3/sidebar-items.js | 1 - .../models/phi3/struct.Config.html | 43 - .../models/phi3/struct.Model.html | 31 - .../models/phi3/struct.RotaryEmbedding.html | 32 - .../models/pixtral/index.html | 28 - .../models/pixtral/llava/index.html | 1 - .../models/pixtral/llava/sidebar-items.js | 1 - .../models/pixtral/llava/struct.Config.html | 35 - .../models/pixtral/llava/struct.Model.html | 34 - .../llava/struct.MultiModalProjector.html | 28 - .../models/pixtral/sidebar-items.js | 1 - .../models/pixtral/vision_model/index.html | 1 - .../pixtral/vision_model/sidebar-items.js | 1 - .../pixtral/vision_model/struct.Config.html | 40 - .../pixtral/vision_model/struct.Model.html | 33 - .../models/quantized_blip/index.html | 16 - .../models/quantized_blip/sidebar-items.js | 1 - .../struct.BlipForConditionalGeneration.html | 27 - .../quantized_blip/struct.VisionModel.html | 28 - .../models/quantized_blip/type.Config.html | 6 - .../quantized_blip/type.VisionConfig.html | 11 - .../models/quantized_blip_text/index.html | 17 - .../quantized_blip_text/sidebar-items.js | 1 - .../struct.TextLMHeadModel.html | 31 - .../struct.TextPooler.html | 28 - .../quantized_blip_text/type.Config.html | 13 - .../quantized_llama/constant.MAX_SEQ_LEN.html | 1 - .../models/quantized_llama/index.html | 27 - .../models/quantized_llama/sidebar-items.js | 1 - .../quantized_llama/struct.ModelWeights.html | 31 - .../models/quantized_llama2_c/index.html | 16 - .../quantized_llama2_c/sidebar-items.js | 1 - .../quantized_llama2_c/struct.QLlama.html | 35 - .../models/quantized_metavoice/index.html | 16 - .../quantized_metavoice/sidebar-items.js | 1 - .../transformer/index.html | 1 - .../transformer/sidebar-items.js | 1 - .../transformer/struct.Model.html | 32 - .../models/quantized_mistral/index.html | 17 - .../models/quantized_mistral/sidebar-items.js | 1 - .../quantized_mistral/struct.Model.html | 31 - .../models/quantized_mixformer/index.html | 12 - .../quantized_mixformer/sidebar-items.js | 1 - ...struct.MixFormerSequentialForCausalLM.html | 32 - .../models/quantized_moondream/index.html | 15 - .../quantized_moondream/sidebar-items.js | 1 - .../quantized_moondream/struct.Encoder.html | 28 - .../quantized_moondream/struct.Model.html | 28 - .../struct.VisionEncoder.html | 28 - .../models/quantized_mpt/index.html | 16 - .../models/quantized_mpt/sidebar-items.js | 1 - .../models/quantized_mpt/struct.Model.html | 27 - .../quantized_phi/constant.MAX_SEQ_LEN.html | 1 - .../models/quantized_phi/index.html | 17 - .../models/quantized_phi/sidebar-items.js | 1 - .../quantized_phi/struct.ModelWeights.html | 31 - .../models/quantized_phi3/index.html | 15 - .../models/quantized_phi3/sidebar-items.js | 1 - .../quantized_phi3/struct.ModelWeights.html | 32 - .../models/quantized_qwen2/index.html | 15 - .../models/quantized_qwen2/sidebar-items.js | 1 - .../quantized_qwen2/struct.ModelWeights.html | 29 - .../quantized_recurrent_gemma/index.html | 17 - .../sidebar-items.js | 1 - .../struct.Model.html | 27 - .../models/quantized_rwkv_v5/index.html | 17 - .../models/quantized_rwkv_v5/sidebar-items.js | 1 - .../quantized_rwkv_v5/struct.Model.html | 27 - .../models/quantized_rwkv_v6/index.html | 18 - .../models/quantized_rwkv_v6/sidebar-items.js | 1 - .../quantized_rwkv_v6/struct.Model.html | 27 - .../models/quantized_stable_lm/index.html | 15 - .../quantized_stable_lm/sidebar-items.js | 1 - .../quantized_stable_lm/struct.Model.html | 31 - .../models/quantized_t5/index.html | 18 - .../models/quantized_t5/sidebar-items.js | 1 - .../models/quantized_t5/struct.Config.html | 37 - .../quantized_t5/struct.T5EncoderModel.html | 27 - .../struct.T5ForConditionalGeneration.html | 35 - .../models/qwen2/index.html | 16 - .../models/qwen2/sidebar-items.js | 1 - .../models/qwen2/struct.Config.html | 45 - .../models/qwen2/struct.Model.html | 32 - .../models/qwen2/struct.ModelForCausalLM.html | 31 - .../models/qwen2_moe/index.html | 18 - .../models/qwen2_moe/sidebar-items.js | 1 - .../models/qwen2_moe/struct.Config.html | 51 - .../models/qwen2_moe/struct.Model.html | 31 - .../enum.TemporalBlockType.html | 32 - .../models/recurrent_gemma/index.html | 19 - .../models/recurrent_gemma/sidebar-items.js | 1 - .../models/recurrent_gemma/struct.Config.html | 48 - .../models/recurrent_gemma/struct.Model.html | 27 - .../models/repvgg/fn.repvgg.html | 5 - .../repvgg/fn.repvgg_no_final_layer.html | 4 - .../models/repvgg/index.html | 14 - .../models/repvgg/sidebar-items.js | 1 - .../models/repvgg/struct.Config.html | 27 - .../models/resnet/fn.resnet101.html | 1 - .../resnet/fn.resnet101_no_final_layer.html | 1 - .../models/resnet/fn.resnet152.html | 1 - .../resnet/fn.resnet152_no_final_layer.html | 1 - .../models/resnet/fn.resnet18.html | 2 - .../resnet/fn.resnet18_no_final_layer.html | 1 - .../models/resnet/fn.resnet34.html | 2 - .../resnet/fn.resnet34_no_final_layer.html | 1 - .../models/resnet/fn.resnet50.html | 1 - .../resnet/fn.resnet50_no_final_layer.html | 1 - .../models/resnet/index.html | 8 - .../models/resnet/sidebar-items.js | 1 - .../models/rwkv_v5/index.html | 28 - .../models/rwkv_v5/sidebar-items.js | 1 - .../models/rwkv_v5/struct.Config.html | 39 - .../models/rwkv_v5/struct.Model.html | 27 - .../models/rwkv_v5/struct.State.html | 28 - .../models/rwkv_v5/struct.StatePerLayer.html | 29 - .../models/rwkv_v5/struct.Tokenizer.html | 25 - .../models/rwkv_v6/index.html | 23 - .../models/rwkv_v6/sidebar-items.js | 1 - .../models/rwkv_v6/struct.Model.html | 27 - .../models/segformer/index.html | 16 - .../models/segformer/sidebar-items.js | 1 - .../models/segformer/struct.Config.html | 44 - .../struct.ImageClassificationModel.html | 32 - .../struct.SemanticSegmentationModel.html | 32 - .../models/segment_anything/fn.linear.html | 6 - .../segment_anything/image_encoder/index.html | 1 - .../image_encoder/sidebar-items.js | 1 - .../image_encoder/struct.ImageEncoderViT.html | 40 - .../models/segment_anything/index.html | 23 - .../segment_anything/mask_decoder/index.html | 1 - .../mask_decoder/sidebar-items.js | 1 - .../mask_decoder/struct.MaskDecoder.html | 38 - .../prompt_encoder/index.html | 1 - .../prompt_encoder/sidebar-items.js | 1 - .../prompt_encoder/struct.PromptEncoder.html | 36 - .../sam/constant.IMAGE_SIZE.html | 1 - .../models/segment_anything/sam/index.html | 1 - .../segment_anything/sam/sidebar-items.js | 1 - .../segment_anything/sam/struct.Sam.html | 54 - .../models/segment_anything/sidebar-items.js | 1 - .../segment_anything/struct.LayerNorm2d.html | 26 - .../segment_anything/struct.MlpBlock.html | 31 - .../tiny_vit/fn.tiny_vit_5m.html | 1 - .../segment_anything/tiny_vit/index.html | 1 - .../tiny_vit/sidebar-items.js | 1 - .../tiny_vit/struct.TinyViT.html | 33 - .../segment_anything/transformer/index.html | 1 - .../transformer/sidebar-items.js | 1 - .../transformer/struct.TwoWayTransformer.html | 36 - .../models/sidebar-items.js | 1 - .../models/siglip/index.html | 7 - .../models/siglip/sidebar-items.js | 1 - .../models/siglip/struct.Config.html | 32 - .../models/siglip/struct.Model.html | 31 - .../models/siglip/struct.TextConfig.html | 41 - .../models/siglip/struct.TextModel.html | 30 - .../models/siglip/struct.TextTransformer.html | 31 - .../models/siglip/struct.VisionConfig.html | 39 - .../models/siglip/struct.VisionModel.html | 32 - .../stable_diffusion/attention/index.html | 2 - .../attention/sidebar-items.js | 1 - .../attention/struct.AttentionBlock.html | 30 - .../struct.AttentionBlockConfig.html | 33 - .../attention/struct.CrossAttention.html | 33 - .../attention/struct.SpatialTransformer.html | 35 - .../struct.SpatialTransformerConfig.html | 33 - .../clip/enum.Activation.html | 32 - .../models/stable_diffusion/clip/index.html | 7 - .../stable_diffusion/clip/sidebar-items.js | 1 - .../clip/struct.ClipTextTransformer.html | 36 - .../stable_diffusion/clip/struct.Config.html | 31 - .../models/stable_diffusion/ddim/index.html | 8 - .../stable_diffusion/ddim/sidebar-items.js | 1 - .../ddim/struct.DDIMScheduler.html | 44 - .../ddim/struct.DDIMSchedulerConfig.html | 46 - .../ddpm/enum.DDPMVarianceType.html | 38 - .../models/stable_diffusion/ddpm/index.html | 1 - .../stable_diffusion/ddpm/sidebar-items.js | 1 - .../ddpm/struct.DDPMScheduler.html | 40 - .../ddpm/struct.DDPMSchedulerConfig.html | 42 - .../stable_diffusion/embeddings/index.html | 1 - .../embeddings/sidebar-items.js | 1 - .../embeddings/struct.TimestepEmbedding.html | 30 - .../embeddings/struct.Timesteps.html | 30 - .../euler_ancestral_discrete/index.html | 3 - .../euler_ancestral_discrete/sidebar-items.js | 1 - ...truct.EulerAncestralDiscreteScheduler.html | 51 - ...EulerAncestralDiscreteSchedulerConfig.html | 44 - .../fn.build_clip_transformer.html | 6 - .../models/stable_diffusion/index.html | 30 - .../models/stable_diffusion/resnet/index.html | 7 - .../stable_diffusion/resnet/sidebar-items.js | 1 - .../resnet/struct.ResnetBlock2D.html | 29 - .../resnet/struct.ResnetBlock2DConfig.html | 43 - .../schedulers/enum.BetaSchedule.html | 36 - .../schedulers/enum.PredictionType.html | 31 - .../schedulers/enum.TimestepSpacing.html | 33 - .../stable_diffusion/schedulers/index.html | 5 - .../schedulers/sidebar-items.js | 1 - .../schedulers/trait.Scheduler.html | 33 - .../schedulers/trait.SchedulerConfig.html | 7 - .../models/stable_diffusion/sidebar-items.js | 1 - .../struct.StableDiffusionConfig.html | 65 - .../stable_diffusion/unet_2d/index.html | 4 - .../stable_diffusion/unet_2d/sidebar-items.js | 1 - .../unet_2d/struct.BlockConfig.html | 33 - .../unet_2d/struct.UNet2DConditionModel.html | 43 - .../struct.UNet2DConditionModelConfig.html | 40 - .../unet_2d_blocks/index.html | 2 - .../unet_2d_blocks/sidebar-items.js | 1 - .../struct.CrossAttnDownBlock2D.html | 40 - .../struct.CrossAttnDownBlock2DConfig.html | 34 - .../struct.CrossAttnUpBlock2D.html | 45 - .../struct.CrossAttnUpBlock2DConfig.html | 34 - .../unet_2d_blocks/struct.DownBlock2D.html | 38 - .../struct.DownBlock2DConfig.html | 34 - .../struct.DownEncoderBlock2D.html | 34 - .../struct.DownEncoderBlock2DConfig.html | 34 - .../unet_2d_blocks/struct.UNetMidBlock2D.html | 33 - .../struct.UNetMidBlock2DConfig.html | 33 - .../struct.UNetMidBlock2DCrossAttn.html | 39 - .../struct.UNetMidBlock2DCrossAttnConfig.html | 37 - .../unet_2d_blocks/struct.UpBlock2D.html | 42 - .../struct.UpBlock2DConfig.html | 33 - .../struct.UpDecoderBlock2D.html | 34 - .../struct.UpDecoderBlock2DConfig.html | 33 - .../uni_pc/enum.AlgorithmType.html | 30 - .../uni_pc/enum.CorrectorConfiguration.html | 32 - .../uni_pc/enum.FinalSigmasType.html | 30 - .../uni_pc/enum.SigmaSchedule.html | 30 - .../uni_pc/enum.SolverType.html | 30 - .../uni_pc/enum.TimestepSchedule.html | 32 - .../models/stable_diffusion/uni_pc/index.html | 13 - .../stable_diffusion/uni_pc/sidebar-items.js | 1 - .../struct.EdmDpmMultistepScheduler.html | 38 - .../struct.ExponentialSigmaSchedule.html | 27 - .../uni_pc/struct.KarrasSigmaSchedule.html | 31 - .../uni_pc/struct.UniPCSchedulerConfig.html | 50 - .../stable_diffusion/utils/fn.interp.html | 1 - .../stable_diffusion/utils/fn.linspace.html | 1 - .../models/stable_diffusion/utils/index.html | 1 - .../stable_diffusion/utils/sidebar-items.js | 1 - .../models/stable_diffusion/vae/index.html | 5 - .../stable_diffusion/vae/sidebar-items.js | 1 - .../vae/struct.AutoEncoderKL.html | 35 - .../vae/struct.AutoEncoderKLConfig.html | 34 - .../struct.DiagonalGaussianDistribution.html | 25 - .../models/stable_lm/index.html | 15 - .../models/stable_lm/sidebar-items.js | 1 - .../models/stable_lm/struct.Config.html | 30 - .../models/stable_lm/struct.Model.html | 29 - .../models/starcoder2/index.html | 17 - .../models/starcoder2/sidebar-items.js | 1 - .../models/starcoder2/struct.Config.html | 29 - .../models/starcoder2/struct.Model.html | 31 - .../models/stella_en_v5/enum.EmbedDim.html | 37 - .../stella_en_v5/enum.ModelVariant.html | 35 - .../models/stella_en_v5/index.html | 18 - .../models/stella_en_v5/sidebar-items.js | 1 - .../models/stella_en_v5/struct.Config.html | 47 - .../models/stella_en_v5/struct.EmbedHead.html | 33 - .../stella_en_v5/struct.EmbeddingModel.html | 34 - .../stella_en_v5/struct.Embeddings.html | 28 - .../models/stella_en_v5/struct.Model.html | 27 - ...erialize_feed_forward_proj_activation.html | 4 - .../models/t5/fn.linear_no_bias.html | 5 - .../candle_transformers/models/t5/index.html | 43 - .../models/t5/sidebar-items.js | 1 - .../struct.ActivationWithOptionalGating.html | 33 - .../models/t5/struct.Config.html | 51 - .../models/t5/struct.Linear.html | 28 - .../models/t5/struct.T5EncoderModel.html | 31 - .../t5/struct.T5ForConditionalGeneration.html | 35 - .../models/trocr/index.html | 16 - .../models/trocr/sidebar-items.js | 1 - .../models/trocr/struct.TrOCRConfig.html | 53 - .../models/trocr/struct.TrOCRDecoder.html | 33 - .../models/trocr/struct.TrOCREncoder.html | 27 - .../models/trocr/struct.TrOCRForCausalLM.html | 33 - .../models/trocr/struct.TrOCRModel.html | 36 - .../models/vgg/enum.Models.html | 29 - .../candle_transformers/models/vgg/index.html | 15 - .../models/vgg/sidebar-items.js | 1 - .../models/vgg/struct.Vgg.html | 25 - .../candle_transformers/models/vit/index.html | 17 - .../models/vit/sidebar-items.js | 1 - .../models/vit/struct.Config.html | 40 - .../models/vit/struct.Embeddings.html | 36 - .../models/vit/struct.Encoder.html | 28 - .../models/vit/struct.Model.html | 27 - .../audio/fn.log_mel_spectrogram_.html | 8 - .../models/whisper/audio/fn.pcm_to_mel.html | 5 - .../models/whisper/audio/index.html | 1 - .../models/whisper/audio/sidebar-items.js | 1 - .../models/whisper/audio/trait.Float.html | 6 - .../models/whisper/constant.CHUNK_LENGTH.html | 1 - .../constant.COMPRESSION_RATIO_THRESHOLD.html | 1 - .../models/whisper/constant.DTYPE.html | 1 - .../models/whisper/constant.EOT_TOKEN.html | 1 - .../models/whisper/constant.HOP_LENGTH.html | 1 - .../whisper/constant.LOGPROB_THRESHOLD.html | 1 - .../whisper/constant.NO_SPEECH_THRESHOLD.html | 1 - .../whisper/constant.NO_SPEECH_TOKENS.html | 1 - .../whisper/constant.NO_TIMESTAMPS_TOKEN.html | 1 - .../models/whisper/constant.N_FFT.html | 1 - .../models/whisper/constant.N_FRAMES.html | 1 - .../models/whisper/constant.N_SAMPLES.html | 1 - .../models/whisper/constant.SAMPLE_RATE.html | 1 - .../models/whisper/constant.SOT_TOKEN.html | 1 - .../models/whisper/constant.TEMPERATURES.html | 1 - .../whisper/constant.TRANSCRIBE_TOKEN.html | 1 - .../whisper/constant.TRANSLATE_TOKEN.html | 1 - .../models/whisper/index.html | 11 - .../models/whisper/model/index.html | 1 - .../models/whisper/model/sidebar-items.js | 1 - .../whisper/model/struct.AudioEncoder.html | 27 - .../whisper/model/struct.TextDecoder.html | 32 - .../models/whisper/model/struct.Whisper.html | 31 - .../models/whisper/quantized_model/index.html | 1 - .../whisper/quantized_model/sidebar-items.js | 1 - .../quantized_model/struct.AudioEncoder.html | 27 - .../quantized_model/struct.TextDecoder.html | 32 - .../quantized_model/struct.Whisper.html | 31 - .../models/whisper/sidebar-items.js | 1 - .../models/whisper/struct.Config.html | 41 - .../models/with_tracing/fn.conv2d.html | 7 - .../models/with_tracing/fn.layer_norm.html | 5 - .../models/with_tracing/fn.linear.html | 1 - .../models/with_tracing/fn.linear_b.html | 6 - .../with_tracing/fn.linear_no_bias.html | 5 - .../models/with_tracing/index.html | 1 - .../models/with_tracing/sidebar-items.js | 1 - .../models/with_tracing/struct.Conv2d.html | 28 - .../models/with_tracing/struct.Embedding.html | 28 - .../models/with_tracing/struct.LayerNorm.html | 28 - .../models/with_tracing/struct.Linear.html | 28 - .../models/with_tracing/struct.QMatMul.html | 28 - .../models/with_tracing/struct.RmsNorm.html | 28 - .../wuerstchen/attention_processor/index.html | 1 - .../attention_processor/sidebar-items.js | 1 - .../attention_processor/struct.Attention.html | 35 - .../models/wuerstchen/common/index.html | 1 - .../models/wuerstchen/common/sidebar-items.js | 1 - .../wuerstchen/common/struct.AttnBlock.html | 32 - .../common/struct.GlobalResponseNorm.html | 26 - .../common/struct.LayerNormNoWeights.html | 26 - .../wuerstchen/common/struct.ResBlock.html | 30 - .../common/struct.TimestepBlock.html | 25 - .../wuerstchen/common/struct.WLayerNorm.html | 26 - .../models/wuerstchen/ddpm/index.html | 1 - .../models/wuerstchen/ddpm/sidebar-items.js | 1 - .../ddpm/struct.DDPMWScheduler.html | 35 - .../ddpm/struct.DDPMWSchedulerConfig.html | 27 - .../models/wuerstchen/diffnext/index.html | 1 - .../wuerstchen/diffnext/sidebar-items.js | 1 - .../diffnext/struct.ResBlockStageB.html | 30 - .../wuerstchen/diffnext/struct.WDiffNeXt.html | 40 - .../models/wuerstchen/index.html | 12 - .../models/wuerstchen/paella_vq/index.html | 1 - .../wuerstchen/paella_vq/sidebar-items.js | 1 - .../paella_vq/struct.MixingResidualBlock.html | 26 - .../wuerstchen/paella_vq/struct.PaellaVQ.html | 26 - .../models/wuerstchen/prior/index.html | 1 - .../models/wuerstchen/prior/sidebar-items.js | 1 - .../wuerstchen/prior/struct.WPrior.html | 34 - .../models/wuerstchen/sidebar-items.js | 1 - .../models/xlm_roberta/index.html | 1 - .../models/xlm_roberta/sidebar-items.js | 1 - .../models/xlm_roberta/struct.Config.html | 43 - .../struct.XLMRobertaForMaskedLM.html | 33 - ...t.XLMRobertaForSequenceClassification.html | 30 - .../xlm_roberta/struct.XLMRobertaModel.html | 33 - .../candle_transformers/models/yi/index.html | 17 - .../models/yi/sidebar-items.js | 1 - .../models/yi/struct.Config.html | 28 - .../models/yi/struct.Model.html | 31 - .../object_detection/fn.iou.html | 2 - .../fn.non_maximum_suppression.html | 1 - .../fn.soft_non_maximum_suppression.html | 6 - .../object_detection/index.html | 5 - .../object_detection/sidebar-items.js | 1 - .../object_detection/struct.Bbox.html | 41 - .../object_detection/struct.KeyPoint.html | 34 - .../candle_transformers/pipelines/index.html | 1 - .../pipelines/sidebar-items.js | 1 - .../pipelines/text_generation/index.html | 1 - .../text_generation/sidebar-items.js | 1 - .../quantized_nn/fn.layer_norm.html | 1 - .../quantized_nn/fn.layer_norm_no_bias.html | 5 - .../quantized_nn/fn.linear.html | 1 - .../quantized_nn/fn.linear_b.html | 6 - .../quantized_nn/fn.linear_no_bias.html | 5 - .../quantized_nn/index.html | 5 - .../quantized_nn/sidebar-items.js | 1 - .../quantized_nn/struct.Embedding.html | 28 - .../quantized_nn/struct.Linear.html | 28 - .../quantized_nn/struct.RmsNorm.html | 28 - .../quantized_var_builder/index.html | 5 - .../quantized_var_builder/sidebar-items.js | 1 - .../struct.VarBuilder.html | 27 - .../doc/candle_transformers/sidebar-items.js | 1 - .../utils/fn.apply_repeat_penalty.html | 5 - .../utils/fn.repeat_kv.html | 3 - .../doc/candle_transformers/utils/index.html | 3 - .../utils/sidebar-items.js | 1 - network-poc/target-native/doc/crates.js | 2 - network-poc/target-native/doc/help.html | 1 - .../doc/search.index/003d09593f6a.js | 1 - .../doc/search.index/0061c3727565.js | 1 - .../doc/search.index/00763bda922b.js | 1 - .../doc/search.index/00a2cce7b4b7.js | 1 - .../doc/search.index/00b2aef8d52a.js | 1 - .../doc/search.index/00d8b529914f.js | 1 - .../doc/search.index/01cd84d2f2e3.js | 1 - .../doc/search.index/0294230d9fee.js | 1 - .../doc/search.index/02dd62743463.js | 1 - .../doc/search.index/03ea4f6e7c51.js | 1 - .../doc/search.index/03ec11e31b4c.js | 1 - .../doc/search.index/049ab7c95bde.js | 1 - .../doc/search.index/04c9f6fec5de.js | 1 - .../doc/search.index/053b677a656c.js | 1 - .../doc/search.index/05affee7b8e8.js | 1 - .../doc/search.index/0730beffd097.js | 1 - .../doc/search.index/07c3ffdefafd.js | 1 - .../doc/search.index/092b4157f085.js | 1 - .../doc/search.index/09d8aff063a2.js | 1 - .../doc/search.index/0ab19a760b88.js | 1 - .../doc/search.index/0b0b22d9594d.js | 1 - .../doc/search.index/0b78d2564165.js | 1 - .../doc/search.index/0c3480e39521.js | 1 - .../doc/search.index/0cd3046acd46.js | 1 - .../doc/search.index/0d93f53d2d2f.js | 1 - .../doc/search.index/0e60c3ef220d.js | 1 - .../doc/search.index/0e738af68123.js | 1 - .../doc/search.index/0e95b5e692bf.js | 1 - .../doc/search.index/0f7c027b00e9.js | 1 - .../doc/search.index/0fbdedb51480.js | 1 - .../doc/search.index/1018798102b7.js | 1 - .../doc/search.index/10355ce5f808.js | 1 - .../doc/search.index/112fc09882e1.js | 1 - .../doc/search.index/12b3baaf565d.js | 1 - .../doc/search.index/1324a6002abc.js | 1 - .../doc/search.index/13bc7cfafce1.js | 1 - .../doc/search.index/141c7fecd42a.js | 1 - .../doc/search.index/14f2c39a505f.js | 1 - .../doc/search.index/172a9c98ced3.js | 1 - .../doc/search.index/17be5a40fc5d.js | 1 - .../doc/search.index/194613b5fa29.js | 1 - .../doc/search.index/1ad2c47089bc.js | 1 - .../doc/search.index/1ba1761eb2cb.js | 1 - .../doc/search.index/1ccddca76ab2.js | 1 - .../doc/search.index/1d9624fef6ac.js | 1 - .../doc/search.index/1d9873b8cd56.js | 1 - .../doc/search.index/1df0b46c6223.js | 1 - .../doc/search.index/1f00276cb54c.js | 1 - .../doc/search.index/1fd3b294247d.js | 1 - .../doc/search.index/1ffc927e969c.js | 1 - .../doc/search.index/20383d4e40d7.js | 1 - .../doc/search.index/2049c1d30254.js | 1 - .../doc/search.index/209732a007c9.js | 1 - .../doc/search.index/20fbf9868440.js | 1 - .../doc/search.index/21552ed08981.js | 1 - .../doc/search.index/21d3015bb91d.js | 1 - .../doc/search.index/223142c88445.js | 1 - .../doc/search.index/22aa8cf88846.js | 1 - .../doc/search.index/22dbe1484c08.js | 1 - .../doc/search.index/231153c4125e.js | 1 - .../doc/search.index/238d8524cab7.js | 1 - .../doc/search.index/23b659872c70.js | 1 - .../doc/search.index/24af4ec98e1b.js | 1 - .../doc/search.index/24cb0c70471d.js | 1 - .../doc/search.index/24f63b481cf4.js | 1 - .../doc/search.index/254184fccb92.js | 1 - .../doc/search.index/25f1e3695043.js | 1 - .../doc/search.index/26f60a8ea4c7.js | 1 - .../doc/search.index/270775f48e8c.js | 1 - .../doc/search.index/274e2666d1e6.js | 1 - .../doc/search.index/27575a2cee93.js | 1 - .../doc/search.index/276eef4e1b81.js | 1 - .../doc/search.index/278b50aa0e99.js | 1 - .../doc/search.index/297e1c3d3b20.js | 1 - .../doc/search.index/29be22429ffd.js | 1 - .../doc/search.index/29c690c97dbb.js | 1 - .../doc/search.index/2acf58b62fab.js | 1 - .../doc/search.index/2aed659a605b.js | 1 - .../doc/search.index/2bb7f2aaa577.js | 1 - .../doc/search.index/2bdebfdf543b.js | 1 - .../doc/search.index/2d527ffd29bb.js | 1 - .../doc/search.index/2e66cd7ed693.js | 1 - .../doc/search.index/2efb36095f25.js | 1 - .../doc/search.index/306d1be86d85.js | 1 - .../doc/search.index/30ebce22a15f.js | 1 - .../doc/search.index/3123ac88cc46.js | 1 - .../doc/search.index/316053b60392.js | 1 - .../doc/search.index/317084c7e6dc.js | 1 - .../doc/search.index/3207bd54b2e8.js | 1 - .../doc/search.index/329e3ff2a85e.js | 1 - .../doc/search.index/3324e6697d41.js | 1 - .../doc/search.index/333c7cf9bfa0.js | 1 - .../doc/search.index/33a27a42c896.js | 1 - .../doc/search.index/33b3d56f97b3.js | 1 - .../doc/search.index/33e72e98225b.js | 1 - .../doc/search.index/34857f43a5d8.js | 1 - .../doc/search.index/3608b2fd20ee.js | 1 - .../doc/search.index/365ab838adf8.js | 1 - .../doc/search.index/3682e5b04ba7.js | 1 - .../doc/search.index/376d31d2e492.js | 1 - .../doc/search.index/377023998328.js | 1 - .../doc/search.index/3788c5bf57d2.js | 1 - .../doc/search.index/382df4b549c7.js | 1 - .../doc/search.index/387b9550e397.js | 1 - .../doc/search.index/396221db8836.js | 1 - .../doc/search.index/3c46588b5040.js | 1 - .../doc/search.index/3cbe383ed573.js | 1 - .../doc/search.index/3d8c16c6cf6f.js | 1 - .../doc/search.index/3da1e2de7263.js | 1 - .../doc/search.index/3e212209b944.js | 1 - .../doc/search.index/3e9ae6307edd.js | 1 - .../doc/search.index/4028f84ee77a.js | 1 - .../doc/search.index/40639a3101db.js | 1 - .../doc/search.index/406631b9a140.js | 1 - .../doc/search.index/40d38a76b871.js | 1 - .../doc/search.index/410ff111108b.js | 1 - .../doc/search.index/413a653533f9.js | 1 - .../doc/search.index/41b6f0375656.js | 1 - .../doc/search.index/434e037108e7.js | 1 - .../doc/search.index/437311e3ea93.js | 1 - .../doc/search.index/43cbc5f05b91.js | 1 - .../doc/search.index/43d09e8849bb.js | 1 - .../doc/search.index/449547cb4fff.js | 1 - .../doc/search.index/4518efb00318.js | 1 - .../doc/search.index/456d2c09c8bb.js | 1 - .../doc/search.index/45990a08d019.js | 1 - .../doc/search.index/45e3ab4cf4cf.js | 1 - .../doc/search.index/4762ba6526c8.js | 1 - .../doc/search.index/4762eae11686.js | 1 - .../doc/search.index/47b66201c534.js | 1 - .../doc/search.index/47de24f6ff68.js | 1 - .../doc/search.index/48081f5eced8.js | 1 - .../doc/search.index/490fbcb5cbd6.js | 1 - .../doc/search.index/49153af6987a.js | 1 - .../doc/search.index/491790d15ccb.js | 1 - .../doc/search.index/4931248d5f3f.js | 1 - .../doc/search.index/4a3b81c64edf.js | 1 - .../doc/search.index/4b9d57a648ea.js | 1 - .../doc/search.index/4c3f6bc47e96.js | 1 - .../doc/search.index/4c7ad6c10c33.js | 1 - .../doc/search.index/4c8aa4a52059.js | 1 - .../doc/search.index/4e2b0ab46977.js | 1 - .../doc/search.index/509cf8343e6d.js | 1 - .../doc/search.index/51b8d9062d5b.js | 1 - .../doc/search.index/526c6ebc3313.js | 1 - .../doc/search.index/527442dceceb.js | 1 - .../doc/search.index/52d2391c3cae.js | 1 - .../doc/search.index/533615f72076.js | 1 - .../doc/search.index/5355d4d4d3f5.js | 1 - .../doc/search.index/549fe3550675.js | 1 - .../doc/search.index/54b02e88aa16.js | 1 - .../doc/search.index/573692dc3ca6.js | 1 - .../doc/search.index/589ffc464450.js | 1 - .../doc/search.index/59220caa0e5f.js | 1 - .../doc/search.index/59527e38c910.js | 1 - .../doc/search.index/59647c6601c9.js | 1 - .../doc/search.index/59d858393af0.js | 1 - .../doc/search.index/5a49c1538a88.js | 1 - .../doc/search.index/5ac9088baf65.js | 1 - .../doc/search.index/5b13df19345a.js | 1 - .../doc/search.index/5d5ac8534025.js | 1 - .../doc/search.index/5d6fa22ee47d.js | 1 - .../doc/search.index/5d7da26fa217.js | 1 - .../doc/search.index/5e37b7179ebb.js | 1 - .../doc/search.index/5f58eeef92de.js | 1 - .../doc/search.index/61127d3c2ee5.js | 1 - .../doc/search.index/61629ba95236.js | 1 - .../doc/search.index/61c05892cebc.js | 1 - .../doc/search.index/624a8171324d.js | 1 - .../doc/search.index/625586c467fb.js | 1 - .../doc/search.index/626daa1be4c2.js | 1 - .../doc/search.index/630b743c04ca.js | 1 - .../doc/search.index/654dbeebbfe6.js | 1 - .../doc/search.index/65825bc6a4c1.js | 1 - .../doc/search.index/65bb79da5bec.js | 1 - .../doc/search.index/65cb2be7c063.js | 1 - .../doc/search.index/65ce0b321fad.js | 1 - .../doc/search.index/66d2cde033cf.js | 1 - .../doc/search.index/66d74e010088.js | 1 - .../doc/search.index/66fb8d247675.js | 1 - .../doc/search.index/67496f5d1117.js | 1 - .../doc/search.index/677357205927.js | 1 - .../doc/search.index/67efd5f73529.js | 1 - .../doc/search.index/692ebfd32aa0.js | 1 - .../doc/search.index/698f7ff669b2.js | 1 - .../doc/search.index/69c0ac84e1ca.js | 1 - .../doc/search.index/6af24fbf6dff.js | 1 - .../doc/search.index/6b1ea7870354.js | 1 - .../doc/search.index/6b5c8ad8f0ec.js | 1 - .../doc/search.index/6c023216f882.js | 1 - .../doc/search.index/6c49458364a2.js | 1 - .../doc/search.index/6d03d2ab67a3.js | 1 - .../doc/search.index/6d9eec2ba2da.js | 1 - .../doc/search.index/6da659281962.js | 1 - .../doc/search.index/6f2d8426fc82.js | 1 - .../doc/search.index/6f997431b3b6.js | 1 - .../doc/search.index/6fb80132df86.js | 1 - .../doc/search.index/724b0ae7a9e9.js | 1 - .../doc/search.index/734dbb06f35b.js | 1 - .../doc/search.index/747f70bf39d2.js | 1 - .../doc/search.index/7582f9ef2362.js | 1 - .../doc/search.index/763a52e41447.js | 1 - .../doc/search.index/7675e889d35e.js | 1 - .../doc/search.index/76ce112e7bfe.js | 1 - .../doc/search.index/76e927cfdbad.js | 1 - .../doc/search.index/772250ab033f.js | 1 - .../doc/search.index/77cd7efc9862.js | 1 - .../doc/search.index/79c7334fa59b.js | 1 - .../doc/search.index/7a605c9071a4.js | 1 - .../doc/search.index/7a90ced6b90a.js | 1 - .../doc/search.index/7b28a6b7ad3b.js | 1 - .../doc/search.index/7c60059e91cb.js | 1 - .../doc/search.index/7c667988149a.js | 1 - .../doc/search.index/7db221802359.js | 1 - .../doc/search.index/7e5616080d42.js | 1 - .../doc/search.index/7eb4b53d3b0d.js | 1 - .../doc/search.index/7fddf759d90c.js | 1 - .../doc/search.index/7ff3c9c0ece2.js | 1 - .../doc/search.index/alias/a762150c532c.js | 1 - .../search.index/crateNames/d1aefd4adb86.js | 1 - .../doc/search.index/desc/17136882dd08.js | 1 - .../doc/search.index/entry/66a1183eb08f.js | 1 - .../doc/search.index/entry/eec2ce8864ff.js | 1 - .../doc/search.index/function/43e2566e31c1.js | 1 - .../generic_inverted_index/7bc61006812d.js | 1 - .../doc/search.index/name/f5d573e6cbf7.js | 1 - .../normalizedName/fbbf00e58a46.js | 1 - .../doc/search.index/path/b9a82bfdb43f.js | 1 - .../target-native/doc/search.index/root.js | 1 - .../doc/search.index/type/8c8b94482112.js | 1 - network-poc/target-native/doc/settings.html | 1 - network-poc/target-native/doc/src-files.js | 2 - .../generation/mod.rs.html | 156 -- .../doc/src/candle_transformers/lib.rs.html | 8 - .../candle_transformers/models/based.rs.html | 589 ------- .../candle_transformers/models/beit.rs.html | 412 ----- .../candle_transformers/models/bert.rs.html | 622 ------- .../models/bigcode.rs.html | 368 ----- .../candle_transformers/models/blip.rs.html | 318 ---- .../models/blip_text.rs.html | 498 ------ .../models/chatglm.rs.html | 591 ------- .../models/chinese_clip/mod.rs.html | 210 --- .../models/chinese_clip/text_model.rs.html | 541 ------ .../models/chinese_clip/vision_model.rs.html | 386 ----- .../models/clip/mod.rs.html | 153 -- .../models/clip/text_model.rs.html | 348 ---- .../models/clip/vision_model.rs.html | 172 -- .../models/codegeex4_9b.rs.html | 613 ------- .../models/colpali.rs.html | 48 - .../models/convmixer.rs.html | 90 - .../models/convnext.rs.html | 341 ---- .../candle_transformers/models/dac.rs.html | 382 ----- .../models/debertav2.rs.html | 1449 ----------------- .../models/deepseek2.rs.html | 1052 ------------ .../models/depth_anything_v2.rs.html | 566 ------- .../candle_transformers/models/dinov2.rs.html | 397 ----- .../models/dinov2reg4.rs.html | 314 ---- .../models/distilbert.rs.html | 348 ---- .../models/efficientnet.rs.html | 336 ---- .../models/efficientvit.rs.html | 491 ------ .../models/encodec.rs.html | 780 --------- .../candle_transformers/models/eva2.rs.html | 440 ----- .../candle_transformers/models/falcon.rs.html | 501 ------ .../models/fastvit.rs.html | 512 ------ .../models/flux/autoencoder.rs.html | 441 ----- .../models/flux/mod.rs.html | 44 - .../models/flux/model.rs.html | 627 ------- .../models/flux/quantized_model.rs.html | 466 ------ .../models/flux/sampling.rs.html | 120 -- .../candle_transformers/models/gemma.rs.html | 449 ----- .../candle_transformers/models/gemma2.rs.html | 456 ------ .../candle_transformers/models/gemma3.rs.html | 484 ------ .../candle_transformers/models/glm4.rs.html | 610 ------- .../models/granite.rs.html | 466 ------ .../candle_transformers/models/helium.rs.html | 396 ----- .../candle_transformers/models/hiera.rs.html | 302 ---- .../models/jina_bert.rs.html | 407 ----- .../candle_transformers/models/llama.rs.html | 537 ------ .../models/llama2_c.rs.html | 376 ----- .../models/llama2_c_weights.rs.html | 174 -- .../models/llava/config.rs.html | 273 ---- .../models/llava/mod.rs.html | 413 ----- .../models/llava/utils.rs.html | 42 - .../candle_transformers/models/mamba.rs.html | 222 --- .../candle_transformers/models/marian.rs.html | 527 ------ .../models/metavoice.rs.html | 1033 ------------ .../models/mimi/conv.rs.html | 671 -------- .../models/mimi/encodec.rs.html | 230 --- .../models/mimi/mod.rs.html | 46 - .../models/mimi/quantization.rs.html | 405 ----- .../models/mimi/seanet.rs.html | 466 ------ .../models/mimi/transformer.rs.html | 778 --------- .../models/mistral.rs.html | 468 ------ .../models/mixformer.rs.html | 466 ------ .../models/mixtral.rs.html | 484 ------ .../models/mmdit/blocks.rs.html | 498 ------ .../models/mmdit/embedding.rs.html | 198 --- .../models/mmdit/mod.rs.html | 20 - .../models/mmdit/model.rs.html | 241 --- .../models/mmdit/projections.rs.html | 122 -- .../models/mobileclip.rs.html | 102 -- .../models/mobilenetv4.rs.html | 806 --------- .../models/mobileone.rs.html | 335 ---- .../candle_transformers/models/mod.rs.html | 119 -- .../models/modernbert.rs.html | 505 ------ .../models/moondream.rs.html | 367 ----- .../candle_transformers/models/mpt.rs.html | 299 ---- .../models/nvembed_v2/embedding.rs.html | 295 ---- .../models/nvembed_v2/mod.rs.html | 19 - .../models/nvembed_v2/model.rs.html | 234 --- .../candle_transformers/models/olmo.rs.html | 354 ---- .../models/openclip/mod.rs.html | 14 - .../models/openclip/text_model.rs.html | 267 --- .../models/paligemma.rs.html | 171 -- .../models/parler_tts.rs.html | 474 ------ .../models/persimmon.rs.html | 71 - .../candle_transformers/models/phi.rs.html | 366 ----- .../candle_transformers/models/phi3.rs.html | 349 ---- .../models/pixtral/llava.rs.html | 99 -- .../models/pixtral/mod.rs.html | 44 - .../models/pixtral/vision_model.rs.html | 367 ----- .../models/quantized_blip.rs.html | 278 ---- .../models/quantized_blip_text.rs.html | 494 ------ .../models/quantized_llama.rs.html | 513 ------ .../models/quantized_llama2_c.rs.html | 261 --- .../models/quantized_metavoice.rs.html | 260 --- .../models/quantized_mistral.rs.html | 338 ---- .../models/quantized_mixformer.rs.html | 381 ----- .../models/quantized_moondream.rs.html | 287 ---- .../models/quantized_mpt.rs.html | 220 --- .../models/quantized_phi.rs.html | 306 ---- .../models/quantized_phi3.rs.html | 338 ---- .../models/quantized_qwen2.rs.html | 339 ---- .../models/quantized_recurrent_gemma.rs.html | 430 ----- .../models/quantized_rwkv_v5.rs.html | 304 ---- .../models/quantized_rwkv_v6.rs.html | 351 ---- .../models/quantized_stable_lm.rs.html | 302 ---- .../models/quantized_t5.rs.html | 800 --------- .../candle_transformers/models/qwen2.rs.html | 403 ----- .../models/qwen2_moe.rs.html | 484 ------ .../models/recurrent_gemma.rs.html | 661 -------- .../candle_transformers/models/repvgg.rs.html | 315 ---- .../candle_transformers/models/resnet.rs.html | 258 --- .../models/rwkv_v5.rs.html | 442 ----- .../models/rwkv_v6.rs.html | 325 ---- .../models/segformer.rs.html | 722 -------- .../segment_anything/image_encoder.rs.html | 484 ------ .../segment_anything/mask_decoder.rs.html | 240 --- .../models/segment_anything/mod.rs.html | 118 -- .../segment_anything/prompt_encoder.rs.html | 241 --- .../models/segment_anything/sam.rs.html | 448 ----- .../models/segment_anything/tiny_vit.rs.html | 634 -------- .../segment_anything/transformer.rs.html | 222 --- .../candle_transformers/models/siglip.rs.html | 799 --------- .../models/stable_diffusion/attention.rs.html | 568 ------- .../models/stable_diffusion/clip.rs.html | 429 ----- .../models/stable_diffusion/ddim.rs.html | 214 --- .../models/stable_diffusion/ddpm.rs.html | 206 --- .../stable_diffusion/embeddings.rs.html | 66 - .../euler_ancestral_discrete.rs.html | 231 --- .../models/stable_diffusion/mod.rs.html | 509 ------ .../models/stable_diffusion/resnet.rs.html | 140 -- .../stable_diffusion/schedulers.rs.html | 78 - .../models/stable_diffusion/unet_2d.rs.html | 402 ----- .../stable_diffusion/unet_2d_blocks.rs.html | 869 ---------- .../models/stable_diffusion/uni_pc.rs.html | 1006 ------------ .../models/stable_diffusion/utils.rs.html | 62 - .../models/stable_diffusion/vae.rs.html | 404 ----- .../models/stable_lm.rs.html | 434 ----- .../models/starcoder2.rs.html | 352 ---- .../models/stella_en_v5.rs.html | 812 --------- .../src/candle_transformers/models/t5.rs.html | 954 ----------- .../candle_transformers/models/trocr.rs.html | 518 ------ .../candle_transformers/models/vgg.rs.html | 268 --- .../candle_transformers/models/vit.rs.html | 417 ----- .../models/whisper/audio.rs.html | 337 ---- .../models/whisper/mod.rs.html | 59 - .../models/whisper/model.rs.html | 399 ----- .../models/whisper/quantized_model.rs.html | 400 ----- .../models/with_tracing.rs.html | 196 --- .../wuerstchen/attention_processor.rs.html | 119 -- .../models/wuerstchen/common.rs.html | 204 --- .../models/wuerstchen/ddpm.rs.html | 104 -- .../models/wuerstchen/diffnext.rs.html | 397 ----- .../models/wuerstchen/mod.rs.html | 23 - .../models/wuerstchen/paella_vq.rs.html | 212 --- .../models/wuerstchen/prior.rs.html | 104 -- .../models/xlm_roberta.rs.html | 546 ------- .../src/candle_transformers/models/yi.rs.html | 365 ----- .../object_detection.rs.html | 117 -- .../candle_transformers/pipelines/mod.rs.html | 2 - .../pipelines/text_generation.rs.html | 2 - .../candle_transformers/quantized_nn.rs.html | 127 -- .../quantized_var_builder.rs.html | 105 -- .../doc/src/candle_transformers/utils.rs.html | 39 - .../doc/static.files/COPYRIGHT-7fb11f4e.txt | 71 - .../FiraMono-Medium-86f75c8c.woff2 | Bin 64572 -> 0 bytes .../FiraMono-Regular-87c26294.woff2 | Bin 64868 -> 0 bytes .../FiraSans-Italic-81dc35de.woff2 | Bin 136300 -> 0 bytes .../FiraSans-LICENSE-05ab6dbd.txt | 98 -- .../FiraSans-Medium-e1aa3f0a.woff2 | Bin 132780 -> 0 bytes .../FiraSans-MediumItalic-ccf7e434.woff2 | Bin 140588 -> 0 bytes .../FiraSans-Regular-0fe48ade.woff2 | Bin 129188 -> 0 bytes .../static.files/LICENSE-APACHE-a60eea81.txt | 201 --- .../doc/static.files/LICENSE-MIT-23f18e03.txt | 23 - .../NanumBarunGothic-13b3dcba.ttf.woff2 | Bin 399468 -> 0 bytes .../NanumBarunGothic-LICENSE-a37d393b.txt | 103 -- .../SourceCodePro-It-fc8b9304.ttf.woff2 | Bin 44896 -> 0 bytes .../SourceCodePro-LICENSE-67f54ca7.txt | 97 -- .../SourceCodePro-Regular-8badfe75.ttf.woff2 | Bin 52228 -> 0 bytes .../SourceCodePro-Semibold-aa29a496.ttf.woff2 | Bin 52348 -> 0 bytes .../SourceSerif4-Bold-6d4fd4c0.ttf.woff2 | Bin 81540 -> 0 bytes .../SourceSerif4-It-ca3b17ed.ttf.woff2 | Bin 59716 -> 0 bytes .../SourceSerif4-LICENSE-a2cfd9d5.md | 98 -- .../SourceSerif4-Regular-6b053e98.ttf.woff2 | Bin 76260 -> 0 bytes .../SourceSerif4-Semibold-457a13ac.ttf.woff2 | Bin 80732 -> 0 bytes .../doc/static.files/favicon-044be391.svg | 24 - .../static.files/favicon-32x32-eab170b8.png | Bin 690 -> 0 bytes .../doc/static.files/main-7bab91a1.js | 24 - .../doc/static.files/normalize-9960930a.css | 2 - .../doc/static.files/noscript-ffcac47a.css | 1 - .../doc/static.files/rust-logo-9a9549ea.svg | 61 - .../doc/static.files/rustdoc-77263533.css | 86 - .../static.files/scrape-examples-2bbcccac.js | 1 - .../doc/static.files/search-9e2438ea.js | 5 - .../doc/static.files/settings-c38705f0.js | 17 - .../doc/static.files/src-script-813739b1.js | 1 - .../doc/static.files/storage-e2aeef58.js | 27 - .../doc/static.files/stringdex-b897f86f.js | 2 - .../streaming/trait.StreamingModule.js | 9 - .../trait.impl/candle_core/trait.Module.js | 9 - .../trait.impl/candle_core/trait.ModuleT.js | 9 - .../models/deepseek2/trait.BincountOp.js | 9 - .../models/deepseek2/trait.NonZeroOp.js | 9 - .../models/deepseek2/trait.SplitOp.js | 9 - .../models/deepseek2/trait.TopKLastDimOp.js | 9 - .../models/flux/trait.WithForward.js | 9 - .../models/mmdit/blocks/trait.JointBlock.js | 9 - .../schedulers/trait.Scheduler.js | 9 - .../schedulers/trait.SchedulerConfig.js | 9 - .../models/whisper/audio/trait.Float.js | 9 - .../doc/trait.impl/core/clone/trait.Clone.js | 9 - .../doc/trait.impl/core/cmp/trait.Eq.js | 9 - .../trait.impl/core/cmp/trait.PartialEq.js | 9 - .../doc/trait.impl/core/convert/trait.From.js | 9 - .../trait.impl/core/default/trait.Default.js | 9 - .../doc/trait.impl/core/fmt/trait.Debug.js | 9 - .../doc/trait.impl/core/hash/trait.Hash.js | 9 - .../doc/trait.impl/core/marker/trait.Copy.js | 9 - .../trait.impl/core/marker/trait.Freeze.js | 9 - .../doc/trait.impl/core/marker/trait.Send.js | 9 - .../core/marker/trait.StructuralPartialEq.js | 9 - .../doc/trait.impl/core/marker/trait.Sync.js | 9 - .../doc/trait.impl/core/marker/trait.Unpin.js | 9 - .../core/marker/trait.UnsafeUnpin.js | 9 - .../panic/unwind_safe/trait.RefUnwindSafe.js | 9 - .../panic/unwind_safe/trait.UnwindSafe.js | 9 - .../serde_core/de/trait.Deserialize.js | 9 - .../serde_core/ser/trait.Serialize.js | 9 - .../models/blip/struct.Config.js | 9 - .../models/blip/struct.VisionConfig.js | 9 - .../models/blip_text/struct.Config.js | 9 - .../collections/hash/map/struct.HashMap.js | 9 - 1410 files changed, 79374 deletions(-) delete mode 100644 network-poc/target-native/.rustc_info.json delete mode 100644 network-poc/target-native/.rustdoc_fingerprint.json delete mode 100644 network-poc/target-native/CACHEDIR.TAG delete mode 100644 network-poc/target-native/doc/.lock delete mode 100644 network-poc/target-native/doc/candle_transformers/all.html delete mode 100644 network-poc/target-native/doc/candle_transformers/generation/enum.Sampling.html delete mode 100644 network-poc/target-native/doc/candle_transformers/generation/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/generation/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/generation/struct.LogitsProcessor.html delete mode 100644 network-poc/target-native/doc/candle_transformers/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/based/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/based/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/based/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/based/struct.LinearAttentionConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/based/struct.LinearAttentionFeatureMapConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/based/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/based/struct.SlidingWindowAttentionConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/beit/fn.vit_base.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/beit/fn.vit_large.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/beit/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/beit/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/beit/struct.BeitVisionTransformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bert/constant.DTYPE.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bert/enum.HiddenAct.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bert/enum.PositionEmbeddingType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bert/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bert/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bert/struct.BertEncoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bert/struct.BertForMaskedLM.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bert/struct.BertLMPredictionHead.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bert/struct.BertLayer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bert/struct.BertModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bert/struct.BertOnlyMLMHead.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bert/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bigcode/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bigcode/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bigcode/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/bigcode/struct.GPTBigCode.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/blip/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/blip/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/blip/struct.BlipForConditionalGeneration.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/blip/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/blip/struct.VisionConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/blip/struct.VisionModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/blip_text/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/blip_text/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/blip_text/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/blip_text/struct.TextLMHeadModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/blip_text/struct.TextPooler.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chatglm/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chatglm/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chatglm/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chatglm/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/enum.Activation.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/enum.EncoderConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/fn.div_l2_norm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/struct.ChineseClipConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/struct.ChineseClipModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/enum.PositionEmbeddingType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/struct.ChineseClipTextConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/struct.ChineseClipTextEmbeddings.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/struct.ChineseClipTextTransformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionEmbeddings.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionEncoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionTransformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/enum.EncoderConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/fn.div_l2_norm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/struct.ClipConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/struct.ClipModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/text_model/enum.Activation.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/text_model/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/text_model/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/text_model/struct.ClipEncoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/text_model/struct.ClipTextConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/text_model/struct.ClipTextTransformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/vision_model/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/vision_model/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/vision_model/struct.ClipVisionConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/clip/vision_model/struct.ClipVisionTransformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/colpali/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/colpali/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/colpali/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/convmixer/fn.c1024_20.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/convmixer/fn.c1536_20.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/convmixer/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/convmixer/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/convnext/fn.convnext.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/convnext/fn.convnext_no_final_layer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/convnext/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/convnext/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/convnext/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dac/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dac/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dac/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dac/struct.Decoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dac/struct.DecoderBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dac/struct.Encoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dac/struct.EncoderBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dac/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dac/struct.ResidualUnit.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dac/struct.ResidualVectorQuantizer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dac/struct.Snake1d.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dac/struct.VectorQuantizer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/constant.DTYPE.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/enum.HiddenAct.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.ConvLayer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Attention.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2ContextPooler.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2DisentangledSelfAttention.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Embeddings.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Encoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Intermediate.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Layer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2NERModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Output.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2SelfOutput.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2SeqClassificationModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.HiddenActLayer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.NERItem.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.StableDropout.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/struct.TextClassificationItem.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/type.Id2Label.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/debertav2/type.Label2Id.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/deepseek2/enum.DeepSeekV2RopeScaling.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/deepseek2/enum.ScaledRopeType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/deepseek2/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/deepseek2/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2RopeConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2RotaryEmbedding.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.TopKOutput.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.BincountOp.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.NonZeroOp.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.SplitOp.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.TopKLastDimOp.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.DPTHead.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.DepthAnythingV2.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.DepthAnythingV2Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.FeatureFusionBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.ResidualConvUnit.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.Scratch.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dinov2/fn.vit_small.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dinov2/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dinov2/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dinov2/struct.DinoVisionTransformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dinov2reg4/fn.vit_base.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dinov2reg4/fn.vit_small.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dinov2reg4/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dinov2reg4/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/dinov2reg4/struct.DinoVisionTransformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/distilbert/constant.DTYPE.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/distilbert/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/distilbert/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/distilbert/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/distilbert/struct.DistilBertModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/efficientnet/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/efficientnet/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/efficientnet/struct.EfficientNet.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/efficientnet/struct.MBConvConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/efficientvit/fn.efficientvit.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/efficientvit/fn.efficientvit_no_final_layer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/efficientvit/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/efficientvit/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/efficientvit/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/enum.NormType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/enum.PadMode.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/fn.conv1d_weight_norm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/fn.conv_transpose1d_weight_norm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/struct.Decoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecConv1d.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecConvTranspose1d.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecLSTM.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecResnetBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/struct.Encoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/struct.EuclideanCodebook.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/struct.ResidualVectorQuantizer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/encodec/struct.VectorQuantization.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/eva2/fn.vit_base.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/eva2/fn.vit_large.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/eva2/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/eva2/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/eva2/struct.EVA2VisionTransformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/falcon/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/falcon/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/falcon/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/falcon/struct.Falcon.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/fastvit/fn.fastvit.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/fastvit/fn.fastvit_no_final_layer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/fastvit/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/fastvit/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/fastvit/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.AutoEncoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.Decoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.DiagonalGaussian.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.Encoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/model/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/model/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/model/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/model/struct.DoubleStreamBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/model/struct.EmbedNd.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/model/struct.Flux.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/model/struct.LastLayer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/model/struct.MlpEmbedder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/model/struct.QkNorm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/model/struct.SelfAttention.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/model/struct.SingleStreamBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.DoubleStreamBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.Flux.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.LastLayer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.MlpEmbedder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.QkNorm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.SelfAttention.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.SingleStreamBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.denoise.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.get_noise.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.get_schedule.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.unpack.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/sampling/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/sampling/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/sampling/struct.State.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/flux/trait.WithForward.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/gemma/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/gemma/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/gemma/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/gemma/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/gemma2/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/gemma2/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/gemma2/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/gemma2/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/gemma3/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/gemma3/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/gemma3/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/gemma3/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/glm4/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/glm4/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/glm4/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/glm4/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/granite/constant.DEFAULT_MAX_SEQ_LEN.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/granite/enum.GraniteEosToks.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/granite/enum.GraniteRopeType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/granite/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/granite/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/granite/struct.Cache.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/granite/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/granite/struct.Granite.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/granite/struct.GraniteConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/granite/struct.GraniteRopeConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/helium/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/helium/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/helium/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/helium/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/hiera/fn.hiera.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/hiera/fn.hiera_no_final_layer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/hiera/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/hiera/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/hiera/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/jina_bert/constant.DTYPE.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/jina_bert/enum.PositionEmbeddingType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/jina_bert/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/jina_bert/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/jina_bert/struct.BertModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/jina_bert/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama/constant.DEFAULT_MAX_SEQ_LEN.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama/enum.Llama3RopeType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama/enum.LlamaEosToks.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama/struct.Cache.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama/struct.Llama.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama/struct.Llama3RopeConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama/struct.LlamaConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama2_c/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama2_c/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama2_c/struct.Cache.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama2_c/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama2_c/struct.Llama.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama2_c_weights/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama2_c_weights/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llama2_c_weights/struct.TransformerWeights.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/config/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/config/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFGenerationConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFLLaVAConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFLLaVATextConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFLLaVAVisionConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFPreProcessorConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/config/struct.LLaVAConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/struct.ClipVisionTower.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/struct.IdentityMap.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/struct.LLaVA.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/struct.MMProjector.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/utils/fn.get_anyres_image_grid_shape.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/utils/fn.select_best_resolution.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/utils/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/llava/utils/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mamba/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mamba/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mamba/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mamba/struct.MambaBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mamba/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mamba/struct.ResidualBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mamba/struct.State.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/marian/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/marian/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/marian/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/marian/struct.Decoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/marian/struct.Encoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/marian/struct.MTModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/struct.FlattenedInterleavedEncodec2Codebook.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/struct.TiltedEncodec.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/enum.AttnKernelType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/enum.NonLinearityType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/enum.NormType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/tokenizers/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/tokenizers/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/tokenizers/struct.BPE.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/conv/enum.Norm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/conv/enum.PadMode.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/conv/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/conv/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.ConvDownsample1d.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.ConvTrUpsample1d.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.NormConv1d.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.NormConvTranspose1d.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.StreamableConv1d.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.StreamableConvTranspose1d.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/encodec/enum.ResampleMethod.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/encodec/fn.load.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/encodec/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/encodec/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/encodec/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/encodec/struct.Encodec.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/enum.NormType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/quantization/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/quantization/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.EuclideanCodebook.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.ResidualVectorQuantization.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.ResidualVectorQuantizer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.SplitResidualVectorQuantizer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.VectorQuantization.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/seanet/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/seanet/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.SeaNetDecoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.SeaNetEncoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.SeaNetResnetBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/transformer/enum.Mlp.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/transformer/enum.Norm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/transformer/enum.PositionalEmbedding.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/transformer/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/transformer/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.LayerScale.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.ProjectedTransformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.RmsNorm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.RotaryEmbedding.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingMultiheadAttention.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingMultiheadCrossAttention.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingTransformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingTransformerLayer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mistral/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mistral/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mistral/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mistral/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mixformer/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mixformer/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mixformer/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mixformer/struct.MixFormerSequentialForCausalLM.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mixtral/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mixtral/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mixtral/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mixtral/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.ContextQkvOnlyJointBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.DiTBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.FinalLayer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.LayerNormNoAffine.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.MMDiTJointBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.MMDiTXJointBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.ModulateIntermediates.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.QkvOnlyDiTBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.SelfAttnDiTBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.SelfAttnModulateIntermediates.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/trait.JointBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.PatchEmbedder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.PositionEmbedder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.TimestepEmbedder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.Unpatchifier.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.VectorEmbedder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/model/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/model/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/model/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/model/struct.MMDiT.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/model/struct.MMDiTCore.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/projections/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/projections/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.AttnProjections.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.Mlp.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.Qkv.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.QkvOnlyAttnProjections.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mmdit/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mobileclip/fn.div_l2_norm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mobileclip/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mobileclip/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mobileclip/struct.MobileClipConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mobileclip/struct.MobileClipModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mobilenetv4/fn.mobilenetv4.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mobilenetv4/fn.mobilenetv4_no_final_layer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mobilenetv4/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mobilenetv4/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mobilenetv4/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mobileone/fn.mobileone.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mobileone/fn.mobileone_no_final_layer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mobileone/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mobileone/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mobileone/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/modernbert/enum.ClassifierPooling.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/modernbert/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/modernbert/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ClassifierConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/modernbert/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBert.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertClassifier.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertDecoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertForMaskedLM.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertForSequenceClassification.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertHead.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertLayer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertMLP.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/moondream/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/moondream/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/moondream/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/moondream/struct.Encoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/moondream/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/moondream/struct.VisionConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/moondream/struct.VisionEncoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mpt/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mpt/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mpt/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/mpt/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/nvembed_v2/embedding/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/nvembed_v2/embedding/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/nvembed_v2/embedding/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/nvembed_v2/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/nvembed_v2/model/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/nvembed_v2/model/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/nvembed_v2/model/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/nvembed_v2/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/olmo/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/olmo/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/olmo/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/olmo/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/openclip/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/openclip/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/openclip/text_model/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/openclip/text_model/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/openclip/text_model/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/openclip/text_model/struct.Encoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/openclip/text_model/struct.OpenClipTextTransformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/paligemma/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/paligemma/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/paligemma/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/paligemma/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/paligemma/struct.MultiModalProjector.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/parler_tts/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/parler_tts/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Attention.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Decoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.DecoderConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.DecoderLayer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/persimmon/constant.DTYPE.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/persimmon/enum.PositionEmbeddingType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/persimmon/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/persimmon/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/persimmon/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/phi/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/phi/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/phi/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/phi/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/phi3/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/phi3/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/phi3/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/phi3/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/phi3/struct.RotaryEmbedding.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/pixtral/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/pixtral/llava/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/pixtral/llava/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/pixtral/llava/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/pixtral/llava/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/pixtral/llava/struct.MultiModalProjector.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/pixtral/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_blip/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_blip/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_blip/struct.BlipForConditionalGeneration.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_blip/struct.VisionModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_blip/type.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_blip/type.VisionConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/struct.TextLMHeadModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/struct.TextPooler.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/type.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_llama/constant.MAX_SEQ_LEN.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_llama/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_llama/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_llama/struct.ModelWeights.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_llama2_c/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_llama2_c/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_llama2_c/struct.QLlama.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/transformer/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/transformer/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/transformer/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_mistral/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_mistral/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_mistral/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_mixformer/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_mixformer/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_mixformer/struct.MixFormerSequentialForCausalLM.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_moondream/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_moondream/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_moondream/struct.Encoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_moondream/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_moondream/struct.VisionEncoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_mpt/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_mpt/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_mpt/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_phi/constant.MAX_SEQ_LEN.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_phi/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_phi/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_phi/struct.ModelWeights.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_phi3/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_phi3/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_phi3/struct.ModelWeights.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_qwen2/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_qwen2/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_qwen2/struct.ModelWeights.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_recurrent_gemma/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_recurrent_gemma/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_recurrent_gemma/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v5/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v5/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v5/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v6/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v6/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v6/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_stable_lm/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_stable_lm/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_stable_lm/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_t5/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_t5/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_t5/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_t5/struct.T5EncoderModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/quantized_t5/struct.T5ForConditionalGeneration.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/qwen2/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/qwen2/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/qwen2/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/qwen2/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/qwen2/struct.ModelForCausalLM.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/qwen2_moe/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/qwen2_moe/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/qwen2_moe/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/qwen2_moe/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/enum.TemporalBlockType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/repvgg/fn.repvgg.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/repvgg/fn.repvgg_no_final_layer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/repvgg/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/repvgg/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/repvgg/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet101.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet101_no_final_layer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet152.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet152_no_final_layer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet18.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet18_no_final_layer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet34.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet34_no_final_layer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet50.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet50_no_final_layer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/resnet/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/resnet/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/rwkv_v5/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/rwkv_v5/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.State.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.StatePerLayer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.Tokenizer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/rwkv_v6/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/rwkv_v6/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/rwkv_v6/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segformer/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segformer/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segformer/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segformer/struct.ImageClassificationModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segformer/struct.SemanticSegmentationModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/fn.linear.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/image_encoder/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/image_encoder/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/image_encoder/struct.ImageEncoderViT.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/mask_decoder/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/mask_decoder/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/mask_decoder/struct.MaskDecoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/prompt_encoder/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/prompt_encoder/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/prompt_encoder/struct.PromptEncoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/constant.IMAGE_SIZE.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/struct.Sam.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/struct.LayerNorm2d.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/struct.MlpBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/fn.tiny_vit_5m.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/struct.TinyViT.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/transformer/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/transformer/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/segment_anything/transformer/struct.TwoWayTransformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/siglip/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/siglip/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/siglip/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/siglip/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/siglip/struct.TextConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/siglip/struct.TextModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/siglip/struct.TextTransformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/siglip/struct.VisionConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/siglip/struct.VisionModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.AttentionBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.AttentionBlockConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.CrossAttention.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.SpatialTransformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.SpatialTransformerConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/enum.Activation.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/struct.ClipTextTransformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/struct.DDIMScheduler.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/struct.DDIMSchedulerConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/enum.DDPMVarianceType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/struct.DDPMScheduler.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/struct.DDPMSchedulerConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/struct.TimestepEmbedding.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/struct.Timesteps.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/struct.EulerAncestralDiscreteScheduler.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/struct.EulerAncestralDiscreteSchedulerConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/fn.build_clip_transformer.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/struct.ResnetBlock2D.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/struct.ResnetBlock2DConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/enum.BetaSchedule.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/enum.PredictionType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/enum.TimestepSpacing.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/trait.Scheduler.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/trait.SchedulerConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/struct.StableDiffusionConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/struct.BlockConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/struct.UNet2DConditionModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/struct.UNet2DConditionModelConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnDownBlock2D.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnDownBlock2DConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnUpBlock2D.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnUpBlock2DConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownBlock2D.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownBlock2DConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownEncoderBlock2D.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownEncoderBlock2DConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2D.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2DConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2DCrossAttn.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2DCrossAttnConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpBlock2D.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpBlock2DConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpDecoderBlock2D.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpDecoderBlock2DConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.AlgorithmType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.CorrectorConfiguration.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.FinalSigmasType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.SigmaSchedule.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.SolverType.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.TimestepSchedule.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.EdmDpmMultistepScheduler.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.ExponentialSigmaSchedule.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.KarrasSigmaSchedule.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.UniPCSchedulerConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/fn.interp.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/fn.linspace.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/struct.AutoEncoderKL.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/struct.AutoEncoderKLConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/struct.DiagonalGaussianDistribution.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_lm/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_lm/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_lm/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stable_lm/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/starcoder2/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/starcoder2/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/starcoder2/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/starcoder2/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stella_en_v5/enum.EmbedDim.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stella_en_v5/enum.ModelVariant.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stella_en_v5/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stella_en_v5/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.EmbedHead.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.EmbeddingModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.Embeddings.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/t5/fn.deserialize_feed_forward_proj_activation.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/t5/fn.linear_no_bias.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/t5/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/t5/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/t5/struct.ActivationWithOptionalGating.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/t5/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/t5/struct.Linear.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/t5/struct.T5EncoderModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/t5/struct.T5ForConditionalGeneration.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/trocr/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/trocr/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRDecoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCREncoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRForCausalLM.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/vgg/enum.Models.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/vgg/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/vgg/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/vgg/struct.Vgg.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/vit/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/vit/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/vit/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/vit/struct.Embeddings.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/vit/struct.Encoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/vit/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/audio/fn.log_mel_spectrogram_.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/audio/fn.pcm_to_mel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/audio/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/audio/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/audio/trait.Float.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.CHUNK_LENGTH.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.COMPRESSION_RATIO_THRESHOLD.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.DTYPE.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.EOT_TOKEN.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.HOP_LENGTH.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.LOGPROB_THRESHOLD.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.NO_SPEECH_THRESHOLD.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.NO_SPEECH_TOKENS.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.NO_TIMESTAMPS_TOKEN.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.N_FFT.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.N_FRAMES.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.N_SAMPLES.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.SAMPLE_RATE.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.SOT_TOKEN.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.TEMPERATURES.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.TRANSCRIBE_TOKEN.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/constant.TRANSLATE_TOKEN.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/model/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/model/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/model/struct.AudioEncoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/model/struct.TextDecoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/model/struct.Whisper.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/struct.AudioEncoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/struct.TextDecoder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/struct.Whisper.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/whisper/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.conv2d.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.layer_norm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.linear.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.linear_b.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.linear_no_bias.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/with_tracing/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/with_tracing/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.Conv2d.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.Embedding.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.LayerNorm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.Linear.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.QMatMul.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.RmsNorm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/attention_processor/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/attention_processor/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/attention_processor/struct.Attention.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.AttnBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.GlobalResponseNorm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.LayerNormNoWeights.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.ResBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.TimestepBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.WLayerNorm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/struct.DDPMWScheduler.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/struct.DDPMWSchedulerConfig.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/struct.ResBlockStageB.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/struct.WDiffNeXt.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/struct.MixingResidualBlock.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/struct.PaellaVQ.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/prior/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/prior/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/prior/struct.WPrior.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/wuerstchen/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/xlm_roberta/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/xlm_roberta/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.XLMRobertaForMaskedLM.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.XLMRobertaForSequenceClassification.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.XLMRobertaModel.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/yi/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/yi/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/models/yi/struct.Config.html delete mode 100644 network-poc/target-native/doc/candle_transformers/models/yi/struct.Model.html delete mode 100644 network-poc/target-native/doc/candle_transformers/object_detection/fn.iou.html delete mode 100644 network-poc/target-native/doc/candle_transformers/object_detection/fn.non_maximum_suppression.html delete mode 100644 network-poc/target-native/doc/candle_transformers/object_detection/fn.soft_non_maximum_suppression.html delete mode 100644 network-poc/target-native/doc/candle_transformers/object_detection/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/object_detection/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/object_detection/struct.Bbox.html delete mode 100644 network-poc/target-native/doc/candle_transformers/object_detection/struct.KeyPoint.html delete mode 100644 network-poc/target-native/doc/candle_transformers/pipelines/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/pipelines/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/pipelines/text_generation/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/pipelines/text_generation/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/quantized_nn/fn.layer_norm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/quantized_nn/fn.layer_norm_no_bias.html delete mode 100644 network-poc/target-native/doc/candle_transformers/quantized_nn/fn.linear.html delete mode 100644 network-poc/target-native/doc/candle_transformers/quantized_nn/fn.linear_b.html delete mode 100644 network-poc/target-native/doc/candle_transformers/quantized_nn/fn.linear_no_bias.html delete mode 100644 network-poc/target-native/doc/candle_transformers/quantized_nn/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/quantized_nn/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/quantized_nn/struct.Embedding.html delete mode 100644 network-poc/target-native/doc/candle_transformers/quantized_nn/struct.Linear.html delete mode 100644 network-poc/target-native/doc/candle_transformers/quantized_nn/struct.RmsNorm.html delete mode 100644 network-poc/target-native/doc/candle_transformers/quantized_var_builder/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/quantized_var_builder/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/quantized_var_builder/struct.VarBuilder.html delete mode 100644 network-poc/target-native/doc/candle_transformers/sidebar-items.js delete mode 100644 network-poc/target-native/doc/candle_transformers/utils/fn.apply_repeat_penalty.html delete mode 100644 network-poc/target-native/doc/candle_transformers/utils/fn.repeat_kv.html delete mode 100644 network-poc/target-native/doc/candle_transformers/utils/index.html delete mode 100644 network-poc/target-native/doc/candle_transformers/utils/sidebar-items.js delete mode 100644 network-poc/target-native/doc/crates.js delete mode 100644 network-poc/target-native/doc/help.html delete mode 100644 network-poc/target-native/doc/search.index/003d09593f6a.js delete mode 100644 network-poc/target-native/doc/search.index/0061c3727565.js delete mode 100644 network-poc/target-native/doc/search.index/00763bda922b.js delete mode 100644 network-poc/target-native/doc/search.index/00a2cce7b4b7.js delete mode 100644 network-poc/target-native/doc/search.index/00b2aef8d52a.js delete mode 100644 network-poc/target-native/doc/search.index/00d8b529914f.js delete mode 100644 network-poc/target-native/doc/search.index/01cd84d2f2e3.js delete mode 100644 network-poc/target-native/doc/search.index/0294230d9fee.js delete mode 100644 network-poc/target-native/doc/search.index/02dd62743463.js delete mode 100644 network-poc/target-native/doc/search.index/03ea4f6e7c51.js delete mode 100644 network-poc/target-native/doc/search.index/03ec11e31b4c.js delete mode 100644 network-poc/target-native/doc/search.index/049ab7c95bde.js delete mode 100644 network-poc/target-native/doc/search.index/04c9f6fec5de.js delete mode 100644 network-poc/target-native/doc/search.index/053b677a656c.js delete mode 100644 network-poc/target-native/doc/search.index/05affee7b8e8.js delete mode 100644 network-poc/target-native/doc/search.index/0730beffd097.js delete mode 100644 network-poc/target-native/doc/search.index/07c3ffdefafd.js delete mode 100644 network-poc/target-native/doc/search.index/092b4157f085.js delete mode 100644 network-poc/target-native/doc/search.index/09d8aff063a2.js delete mode 100644 network-poc/target-native/doc/search.index/0ab19a760b88.js delete mode 100644 network-poc/target-native/doc/search.index/0b0b22d9594d.js delete mode 100644 network-poc/target-native/doc/search.index/0b78d2564165.js delete mode 100644 network-poc/target-native/doc/search.index/0c3480e39521.js delete mode 100644 network-poc/target-native/doc/search.index/0cd3046acd46.js delete mode 100644 network-poc/target-native/doc/search.index/0d93f53d2d2f.js delete mode 100644 network-poc/target-native/doc/search.index/0e60c3ef220d.js delete mode 100644 network-poc/target-native/doc/search.index/0e738af68123.js delete mode 100644 network-poc/target-native/doc/search.index/0e95b5e692bf.js delete mode 100644 network-poc/target-native/doc/search.index/0f7c027b00e9.js delete mode 100644 network-poc/target-native/doc/search.index/0fbdedb51480.js delete mode 100644 network-poc/target-native/doc/search.index/1018798102b7.js delete mode 100644 network-poc/target-native/doc/search.index/10355ce5f808.js delete mode 100644 network-poc/target-native/doc/search.index/112fc09882e1.js delete mode 100644 network-poc/target-native/doc/search.index/12b3baaf565d.js delete mode 100644 network-poc/target-native/doc/search.index/1324a6002abc.js delete mode 100644 network-poc/target-native/doc/search.index/13bc7cfafce1.js delete mode 100644 network-poc/target-native/doc/search.index/141c7fecd42a.js delete mode 100644 network-poc/target-native/doc/search.index/14f2c39a505f.js delete mode 100644 network-poc/target-native/doc/search.index/172a9c98ced3.js delete mode 100644 network-poc/target-native/doc/search.index/17be5a40fc5d.js delete mode 100644 network-poc/target-native/doc/search.index/194613b5fa29.js delete mode 100644 network-poc/target-native/doc/search.index/1ad2c47089bc.js delete mode 100644 network-poc/target-native/doc/search.index/1ba1761eb2cb.js delete mode 100644 network-poc/target-native/doc/search.index/1ccddca76ab2.js delete mode 100644 network-poc/target-native/doc/search.index/1d9624fef6ac.js delete mode 100644 network-poc/target-native/doc/search.index/1d9873b8cd56.js delete mode 100644 network-poc/target-native/doc/search.index/1df0b46c6223.js delete mode 100644 network-poc/target-native/doc/search.index/1f00276cb54c.js delete mode 100644 network-poc/target-native/doc/search.index/1fd3b294247d.js delete mode 100644 network-poc/target-native/doc/search.index/1ffc927e969c.js delete mode 100644 network-poc/target-native/doc/search.index/20383d4e40d7.js delete mode 100644 network-poc/target-native/doc/search.index/2049c1d30254.js delete mode 100644 network-poc/target-native/doc/search.index/209732a007c9.js delete mode 100644 network-poc/target-native/doc/search.index/20fbf9868440.js delete mode 100644 network-poc/target-native/doc/search.index/21552ed08981.js delete mode 100644 network-poc/target-native/doc/search.index/21d3015bb91d.js delete mode 100644 network-poc/target-native/doc/search.index/223142c88445.js delete mode 100644 network-poc/target-native/doc/search.index/22aa8cf88846.js delete mode 100644 network-poc/target-native/doc/search.index/22dbe1484c08.js delete mode 100644 network-poc/target-native/doc/search.index/231153c4125e.js delete mode 100644 network-poc/target-native/doc/search.index/238d8524cab7.js delete mode 100644 network-poc/target-native/doc/search.index/23b659872c70.js delete mode 100644 network-poc/target-native/doc/search.index/24af4ec98e1b.js delete mode 100644 network-poc/target-native/doc/search.index/24cb0c70471d.js delete mode 100644 network-poc/target-native/doc/search.index/24f63b481cf4.js delete mode 100644 network-poc/target-native/doc/search.index/254184fccb92.js delete mode 100644 network-poc/target-native/doc/search.index/25f1e3695043.js delete mode 100644 network-poc/target-native/doc/search.index/26f60a8ea4c7.js delete mode 100644 network-poc/target-native/doc/search.index/270775f48e8c.js delete mode 100644 network-poc/target-native/doc/search.index/274e2666d1e6.js delete mode 100644 network-poc/target-native/doc/search.index/27575a2cee93.js delete mode 100644 network-poc/target-native/doc/search.index/276eef4e1b81.js delete mode 100644 network-poc/target-native/doc/search.index/278b50aa0e99.js delete mode 100644 network-poc/target-native/doc/search.index/297e1c3d3b20.js delete mode 100644 network-poc/target-native/doc/search.index/29be22429ffd.js delete mode 100644 network-poc/target-native/doc/search.index/29c690c97dbb.js delete mode 100644 network-poc/target-native/doc/search.index/2acf58b62fab.js delete mode 100644 network-poc/target-native/doc/search.index/2aed659a605b.js delete mode 100644 network-poc/target-native/doc/search.index/2bb7f2aaa577.js delete mode 100644 network-poc/target-native/doc/search.index/2bdebfdf543b.js delete mode 100644 network-poc/target-native/doc/search.index/2d527ffd29bb.js delete mode 100644 network-poc/target-native/doc/search.index/2e66cd7ed693.js delete mode 100644 network-poc/target-native/doc/search.index/2efb36095f25.js delete mode 100644 network-poc/target-native/doc/search.index/306d1be86d85.js delete mode 100644 network-poc/target-native/doc/search.index/30ebce22a15f.js delete mode 100644 network-poc/target-native/doc/search.index/3123ac88cc46.js delete mode 100644 network-poc/target-native/doc/search.index/316053b60392.js delete mode 100644 network-poc/target-native/doc/search.index/317084c7e6dc.js delete mode 100644 network-poc/target-native/doc/search.index/3207bd54b2e8.js delete mode 100644 network-poc/target-native/doc/search.index/329e3ff2a85e.js delete mode 100644 network-poc/target-native/doc/search.index/3324e6697d41.js delete mode 100644 network-poc/target-native/doc/search.index/333c7cf9bfa0.js delete mode 100644 network-poc/target-native/doc/search.index/33a27a42c896.js delete mode 100644 network-poc/target-native/doc/search.index/33b3d56f97b3.js delete mode 100644 network-poc/target-native/doc/search.index/33e72e98225b.js delete mode 100644 network-poc/target-native/doc/search.index/34857f43a5d8.js delete mode 100644 network-poc/target-native/doc/search.index/3608b2fd20ee.js delete mode 100644 network-poc/target-native/doc/search.index/365ab838adf8.js delete mode 100644 network-poc/target-native/doc/search.index/3682e5b04ba7.js delete mode 100644 network-poc/target-native/doc/search.index/376d31d2e492.js delete mode 100644 network-poc/target-native/doc/search.index/377023998328.js delete mode 100644 network-poc/target-native/doc/search.index/3788c5bf57d2.js delete mode 100644 network-poc/target-native/doc/search.index/382df4b549c7.js delete mode 100644 network-poc/target-native/doc/search.index/387b9550e397.js delete mode 100644 network-poc/target-native/doc/search.index/396221db8836.js delete mode 100644 network-poc/target-native/doc/search.index/3c46588b5040.js delete mode 100644 network-poc/target-native/doc/search.index/3cbe383ed573.js delete mode 100644 network-poc/target-native/doc/search.index/3d8c16c6cf6f.js delete mode 100644 network-poc/target-native/doc/search.index/3da1e2de7263.js delete mode 100644 network-poc/target-native/doc/search.index/3e212209b944.js delete mode 100644 network-poc/target-native/doc/search.index/3e9ae6307edd.js delete mode 100644 network-poc/target-native/doc/search.index/4028f84ee77a.js delete mode 100644 network-poc/target-native/doc/search.index/40639a3101db.js delete mode 100644 network-poc/target-native/doc/search.index/406631b9a140.js delete mode 100644 network-poc/target-native/doc/search.index/40d38a76b871.js delete mode 100644 network-poc/target-native/doc/search.index/410ff111108b.js delete mode 100644 network-poc/target-native/doc/search.index/413a653533f9.js delete mode 100644 network-poc/target-native/doc/search.index/41b6f0375656.js delete mode 100644 network-poc/target-native/doc/search.index/434e037108e7.js delete mode 100644 network-poc/target-native/doc/search.index/437311e3ea93.js delete mode 100644 network-poc/target-native/doc/search.index/43cbc5f05b91.js delete mode 100644 network-poc/target-native/doc/search.index/43d09e8849bb.js delete mode 100644 network-poc/target-native/doc/search.index/449547cb4fff.js delete mode 100644 network-poc/target-native/doc/search.index/4518efb00318.js delete mode 100644 network-poc/target-native/doc/search.index/456d2c09c8bb.js delete mode 100644 network-poc/target-native/doc/search.index/45990a08d019.js delete mode 100644 network-poc/target-native/doc/search.index/45e3ab4cf4cf.js delete mode 100644 network-poc/target-native/doc/search.index/4762ba6526c8.js delete mode 100644 network-poc/target-native/doc/search.index/4762eae11686.js delete mode 100644 network-poc/target-native/doc/search.index/47b66201c534.js delete mode 100644 network-poc/target-native/doc/search.index/47de24f6ff68.js delete mode 100644 network-poc/target-native/doc/search.index/48081f5eced8.js delete mode 100644 network-poc/target-native/doc/search.index/490fbcb5cbd6.js delete mode 100644 network-poc/target-native/doc/search.index/49153af6987a.js delete mode 100644 network-poc/target-native/doc/search.index/491790d15ccb.js delete mode 100644 network-poc/target-native/doc/search.index/4931248d5f3f.js delete mode 100644 network-poc/target-native/doc/search.index/4a3b81c64edf.js delete mode 100644 network-poc/target-native/doc/search.index/4b9d57a648ea.js delete mode 100644 network-poc/target-native/doc/search.index/4c3f6bc47e96.js delete mode 100644 network-poc/target-native/doc/search.index/4c7ad6c10c33.js delete mode 100644 network-poc/target-native/doc/search.index/4c8aa4a52059.js delete mode 100644 network-poc/target-native/doc/search.index/4e2b0ab46977.js delete mode 100644 network-poc/target-native/doc/search.index/509cf8343e6d.js delete mode 100644 network-poc/target-native/doc/search.index/51b8d9062d5b.js delete mode 100644 network-poc/target-native/doc/search.index/526c6ebc3313.js delete mode 100644 network-poc/target-native/doc/search.index/527442dceceb.js delete mode 100644 network-poc/target-native/doc/search.index/52d2391c3cae.js delete mode 100644 network-poc/target-native/doc/search.index/533615f72076.js delete mode 100644 network-poc/target-native/doc/search.index/5355d4d4d3f5.js delete mode 100644 network-poc/target-native/doc/search.index/549fe3550675.js delete mode 100644 network-poc/target-native/doc/search.index/54b02e88aa16.js delete mode 100644 network-poc/target-native/doc/search.index/573692dc3ca6.js delete mode 100644 network-poc/target-native/doc/search.index/589ffc464450.js delete mode 100644 network-poc/target-native/doc/search.index/59220caa0e5f.js delete mode 100644 network-poc/target-native/doc/search.index/59527e38c910.js delete mode 100644 network-poc/target-native/doc/search.index/59647c6601c9.js delete mode 100644 network-poc/target-native/doc/search.index/59d858393af0.js delete mode 100644 network-poc/target-native/doc/search.index/5a49c1538a88.js delete mode 100644 network-poc/target-native/doc/search.index/5ac9088baf65.js delete mode 100644 network-poc/target-native/doc/search.index/5b13df19345a.js delete mode 100644 network-poc/target-native/doc/search.index/5d5ac8534025.js delete mode 100644 network-poc/target-native/doc/search.index/5d6fa22ee47d.js delete mode 100644 network-poc/target-native/doc/search.index/5d7da26fa217.js delete mode 100644 network-poc/target-native/doc/search.index/5e37b7179ebb.js delete mode 100644 network-poc/target-native/doc/search.index/5f58eeef92de.js delete mode 100644 network-poc/target-native/doc/search.index/61127d3c2ee5.js delete mode 100644 network-poc/target-native/doc/search.index/61629ba95236.js delete mode 100644 network-poc/target-native/doc/search.index/61c05892cebc.js delete mode 100644 network-poc/target-native/doc/search.index/624a8171324d.js delete mode 100644 network-poc/target-native/doc/search.index/625586c467fb.js delete mode 100644 network-poc/target-native/doc/search.index/626daa1be4c2.js delete mode 100644 network-poc/target-native/doc/search.index/630b743c04ca.js delete mode 100644 network-poc/target-native/doc/search.index/654dbeebbfe6.js delete mode 100644 network-poc/target-native/doc/search.index/65825bc6a4c1.js delete mode 100644 network-poc/target-native/doc/search.index/65bb79da5bec.js delete mode 100644 network-poc/target-native/doc/search.index/65cb2be7c063.js delete mode 100644 network-poc/target-native/doc/search.index/65ce0b321fad.js delete mode 100644 network-poc/target-native/doc/search.index/66d2cde033cf.js delete mode 100644 network-poc/target-native/doc/search.index/66d74e010088.js delete mode 100644 network-poc/target-native/doc/search.index/66fb8d247675.js delete mode 100644 network-poc/target-native/doc/search.index/67496f5d1117.js delete mode 100644 network-poc/target-native/doc/search.index/677357205927.js delete mode 100644 network-poc/target-native/doc/search.index/67efd5f73529.js delete mode 100644 network-poc/target-native/doc/search.index/692ebfd32aa0.js delete mode 100644 network-poc/target-native/doc/search.index/698f7ff669b2.js delete mode 100644 network-poc/target-native/doc/search.index/69c0ac84e1ca.js delete mode 100644 network-poc/target-native/doc/search.index/6af24fbf6dff.js delete mode 100644 network-poc/target-native/doc/search.index/6b1ea7870354.js delete mode 100644 network-poc/target-native/doc/search.index/6b5c8ad8f0ec.js delete mode 100644 network-poc/target-native/doc/search.index/6c023216f882.js delete mode 100644 network-poc/target-native/doc/search.index/6c49458364a2.js delete mode 100644 network-poc/target-native/doc/search.index/6d03d2ab67a3.js delete mode 100644 network-poc/target-native/doc/search.index/6d9eec2ba2da.js delete mode 100644 network-poc/target-native/doc/search.index/6da659281962.js delete mode 100644 network-poc/target-native/doc/search.index/6f2d8426fc82.js delete mode 100644 network-poc/target-native/doc/search.index/6f997431b3b6.js delete mode 100644 network-poc/target-native/doc/search.index/6fb80132df86.js delete mode 100644 network-poc/target-native/doc/search.index/724b0ae7a9e9.js delete mode 100644 network-poc/target-native/doc/search.index/734dbb06f35b.js delete mode 100644 network-poc/target-native/doc/search.index/747f70bf39d2.js delete mode 100644 network-poc/target-native/doc/search.index/7582f9ef2362.js delete mode 100644 network-poc/target-native/doc/search.index/763a52e41447.js delete mode 100644 network-poc/target-native/doc/search.index/7675e889d35e.js delete mode 100644 network-poc/target-native/doc/search.index/76ce112e7bfe.js delete mode 100644 network-poc/target-native/doc/search.index/76e927cfdbad.js delete mode 100644 network-poc/target-native/doc/search.index/772250ab033f.js delete mode 100644 network-poc/target-native/doc/search.index/77cd7efc9862.js delete mode 100644 network-poc/target-native/doc/search.index/79c7334fa59b.js delete mode 100644 network-poc/target-native/doc/search.index/7a605c9071a4.js delete mode 100644 network-poc/target-native/doc/search.index/7a90ced6b90a.js delete mode 100644 network-poc/target-native/doc/search.index/7b28a6b7ad3b.js delete mode 100644 network-poc/target-native/doc/search.index/7c60059e91cb.js delete mode 100644 network-poc/target-native/doc/search.index/7c667988149a.js delete mode 100644 network-poc/target-native/doc/search.index/7db221802359.js delete mode 100644 network-poc/target-native/doc/search.index/7e5616080d42.js delete mode 100644 network-poc/target-native/doc/search.index/7eb4b53d3b0d.js delete mode 100644 network-poc/target-native/doc/search.index/7fddf759d90c.js delete mode 100644 network-poc/target-native/doc/search.index/7ff3c9c0ece2.js delete mode 100644 network-poc/target-native/doc/search.index/alias/a762150c532c.js delete mode 100644 network-poc/target-native/doc/search.index/crateNames/d1aefd4adb86.js delete mode 100644 network-poc/target-native/doc/search.index/desc/17136882dd08.js delete mode 100644 network-poc/target-native/doc/search.index/entry/66a1183eb08f.js delete mode 100644 network-poc/target-native/doc/search.index/entry/eec2ce8864ff.js delete mode 100644 network-poc/target-native/doc/search.index/function/43e2566e31c1.js delete mode 100644 network-poc/target-native/doc/search.index/generic_inverted_index/7bc61006812d.js delete mode 100644 network-poc/target-native/doc/search.index/name/f5d573e6cbf7.js delete mode 100644 network-poc/target-native/doc/search.index/normalizedName/fbbf00e58a46.js delete mode 100644 network-poc/target-native/doc/search.index/path/b9a82bfdb43f.js delete mode 100644 network-poc/target-native/doc/search.index/root.js delete mode 100644 network-poc/target-native/doc/search.index/type/8c8b94482112.js delete mode 100644 network-poc/target-native/doc/settings.html delete mode 100644 network-poc/target-native/doc/src-files.js delete mode 100644 network-poc/target-native/doc/src/candle_transformers/generation/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/lib.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/based.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/beit.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/bert.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/bigcode.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/blip.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/blip_text.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/chatglm.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/chinese_clip/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/chinese_clip/text_model.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/chinese_clip/vision_model.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/clip/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/clip/text_model.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/clip/vision_model.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/codegeex4_9b.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/colpali.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/convmixer.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/convnext.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/dac.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/debertav2.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/deepseek2.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/depth_anything_v2.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/dinov2.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/dinov2reg4.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/distilbert.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/efficientnet.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/efficientvit.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/encodec.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/eva2.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/falcon.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/fastvit.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/flux/autoencoder.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/flux/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/flux/model.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/flux/quantized_model.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/flux/sampling.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/gemma.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/gemma2.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/gemma3.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/glm4.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/granite.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/helium.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/hiera.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/jina_bert.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/llama.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/llama2_c.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/llama2_c_weights.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/llava/config.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/llava/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/llava/utils.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mamba.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/marian.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/metavoice.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mimi/conv.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mimi/encodec.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mimi/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mimi/quantization.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mimi/seanet.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mimi/transformer.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mistral.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mixformer.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mixtral.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mmdit/blocks.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mmdit/embedding.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mmdit/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mmdit/model.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mmdit/projections.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mobileclip.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mobilenetv4.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mobileone.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/modernbert.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/moondream.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/mpt.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/nvembed_v2/embedding.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/nvembed_v2/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/nvembed_v2/model.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/olmo.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/openclip/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/openclip/text_model.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/paligemma.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/parler_tts.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/persimmon.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/phi.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/phi3.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/pixtral/llava.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/pixtral/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/pixtral/vision_model.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_blip.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_blip_text.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_llama.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_llama2_c.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_metavoice.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_mistral.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_mixformer.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_moondream.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_mpt.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_phi.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_phi3.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_qwen2.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_recurrent_gemma.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_rwkv_v5.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_rwkv_v6.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_stable_lm.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/quantized_t5.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/qwen2.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/qwen2_moe.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/recurrent_gemma.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/repvgg.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/resnet.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/rwkv_v5.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/rwkv_v6.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/segformer.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/segment_anything/image_encoder.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/segment_anything/mask_decoder.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/segment_anything/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/segment_anything/prompt_encoder.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/segment_anything/sam.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/segment_anything/tiny_vit.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/segment_anything/transformer.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/siglip.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/attention.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/clip.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/ddim.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/ddpm.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/embeddings.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/euler_ancestral_discrete.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/resnet.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/schedulers.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/unet_2d.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/unet_2d_blocks.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/uni_pc.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/utils.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/vae.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stable_lm.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/starcoder2.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/stella_en_v5.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/t5.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/trocr.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/vgg.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/vit.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/whisper/audio.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/whisper/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/whisper/model.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/whisper/quantized_model.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/with_tracing.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/attention_processor.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/common.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/ddpm.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/diffnext.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/paella_vq.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/prior.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/xlm_roberta.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/models/yi.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/object_detection.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/pipelines/mod.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/pipelines/text_generation.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/quantized_nn.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/quantized_var_builder.rs.html delete mode 100644 network-poc/target-native/doc/src/candle_transformers/utils.rs.html delete mode 100644 network-poc/target-native/doc/static.files/COPYRIGHT-7fb11f4e.txt delete mode 100644 network-poc/target-native/doc/static.files/FiraMono-Medium-86f75c8c.woff2 delete mode 100644 network-poc/target-native/doc/static.files/FiraMono-Regular-87c26294.woff2 delete mode 100644 network-poc/target-native/doc/static.files/FiraSans-Italic-81dc35de.woff2 delete mode 100644 network-poc/target-native/doc/static.files/FiraSans-LICENSE-05ab6dbd.txt delete mode 100644 network-poc/target-native/doc/static.files/FiraSans-Medium-e1aa3f0a.woff2 delete mode 100644 network-poc/target-native/doc/static.files/FiraSans-MediumItalic-ccf7e434.woff2 delete mode 100644 network-poc/target-native/doc/static.files/FiraSans-Regular-0fe48ade.woff2 delete mode 100644 network-poc/target-native/doc/static.files/LICENSE-APACHE-a60eea81.txt delete mode 100644 network-poc/target-native/doc/static.files/LICENSE-MIT-23f18e03.txt delete mode 100644 network-poc/target-native/doc/static.files/NanumBarunGothic-13b3dcba.ttf.woff2 delete mode 100644 network-poc/target-native/doc/static.files/NanumBarunGothic-LICENSE-a37d393b.txt delete mode 100644 network-poc/target-native/doc/static.files/SourceCodePro-It-fc8b9304.ttf.woff2 delete mode 100644 network-poc/target-native/doc/static.files/SourceCodePro-LICENSE-67f54ca7.txt delete mode 100644 network-poc/target-native/doc/static.files/SourceCodePro-Regular-8badfe75.ttf.woff2 delete mode 100644 network-poc/target-native/doc/static.files/SourceCodePro-Semibold-aa29a496.ttf.woff2 delete mode 100644 network-poc/target-native/doc/static.files/SourceSerif4-Bold-6d4fd4c0.ttf.woff2 delete mode 100644 network-poc/target-native/doc/static.files/SourceSerif4-It-ca3b17ed.ttf.woff2 delete mode 100644 network-poc/target-native/doc/static.files/SourceSerif4-LICENSE-a2cfd9d5.md delete mode 100644 network-poc/target-native/doc/static.files/SourceSerif4-Regular-6b053e98.ttf.woff2 delete mode 100644 network-poc/target-native/doc/static.files/SourceSerif4-Semibold-457a13ac.ttf.woff2 delete mode 100644 network-poc/target-native/doc/static.files/favicon-044be391.svg delete mode 100644 network-poc/target-native/doc/static.files/favicon-32x32-eab170b8.png delete mode 100644 network-poc/target-native/doc/static.files/main-7bab91a1.js delete mode 100644 network-poc/target-native/doc/static.files/normalize-9960930a.css delete mode 100644 network-poc/target-native/doc/static.files/noscript-ffcac47a.css delete mode 100644 network-poc/target-native/doc/static.files/rust-logo-9a9549ea.svg delete mode 100644 network-poc/target-native/doc/static.files/rustdoc-77263533.css delete mode 100644 network-poc/target-native/doc/static.files/scrape-examples-2bbcccac.js delete mode 100644 network-poc/target-native/doc/static.files/search-9e2438ea.js delete mode 100644 network-poc/target-native/doc/static.files/settings-c38705f0.js delete mode 100644 network-poc/target-native/doc/static.files/src-script-813739b1.js delete mode 100644 network-poc/target-native/doc/static.files/storage-e2aeef58.js delete mode 100644 network-poc/target-native/doc/static.files/stringdex-b897f86f.js delete mode 100644 network-poc/target-native/doc/trait.impl/candle_core/streaming/trait.StreamingModule.js delete mode 100644 network-poc/target-native/doc/trait.impl/candle_core/trait.Module.js delete mode 100644 network-poc/target-native/doc/trait.impl/candle_core/trait.ModuleT.js delete mode 100644 network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.BincountOp.js delete mode 100644 network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.NonZeroOp.js delete mode 100644 network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.SplitOp.js delete mode 100644 network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.TopKLastDimOp.js delete mode 100644 network-poc/target-native/doc/trait.impl/candle_transformers/models/flux/trait.WithForward.js delete mode 100644 network-poc/target-native/doc/trait.impl/candle_transformers/models/mmdit/blocks/trait.JointBlock.js delete mode 100644 network-poc/target-native/doc/trait.impl/candle_transformers/models/stable_diffusion/schedulers/trait.Scheduler.js delete mode 100644 network-poc/target-native/doc/trait.impl/candle_transformers/models/stable_diffusion/schedulers/trait.SchedulerConfig.js delete mode 100644 network-poc/target-native/doc/trait.impl/candle_transformers/models/whisper/audio/trait.Float.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/clone/trait.Clone.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/cmp/trait.Eq.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/cmp/trait.PartialEq.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/convert/trait.From.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/default/trait.Default.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/fmt/trait.Debug.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/hash/trait.Hash.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/marker/trait.Copy.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/marker/trait.Freeze.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/marker/trait.Send.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/marker/trait.StructuralPartialEq.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/marker/trait.Sync.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/marker/trait.Unpin.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/marker/trait.UnsafeUnpin.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js delete mode 100644 network-poc/target-native/doc/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js delete mode 100644 network-poc/target-native/doc/trait.impl/serde_core/de/trait.Deserialize.js delete mode 100644 network-poc/target-native/doc/trait.impl/serde_core/ser/trait.Serialize.js delete mode 100644 network-poc/target-native/doc/type.impl/candle_transformers/models/blip/struct.Config.js delete mode 100644 network-poc/target-native/doc/type.impl/candle_transformers/models/blip/struct.VisionConfig.js delete mode 100644 network-poc/target-native/doc/type.impl/candle_transformers/models/blip_text/struct.Config.js delete mode 100644 network-poc/target-native/doc/type.impl/std/collections/hash/map/struct.HashMap.js diff --git a/network-poc/target-native/.rustc_info.json b/network-poc/target-native/.rustc_info.json deleted file mode 100644 index d622a1c..0000000 --- a/network-poc/target-native/.rustc_info.json +++ /dev/null @@ -1 +0,0 @@ -{"rustc_fingerprint":15841952146704291179,"outputs":{"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.94.1 (e408947bf 2026-03-25)\nbinary: rustc\ncommit-hash: e408947bfd200af42db322daf0fadfe7e26d3bd1\ncommit-date: 2026-03-25\nhost: x86_64-unknown-linux-gnu\nrelease: 1.94.1\nLLVM version: 21.1.8\n","stderr":""},"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/jaakko/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""}},"successes":{}} \ No newline at end of file diff --git a/network-poc/target-native/.rustdoc_fingerprint.json b/network-poc/target-native/.rustdoc_fingerprint.json deleted file mode 100644 index 19eb752..0000000 --- a/network-poc/target-native/.rustdoc_fingerprint.json +++ /dev/null @@ -1 +0,0 @@ -{"rustc_vv":"rustc 1.94.1 (e408947bf 2026-03-25)\nbinary: rustc\ncommit-hash: e408947bfd200af42db322daf0fadfe7e26d3bd1\ncommit-date: 2026-03-25\nhost: x86_64-unknown-linux-gnu\nrelease: 1.94.1\nLLVM version: 21.1.8\n"} \ No newline at end of file diff --git a/network-poc/target-native/CACHEDIR.TAG b/network-poc/target-native/CACHEDIR.TAG deleted file mode 100644 index 20d7c31..0000000 --- a/network-poc/target-native/CACHEDIR.TAG +++ /dev/null @@ -1,3 +0,0 @@ -Signature: 8a477f597d28d172789f06886806bc55 -# This file is a cache directory tag created by cargo. -# For information about cache directory tags see https://bford.info/cachedir/ diff --git a/network-poc/target-native/doc/.lock b/network-poc/target-native/doc/.lock deleted file mode 100644 index e69de29..0000000 diff --git a/network-poc/target-native/doc/candle_transformers/all.html b/network-poc/target-native/doc/candle_transformers/all.html deleted file mode 100644 index a96f614..0000000 --- a/network-poc/target-native/doc/candle_transformers/all.html +++ /dev/null @@ -1 +0,0 @@ -List of all items in this crate

All

List of all items

Structs

Enums

Traits

Functions

Type Aliases

Constants

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/generation/enum.Sampling.html b/network-poc/target-native/doc/candle_transformers/generation/enum.Sampling.html deleted file mode 100644 index e1f46c6..0000000 --- a/network-poc/target-native/doc/candle_transformers/generation/enum.Sampling.html +++ /dev/null @@ -1,46 +0,0 @@ -Sampling in candle_transformers::generation - Rust

Sampling

Enum Sampling 

Source
pub enum Sampling {
-    ArgMax,
-    All {
-        temperature: f64,
-    },
-    TopK {
-        k: usize,
-        temperature: f64,
-    },
-    TopP {
-        p: f64,
-        temperature: f64,
-    },
-    TopKThenTopP {
-        k: usize,
-        p: f64,
-        temperature: f64,
-    },
-}

Variants§

§

ArgMax

§

All

Fields

§temperature: f64
§

TopK

Fields

§temperature: f64
§

TopP

Fields

§temperature: f64
§

TopKThenTopP

Fields

§temperature: f64

Trait Implementations§

Source§

impl Clone for Sampling

Source§

fn clone(&self) -> Sampling

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Sampling

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Sampling

Source§

fn eq(&self, other: &Sampling) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Sampling

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/generation/index.html b/network-poc/target-native/doc/candle_transformers/generation/index.html deleted file mode 100644 index 61737e2..0000000 --- a/network-poc/target-native/doc/candle_transformers/generation/index.html +++ /dev/null @@ -1,5 +0,0 @@ -candle_transformers::generation - Rust

Module generation

Module generation 

Source
Expand description

Logit Processing and Sampling

-

Functionality for modeling sampling strategies and logits processing in text generation -with support for temperature-based sampling, top-k filtering, nucleus sampling (top-p), -and combinations thereof.

-

Structs§

LogitsProcessor

Enums§

Sampling
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/generation/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/generation/sidebar-items.js deleted file mode 100644 index c9edb52..0000000 --- a/network-poc/target-native/doc/candle_transformers/generation/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["Sampling"],"struct":["LogitsProcessor"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/generation/struct.LogitsProcessor.html b/network-poc/target-native/doc/candle_transformers/generation/struct.LogitsProcessor.html deleted file mode 100644 index 7885a0d..0000000 --- a/network-poc/target-native/doc/candle_transformers/generation/struct.LogitsProcessor.html +++ /dev/null @@ -1,29 +0,0 @@ -LogitsProcessor in candle_transformers::generation - Rust

LogitsProcessor

Struct LogitsProcessor 

Source
pub struct LogitsProcessor { /* private fields */ }

Implementations§

Source§

impl LogitsProcessor

Source

pub fn from_sampling(seed: u64, sampling: Sampling) -> Self

Source

pub fn new(seed: u64, temperature: Option<f64>, top_p: Option<f64>) -> Self

Source

pub fn sample(&mut self, logits: &Tensor) -> Result<u32>

Source

pub fn sample_f( - &mut self, - logits: &Tensor, - f: impl FnOnce(&mut [f32]), -) -> Result<u32>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/index.html b/network-poc/target-native/doc/candle_transformers/index.html deleted file mode 100644 index f95569b..0000000 --- a/network-poc/target-native/doc/candle_transformers/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers - Rust

Crate candle_transformers

Crate candle_transformers 

Source

Modules§

generation
Logit Processing and Sampling
models
Candle implementations for various deep learning models
object_detection
Bounding Boxes and Intersection
pipelines
quantized_nn
Utilities for quanitized network layers
quantized_var_builder
Varbuilder for Loading gguf files
utils
Apply penalty and repeat_kv
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/based/index.html b/network-poc/target-native/doc/candle_transformers/models/based/index.html deleted file mode 100644 index 7566481..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/based/index.html +++ /dev/null @@ -1,8 +0,0 @@ -candle_transformers::models::based - Rust

Module based

Module based 

Source
Expand description

Based from the Stanford Hazy Research group.

-

See “Simple linear attention language models balance the recall-throughput tradeoff”, Arora et al. 2024

- -

Structs§

Config
LinearAttentionConfig
LinearAttentionFeatureMapConfig
Model
SlidingWindowAttentionConfig
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/based/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/based/sidebar-items.js deleted file mode 100644 index 220b1bd..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/based/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","LinearAttentionConfig","LinearAttentionFeatureMapConfig","Model","SlidingWindowAttentionConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/based/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/based/struct.Config.html deleted file mode 100644 index 7f92f6a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/based/struct.Config.html +++ /dev/null @@ -1,29 +0,0 @@ -Config in candle_transformers::models::based - Rust

Config

Struct Config 

Source
pub struct Config { /* private fields */ }

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/based/struct.LinearAttentionConfig.html b/network-poc/target-native/doc/candle_transformers/models/based/struct.LinearAttentionConfig.html deleted file mode 100644 index a780fc4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/based/struct.LinearAttentionConfig.html +++ /dev/null @@ -1,29 +0,0 @@ -LinearAttentionConfig in candle_transformers::models::based - Rust

LinearAttentionConfig

Struct LinearAttentionConfig 

Source
pub struct LinearAttentionConfig { /* private fields */ }

Trait Implementations§

Source§

impl Clone for LinearAttentionConfig

Source§

fn clone(&self) -> LinearAttentionConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LinearAttentionConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for LinearAttentionConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/based/struct.LinearAttentionFeatureMapConfig.html b/network-poc/target-native/doc/candle_transformers/models/based/struct.LinearAttentionFeatureMapConfig.html deleted file mode 100644 index 90159c8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/based/struct.LinearAttentionFeatureMapConfig.html +++ /dev/null @@ -1,29 +0,0 @@ -LinearAttentionFeatureMapConfig in candle_transformers::models::based - Rust

LinearAttentionFeatureMapConfig

Struct LinearAttentionFeatureMapConfig 

Source
pub struct LinearAttentionFeatureMapConfig { /* private fields */ }

Trait Implementations§

Source§

impl Clone for LinearAttentionFeatureMapConfig

Source§

fn clone(&self) -> LinearAttentionFeatureMapConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LinearAttentionFeatureMapConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for LinearAttentionFeatureMapConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/based/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/based/struct.Model.html deleted file mode 100644 index 2c3639a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/based/struct.Model.html +++ /dev/null @@ -1,31 +0,0 @@ -Model in candle_transformers::models::based - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/based/struct.SlidingWindowAttentionConfig.html b/network-poc/target-native/doc/candle_transformers/models/based/struct.SlidingWindowAttentionConfig.html deleted file mode 100644 index c213e7c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/based/struct.SlidingWindowAttentionConfig.html +++ /dev/null @@ -1,29 +0,0 @@ -SlidingWindowAttentionConfig in candle_transformers::models::based - Rust

SlidingWindowAttentionConfig

Struct SlidingWindowAttentionConfig 

Source
pub struct SlidingWindowAttentionConfig { /* private fields */ }

Trait Implementations§

Source§

impl Clone for SlidingWindowAttentionConfig

Source§

fn clone(&self) -> SlidingWindowAttentionConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SlidingWindowAttentionConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for SlidingWindowAttentionConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/beit/fn.vit_base.html b/network-poc/target-native/doc/candle_transformers/models/beit/fn.vit_base.html deleted file mode 100644 index 7b55f4d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/beit/fn.vit_base.html +++ /dev/null @@ -1 +0,0 @@ -vit_base in candle_transformers::models::beit - Rust

vit_base

Function vit_base 

Source
pub fn vit_base(vb: VarBuilder<'_>) -> Result<BeitVisionTransformer>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/beit/fn.vit_large.html b/network-poc/target-native/doc/candle_transformers/models/beit/fn.vit_large.html deleted file mode 100644 index 24fb9d0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/beit/fn.vit_large.html +++ /dev/null @@ -1 +0,0 @@ -vit_large in candle_transformers::models::beit - Rust

vit_large

Function vit_large 

Source
pub fn vit_large(vb: VarBuilder<'_>) -> Result<BeitVisionTransformer>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/beit/index.html b/network-poc/target-native/doc/candle_transformers/models/beit/index.html deleted file mode 100644 index e70c815..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/beit/index.html +++ /dev/null @@ -1,7 +0,0 @@ -candle_transformers::models::beit - Rust

Module beit

Module beit 

Source
Expand description

Based on the BEIT vision-language model.

-

See “BEIT: BERT Pre-Training of Image Transformers”, Bao et al. 2021

- -

Structs§

BeitVisionTransformer

Functions§

vit_base
vit_large
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/beit/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/beit/sidebar-items.js deleted file mode 100644 index 52de07c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/beit/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["vit_base","vit_large"],"struct":["BeitVisionTransformer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/beit/struct.BeitVisionTransformer.html b/network-poc/target-native/doc/candle_transformers/models/beit/struct.BeitVisionTransformer.html deleted file mode 100644 index 5dc221e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/beit/struct.BeitVisionTransformer.html +++ /dev/null @@ -1,38 +0,0 @@ -BeitVisionTransformer in candle_transformers::models::beit - Rust

BeitVisionTransformer

Struct BeitVisionTransformer 

Source
pub struct BeitVisionTransformer { /* private fields */ }

Implementations§

Source§

impl BeitVisionTransformer

Source

pub fn new( - vb: VarBuilder<'_>, - depth: usize, - embed_dim: usize, - num_heads: usize, -) -> Result<Self>

Source

pub fn get_intermediate_layers( - &self, - xs: &Tensor, - blocks_to_take: &[usize], - reshape: bool, - return_class_token: bool, - norm: bool, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for BeitVisionTransformer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for BeitVisionTransformer

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bert/constant.DTYPE.html b/network-poc/target-native/doc/candle_transformers/models/bert/constant.DTYPE.html deleted file mode 100644 index 17c52a0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bert/constant.DTYPE.html +++ /dev/null @@ -1 +0,0 @@ -DTYPE in candle_transformers::models::bert - Rust

DTYPE

Constant DTYPE 

Source
pub const DTYPE: DType;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bert/enum.HiddenAct.html b/network-poc/target-native/doc/candle_transformers/models/bert/enum.HiddenAct.html deleted file mode 100644 index 2b121cc..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bert/enum.HiddenAct.html +++ /dev/null @@ -1,40 +0,0 @@ -HiddenAct in candle_transformers::models::bert - Rust

HiddenAct

Enum HiddenAct 

Source
pub enum HiddenAct {
-    Gelu,
-    GeluApproximate,
-    Relu,
-}

Variants§

§

Gelu

§

GeluApproximate

§

Relu

Trait Implementations§

Source§

impl Clone for HiddenAct

Source§

fn clone(&self) -> HiddenAct

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for HiddenAct

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for HiddenAct

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for HiddenAct

Source§

fn eq(&self, other: &HiddenAct) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for HiddenAct

Source§

impl Eq for HiddenAct

Source§

impl StructuralPartialEq for HiddenAct

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bert/enum.PositionEmbeddingType.html b/network-poc/target-native/doc/candle_transformers/models/bert/enum.PositionEmbeddingType.html deleted file mode 100644 index 11d802f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bert/enum.PositionEmbeddingType.html +++ /dev/null @@ -1,38 +0,0 @@ -PositionEmbeddingType in candle_transformers::models::bert - Rust

PositionEmbeddingType

Enum PositionEmbeddingType 

Source
pub enum PositionEmbeddingType {
-    Absolute,
-}

Variants§

§

Absolute

Trait Implementations§

Source§

impl Clone for PositionEmbeddingType

Source§

fn clone(&self) -> PositionEmbeddingType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PositionEmbeddingType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for PositionEmbeddingType

Source§

fn default() -> PositionEmbeddingType

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for PositionEmbeddingType

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for PositionEmbeddingType

Source§

fn eq(&self, other: &PositionEmbeddingType) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for PositionEmbeddingType

Source§

impl Eq for PositionEmbeddingType

Source§

impl StructuralPartialEq for PositionEmbeddingType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bert/index.html b/network-poc/target-native/doc/candle_transformers/models/bert/index.html deleted file mode 100644 index 7c64ada..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bert/index.html +++ /dev/null @@ -1,10 +0,0 @@ -candle_transformers::models::bert - Rust

Module bert

Module bert 

Source
Expand description

BERT (Bidirectional Encoder Representations from Transformers)

-

Bert is a general large language model that can be used for various language tasks:

-
    -
  • Compute sentence embeddings for a prompt.
  • -
  • Compute similarities between a set of sentences.
  • -
  • Arxiv “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”
  • -
  • Upstream Github repo.
  • -
  • See bert in candle-examples for runnable code
  • -
-

Structs§

BertEncoder
BertForMaskedLM
BertLMPredictionHead
BertLayer
BertModel
BertOnlyMLMHead
Config

Enums§

HiddenAct
PositionEmbeddingType

Constants§

DTYPE
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bert/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/bert/sidebar-items.js deleted file mode 100644 index 3d534cd..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bert/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"constant":["DTYPE"],"enum":["HiddenAct","PositionEmbeddingType"],"struct":["BertEncoder","BertForMaskedLM","BertLMPredictionHead","BertLayer","BertModel","BertOnlyMLMHead","Config"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertEncoder.html b/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertEncoder.html deleted file mode 100644 index 332dffa..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertEncoder.html +++ /dev/null @@ -1,34 +0,0 @@ -BertEncoder in candle_transformers::models::bert - Rust

BertEncoder

Struct BertEncoder 

Source
pub struct BertEncoder {
-    pub layers: Vec<BertLayer>,
-    /* private fields */
-}

Fields§

§layers: Vec<BertLayer>

Implementations§

Source§

impl BertEncoder

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward( - &self, - hidden_states: &Tensor, - attention_mask: &Tensor, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for BertEncoder

Source§

fn clone(&self) -> BertEncoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertForMaskedLM.html b/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertForMaskedLM.html deleted file mode 100644 index 13d35d1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertForMaskedLM.html +++ /dev/null @@ -1,30 +0,0 @@ -BertForMaskedLM in candle_transformers::models::bert - Rust

BertForMaskedLM

Struct BertForMaskedLM 

Source
pub struct BertForMaskedLM { /* private fields */ }

Implementations§

Source§

impl BertForMaskedLM

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward( - &self, - input_ids: &Tensor, - token_type_ids: &Tensor, - attention_mask: Option<&Tensor>, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertLMPredictionHead.html b/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertLMPredictionHead.html deleted file mode 100644 index a1b54c9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertLMPredictionHead.html +++ /dev/null @@ -1,26 +0,0 @@ -BertLMPredictionHead in candle_transformers::models::bert - Rust

BertLMPredictionHead

Struct BertLMPredictionHead 

Source
pub struct BertLMPredictionHead { /* private fields */ }

Implementations§

Source§

impl BertLMPredictionHead

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Trait Implementations§

Source§

impl Module for BertLMPredictionHead

Source§

fn forward(&self, hidden_states: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertLayer.html b/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertLayer.html deleted file mode 100644 index 8ace9c6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertLayer.html +++ /dev/null @@ -1,27 +0,0 @@ -BertLayer in candle_transformers::models::bert - Rust

BertLayer

Struct BertLayer 

Source
pub struct BertLayer { /* private fields */ }

Trait Implementations§

Source§

impl Clone for BertLayer

Source§

fn clone(&self) -> BertLayer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertModel.html b/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertModel.html deleted file mode 100644 index 2ad6b63..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertModel.html +++ /dev/null @@ -1,33 +0,0 @@ -BertModel in candle_transformers::models::bert - Rust

BertModel

Struct BertModel 

Source
pub struct BertModel {
-    pub device: Device,
-    /* private fields */
-}

Fields§

§device: Device

Implementations§

Source§

impl BertModel

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward( - &self, - input_ids: &Tensor, - token_type_ids: &Tensor, - attention_mask: Option<&Tensor>, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertOnlyMLMHead.html b/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertOnlyMLMHead.html deleted file mode 100644 index 0edc4b5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bert/struct.BertOnlyMLMHead.html +++ /dev/null @@ -1,26 +0,0 @@ -BertOnlyMLMHead in candle_transformers::models::bert - Rust

BertOnlyMLMHead

Struct BertOnlyMLMHead 

Source
pub struct BertOnlyMLMHead { /* private fields */ }

Implementations§

Source§

impl BertOnlyMLMHead

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Trait Implementations§

Source§

impl Module for BertOnlyMLMHead

Source§

fn forward(&self, sequence_output: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bert/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/bert/struct.Config.html deleted file mode 100644 index 7eae6fa..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bert/struct.Config.html +++ /dev/null @@ -1,47 +0,0 @@ -Config in candle_transformers::models::bert - Rust

Config

Struct Config 

Source
pub struct Config {
Show 16 fields - pub vocab_size: usize, - pub hidden_size: usize, - pub num_hidden_layers: usize, - pub num_attention_heads: usize, - pub intermediate_size: usize, - pub hidden_act: HiddenAct, - pub hidden_dropout_prob: f64, - pub max_position_embeddings: usize, - pub type_vocab_size: usize, - pub initializer_range: f64, - pub layer_norm_eps: f64, - pub pad_token_id: usize, - pub position_embedding_type: PositionEmbeddingType, - pub use_cache: bool, - pub classifier_dropout: Option<f64>, - pub model_type: Option<String>, -
}

Fields§

§vocab_size: usize§hidden_size: usize§num_hidden_layers: usize§num_attention_heads: usize§intermediate_size: usize§hidden_act: HiddenAct§hidden_dropout_prob: f64§max_position_embeddings: usize§type_vocab_size: usize§initializer_range: f64§layer_norm_eps: f64§pad_token_id: usize§position_embedding_type: PositionEmbeddingType§use_cache: bool§classifier_dropout: Option<f64>§model_type: Option<String>

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Config

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bigcode/index.html b/network-poc/target-native/doc/candle_transformers/models/bigcode/index.html deleted file mode 100644 index 50077c4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bigcode/index.html +++ /dev/null @@ -1,17 +0,0 @@ -candle_transformers::models::bigcode - Rust

Module bigcode

Module bigcode 

Source
Expand description

BigCode implementation in Rust based on the GPT-BigCode model.

-

StarCoder/BigCode is a LLM -model specialized to code generation. The initial model was trained on 80 -programming languages. See “StarCoder: A State-of-the-Art LLM for Code”, Mukherjee et al. 2023

- -

§Running some example

cargo run --example bigcode --release -- --prompt "fn fact(n: u64) -> u64"
-
-> fn fact(n: u64) -> u64  {
->     if n == 0 {
->         1
->     } else {
->         n * fact(n - 1)
->     }
-> }

Structs§

Config
GPTBigCode
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bigcode/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/bigcode/sidebar-items.js deleted file mode 100644 index dee63cf..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bigcode/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","GPTBigCode"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bigcode/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/bigcode/struct.Config.html deleted file mode 100644 index b642288..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bigcode/struct.Config.html +++ /dev/null @@ -1,35 +0,0 @@ -Config in candle_transformers::models::bigcode - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub vocab_size: usize,
-    pub max_position_embeddings: usize,
-    pub num_hidden_layers: usize,
-    pub hidden_size: usize,
-    pub layer_norm_epsilon: f64,
-    pub n_inner: Option<usize>,
-    pub num_attention_heads: usize,
-    pub multi_query: bool,
-    pub use_cache: bool,
-}

Fields§

§vocab_size: usize§max_position_embeddings: usize§num_hidden_layers: usize§hidden_size: usize§layer_norm_epsilon: f64§n_inner: Option<usize>§num_attention_heads: usize§multi_query: bool§use_cache: bool

Implementations§

Source§

impl Config

Source

pub fn starcoder_1b() -> Self

Source

pub fn starcoder_3b() -> Self

Source

pub fn starcoder_7b() -> Self

Source

pub fn starcoder() -> Self

Trait Implementations§

Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/bigcode/struct.GPTBigCode.html b/network-poc/target-native/doc/candle_transformers/models/bigcode/struct.GPTBigCode.html deleted file mode 100644 index cb508e8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/bigcode/struct.GPTBigCode.html +++ /dev/null @@ -1,25 +0,0 @@ -GPTBigCode in candle_transformers::models::bigcode - Rust

GPTBigCode

Struct GPTBigCode 

Source
pub struct GPTBigCode { /* private fields */ }

Implementations§

Source§

impl GPTBigCode

Source

pub fn config(&self) -> &Config

Source

pub fn load(vb: VarBuilder<'_>, cfg: Config) -> Result<Self>

Source

pub fn forward(&mut self, input_ids: &Tensor, past_len: usize) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/blip/index.html b/network-poc/target-native/doc/candle_transformers/models/blip/index.html deleted file mode 100644 index c97f3f8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/blip/index.html +++ /dev/null @@ -1,9 +0,0 @@ -candle_transformers::models::blip - Rust

Module blip

Module blip 

Source
Expand description

Based on the BLIP paper from Salesforce Research.

-

The blip-image-captioning model can generate captions for an input image.

- -

Structs§

BlipForConditionalGeneration
Config
VisionConfig
VisionModel
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/blip/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/blip/sidebar-items.js deleted file mode 100644 index 6d01856..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/blip/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["BlipForConditionalGeneration","Config","VisionConfig","VisionModel"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/blip/struct.BlipForConditionalGeneration.html b/network-poc/target-native/doc/candle_transformers/models/blip/struct.BlipForConditionalGeneration.html deleted file mode 100644 index 2b241d1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/blip/struct.BlipForConditionalGeneration.html +++ /dev/null @@ -1,27 +0,0 @@ -BlipForConditionalGeneration in candle_transformers::models::blip - Rust

BlipForConditionalGeneration

Struct BlipForConditionalGeneration 

Source
pub struct BlipForConditionalGeneration { /* private fields */ }

Implementations§

Source§

impl BlipForConditionalGeneration

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn vision_model(&self) -> &VisionModel

Source

pub fn text_decoder(&mut self) -> &mut TextLMHeadModel

Source

pub fn reset_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for BlipForConditionalGeneration

Source§

fn clone(&self) -> BlipForConditionalGeneration

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for BlipForConditionalGeneration

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/blip/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/blip/struct.Config.html deleted file mode 100644 index 9b4a64f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/blip/struct.Config.html +++ /dev/null @@ -1,34 +0,0 @@ -Config in candle_transformers::models::blip - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub text_config: Config,
-    pub vision_config: VisionConfig,
-    pub projection_dim: usize,
-    pub image_text_hidden_size: usize,
-}

Fields§

§text_config: Config§vision_config: VisionConfig§projection_dim: usize§image_text_hidden_size: usize

Implementations§

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/blip/struct.VisionConfig.html b/network-poc/target-native/doc/candle_transformers/models/blip/struct.VisionConfig.html deleted file mode 100644 index 400c0d1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/blip/struct.VisionConfig.html +++ /dev/null @@ -1,39 +0,0 @@ -VisionConfig in candle_transformers::models::blip - Rust

VisionConfig

Struct VisionConfig 

Source
pub struct VisionConfig {
-    pub hidden_size: usize,
-    pub intermediate_size: usize,
-    pub projection_dim: usize,
-    pub num_hidden_layers: usize,
-    pub num_attention_heads: usize,
-    pub image_size: usize,
-    pub patch_size: usize,
-    pub hidden_act: Activation,
-    pub layer_norm_eps: f64,
-}

Fields§

§hidden_size: usize§intermediate_size: usize§projection_dim: usize§num_hidden_layers: usize§num_attention_heads: usize§image_size: usize§patch_size: usize§hidden_act: Activation§layer_norm_eps: f64

Trait Implementations§

Source§

impl Clone for VisionConfig

Source§

fn clone(&self) -> VisionConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VisionConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for VisionConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/blip/struct.VisionModel.html b/network-poc/target-native/doc/candle_transformers/models/blip/struct.VisionModel.html deleted file mode 100644 index 29c829a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/blip/struct.VisionModel.html +++ /dev/null @@ -1,28 +0,0 @@ -VisionModel in candle_transformers::models::blip - Rust

VisionModel

Struct VisionModel 

Source
pub struct VisionModel { /* private fields */ }

Trait Implementations§

Source§

impl Clone for VisionModel

Source§

fn clone(&self) -> VisionModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VisionModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for VisionModel

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/blip_text/index.html b/network-poc/target-native/doc/candle_transformers/models/blip_text/index.html deleted file mode 100644 index e39372e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/blip_text/index.html +++ /dev/null @@ -1,19 +0,0 @@ -candle_transformers::models::blip_text - Rust

Module blip_text

Module blip_text 

Source
Expand description

Implementation of BLIP text encoder/decoder.

- -

Structs§

Config
TextLMHeadModel
TextPooler
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/blip_text/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/blip_text/sidebar-items.js deleted file mode 100644 index 0dd7222..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/blip_text/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","TextLMHeadModel","TextPooler"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/blip_text/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/blip_text/struct.Config.html deleted file mode 100644 index 1885c97..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/blip_text/struct.Config.html +++ /dev/null @@ -1,41 +0,0 @@ -Config in candle_transformers::models::blip_text - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub vocab_size: usize,
-    pub hidden_size: usize,
-    pub encoder_hidden_size: usize,
-    pub intermediate_size: usize,
-    pub projection_dim: usize,
-    pub num_hidden_layers: usize,
-    pub num_attention_heads: usize,
-    pub max_position_embeddings: usize,
-    pub hidden_act: Activation,
-    pub layer_norm_eps: f64,
-    pub is_decoder: bool,
-}

Fields§

§vocab_size: usize§hidden_size: usize§encoder_hidden_size: usize§intermediate_size: usize§projection_dim: usize§num_hidden_layers: usize§num_attention_heads: usize§max_position_embeddings: usize§hidden_act: Activation§layer_norm_eps: f64§is_decoder: bool

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/blip_text/struct.TextLMHeadModel.html b/network-poc/target-native/doc/candle_transformers/models/blip_text/struct.TextLMHeadModel.html deleted file mode 100644 index 7bbdc68..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/blip_text/struct.TextLMHeadModel.html +++ /dev/null @@ -1,31 +0,0 @@ -TextLMHeadModel in candle_transformers::models::blip_text - Rust

TextLMHeadModel

Struct TextLMHeadModel 

Source
pub struct TextLMHeadModel { /* private fields */ }

Implementations§

Source§

impl TextLMHeadModel

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - encoder_hidden_states: &Tensor, -) -> Result<Tensor>

Source

pub fn reset_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for TextLMHeadModel

Source§

fn clone(&self) -> TextLMHeadModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TextLMHeadModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/blip_text/struct.TextPooler.html b/network-poc/target-native/doc/candle_transformers/models/blip_text/struct.TextPooler.html deleted file mode 100644 index 36caa23..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/blip_text/struct.TextPooler.html +++ /dev/null @@ -1,28 +0,0 @@ -TextPooler in candle_transformers::models::blip_text - Rust

TextPooler

Struct TextPooler 

Source
pub struct TextPooler { /* private fields */ }

Implementations§

Source§

impl TextPooler

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for TextPooler

Source§

fn clone(&self) -> TextPooler

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TextPooler

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for TextPooler

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chatglm/index.html b/network-poc/target-native/doc/candle_transformers/models/chatglm/index.html deleted file mode 100644 index aca18e5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chatglm/index.html +++ /dev/null @@ -1,6 +0,0 @@ -candle_transformers::models::chatglm - Rust

Module chatglm

Module chatglm 

Source
Expand description

Implementation of the ChatGLM2/3 models from THUDM.

-
    -
  • 💻 Github ChatGLM3: Advancing Multilingual Conversational Language Models with High-Quality Data
  • -
  • 💻 Github ChatGLM2-6B.
  • -
-

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chatglm/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/chatglm/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chatglm/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chatglm/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/chatglm/struct.Config.html deleted file mode 100644 index b9e9766..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chatglm/struct.Config.html +++ /dev/null @@ -1,47 +0,0 @@ -Config in candle_transformers::models::chatglm - Rust

Config

Struct Config 

Source
pub struct Config {
Show 19 fields - pub num_layers: usize, - pub padded_vocab_size: usize, - pub hidden_size: usize, - pub ffn_hidden_size: usize, - pub kv_channels: usize, - pub num_attention_heads: usize, - pub seq_length: usize, - pub layernorm_epsilon: f64, - pub rmsnorm: bool, - pub apply_residual_connection_post_layernorm: bool, - pub post_layer_norm: bool, - pub add_bias_linear: bool, - pub add_qkv_bias: bool, - pub bias_dropout_fusion: bool, - pub multi_query_attention: bool, - pub multi_query_group_num: usize, - pub apply_query_key_layer_scaling: bool, - pub attention_softmax_in_fp32: bool, - pub fp32_residual_connection: bool, -
}

Fields§

§num_layers: usize§padded_vocab_size: usize§hidden_size: usize§ffn_hidden_size: usize§kv_channels: usize§num_attention_heads: usize§seq_length: usize§layernorm_epsilon: f64§rmsnorm: bool§apply_residual_connection_post_layernorm: bool§post_layer_norm: bool§add_bias_linear: bool§add_qkv_bias: bool§bias_dropout_fusion: bool§multi_query_attention: bool§multi_query_group_num: usize§apply_query_key_layer_scaling: bool§attention_softmax_in_fp32: bool§fp32_residual_connection: bool

Implementations§

Source§

impl Config

Source

pub fn glm3_6b() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chatglm/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/chatglm/struct.Model.html deleted file mode 100644 index d7271db..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chatglm/struct.Model.html +++ /dev/null @@ -1,27 +0,0 @@ -Model in candle_transformers::models::chatglm - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn reset_kv_cache(&mut self)

Source

pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/enum.Activation.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/enum.Activation.html deleted file mode 100644 index 07aaae5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/enum.Activation.html +++ /dev/null @@ -1,33 +0,0 @@ -Activation in candle_transformers::models::chinese_clip - Rust

Activation

Enum Activation 

Source
pub enum Activation {
-    QuickGelu,
-    Gelu,
-    GeluNew,
-    Relu,
-}

Variants§

§

QuickGelu

§

Gelu

§

GeluNew

§

Relu

Trait Implementations§

Source§

impl Clone for Activation

Source§

fn clone(&self) -> Activation

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Activation

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<String> for Activation

Source§

fn from(value: String) -> Self

Converts to this type from the input type.
Source§

impl Module for Activation

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Source§

impl Copy for Activation

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/enum.EncoderConfig.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/enum.EncoderConfig.html deleted file mode 100644 index 647464c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/enum.EncoderConfig.html +++ /dev/null @@ -1,30 +0,0 @@ -EncoderConfig in candle_transformers::models::chinese_clip - Rust

EncoderConfig

Enum EncoderConfig 

Source
pub enum EncoderConfig {
-    Text(ChineseClipTextConfig),
-    Vision(ChineseClipVisionConfig),
-}

Variants§

Implementations§

Trait Implementations§

Source§

impl Clone for EncoderConfig

Source§

fn clone(&self) -> EncoderConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EncoderConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/fn.div_l2_norm.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/fn.div_l2_norm.html deleted file mode 100644 index 26476a5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/fn.div_l2_norm.html +++ /dev/null @@ -1 +0,0 @@ -div_l2_norm in candle_transformers::models::chinese_clip - Rust

div_l2_norm

Function div_l2_norm 

Source
pub fn div_l2_norm(v: &Tensor) -> Result<Tensor>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/index.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/index.html deleted file mode 100644 index f31b35e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/index.html +++ /dev/null @@ -1,8 +0,0 @@ -candle_transformers::models::chinese_clip - Rust

Module chinese_clip

Module chinese_clip 

Source
Expand description

Chinese contrastive Language-Image Pre-Training

-

Chinese contrastive Language-Image Pre-Training (CLIP) is an architecture trained on -pairs of images with related texts.

- -

Modules§

text_model
Chinese contrastive Language-Image Pre-Training
vision_model
Chinese contrastive Language-Image Pre-Training

Structs§

ChineseClipConfig
ChineseClipModel

Enums§

Activation
EncoderConfig

Functions§

div_l2_norm
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/sidebar-items.js deleted file mode 100644 index 84d68fe..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["Activation","EncoderConfig"],"fn":["div_l2_norm"],"mod":["text_model","vision_model"],"struct":["ChineseClipConfig","ChineseClipModel"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/struct.ChineseClipConfig.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/struct.ChineseClipConfig.html deleted file mode 100644 index 076712b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/struct.ChineseClipConfig.html +++ /dev/null @@ -1,34 +0,0 @@ -ChineseClipConfig in candle_transformers::models::chinese_clip - Rust

ChineseClipConfig

Struct ChineseClipConfig 

Source
pub struct ChineseClipConfig {
-    pub text_config: ChineseClipTextConfig,
-    pub vision_config: ChineseClipVisionConfig,
-    pub projection_dim: usize,
-    pub logit_scale_init_value: f32,
-    pub image_size: usize,
-}

Fields§

§text_config: ChineseClipTextConfig§vision_config: ChineseClipVisionConfig§projection_dim: usize§logit_scale_init_value: f32§image_size: usize

Implementations§

Source§

impl ChineseClipConfig

Source

pub fn clip_vit_base_patch16() -> Self

referer: https://huggingface.co/OFA-Sys/chinese-clip-vit-base-patch16/blob/main/config.json

-

Trait Implementations§

Source§

impl Clone for ChineseClipConfig

Source§

fn clone(&self) -> ChineseClipConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ChineseClipConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/struct.ChineseClipModel.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/struct.ChineseClipModel.html deleted file mode 100644 index 6a24bd9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/struct.ChineseClipModel.html +++ /dev/null @@ -1,38 +0,0 @@ -ChineseClipModel in candle_transformers::models::chinese_clip - Rust

ChineseClipModel

Struct ChineseClipModel 

Source
pub struct ChineseClipModel { /* private fields */ }

Implementations§

Source§

impl ChineseClipModel

Source

pub fn new(vs: VarBuilder<'_>, c: &ChineseClipConfig) -> Result<Self>

Source

pub fn get_text_features( - &self, - input_ids: &Tensor, - token_type_ids: Option<&Tensor>, - attention_mask: Option<&Tensor>, -) -> Result<Tensor>

Source

pub fn get_image_features(&self, pixel_values: &Tensor) -> Result<Tensor>

Source

pub fn forward( - &self, - pixel_values: &Tensor, - input_ids: &Tensor, - token_type_ids: Option<&Tensor>, - attention_mask: Option<&Tensor>, -) -> Result<(Tensor, Tensor)>

Trait Implementations§

Source§

impl Clone for ChineseClipModel

Source§

fn clone(&self) -> ChineseClipModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ChineseClipModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/enum.PositionEmbeddingType.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/enum.PositionEmbeddingType.html deleted file mode 100644 index 2e25b08..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/enum.PositionEmbeddingType.html +++ /dev/null @@ -1,36 +0,0 @@ -PositionEmbeddingType in candle_transformers::models::chinese_clip::text_model - Rust

PositionEmbeddingType

Enum PositionEmbeddingType 

Source
pub enum PositionEmbeddingType {
-    Absolute,
-    RelativeKey,
-    RelativeKeyQuery,
-}
Expand description

Type of position embedding. Choose one of "absolute", "relative_key", "relative_key_query". For -positional embeddings use "absolute". For more information on "relative_key", please refer to -Self-Attention with Relative Position Representations (Shaw et al.). -For more information on "relative_key_query", please refer to Method 4 in Improve Transformer Models -with Better Relative Position Embeddings (Huang et al.).

-

Variants§

§

Absolute

§

RelativeKey

§

RelativeKeyQuery

Trait Implementations§

Source§

impl Clone for PositionEmbeddingType

Source§

fn clone(&self) -> PositionEmbeddingType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PositionEmbeddingType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/index.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/index.html deleted file mode 100644 index 58a5775..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/index.html +++ /dev/null @@ -1,12 +0,0 @@ -candle_transformers::models::chinese_clip::text_model - Rust

Module text_model

Module text_model 

Source
Expand description

Chinese contrastive Language-Image Pre-Training

-

Chinese contrastive Language-Image Pre-Training (CLIP) is an architecture trained on -pairs of images with related texts.

- -

Structs§

ChineseClipTextConfig
ChineseClipTextEmbeddings
ChineseClipTextTransformer

Enums§

PositionEmbeddingType
Type of position embedding. Choose one of "absolute", "relative_key", "relative_key_query". For -positional embeddings use "absolute". For more information on "relative_key", please refer to -Self-Attention with Relative Position Representations (Shaw et al.). -For more information on "relative_key_query", please refer to Method 4 in Improve Transformer Models -with Better Relative Position Embeddings (Huang et al.).
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/sidebar-items.js deleted file mode 100644 index c260b48..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["PositionEmbeddingType"],"struct":["ChineseClipTextConfig","ChineseClipTextEmbeddings","ChineseClipTextTransformer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/struct.ChineseClipTextConfig.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/struct.ChineseClipTextConfig.html deleted file mode 100644 index af8bd4d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/struct.ChineseClipTextConfig.html +++ /dev/null @@ -1,45 +0,0 @@ -ChineseClipTextConfig in candle_transformers::models::chinese_clip::text_model - Rust

ChineseClipTextConfig

Struct ChineseClipTextConfig 

Source
pub struct ChineseClipTextConfig {
Show 16 fields - pub vocab_size: usize, - pub hidden_size: usize, - pub num_hidden_layers: usize, - pub num_attention_heads: usize, - pub intermediate_size: usize, - pub hidden_act: Activation, - pub hidden_dropout_prob: f32, - pub attention_probs_dropout_prob: f64, - pub max_position_embeddings: usize, - pub type_vocab_size: usize, - pub initializer_range: f64, - pub initializer_factor: f64, - pub layer_norm_eps: f64, - pub pad_token_id: usize, - pub position_embedding_type: PositionEmbeddingType, - pub use_cache: bool, -
}

Fields§

§vocab_size: usize§hidden_size: usize§num_hidden_layers: usize§num_attention_heads: usize§intermediate_size: usize§hidden_act: Activation§hidden_dropout_prob: f32§attention_probs_dropout_prob: f64§max_position_embeddings: usize§type_vocab_size: usize§initializer_range: f64§initializer_factor: f64§layer_norm_eps: f64§pad_token_id: usize§position_embedding_type: PositionEmbeddingType§use_cache: bool

Implementations§

Trait Implementations§

Source§

impl Clone for ChineseClipTextConfig

Source§

fn clone(&self) -> ChineseClipTextConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ChineseClipTextConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ChineseClipTextConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/struct.ChineseClipTextEmbeddings.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/struct.ChineseClipTextEmbeddings.html deleted file mode 100644 index 9046345..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/struct.ChineseClipTextEmbeddings.html +++ /dev/null @@ -1,27 +0,0 @@ -ChineseClipTextEmbeddings in candle_transformers::models::chinese_clip::text_model - Rust

ChineseClipTextEmbeddings

Struct ChineseClipTextEmbeddings 

Source
pub struct ChineseClipTextEmbeddings { /* private fields */ }

Implementations§

Source§

impl ChineseClipTextEmbeddings

Source

pub fn new(var: VarBuilder<'_>, config: &ChineseClipTextConfig) -> Result<Self>

Trait Implementations§

Source§

impl Clone for ChineseClipTextEmbeddings

Source§

fn clone(&self) -> ChineseClipTextEmbeddings

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ChineseClipTextEmbeddings

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/struct.ChineseClipTextTransformer.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/struct.ChineseClipTextTransformer.html deleted file mode 100644 index 412ef3f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/text_model/struct.ChineseClipTextTransformer.html +++ /dev/null @@ -1,35 +0,0 @@ -ChineseClipTextTransformer in candle_transformers::models::chinese_clip::text_model - Rust

ChineseClipTextTransformer

Struct ChineseClipTextTransformer 

Source
pub struct ChineseClipTextTransformer {
-    pub device: Device,
-    /* private fields */
-}

Fields§

§device: Device

Implementations§

Source§

impl ChineseClipTextTransformer

Source

pub fn new(var: VarBuilder<'_>, config: &ChineseClipTextConfig) -> Result<Self>

Source

pub fn forward( - &self, - input_ids: &Tensor, - token_type_ids: Option<&Tensor>, - attention_mask: Option<&Tensor>, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for ChineseClipTextTransformer

Source§

fn clone(&self) -> ChineseClipTextTransformer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ChineseClipTextTransformer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/index.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/index.html deleted file mode 100644 index 3bb9c3d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/index.html +++ /dev/null @@ -1,8 +0,0 @@ -candle_transformers::models::chinese_clip::vision_model - Rust

Module vision_model

Module vision_model 

Source
Expand description

Chinese contrastive Language-Image Pre-Training

-

Chinese contrastive Language-Image Pre-Training (CLIP) is an architecture trained on -pairs of images with related texts.

-
    -
  • 💻 Chinese-CLIP
  • -
  • 💻 [GH](https://github.com/huggingface/transformers/blob/5af7d41e49bbfc8319f462eb45253dcb3863dfb7/src/transformers/models/chinese_clip/modeling_chinese_clip.py_
  • -
-

Structs§

ChineseClipVisionConfig
ChineseClipVisionEmbeddings
ChineseClipVisionEncoder
ChineseClipVisionTransformer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/sidebar-items.js deleted file mode 100644 index d7ccf32..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["ChineseClipVisionConfig","ChineseClipVisionEmbeddings","ChineseClipVisionEncoder","ChineseClipVisionTransformer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionConfig.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionConfig.html deleted file mode 100644 index 28f98f1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionConfig.html +++ /dev/null @@ -1,42 +0,0 @@ -ChineseClipVisionConfig in candle_transformers::models::chinese_clip::vision_model - Rust

ChineseClipVisionConfig

Struct ChineseClipVisionConfig 

Source
pub struct ChineseClipVisionConfig {
Show 13 fields - pub hidden_size: usize, - pub intermediate_size: usize, - pub projection_dim: usize, - pub num_hidden_layers: usize, - pub num_attention_heads: usize, - pub num_channels: usize, - pub image_size: usize, - pub patch_size: usize, - pub hidden_act: Activation, - pub layer_norm_eps: f64, - pub attention_dropout: f32, - pub initializer_range: f32, - pub initializer_factor: f32, -
}

Fields§

§hidden_size: usize§intermediate_size: usize§projection_dim: usize§num_hidden_layers: usize§num_attention_heads: usize§num_channels: usize§image_size: usize§patch_size: usize§hidden_act: Activation§layer_norm_eps: f64§attention_dropout: f32§initializer_range: f32§initializer_factor: f32

Implementations§

Trait Implementations§

Source§

impl Clone for ChineseClipVisionConfig

Source§

fn clone(&self) -> ChineseClipVisionConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ChineseClipVisionConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ChineseClipVisionConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionEmbeddings.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionEmbeddings.html deleted file mode 100644 index 32ab70e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionEmbeddings.html +++ /dev/null @@ -1,31 +0,0 @@ -ChineseClipVisionEmbeddings in candle_transformers::models::chinese_clip::vision_model - Rust

ChineseClipVisionEmbeddings

Struct ChineseClipVisionEmbeddings 

Source
pub struct ChineseClipVisionEmbeddings { /* private fields */ }

Implementations§

Source§

impl ChineseClipVisionEmbeddings

Source

pub fn new( - var: VarBuilder<'_>, - config: &ChineseClipVisionConfig, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for ChineseClipVisionEmbeddings

Source§

fn clone(&self) -> ChineseClipVisionEmbeddings

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ChineseClipVisionEmbeddings

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for ChineseClipVisionEmbeddings

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionEncoder.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionEncoder.html deleted file mode 100644 index b3f6ff5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionEncoder.html +++ /dev/null @@ -1,35 +0,0 @@ -ChineseClipVisionEncoder in candle_transformers::models::chinese_clip::vision_model - Rust

ChineseClipVisionEncoder

Struct ChineseClipVisionEncoder 

Source
pub struct ChineseClipVisionEncoder { /* private fields */ }

Implementations§

Source§

impl ChineseClipVisionEncoder

Source

pub fn new(var: VarBuilder<'_>, config: &EncoderConfig) -> Result<Self>

Source

pub fn forward( - &self, - xs: &Tensor, - causal_attention_mask: Option<&Tensor>, -) -> Result<Tensor>

Source

pub fn output_hidden_states( - &self, - xs: &Tensor, - causal_attention_mask: Option<&Tensor>, -) -> Result<Vec<Tensor>>

Trait Implementations§

Source§

impl Clone for ChineseClipVisionEncoder

Source§

fn clone(&self) -> ChineseClipVisionEncoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ChineseClipVisionEncoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionTransformer.html b/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionTransformer.html deleted file mode 100644 index ef841e5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/chinese_clip/vision_model/struct.ChineseClipVisionTransformer.html +++ /dev/null @@ -1,31 +0,0 @@ -ChineseClipVisionTransformer in candle_transformers::models::chinese_clip::vision_model - Rust

ChineseClipVisionTransformer

Struct ChineseClipVisionTransformer 

Source
pub struct ChineseClipVisionTransformer { /* private fields */ }

Implementations§

Source§

impl ChineseClipVisionTransformer

Source

pub fn new( - var: VarBuilder<'_>, - config: &ChineseClipVisionConfig, -) -> Result<Self>

Source

pub fn output_hidden_states(&self, pixel_values: &Tensor) -> Result<Vec<Tensor>>

Trait Implementations§

Source§

impl Clone for ChineseClipVisionTransformer

Source§

fn clone(&self) -> ChineseClipVisionTransformer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ChineseClipVisionTransformer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for ChineseClipVisionTransformer

Source§

fn forward(&self, pixel_values: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/enum.EncoderConfig.html b/network-poc/target-native/doc/candle_transformers/models/clip/enum.EncoderConfig.html deleted file mode 100644 index 7aa13ae..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/enum.EncoderConfig.html +++ /dev/null @@ -1,30 +0,0 @@ -EncoderConfig in candle_transformers::models::clip - Rust

EncoderConfig

Enum EncoderConfig 

Source
pub enum EncoderConfig {
-    Text(ClipTextConfig),
-    Vision(ClipVisionConfig),
-}

Variants§

Implementations§

Trait Implementations§

Source§

impl Clone for EncoderConfig

Source§

fn clone(&self) -> EncoderConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EncoderConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/fn.div_l2_norm.html b/network-poc/target-native/doc/candle_transformers/models/clip/fn.div_l2_norm.html deleted file mode 100644 index 47374fa..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/fn.div_l2_norm.html +++ /dev/null @@ -1 +0,0 @@ -div_l2_norm in candle_transformers::models::clip - Rust

div_l2_norm

Function div_l2_norm 

Source
pub fn div_l2_norm(v: &Tensor) -> Result<Tensor>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/index.html b/network-poc/target-native/doc/candle_transformers/models/clip/index.html deleted file mode 100644 index 4600cc8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/index.html +++ /dev/null @@ -1,9 +0,0 @@ -candle_transformers::models::clip - Rust

Module clip

Module clip 

Source
Expand description

Contrastive Language-Image Pre-Training

-

Contrastive Language-Image Pre-Training (CLIP) is an architecture trained on -pairs of images with related texts.

- -

Modules§

text_model
Contrastive Language-Image Pre-Training
vision_model
Contrastive Language-Image Pre-Training

Structs§

ClipConfig
ClipModel

Enums§

EncoderConfig

Functions§

div_l2_norm
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/clip/sidebar-items.js deleted file mode 100644 index 4ea84d5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["EncoderConfig"],"fn":["div_l2_norm"],"mod":["text_model","vision_model"],"struct":["ClipConfig","ClipModel"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/struct.ClipConfig.html b/network-poc/target-native/doc/candle_transformers/models/clip/struct.ClipConfig.html deleted file mode 100644 index 7292b15..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/struct.ClipConfig.html +++ /dev/null @@ -1,32 +0,0 @@ -ClipConfig in candle_transformers::models::clip - Rust

ClipConfig

Struct ClipConfig 

Source
pub struct ClipConfig {
-    pub text_config: ClipTextConfig,
-    pub vision_config: ClipVisionConfig,
-    pub logit_scale_init_value: f32,
-    pub image_size: usize,
-}

Fields§

§text_config: ClipTextConfig§vision_config: ClipVisionConfig§logit_scale_init_value: f32§image_size: usize

Implementations§

Trait Implementations§

Source§

impl Clone for ClipConfig

Source§

fn clone(&self) -> ClipConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClipConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/struct.ClipModel.html b/network-poc/target-native/doc/candle_transformers/models/clip/struct.ClipModel.html deleted file mode 100644 index 8b595eb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/struct.ClipModel.html +++ /dev/null @@ -1,31 +0,0 @@ -ClipModel in candle_transformers::models::clip - Rust

ClipModel

Struct ClipModel 

Source
pub struct ClipModel { /* private fields */ }

Implementations§

Source§

impl ClipModel

Source

pub fn new(vs: VarBuilder<'_>, c: &ClipConfig) -> Result<Self>

Source

pub fn get_text_features(&self, input_ids: &Tensor) -> Result<Tensor>

Source

pub fn get_image_features(&self, pixel_values: &Tensor) -> Result<Tensor>

Source

pub fn forward( - &self, - pixel_values: &Tensor, - input_ids: &Tensor, -) -> Result<(Tensor, Tensor)>

Trait Implementations§

Source§

impl Clone for ClipModel

Source§

fn clone(&self) -> ClipModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClipModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/text_model/enum.Activation.html b/network-poc/target-native/doc/candle_transformers/models/clip/text_model/enum.Activation.html deleted file mode 100644 index 278f1af..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/text_model/enum.Activation.html +++ /dev/null @@ -1,30 +0,0 @@ -Activation in candle_transformers::models::clip::text_model - Rust

Activation

Enum Activation 

Source
pub enum Activation {
-    QuickGelu,
-}

Variants§

§

QuickGelu

Trait Implementations§

Source§

impl Clone for Activation

Source§

fn clone(&self) -> Activation

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Activation

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Activation

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Source§

impl Copy for Activation

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/text_model/index.html b/network-poc/target-native/doc/candle_transformers/models/clip/text_model/index.html deleted file mode 100644 index 95d90cd..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/text_model/index.html +++ /dev/null @@ -1,8 +0,0 @@ -candle_transformers::models::clip::text_model - Rust

Module text_model

Module text_model 

Source
Expand description

Contrastive Language-Image Pre-Training

-

Contrastive Language-Image Pre-Training (CLIP) is an architecture trained on -pairs of images with related texts.

- -

Structs§

ClipEncoder
ClipTextConfig
ClipTextTransformer
A CLIP transformer based model.

Enums§

Activation
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/text_model/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/clip/text_model/sidebar-items.js deleted file mode 100644 index 8ea7547..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/text_model/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["Activation"],"struct":["ClipEncoder","ClipTextConfig","ClipTextTransformer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/text_model/struct.ClipEncoder.html b/network-poc/target-native/doc/candle_transformers/models/clip/text_model/struct.ClipEncoder.html deleted file mode 100644 index dc102cd..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/text_model/struct.ClipEncoder.html +++ /dev/null @@ -1,35 +0,0 @@ -ClipEncoder in candle_transformers::models::clip::text_model - Rust

ClipEncoder

Struct ClipEncoder 

Source
pub struct ClipEncoder { /* private fields */ }

Implementations§

Source§

impl ClipEncoder

Source

pub fn new(vs: VarBuilder<'_>, c: &EncoderConfig) -> Result<Self>

Source

pub fn forward( - &self, - xs: &Tensor, - causal_attention_mask: Option<&Tensor>, -) -> Result<Tensor>

Source

pub fn output_hidden_states( - &self, - xs: &Tensor, - causal_attention_mask: Option<&Tensor>, -) -> Result<Vec<Tensor>>

Trait Implementations§

Source§

impl Clone for ClipEncoder

Source§

fn clone(&self) -> ClipEncoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClipEncoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/text_model/struct.ClipTextConfig.html b/network-poc/target-native/doc/candle_transformers/models/clip/text_model/struct.ClipTextConfig.html deleted file mode 100644 index f431033..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/text_model/struct.ClipTextConfig.html +++ /dev/null @@ -1,37 +0,0 @@ -ClipTextConfig in candle_transformers::models::clip::text_model - Rust

ClipTextConfig

Struct ClipTextConfig 

Source
pub struct ClipTextConfig {
-    pub vocab_size: usize,
-    pub embed_dim: usize,
-    pub activation: Activation,
-    pub intermediate_size: usize,
-    pub max_position_embeddings: usize,
-    pub pad_with: Option<String>,
-    pub num_hidden_layers: usize,
-    pub num_attention_heads: usize,
-    pub projection_dim: usize,
-}

Fields§

§vocab_size: usize§embed_dim: usize§activation: Activation§intermediate_size: usize§max_position_embeddings: usize§pad_with: Option<String>§num_hidden_layers: usize§num_attention_heads: usize§projection_dim: usize

Implementations§

Trait Implementations§

Source§

impl Clone for ClipTextConfig

Source§

fn clone(&self) -> ClipTextConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClipTextConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/text_model/struct.ClipTextTransformer.html b/network-poc/target-native/doc/candle_transformers/models/clip/text_model/struct.ClipTextTransformer.html deleted file mode 100644 index 365c4df..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/text_model/struct.ClipTextTransformer.html +++ /dev/null @@ -1,33 +0,0 @@ -ClipTextTransformer in candle_transformers::models::clip::text_model - Rust

ClipTextTransformer

Struct ClipTextTransformer 

Source
pub struct ClipTextTransformer { /* private fields */ }
Expand description

A CLIP transformer based model.

-

Implementations§

Source§

impl ClipTextTransformer

Source

pub fn new(vs: VarBuilder<'_>, c: &ClipTextConfig) -> Result<Self>

Source

pub fn forward_with_mask( - &self, - input_ids: &Tensor, - mask_after: usize, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for ClipTextTransformer

Source§

fn clone(&self) -> ClipTextTransformer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClipTextTransformer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for ClipTextTransformer

Source§

fn forward(&self, input_ids: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/vision_model/index.html b/network-poc/target-native/doc/candle_transformers/models/clip/vision_model/index.html deleted file mode 100644 index 9730e01..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/vision_model/index.html +++ /dev/null @@ -1,6 +0,0 @@ -candle_transformers::models::clip::vision_model - Rust

Module vision_model

Module vision_model 

Source
Expand description

Contrastive Language-Image Pre-Training

-

Contrastive Language-Image Pre-Training (CLIP) is an architecture trained on -pairs of images with related texts.

-

https://github.com/openai/CLIP -https://github.com/huggingface/transformers/tree/f6fa0f0bf0796ac66f201f23bdb8585de1609add/src/transformers/models/clip

-

Structs§

ClipVisionConfig
ClipVisionTransformer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/vision_model/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/clip/vision_model/sidebar-items.js deleted file mode 100644 index 2d6e1e3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/vision_model/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["ClipVisionConfig","ClipVisionTransformer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/vision_model/struct.ClipVisionConfig.html b/network-poc/target-native/doc/candle_transformers/models/clip/vision_model/struct.ClipVisionConfig.html deleted file mode 100644 index 3e07ed9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/vision_model/struct.ClipVisionConfig.html +++ /dev/null @@ -1,37 +0,0 @@ -ClipVisionConfig in candle_transformers::models::clip::vision_model - Rust

ClipVisionConfig

Struct ClipVisionConfig 

Source
pub struct ClipVisionConfig {
-    pub embed_dim: usize,
-    pub activation: Activation,
-    pub intermediate_size: usize,
-    pub num_hidden_layers: usize,
-    pub num_attention_heads: usize,
-    pub projection_dim: usize,
-    pub num_channels: usize,
-    pub image_size: usize,
-    pub patch_size: usize,
-}

Fields§

§embed_dim: usize§activation: Activation§intermediate_size: usize§num_hidden_layers: usize§num_attention_heads: usize§projection_dim: usize§num_channels: usize§image_size: usize§patch_size: usize

Implementations§

Trait Implementations§

Source§

impl Clone for ClipVisionConfig

Source§

fn clone(&self) -> ClipVisionConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClipVisionConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/clip/vision_model/struct.ClipVisionTransformer.html b/network-poc/target-native/doc/candle_transformers/models/clip/vision_model/struct.ClipVisionTransformer.html deleted file mode 100644 index 64f6512..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/clip/vision_model/struct.ClipVisionTransformer.html +++ /dev/null @@ -1,28 +0,0 @@ -ClipVisionTransformer in candle_transformers::models::clip::vision_model - Rust

ClipVisionTransformer

Struct ClipVisionTransformer 

Source
pub struct ClipVisionTransformer { /* private fields */ }

Implementations§

Source§

impl ClipVisionTransformer

Source

pub fn new(vs: VarBuilder<'_>, c: &ClipVisionConfig) -> Result<Self>

Source

pub fn output_hidden_states(&self, pixel_values: &Tensor) -> Result<Vec<Tensor>>

Trait Implementations§

Source§

impl Clone for ClipVisionTransformer

Source§

fn clone(&self) -> ClipVisionTransformer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClipVisionTransformer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for ClipVisionTransformer

Source§

fn forward(&self, pixel_values: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/index.html b/network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/index.html deleted file mode 100644 index e340589..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/index.html +++ /dev/null @@ -1,7 +0,0 @@ -candle_transformers::models::codegeex4_9b - Rust

Module codegeex4_9b

Module codegeex4_9b 

Source
Expand description

CodeGeeX4 - A multi-language code generation model

-

A Pre-Trained Model For Code Generation with Multilingual Evaluations on HumanEval-X“

- -

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/struct.Config.html deleted file mode 100644 index 764537b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/struct.Config.html +++ /dev/null @@ -1,50 +0,0 @@ -Config in candle_transformers::models::codegeex4_9b - Rust

Config

Struct Config 

Source
pub struct Config {
Show 20 fields - pub num_layers: usize, - pub padded_vocab_size: usize, - pub hidden_size: usize, - pub ffn_hidden_size: usize, - pub kv_channels: usize, - pub num_attention_heads: usize, - pub seq_length: usize, - pub layernorm_epsilon: f64, - pub rmsnorm: bool, - pub apply_residual_connection_post_layernorm: bool, - pub post_layer_norm: bool, - pub add_bias_linear: bool, - pub add_qkv_bias: bool, - pub bias_dropout_fusion: bool, - pub multi_query_attention: bool, - pub multi_query_group_num: usize, - pub apply_query_key_layer_scaling: bool, - pub attention_softmax_in_fp32: bool, - pub fp32_residual_connection: bool, - pub rope_ratio: usize, -
}

Fields§

§num_layers: usize§padded_vocab_size: usize§hidden_size: usize§ffn_hidden_size: usize§kv_channels: usize§num_attention_heads: usize§seq_length: usize§layernorm_epsilon: f64§rmsnorm: bool§apply_residual_connection_post_layernorm: bool§post_layer_norm: bool§add_bias_linear: bool§add_qkv_bias: bool§bias_dropout_fusion: bool§multi_query_attention: bool§multi_query_group_num: usize§apply_query_key_layer_scaling: bool§attention_softmax_in_fp32: bool§fp32_residual_connection: bool§rope_ratio: usize

Implementations§

Source§

impl Config

Source

pub fn codegeex4() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Config

Source§

fn default() -> Config

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/struct.Model.html deleted file mode 100644 index bcc1c0b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/codegeex4_9b/struct.Model.html +++ /dev/null @@ -1,27 +0,0 @@ -Model in candle_transformers::models::codegeex4_9b - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn reset_kv_cache(&mut self)

Source

pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/colpali/index.html b/network-poc/target-native/doc/candle_transformers/models/colpali/index.html deleted file mode 100644 index 1aead48..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/colpali/index.html +++ /dev/null @@ -1,3 +0,0 @@ -candle_transformers::models::colpali - Rust

Module colpali

Module colpali 

Source
Expand description

Colpali Model for text/image similarity scoring.

-

Colpali combines a vision encoder with an efficient LM for retrieving content.

-

Structs§

Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/colpali/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/colpali/sidebar-items.js deleted file mode 100644 index 5f9d0bb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/colpali/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/colpali/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/colpali/struct.Model.html deleted file mode 100644 index 4b2f11e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/colpali/struct.Model.html +++ /dev/null @@ -1,32 +0,0 @@ -Model in candle_transformers::models::colpali - Rust

Model

Struct Model 

Source
pub struct Model {
-    pub model: Model,
-    pub custom_text_projection: Linear,
-}

Fields§

§model: Model§custom_text_projection: Linear

Implementations§

Source§

impl Model

Source

pub fn new(config: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward_images( - &mut self, - pixel_values: &Tensor, - input_ids: &Tensor, -) -> Result<Tensor>

Source

pub fn forward_text(&mut self, input_ids: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/convmixer/fn.c1024_20.html b/network-poc/target-native/doc/candle_transformers/models/convmixer/fn.c1024_20.html deleted file mode 100644 index 57bf162..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/convmixer/fn.c1024_20.html +++ /dev/null @@ -1 +0,0 @@ -c1024_20 in candle_transformers::models::convmixer - Rust

c1024_20

Function c1024_20 

Source
pub fn c1024_20(nclasses: usize, vb: VarBuilder<'_>) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/convmixer/fn.c1536_20.html b/network-poc/target-native/doc/candle_transformers/models/convmixer/fn.c1536_20.html deleted file mode 100644 index 074e984..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/convmixer/fn.c1536_20.html +++ /dev/null @@ -1 +0,0 @@ -c1536_20 in candle_transformers::models::convmixer - Rust

c1536_20

Function c1536_20 

Source
pub fn c1536_20(nclasses: usize, vb: VarBuilder<'_>) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/convmixer/index.html b/network-poc/target-native/doc/candle_transformers/models/convmixer/index.html deleted file mode 100644 index 8154d76..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/convmixer/index.html +++ /dev/null @@ -1,7 +0,0 @@ -candle_transformers::models::convmixer - Rust

Module convmixer

Module convmixer 

Source
Expand description

ConvMixer implementation.

-

See “Patches Are All You Need?” by Trockman et al. 2022

- -

Functions§

c1024_20
c1536_20
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/convmixer/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/convmixer/sidebar-items.js deleted file mode 100644 index 5370d7b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/convmixer/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["c1024_20","c1536_20"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/convnext/fn.convnext.html b/network-poc/target-native/doc/candle_transformers/models/convnext/fn.convnext.html deleted file mode 100644 index 9eca167..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/convnext/fn.convnext.html +++ /dev/null @@ -1,5 +0,0 @@ -convnext in candle_transformers::models::convnext - Rust

convnext

Function convnext 

Source
pub fn convnext(
-    cfg: &Config,
-    nclasses: usize,
-    vb: VarBuilder<'_>,
-) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/convnext/fn.convnext_no_final_layer.html b/network-poc/target-native/doc/candle_transformers/models/convnext/fn.convnext_no_final_layer.html deleted file mode 100644 index 8bfa32e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/convnext/fn.convnext_no_final_layer.html +++ /dev/null @@ -1,4 +0,0 @@ -convnext_no_final_layer in candle_transformers::models::convnext - Rust

convnext_no_final_layer

Function convnext_no_final_layer 

Source
pub fn convnext_no_final_layer(
-    cfg: &Config,
-    vb: VarBuilder<'_>,
-) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/convnext/index.html b/network-poc/target-native/doc/candle_transformers/models/convnext/index.html deleted file mode 100644 index 6bb7a16..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/convnext/index.html +++ /dev/null @@ -1,13 +0,0 @@ -candle_transformers::models::convnext - Rust

Module convnext

Module convnext 

Source
Expand description

ConvNeXt implementation.

-

This candle implementation uses a pre-trained ConvNeXt network for inference. The -classification head has been trained on the ImageNet dataset and returns the -probabilities for the top-5 classes.

-

Original code:

-
    -
  • 💻 ConvNeXt
  • -
  • 💻 ConvNeXt-V2
  • -
  • 💻 timm
  • -
  • 📝 Paper A ConvNet for the 2020s
  • -
  • 📝 Paper ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
  • -
-

Structs§

Config

Functions§

convnext
convnext_no_final_layer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/convnext/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/convnext/sidebar-items.js deleted file mode 100644 index 1075e45..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/convnext/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["convnext","convnext_no_final_layer"],"struct":["Config"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/convnext/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/convnext/struct.Config.html deleted file mode 100644 index 8df78c9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/convnext/struct.Config.html +++ /dev/null @@ -1,27 +0,0 @@ -Config in candle_transformers::models::convnext - Rust

Config

Struct Config 

Source
pub struct Config { /* private fields */ }

Implementations§

Source§

impl Config

Source

pub fn atto() -> Self

Source

pub fn femto() -> Self

Source

pub fn pico() -> Self

Source

pub fn nano() -> Self

Source

pub fn tiny() -> Self

Source

pub fn small() -> Self

Source

pub fn base() -> Self

Source

pub fn large() -> Self

Source

pub fn xlarge() -> Self

Source

pub fn huge() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dac/index.html b/network-poc/target-native/doc/candle_transformers/models/dac/index.html deleted file mode 100644 index d50d6dc..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dac/index.html +++ /dev/null @@ -1,3 +0,0 @@ -candle_transformers::models::dac - Rust

Module dac

Module dac 

Source
Expand description

Implementation of the Descript Audio Codec (DAC) model

-

See: Descript Audio Codec

-

Structs§

Config
Decoder
DecoderBlock
Encoder
EncoderBlock
Model
ResidualUnit
ResidualVectorQuantizer
Snake1d
VectorQuantizer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dac/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/dac/sidebar-items.js deleted file mode 100644 index 457bf51..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dac/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Decoder","DecoderBlock","Encoder","EncoderBlock","Model","ResidualUnit","ResidualVectorQuantizer","Snake1d","VectorQuantizer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dac/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/dac/struct.Config.html deleted file mode 100644 index 5c408e9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dac/struct.Config.html +++ /dev/null @@ -1,36 +0,0 @@ -Config in candle_transformers::models::dac - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub num_codebooks: usize,
-    pub model_bitrate: u32,
-    pub codebook_size: usize,
-    pub latent_dim: usize,
-    pub frame_rate: u32,
-    pub sampling_rate: u32,
-}

Fields§

§num_codebooks: usize§model_bitrate: u32§codebook_size: usize§latent_dim: usize§frame_rate: u32§sampling_rate: u32

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dac/struct.Decoder.html b/network-poc/target-native/doc/candle_transformers/models/dac/struct.Decoder.html deleted file mode 100644 index 7ac59e6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dac/struct.Decoder.html +++ /dev/null @@ -1,34 +0,0 @@ -Decoder in candle_transformers::models::dac - Rust

Decoder

Struct Decoder 

Source
pub struct Decoder { /* private fields */ }

Implementations§

Source§

impl Decoder

Source

pub fn new( - in_c: usize, - channels: usize, - rates: &[usize], - d_out: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Decoder

Source§

fn clone(&self) -> Decoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Decoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Decoder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dac/struct.DecoderBlock.html b/network-poc/target-native/doc/candle_transformers/models/dac/struct.DecoderBlock.html deleted file mode 100644 index 9576f11..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dac/struct.DecoderBlock.html +++ /dev/null @@ -1,33 +0,0 @@ -DecoderBlock in candle_transformers::models::dac - Rust

DecoderBlock

Struct DecoderBlock 

Source
pub struct DecoderBlock { /* private fields */ }

Implementations§

Source§

impl DecoderBlock

Source

pub fn new( - in_dim: usize, - out_dim: usize, - stride: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for DecoderBlock

Source§

fn clone(&self) -> DecoderBlock

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DecoderBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for DecoderBlock

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dac/struct.Encoder.html b/network-poc/target-native/doc/candle_transformers/models/dac/struct.Encoder.html deleted file mode 100644 index 782e9a3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dac/struct.Encoder.html +++ /dev/null @@ -1,33 +0,0 @@ -Encoder in candle_transformers::models::dac - Rust

Encoder

Struct Encoder 

Source
pub struct Encoder { /* private fields */ }

Implementations§

Source§

impl Encoder

Source

pub fn new( - d_model: usize, - strides: &[usize], - d_latent: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Encoder

Source§

fn clone(&self) -> Encoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Encoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Encoder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dac/struct.EncoderBlock.html b/network-poc/target-native/doc/candle_transformers/models/dac/struct.EncoderBlock.html deleted file mode 100644 index b30e0ae..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dac/struct.EncoderBlock.html +++ /dev/null @@ -1,28 +0,0 @@ -EncoderBlock in candle_transformers::models::dac - Rust

EncoderBlock

Struct EncoderBlock 

Source
pub struct EncoderBlock { /* private fields */ }

Implementations§

Source§

impl EncoderBlock

Source

pub fn new(dim: usize, stride: usize, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for EncoderBlock

Source§

fn clone(&self) -> EncoderBlock

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EncoderBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for EncoderBlock

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dac/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/dac/struct.Model.html deleted file mode 100644 index c54e466..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dac/struct.Model.html +++ /dev/null @@ -1,31 +0,0 @@ -Model in candle_transformers::models::dac - Rust

Model

Struct Model 

Source
pub struct Model {
-    pub encoder: Encoder,
-    pub quantizer: ResidualVectorQuantizer,
-    pub decoder: Decoder,
-}

Fields§

§encoder: Encoder§quantizer: ResidualVectorQuantizer§decoder: Decoder

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn decode_codes(&self, audio_codes: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dac/struct.ResidualUnit.html b/network-poc/target-native/doc/candle_transformers/models/dac/struct.ResidualUnit.html deleted file mode 100644 index f107815..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dac/struct.ResidualUnit.html +++ /dev/null @@ -1,28 +0,0 @@ -ResidualUnit in candle_transformers::models::dac - Rust

ResidualUnit

Struct ResidualUnit 

Source
pub struct ResidualUnit { /* private fields */ }

Implementations§

Source§

impl ResidualUnit

Source

pub fn new(dim: usize, dilation: usize, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for ResidualUnit

Source§

fn clone(&self) -> ResidualUnit

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ResidualUnit

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for ResidualUnit

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dac/struct.ResidualVectorQuantizer.html b/network-poc/target-native/doc/candle_transformers/models/dac/struct.ResidualVectorQuantizer.html deleted file mode 100644 index bb3b6f3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dac/struct.ResidualVectorQuantizer.html +++ /dev/null @@ -1,33 +0,0 @@ -ResidualVectorQuantizer in candle_transformers::models::dac - Rust

ResidualVectorQuantizer

Struct ResidualVectorQuantizer 

Source
pub struct ResidualVectorQuantizer { /* private fields */ }

Implementations§

Source§

impl ResidualVectorQuantizer

Source

pub fn new( - input_dim: usize, - n_codebooks: usize, - cb_size: usize, - cb_dim: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn from_codes(&self, codes: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for ResidualVectorQuantizer

Source§

fn clone(&self) -> ResidualVectorQuantizer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ResidualVectorQuantizer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dac/struct.Snake1d.html b/network-poc/target-native/doc/candle_transformers/models/dac/struct.Snake1d.html deleted file mode 100644 index 390e6aa..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dac/struct.Snake1d.html +++ /dev/null @@ -1,28 +0,0 @@ -Snake1d in candle_transformers::models::dac - Rust

Snake1d

Struct Snake1d 

Source
pub struct Snake1d { /* private fields */ }

Implementations§

Source§

impl Snake1d

Source

pub fn new(channels: usize, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Snake1d

Source§

fn clone(&self) -> Snake1d

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Snake1d

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Snake1d

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dac/struct.VectorQuantizer.html b/network-poc/target-native/doc/candle_transformers/models/dac/struct.VectorQuantizer.html deleted file mode 100644 index 1c095d4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dac/struct.VectorQuantizer.html +++ /dev/null @@ -1,32 +0,0 @@ -VectorQuantizer in candle_transformers::models::dac - Rust

VectorQuantizer

Struct VectorQuantizer 

Source
pub struct VectorQuantizer { /* private fields */ }

Implementations§

Source§

impl VectorQuantizer

Source

pub fn new( - in_dim: usize, - cb_size: usize, - cb_dim: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn embed_code(&self, embed_id: &Tensor) -> Result<Tensor>

Source

pub fn decode_code(&self, embed_id: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for VectorQuantizer

Source§

fn clone(&self) -> VectorQuantizer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VectorQuantizer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/constant.DTYPE.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/constant.DTYPE.html deleted file mode 100644 index 24554a3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/constant.DTYPE.html +++ /dev/null @@ -1 +0,0 @@ -DTYPE in candle_transformers::models::debertav2 - Rust

DTYPE

Constant DTYPE 

Source
pub const DTYPE: DType;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/enum.HiddenAct.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/enum.HiddenAct.html deleted file mode 100644 index e663daf..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/enum.HiddenAct.html +++ /dev/null @@ -1,40 +0,0 @@ -HiddenAct in candle_transformers::models::debertav2 - Rust

HiddenAct

Enum HiddenAct 

Source
pub enum HiddenAct {
-    Gelu,
-    GeluApproximate,
-    Relu,
-}

Variants§

§

Gelu

§

GeluApproximate

§

Relu

Trait Implementations§

Source§

impl Clone for HiddenAct

Source§

fn clone(&self) -> HiddenAct

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for HiddenAct

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for HiddenAct

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for HiddenAct

Source§

fn eq(&self, other: &HiddenAct) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for HiddenAct

Source§

impl Eq for HiddenAct

Source§

impl StructuralPartialEq for HiddenAct

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/index.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/index.html deleted file mode 100644 index c0d2122..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::debertav2 - Rust

Module debertav2

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/debertav2/sidebar-items.js deleted file mode 100644 index 24cfea6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"constant":["DTYPE"],"enum":["HiddenAct"],"struct":["Config","ConvLayer","DebertaV2Attention","DebertaV2ContextPooler","DebertaV2DisentangledSelfAttention","DebertaV2Embeddings","DebertaV2Encoder","DebertaV2Intermediate","DebertaV2Layer","DebertaV2Model","DebertaV2NERModel","DebertaV2Output","DebertaV2SelfOutput","DebertaV2SeqClassificationModel","HiddenActLayer","NERItem","StableDropout","TextClassificationItem"],"type":["Id2Label","Label2Id"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.Config.html deleted file mode 100644 index d8c6a89..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.Config.html +++ /dev/null @@ -1,62 +0,0 @@ -Config in candle_transformers::models::debertav2 - Rust

Config

Struct Config 

Source
pub struct Config {
Show 31 fields - pub vocab_size: usize, - pub hidden_size: usize, - pub num_hidden_layers: usize, - pub num_attention_heads: usize, - pub intermediate_size: usize, - pub hidden_act: HiddenAct, - pub hidden_dropout_prob: f64, - pub attention_probs_dropout_prob: f64, - pub max_position_embeddings: usize, - pub type_vocab_size: usize, - pub initializer_range: f64, - pub layer_norm_eps: f64, - pub relative_attention: bool, - pub max_relative_positions: isize, - pub pad_token_id: Option<usize>, - pub position_biased_input: bool, - pub pos_att_type: Vec<String>, - pub position_buckets: Option<isize>, - pub share_att_key: Option<bool>, - pub attention_head_size: Option<usize>, - pub embedding_size: Option<usize>, - pub norm_rel_ebd: Option<String>, - pub conv_kernel_size: Option<usize>, - pub conv_groups: Option<usize>, - pub conv_act: Option<String>, - pub id2label: Option<Id2Label>, - pub label2id: Option<Label2Id>, - pub pooler_dropout: Option<f64>, - pub pooler_hidden_act: Option<HiddenAct>, - pub pooler_hidden_size: Option<usize>, - pub cls_dropout: Option<f64>, -
}

Fields§

§vocab_size: usize§hidden_size: usize§num_hidden_layers: usize§num_attention_heads: usize§intermediate_size: usize§hidden_act: HiddenAct§hidden_dropout_prob: f64§attention_probs_dropout_prob: f64§max_position_embeddings: usize§type_vocab_size: usize§initializer_range: f64§layer_norm_eps: f64§relative_attention: bool§max_relative_positions: isize§pad_token_id: Option<usize>§position_biased_input: bool§pos_att_type: Vec<String>§position_buckets: Option<isize>§share_att_key: Option<bool>§attention_head_size: Option<usize>§embedding_size: Option<usize>§norm_rel_ebd: Option<String>§conv_kernel_size: Option<usize>§conv_groups: Option<usize>§conv_act: Option<String>§id2label: Option<Id2Label>§label2id: Option<Label2Id>§pooler_dropout: Option<f64>§pooler_hidden_act: Option<HiddenAct>§pooler_hidden_size: Option<usize>§cls_dropout: Option<f64>

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.ConvLayer.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.ConvLayer.html deleted file mode 100644 index 70198c6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.ConvLayer.html +++ /dev/null @@ -1,30 +0,0 @@ -ConvLayer in candle_transformers::models::debertav2 - Rust

ConvLayer

Struct ConvLayer 

Source
pub struct ConvLayer { /* private fields */ }

Implementations§

Source§

impl ConvLayer

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward( - &self, - _hidden_states: &Tensor, - _residual_states: &Tensor, - _input_mask: &Tensor, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Attention.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Attention.html deleted file mode 100644 index d0d8901..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Attention.html +++ /dev/null @@ -1,25 +0,0 @@ -DebertaV2Attention in candle_transformers::models::debertav2 - Rust

DebertaV2Attention

Struct DebertaV2Attention 

Source
pub struct DebertaV2Attention { /* private fields */ }

Implementations§

Source§

impl DebertaV2Attention

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2ContextPooler.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2ContextPooler.html deleted file mode 100644 index b69ca88..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2ContextPooler.html +++ /dev/null @@ -1,25 +0,0 @@ -DebertaV2ContextPooler in candle_transformers::models::debertav2 - Rust

DebertaV2ContextPooler

Struct DebertaV2ContextPooler 

Source
pub struct DebertaV2ContextPooler { /* private fields */ }

Implementations§

Source§

impl DebertaV2ContextPooler

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward(&self, hidden_states: &Tensor) -> Result<Tensor>

Source

pub fn output_dim(&self) -> Result<usize>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2DisentangledSelfAttention.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2DisentangledSelfAttention.html deleted file mode 100644 index ddf021d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2DisentangledSelfAttention.html +++ /dev/null @@ -1,32 +0,0 @@ -DebertaV2DisentangledSelfAttention in candle_transformers::models::debertav2 - Rust

DebertaV2DisentangledSelfAttention

Struct DebertaV2DisentangledSelfAttention 

Source
pub struct DebertaV2DisentangledSelfAttention { /* private fields */ }

Implementations§

Source§

impl DebertaV2DisentangledSelfAttention

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward( - &self, - hidden_states: &Tensor, - attention_mask: &Tensor, - query_states: Option<&Tensor>, - relative_pos: Option<&Tensor>, - rel_embeddings: Option<&Tensor>, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Embeddings.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Embeddings.html deleted file mode 100644 index 42e9b4c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Embeddings.html +++ /dev/null @@ -1,32 +0,0 @@ -DebertaV2Embeddings in candle_transformers::models::debertav2 - Rust

DebertaV2Embeddings

Struct DebertaV2Embeddings 

Source
pub struct DebertaV2Embeddings { /* private fields */ }

Implementations§

Source§

impl DebertaV2Embeddings

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward( - &self, - input_ids: Option<&Tensor>, - token_type_ids: Option<&Tensor>, - position_ids: Option<&Tensor>, - mask: Option<&Tensor>, - inputs_embeds: Option<&Tensor>, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Encoder.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Encoder.html deleted file mode 100644 index 09dd603..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Encoder.html +++ /dev/null @@ -1,31 +0,0 @@ -DebertaV2Encoder in candle_transformers::models::debertav2 - Rust

DebertaV2Encoder

Struct DebertaV2Encoder 

Source
pub struct DebertaV2Encoder { /* private fields */ }

Implementations§

Source§

impl DebertaV2Encoder

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward( - &self, - hidden_states: &Tensor, - attention_mask: &Tensor, - query_states: Option<&Tensor>, - relative_pos: Option<&Tensor>, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Intermediate.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Intermediate.html deleted file mode 100644 index 263ba1a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Intermediate.html +++ /dev/null @@ -1,25 +0,0 @@ -DebertaV2Intermediate in candle_transformers::models::debertav2 - Rust

DebertaV2Intermediate

Struct DebertaV2Intermediate 

Source
pub struct DebertaV2Intermediate { /* private fields */ }

Implementations§

Source§

impl DebertaV2Intermediate

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward(&self, hidden_states: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Layer.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Layer.html deleted file mode 100644 index cba0a69..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Layer.html +++ /dev/null @@ -1,25 +0,0 @@ -DebertaV2Layer in candle_transformers::models::debertav2 - Rust

DebertaV2Layer

Struct DebertaV2Layer 

Source
pub struct DebertaV2Layer { /* private fields */ }

Implementations§

Source§

impl DebertaV2Layer

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Model.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Model.html deleted file mode 100644 index 88a03dd..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Model.html +++ /dev/null @@ -1,33 +0,0 @@ -DebertaV2Model in candle_transformers::models::debertav2 - Rust

DebertaV2Model

Struct DebertaV2Model 

Source
pub struct DebertaV2Model {
-    pub device: Device,
-    /* private fields */
-}

Fields§

§device: Device

Implementations§

Source§

impl DebertaV2Model

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward( - &self, - input_ids: &Tensor, - token_type_ids: Option<Tensor>, - attention_mask: Option<Tensor>, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2NERModel.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2NERModel.html deleted file mode 100644 index 5e8fff5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2NERModel.html +++ /dev/null @@ -1,37 +0,0 @@ -DebertaV2NERModel in candle_transformers::models::debertav2 - Rust

DebertaV2NERModel

Struct DebertaV2NERModel 

Source
pub struct DebertaV2NERModel {
-    pub device: Device,
-    /* private fields */
-}

Fields§

§device: Device

Implementations§

Source§

impl DebertaV2NERModel

Source

pub fn load( - vb: VarBuilder<'_>, - config: &Config, - id2label: Option<Id2Label>, -) -> Result<Self>

Source

pub fn forward( - &self, - input_ids: &Tensor, - token_type_ids: Option<Tensor>, - attention_mask: Option<Tensor>, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Output.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Output.html deleted file mode 100644 index fd6d1df..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2Output.html +++ /dev/null @@ -1,29 +0,0 @@ -DebertaV2Output in candle_transformers::models::debertav2 - Rust

DebertaV2Output

Struct DebertaV2Output 

Source
pub struct DebertaV2Output { /* private fields */ }

Implementations§

Source§

impl DebertaV2Output

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward( - &self, - hidden_states: &Tensor, - input_tensor: &Tensor, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2SelfOutput.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2SelfOutput.html deleted file mode 100644 index 18c491d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2SelfOutput.html +++ /dev/null @@ -1,29 +0,0 @@ -DebertaV2SelfOutput in candle_transformers::models::debertav2 - Rust

DebertaV2SelfOutput

Struct DebertaV2SelfOutput 

Source
pub struct DebertaV2SelfOutput { /* private fields */ }

Implementations§

Source§

impl DebertaV2SelfOutput

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward( - &self, - hidden_states: &Tensor, - input_tensor: &Tensor, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2SeqClassificationModel.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2SeqClassificationModel.html deleted file mode 100644 index 7dbaac8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.DebertaV2SeqClassificationModel.html +++ /dev/null @@ -1,37 +0,0 @@ -DebertaV2SeqClassificationModel in candle_transformers::models::debertav2 - Rust

DebertaV2SeqClassificationModel

Struct DebertaV2SeqClassificationModel 

Source
pub struct DebertaV2SeqClassificationModel {
-    pub device: Device,
-    /* private fields */
-}

Fields§

§device: Device

Implementations§

Source§

impl DebertaV2SeqClassificationModel

Source

pub fn load( - vb: VarBuilder<'_>, - config: &Config, - id2label: Option<Id2Label>, -) -> Result<Self>

Source

pub fn forward( - &self, - input_ids: &Tensor, - token_type_ids: Option<Tensor>, - attention_mask: Option<Tensor>, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.HiddenActLayer.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.HiddenActLayer.html deleted file mode 100644 index 33fcc4e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.HiddenActLayer.html +++ /dev/null @@ -1,25 +0,0 @@ -HiddenActLayer in candle_transformers::models::debertav2 - Rust

HiddenActLayer

Struct HiddenActLayer 

Source
pub struct HiddenActLayer { /* private fields */ }

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.NERItem.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.NERItem.html deleted file mode 100644 index 22e60f0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.NERItem.html +++ /dev/null @@ -1,32 +0,0 @@ -NERItem in candle_transformers::models::debertav2 - Rust

NERItem

Struct NERItem 

Source
pub struct NERItem {
-    pub entity: String,
-    pub word: String,
-    pub score: f32,
-    pub start: usize,
-    pub end: usize,
-    pub index: usize,
-}

Fields§

§entity: String§word: String§score: f32§start: usize§end: usize§index: usize

Trait Implementations§

Source§

impl Debug for NERItem

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.StableDropout.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.StableDropout.html deleted file mode 100644 index 455e39b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.StableDropout.html +++ /dev/null @@ -1,25 +0,0 @@ -StableDropout in candle_transformers::models::debertav2 - Rust

StableDropout

Struct StableDropout 

Source
pub struct StableDropout { /* private fields */ }

Implementations§

Source§

impl StableDropout

Source

pub fn new(drop_prob: f64) -> Self

Source

pub fn forward(&self, x: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.TextClassificationItem.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.TextClassificationItem.html deleted file mode 100644 index 248fdd3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/struct.TextClassificationItem.html +++ /dev/null @@ -1,28 +0,0 @@ -TextClassificationItem in candle_transformers::models::debertav2 - Rust

TextClassificationItem

Struct TextClassificationItem 

Source
pub struct TextClassificationItem {
-    pub label: String,
-    pub score: f32,
-}

Fields§

§label: String§score: f32

Trait Implementations§

Source§

impl Debug for TextClassificationItem

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/type.Id2Label.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/type.Id2Label.html deleted file mode 100644 index 0472131..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/type.Id2Label.html +++ /dev/null @@ -1 +0,0 @@ -Id2Label in candle_transformers::models::debertav2 - Rust

Id2Label

Type Alias Id2Label 

Source
pub type Id2Label = HashMap<u32, String>;

Aliased Type§

pub struct Id2Label { /* private fields */ }
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/debertav2/type.Label2Id.html b/network-poc/target-native/doc/candle_transformers/models/debertav2/type.Label2Id.html deleted file mode 100644 index d64b045..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/debertav2/type.Label2Id.html +++ /dev/null @@ -1 +0,0 @@ -Label2Id in candle_transformers::models::debertav2 - Rust

Label2Id

Type Alias Label2Id 

Source
pub type Label2Id = HashMap<String, u32>;

Aliased Type§

pub struct Label2Id { /* private fields */ }
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/deepseek2/enum.DeepSeekV2RopeScaling.html b/network-poc/target-native/doc/candle_transformers/models/deepseek2/enum.DeepSeekV2RopeScaling.html deleted file mode 100644 index 9e770ec..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/deepseek2/enum.DeepSeekV2RopeScaling.html +++ /dev/null @@ -1,43 +0,0 @@ -DeepSeekV2RopeScaling in candle_transformers::models::deepseek2 - Rust

DeepSeekV2RopeScaling

Enum DeepSeekV2RopeScaling 

Source
pub enum DeepSeekV2RopeScaling {
-    Yarn {
-        original_max_position_embeddings: usize,
-        beta_fast: f32,
-        beta_slow: f32,
-        mscale: f32,
-        mscale_all_dim: f32,
-        factor: f32,
-        scaling_type: ScaledRopeType,
-    },
-    LinearOrDynamic {
-        scaling_type: ScaledRopeType,
-        factor: f64,
-    },
-}

Variants§

§

Yarn

Fields

§original_max_position_embeddings: usize
§beta_fast: f32
§beta_slow: f32
§mscale: f32
§mscale_all_dim: f32
§factor: f32
§scaling_type: ScaledRopeType
§

LinearOrDynamic

Fields

§scaling_type: ScaledRopeType
§factor: f64

Trait Implementations§

Source§

impl Clone for DeepSeekV2RopeScaling

Source§

fn clone(&self) -> DeepSeekV2RopeScaling

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DeepSeekV2RopeScaling

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for DeepSeekV2RopeScaling

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/deepseek2/enum.ScaledRopeType.html b/network-poc/target-native/doc/candle_transformers/models/deepseek2/enum.ScaledRopeType.html deleted file mode 100644 index b4ead92..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/deepseek2/enum.ScaledRopeType.html +++ /dev/null @@ -1,34 +0,0 @@ -ScaledRopeType in candle_transformers::models::deepseek2 - Rust

ScaledRopeType

Enum ScaledRopeType 

Source
pub enum ScaledRopeType {
-    Su,
-    Yarn,
-    Dynamic,
-    Linear,
-}

Variants§

§

Su

§

Yarn

§

Dynamic

§

Linear

Trait Implementations§

Source§

impl Clone for ScaledRopeType

Source§

fn clone(&self) -> ScaledRopeType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ScaledRopeType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for ScaledRopeType

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/deepseek2/index.html b/network-poc/target-native/doc/candle_transformers/models/deepseek2/index.html deleted file mode 100644 index b87995d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/deepseek2/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::deepseek2 - Rust

Module deepseek2

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/deepseek2/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/deepseek2/sidebar-items.js deleted file mode 100644 index f8c1bbe..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/deepseek2/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["DeepSeekV2RopeScaling","ScaledRopeType"],"struct":["DeepSeekV2","DeepSeekV2Config","DeepSeekV2RopeConfig","DeepSeekV2RotaryEmbedding","TopKOutput"],"trait":["BincountOp","NonZeroOp","SplitOp","TopKLastDimOp"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2.html b/network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2.html deleted file mode 100644 index acc4add..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2.html +++ /dev/null @@ -1,29 +0,0 @@ -DeepSeekV2 in candle_transformers::models::deepseek2 - Rust

DeepSeekV2

Struct DeepSeekV2 

Source
pub struct DeepSeekV2 { /* private fields */ }

Implementations§

Source§

impl DeepSeekV2

Source

pub fn new(cfg: &DeepSeekV2Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2Config.html b/network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2Config.html deleted file mode 100644 index 5fec087..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2Config.html +++ /dev/null @@ -1,29 +0,0 @@ -DeepSeekV2Config in candle_transformers::models::deepseek2 - Rust

DeepSeekV2Config

Struct DeepSeekV2Config 

Source
pub struct DeepSeekV2Config { /* private fields */ }

Trait Implementations§

Source§

impl Clone for DeepSeekV2Config

Source§

fn clone(&self) -> DeepSeekV2Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DeepSeekV2Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for DeepSeekV2Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2RopeConfig.html b/network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2RopeConfig.html deleted file mode 100644 index ce15a11..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2RopeConfig.html +++ /dev/null @@ -1,30 +0,0 @@ -DeepSeekV2RopeConfig in candle_transformers::models::deepseek2 - Rust

DeepSeekV2RopeConfig

Struct DeepSeekV2RopeConfig 

Source
pub struct DeepSeekV2RopeConfig {
-    pub rope_scaling: Option<DeepSeekV2RopeScaling>,
-    pub max_position_embeddings: usize,
-    pub rope_theta: f32,
-    pub qk_rope_head_dim: usize,
-}

Fields§

§rope_scaling: Option<DeepSeekV2RopeScaling>§max_position_embeddings: usize§rope_theta: f32§qk_rope_head_dim: usize

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2RotaryEmbedding.html b/network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2RotaryEmbedding.html deleted file mode 100644 index 4c6a932..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.DeepSeekV2RotaryEmbedding.html +++ /dev/null @@ -1,36 +0,0 @@ -DeepSeekV2RotaryEmbedding in candle_transformers::models::deepseek2 - Rust

DeepSeekV2RotaryEmbedding

Struct DeepSeekV2RotaryEmbedding 

Source
pub struct DeepSeekV2RotaryEmbedding { /* private fields */ }

Implementations§

Source§

impl DeepSeekV2RotaryEmbedding

Source

pub fn new( - cfg: &DeepSeekV2RopeConfig, - dtype: DType, - dev: &Device, -) -> Result<Self>

Source

pub fn forward( - &self, - q: &Tensor, - k: &Tensor, - seqlen_offset: usize, -) -> Result<(Tensor, Tensor)>

Trait Implementations§

Source§

impl Clone for DeepSeekV2RotaryEmbedding

Source§

fn clone(&self) -> DeepSeekV2RotaryEmbedding

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DeepSeekV2RotaryEmbedding

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.TopKOutput.html b/network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.TopKOutput.html deleted file mode 100644 index a416ec6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/deepseek2/struct.TopKOutput.html +++ /dev/null @@ -1,28 +0,0 @@ -TopKOutput in candle_transformers::models::deepseek2 - Rust

TopKOutput

Struct TopKOutput 

Source
pub struct TopKOutput {
-    pub values: Tensor,
-    pub indices: Tensor,
-}

Fields§

§values: Tensor§indices: Tensor

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.BincountOp.html b/network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.BincountOp.html deleted file mode 100644 index 1cc8f6e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.BincountOp.html +++ /dev/null @@ -1,4 +0,0 @@ -BincountOp in candle_transformers::models::deepseek2 - Rust

BincountOp

Trait BincountOp 

Source
pub trait BincountOp {
-    // Required method
-    fn bincount(&self, minlength: u32) -> Result<Vec<u32>>;
-}

Required Methods§

Source

fn bincount(&self, minlength: u32) -> Result<Vec<u32>>

Implementations on Foreign Types§

Source§

impl BincountOp for Tensor

Source§

fn bincount(&self, minlength: u32) -> Result<Vec<u32>>

Implementors§

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.NonZeroOp.html b/network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.NonZeroOp.html deleted file mode 100644 index bca3fd7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.NonZeroOp.html +++ /dev/null @@ -1,4 +0,0 @@ -NonZeroOp in candle_transformers::models::deepseek2 - Rust

NonZeroOp

Trait NonZeroOp 

Source
pub trait NonZeroOp {
-    // Required method
-    fn nonzero(&self) -> Result<Tensor>;
-}

Required Methods§

Source

fn nonzero(&self) -> Result<Tensor>

Implementations on Foreign Types§

Source§

impl NonZeroOp for Tensor

Source§

fn nonzero(&self) -> Result<Tensor>

Implementors§

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.SplitOp.html b/network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.SplitOp.html deleted file mode 100644 index 33df190..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.SplitOp.html +++ /dev/null @@ -1,4 +0,0 @@ -SplitOp in candle_transformers::models::deepseek2 - Rust

SplitOp

Trait SplitOp 

Source
pub trait SplitOp {
-    // Required method
-    fn split<D: Dim>(&self, splits: &[usize], dim: D) -> Result<Vec<Tensor>>;
-}

Required Methods§

Source

fn split<D: Dim>(&self, splits: &[usize], dim: D) -> Result<Vec<Tensor>>

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl SplitOp for Tensor

Source§

fn split<D: Dim>(&self, splits: &[usize], dim: D) -> Result<Vec<Tensor>>

Implementors§

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.TopKLastDimOp.html b/network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.TopKLastDimOp.html deleted file mode 100644 index 1fd27c3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/deepseek2/trait.TopKLastDimOp.html +++ /dev/null @@ -1,11 +0,0 @@ -TopKLastDimOp in candle_transformers::models::deepseek2 - Rust

TopKLastDimOp

Trait TopKLastDimOp 

Source
pub trait TopKLastDimOp {
-    // Required methods
-    fn topk(&self, topk: usize) -> Result<TopKOutput>;
-    fn topk_unsorted(&self, topk: usize) -> Result<TopKOutput>;
-}

Required Methods§

Source

fn topk(&self, topk: usize) -> Result<TopKOutput>

Topk in the last dim. values retains a gradient but indices has none w.r.t self. -This expects a contiguous tensor. -Note: this implements torch.topk with sorted=True.

-
Source

fn topk_unsorted(&self, topk: usize) -> Result<TopKOutput>

Topk in the last dim. values retains a gradient but indices has none w.r.t self. -This expects a contiguous tensor. -Note: this implements torch.topk with sorted=False.

-

Implementations on Foreign Types§

Source§

impl TopKLastDimOp for Tensor

Source§

fn topk(&self, topk: usize) -> Result<TopKOutput>

Source§

fn topk_unsorted(&self, topk: usize) -> Result<TopKOutput>

Implementors§

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/index.html b/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/index.html deleted file mode 100644 index 8d1c85b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/index.html +++ /dev/null @@ -1,6 +0,0 @@ -candle_transformers::models::depth_anything_v2 - Rust

Module depth_anything_v2

Module depth_anything_v2 

Source
Expand description

Implementation of the Depth Anything model from FAIR.

-

See:

- -

Structs§

DPTHead
DepthAnythingV2
DepthAnythingV2Config
FeatureFusionBlock
ResidualConvUnit
Scratch
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/sidebar-items.js deleted file mode 100644 index bc02052..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["DPTHead","DepthAnythingV2","DepthAnythingV2Config","FeatureFusionBlock","ResidualConvUnit","Scratch"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.DPTHead.html b/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.DPTHead.html deleted file mode 100644 index 3fe0c04..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.DPTHead.html +++ /dev/null @@ -1,26 +0,0 @@ -DPTHead in candle_transformers::models::depth_anything_v2 - Rust

DPTHead

Struct DPTHead 

Source
pub struct DPTHead { /* private fields */ }

Implementations§

Source§

impl DPTHead

Source

pub fn new(conf: &DepthAnythingV2Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Module for DPTHead

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

§

impl Freeze for DPTHead

§

impl !RefUnwindSafe for DPTHead

§

impl !Send for DPTHead

§

impl !Sync for DPTHead

§

impl Unpin for DPTHead

§

impl !UnwindSafe for DPTHead

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.DepthAnythingV2.html b/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.DepthAnythingV2.html deleted file mode 100644 index 88c27ee..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.DepthAnythingV2.html +++ /dev/null @@ -1,30 +0,0 @@ -DepthAnythingV2 in candle_transformers::models::depth_anything_v2 - Rust

DepthAnythingV2

Struct DepthAnythingV2 

Source
pub struct DepthAnythingV2 { /* private fields */ }

Implementations§

Source§

impl DepthAnythingV2

Source

pub fn new( - pretrained: Arc<DinoVisionTransformer>, - conf: DepthAnythingV2Config, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Module for DepthAnythingV2

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.DepthAnythingV2Config.html b/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.DepthAnythingV2Config.html deleted file mode 100644 index 3889798..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.DepthAnythingV2Config.html +++ /dev/null @@ -1,34 +0,0 @@ -DepthAnythingV2Config in candle_transformers::models::depth_anything_v2 - Rust

DepthAnythingV2Config

Struct DepthAnythingV2Config 

Source
pub struct DepthAnythingV2Config { /* private fields */ }

Implementations§

Source§

impl DepthAnythingV2Config

Source

pub fn new( - out_channel_sizes: [usize; 4], - in_channel_size: usize, - num_features: usize, - use_batch_norm: bool, - use_class_token: bool, - layer_ids_vits: Vec<usize>, - input_image_size: usize, - target_patch_size: usize, -) -> Self

Source

pub fn vit_small() -> Self

Source

pub fn vit_base() -> Self

Source

pub fn vit_large() -> Self

Source

pub fn vit_giant() -> Self

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.FeatureFusionBlock.html b/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.FeatureFusionBlock.html deleted file mode 100644 index efda16a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.FeatureFusionBlock.html +++ /dev/null @@ -1,31 +0,0 @@ -FeatureFusionBlock in candle_transformers::models::depth_anything_v2 - Rust

FeatureFusionBlock

Struct FeatureFusionBlock 

Source
pub struct FeatureFusionBlock { /* private fields */ }

Implementations§

Source§

impl FeatureFusionBlock

Source

pub fn new( - conf: &DepthAnythingV2Config, - target_patch_size: usize, - activation: Activation, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Module for FeatureFusionBlock

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.ResidualConvUnit.html b/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.ResidualConvUnit.html deleted file mode 100644 index 9ea04b7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.ResidualConvUnit.html +++ /dev/null @@ -1,30 +0,0 @@ -ResidualConvUnit in candle_transformers::models::depth_anything_v2 - Rust

ResidualConvUnit

Struct ResidualConvUnit 

Source
pub struct ResidualConvUnit { /* private fields */ }

Implementations§

Source§

impl ResidualConvUnit

Source

pub fn new( - conf: &DepthAnythingV2Config, - activation: Activation, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Module for ResidualConvUnit

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.Scratch.html b/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.Scratch.html deleted file mode 100644 index 08188f3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/depth_anything_v2/struct.Scratch.html +++ /dev/null @@ -1,25 +0,0 @@ -Scratch in candle_transformers::models::depth_anything_v2 - Rust

Scratch

Struct Scratch 

Source
pub struct Scratch { /* private fields */ }

Implementations§

Source§

impl Scratch

Source

pub fn new(conf: &DepthAnythingV2Config, vb: VarBuilder<'_>) -> Result<Self>

Auto Trait Implementations§

§

impl Freeze for Scratch

§

impl !RefUnwindSafe for Scratch

§

impl !Send for Scratch

§

impl !Sync for Scratch

§

impl Unpin for Scratch

§

impl !UnwindSafe for Scratch

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dinov2/fn.vit_small.html b/network-poc/target-native/doc/candle_transformers/models/dinov2/fn.vit_small.html deleted file mode 100644 index 6a1b9a5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dinov2/fn.vit_small.html +++ /dev/null @@ -1 +0,0 @@ -vit_small in candle_transformers::models::dinov2 - Rust

vit_small

Function vit_small 

Source
pub fn vit_small(vb: VarBuilder<'_>) -> Result<DinoVisionTransformer>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dinov2/index.html b/network-poc/target-native/doc/candle_transformers/models/dinov2/index.html deleted file mode 100644 index dda69e4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dinov2/index.html +++ /dev/null @@ -1,24 +0,0 @@ -candle_transformers::models::dinov2 - Rust

Module dinov2

Module dinov2 

Source
Expand description

Implementation of the DINOv2 models from Meta Research.

-

This module implements the DINOv2 vision transformer model from Meta AI Research. -DINOv2 is a self-supervised learning model that can learn visual features -without using any labeled data. See: “DINOv2: Learning Robust Visual Features without Supervision”

-

§Running an example with color map and CUDA

cargo run \
-  --features cuda,depth_anything_v2 \
-  --package candle-examples \
-  --example depth_anything_v2 \
-  -- --color-map \
-  --image candle-examples/examples/yolo-v8/assets/bike.jpg

§Running as an ImageNet classifier

-

The model returns the probability for the image to belong to each of the 1000 ImageNet categories.

-
- -
-
cargo run \
-  --example dinov2 \
-  --release \
-  -- --image candle-examples/examples/yolo-v8/assets/bike.jpg
-
-> mountain bike, all-terrain bike, off-roader: 43.67%
-> bicycle-built-for-two, tandem bicycle, tandem: 33.20%
-> crash helmet            : 13.23%
-> unicycle, monocycle     : 2.44%
-> maillot                 : 2.42%

Structs§

DinoVisionTransformer

Functions§

vit_small
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dinov2/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/dinov2/sidebar-items.js deleted file mode 100644 index 56623eb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dinov2/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["vit_small"],"struct":["DinoVisionTransformer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dinov2/struct.DinoVisionTransformer.html b/network-poc/target-native/doc/candle_transformers/models/dinov2/struct.DinoVisionTransformer.html deleted file mode 100644 index 5dae90e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dinov2/struct.DinoVisionTransformer.html +++ /dev/null @@ -1,38 +0,0 @@ -DinoVisionTransformer in candle_transformers::models::dinov2 - Rust

DinoVisionTransformer

Struct DinoVisionTransformer 

Source
pub struct DinoVisionTransformer { /* private fields */ }

Implementations§

Source§

impl DinoVisionTransformer

Source

pub fn new( - vb: VarBuilder<'_>, - depth: usize, - embed_dim: usize, - num_heads: usize, -) -> Result<Self>

Source

pub fn get_intermediate_layers( - &self, - xs: &Tensor, - blocks_to_take: &[usize], - reshape: bool, - return_class_token: bool, - norm: bool, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for DinoVisionTransformer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for DinoVisionTransformer

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dinov2reg4/fn.vit_base.html b/network-poc/target-native/doc/candle_transformers/models/dinov2reg4/fn.vit_base.html deleted file mode 100644 index e92e8dc..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dinov2reg4/fn.vit_base.html +++ /dev/null @@ -1 +0,0 @@ -vit_base in candle_transformers::models::dinov2reg4 - Rust

vit_base

Function vit_base 

Source
pub fn vit_base(vb: VarBuilder<'_>) -> Result<DinoVisionTransformer>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dinov2reg4/fn.vit_small.html b/network-poc/target-native/doc/candle_transformers/models/dinov2reg4/fn.vit_small.html deleted file mode 100644 index d23410b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dinov2reg4/fn.vit_small.html +++ /dev/null @@ -1 +0,0 @@ -vit_small in candle_transformers::models::dinov2reg4 - Rust

vit_small

Function vit_small 

Source
pub fn vit_small(vb: VarBuilder<'_>) -> Result<DinoVisionTransformer>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dinov2reg4/index.html b/network-poc/target-native/doc/candle_transformers/models/dinov2reg4/index.html deleted file mode 100644 index 70a1abb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dinov2reg4/index.html +++ /dev/null @@ -1,25 +0,0 @@ -candle_transformers::models::dinov2reg4 - Rust

Module dinov2reg4

Module dinov2reg4 

Source
Expand description

Implementation of the DINOv2 revision (4 regularization)

-

The DINOv2-reg4 model is a variant of DINOv2 that adds 4 regularization tokens to the -original architecture. This implementation is specifically trained for plant species -classification on the PlantCLEF2024 dataset with 7,806 classes.

-
    -
  • Paper. DINOv2: Learning Robust Visual Features without Supervision
  • -
  • GH Repo
  • -
-

§Example

# Download classes names and a plant picture to identify
-# see candle/examples/dinov2reg4 for full code.
-
-# Perform inference
-cargo run \
-  --example dinov2reg4 \
-  --release -- \
-  --image <orchid-file>
-
-> Orchis simia Lam.       : 45.55%
-> Orchis × bergonii Nanteuil: 9.80%
-> Orchis italica Poir.    : 9.66%
-> Orchis × angusticruris Franch.: 2.76%
-> Orchis × bivonae Tod.   : 2.54%
- -
-

Structs§

DinoVisionTransformer

Functions§

vit_base
vit_small
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dinov2reg4/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/dinov2reg4/sidebar-items.js deleted file mode 100644 index 4015a78..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dinov2reg4/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["vit_base","vit_small"],"struct":["DinoVisionTransformer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/dinov2reg4/struct.DinoVisionTransformer.html b/network-poc/target-native/doc/candle_transformers/models/dinov2reg4/struct.DinoVisionTransformer.html deleted file mode 100644 index 78143f5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/dinov2reg4/struct.DinoVisionTransformer.html +++ /dev/null @@ -1,31 +0,0 @@ -DinoVisionTransformer in candle_transformers::models::dinov2reg4 - Rust

DinoVisionTransformer

Struct DinoVisionTransformer 

Source
pub struct DinoVisionTransformer { /* private fields */ }

Implementations§

Source§

impl DinoVisionTransformer

Source

pub fn new( - vb: VarBuilder<'_>, - depth: usize, - embed_dim: usize, - num_heads: usize, -) -> Result<Self>

Trait Implementations§

Source§

impl Debug for DinoVisionTransformer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for DinoVisionTransformer

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/distilbert/constant.DTYPE.html b/network-poc/target-native/doc/candle_transformers/models/distilbert/constant.DTYPE.html deleted file mode 100644 index 9ace41d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/distilbert/constant.DTYPE.html +++ /dev/null @@ -1 +0,0 @@ -DTYPE in candle_transformers::models::distilbert - Rust

DTYPE

Constant DTYPE 

Source
pub const DTYPE: DType;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/distilbert/index.html b/network-poc/target-native/doc/candle_transformers/models/distilbert/index.html deleted file mode 100644 index 5d1e382..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/distilbert/index.html +++ /dev/null @@ -1,6 +0,0 @@ -candle_transformers::models::distilbert - Rust

Module distilbert

Module distilbert 

Source
Expand description

Implementation of DistilBert, a distilled version of BERT.

-

See:

- -

Structs§

Config
DistilBertModel

Constants§

DTYPE
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/distilbert/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/distilbert/sidebar-items.js deleted file mode 100644 index 24e4cc9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/distilbert/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"constant":["DTYPE"],"struct":["Config","DistilBertModel"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/distilbert/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/distilbert/struct.Config.html deleted file mode 100644 index e0f409a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/distilbert/struct.Config.html +++ /dev/null @@ -1,30 +0,0 @@ -Config in candle_transformers::models::distilbert - Rust

Config

Struct Config 

Source
pub struct Config { /* private fields */ }

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Config

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/distilbert/struct.DistilBertModel.html b/network-poc/target-native/doc/candle_transformers/models/distilbert/struct.DistilBertModel.html deleted file mode 100644 index 32bab3b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/distilbert/struct.DistilBertModel.html +++ /dev/null @@ -1,32 +0,0 @@ -DistilBertModel in candle_transformers::models::distilbert - Rust

DistilBertModel

Struct DistilBertModel 

Source
pub struct DistilBertModel {
-    pub device: Device,
-    /* private fields */
-}

Fields§

§device: Device

Implementations§

Source§

impl DistilBertModel

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward( - &self, - input_ids: &Tensor, - attention_mask: &Tensor, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/efficientnet/index.html b/network-poc/target-native/doc/candle_transformers/models/efficientnet/index.html deleted file mode 100644 index d75daa9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/efficientnet/index.html +++ /dev/null @@ -1,6 +0,0 @@ -candle_transformers::models::efficientnet - Rust

Module efficientnet

Module efficientnet 

Source
Expand description

Implementation of EfficientBert, an efficient variant of BERT for computer vision tasks.

-

See:

- -

Structs§

EfficientNet
MBConvConfig
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/efficientnet/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/efficientnet/sidebar-items.js deleted file mode 100644 index 3c53965..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/efficientnet/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["EfficientNet","MBConvConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/efficientnet/struct.EfficientNet.html b/network-poc/target-native/doc/candle_transformers/models/efficientnet/struct.EfficientNet.html deleted file mode 100644 index bb39944..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/efficientnet/struct.EfficientNet.html +++ /dev/null @@ -1,30 +0,0 @@ -EfficientNet in candle_transformers::models::efficientnet - Rust

EfficientNet

Struct EfficientNet 

Source
pub struct EfficientNet { /* private fields */ }

Implementations§

Source§

impl EfficientNet

Source

pub fn new( - p: VarBuilder<'_>, - configs: Vec<MBConvConfig>, - nclasses: usize, -) -> Result<Self>

Trait Implementations§

Source§

impl Debug for EfficientNet

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for EfficientNet

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/efficientnet/struct.MBConvConfig.html b/network-poc/target-native/doc/candle_transformers/models/efficientnet/struct.MBConvConfig.html deleted file mode 100644 index e25c1e6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/efficientnet/struct.MBConvConfig.html +++ /dev/null @@ -1,27 +0,0 @@ -MBConvConfig in candle_transformers::models::efficientnet - Rust

MBConvConfig

Struct MBConvConfig 

Source
pub struct MBConvConfig { /* private fields */ }

Implementations§

Source§

impl MBConvConfig

Source

pub fn b0() -> Vec<Self>

Source

pub fn b1() -> Vec<Self>

Source

pub fn b2() -> Vec<Self>

Source

pub fn b3() -> Vec<Self>

Source

pub fn b4() -> Vec<Self>

Source

pub fn b5() -> Vec<Self>

Source

pub fn b6() -> Vec<Self>

Source

pub fn b7() -> Vec<Self>

Trait Implementations§

Source§

impl Clone for MBConvConfig

Source§

fn clone(&self) -> MBConvConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MBConvConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Copy for MBConvConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/efficientvit/fn.efficientvit.html b/network-poc/target-native/doc/candle_transformers/models/efficientvit/fn.efficientvit.html deleted file mode 100644 index 08f846a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/efficientvit/fn.efficientvit.html +++ /dev/null @@ -1,5 +0,0 @@ -efficientvit in candle_transformers::models::efficientvit - Rust

efficientvit

Function efficientvit 

Source
pub fn efficientvit(
-    cfg: &Config,
-    nclasses: usize,
-    vb: VarBuilder<'_>,
-) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/efficientvit/fn.efficientvit_no_final_layer.html b/network-poc/target-native/doc/candle_transformers/models/efficientvit/fn.efficientvit_no_final_layer.html deleted file mode 100644 index 67d44f0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/efficientvit/fn.efficientvit_no_final_layer.html +++ /dev/null @@ -1,4 +0,0 @@ -efficientvit_no_final_layer in candle_transformers::models::efficientvit - Rust

efficientvit_no_final_layer

Function efficientvit_no_final_layer 

Source
pub fn efficientvit_no_final_layer(
-    cfg: &Config,
-    vb: VarBuilder<'_>,
-) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/efficientvit/index.html b/network-poc/target-native/doc/candle_transformers/models/efficientvit/index.html deleted file mode 100644 index f9665bb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/efficientvit/index.html +++ /dev/null @@ -1,26 +0,0 @@ -candle_transformers::models::efficientvit - Rust

Module efficientvit

Module efficientvit 

Source
Expand description

EfficientViT (MSRA) inference implementation based on timm.

-

This crate provides an implementation of the EfficientViT model from Microsoft Research Asia -for efficient image classification. The model uses cascaded group attention modules -to achieve strong performance while maintaining low memory usage.

-

The model was originally described in the paper: -“EfficientViT: Memory Efficient Vision Transformer with Cascaded Group Attention”

-

This implementation is based on the reference implementation from -pytorch-image-models.

-

§Example Usage

-

This candle implementation uses a pre-trained EfficientViT (from Microsoft Research Asia) network for inference. -The classification head has been trained on the ImageNet dataset and returns the probabilities for the top-5 classes.

-
cargo run
-  --example efficientvit \
-  --release -- \
-  --image candle-examples/examples/yolo-v8/assets/bike.jpg --which m1
-
-> loaded image Tensor[dims 3, 224, 224; f32]
-> model built
-> mountain bike, all-terrain bike, off-roader: 69.80%
-> unicycle, monocycle     : 13.03%
-> bicycle-built-for-two, tandem bicycle, tandem: 9.28%
-> crash helmet            : 2.25%
-> alp                     : 0.46%
- -
-

Structs§

Config

Functions§

efficientvit
efficientvit_no_final_layer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/efficientvit/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/efficientvit/sidebar-items.js deleted file mode 100644 index d5788af..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/efficientvit/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["efficientvit","efficientvit_no_final_layer"],"struct":["Config"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/efficientvit/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/efficientvit/struct.Config.html deleted file mode 100644 index 2679819..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/efficientvit/struct.Config.html +++ /dev/null @@ -1,27 +0,0 @@ -Config in candle_transformers::models::efficientvit - Rust

Config

Struct Config 

Source
pub struct Config { /* private fields */ }

Implementations§

Source§

impl Config

Source

pub fn m0() -> Self

Source

pub fn m1() -> Self

Source

pub fn m2() -> Self

Source

pub fn m3() -> Self

Source

pub fn m4() -> Self

Source

pub fn m5() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/enum.NormType.html b/network-poc/target-native/doc/candle_transformers/models/encodec/enum.NormType.html deleted file mode 100644 index d8adb51..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/enum.NormType.html +++ /dev/null @@ -1,40 +0,0 @@ -NormType in candle_transformers::models::encodec - Rust

NormType

Enum NormType 

Source
pub enum NormType {
-    WeightNorm,
-    TimeGroupNorm,
-    None,
-}

Variants§

§

WeightNorm

§

TimeGroupNorm

§

None

Trait Implementations§

Source§

impl Clone for NormType

Source§

fn clone(&self) -> NormType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NormType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for NormType

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for NormType

Source§

fn eq(&self, other: &NormType) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for NormType

Source§

impl Eq for NormType

Source§

impl StructuralPartialEq for NormType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/enum.PadMode.html b/network-poc/target-native/doc/candle_transformers/models/encodec/enum.PadMode.html deleted file mode 100644 index f06beeb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/enum.PadMode.html +++ /dev/null @@ -1,40 +0,0 @@ -PadMode in candle_transformers::models::encodec - Rust

PadMode

Enum PadMode 

Source
pub enum PadMode {
-    Constant,
-    Reflect,
-    Replicate,
-}

Variants§

§

Constant

§

Reflect

§

Replicate

Trait Implementations§

Source§

impl Clone for PadMode

Source§

fn clone(&self) -> PadMode

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PadMode

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for PadMode

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for PadMode

Source§

fn eq(&self, other: &PadMode) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for PadMode

Source§

impl Eq for PadMode

Source§

impl StructuralPartialEq for PadMode

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/fn.conv1d_weight_norm.html b/network-poc/target-native/doc/candle_transformers/models/encodec/fn.conv1d_weight_norm.html deleted file mode 100644 index 6cb2050..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/fn.conv1d_weight_norm.html +++ /dev/null @@ -1,7 +0,0 @@ -conv1d_weight_norm in candle_transformers::models::encodec - Rust

conv1d_weight_norm

Function conv1d_weight_norm 

Source
pub fn conv1d_weight_norm(
-    in_c: usize,
-    out_c: usize,
-    kernel_size: usize,
-    config: Conv1dConfig,
-    vb: VarBuilder<'_>,
-) -> Result<Conv1d>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/fn.conv_transpose1d_weight_norm.html b/network-poc/target-native/doc/candle_transformers/models/encodec/fn.conv_transpose1d_weight_norm.html deleted file mode 100644 index 77a7099..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/fn.conv_transpose1d_weight_norm.html +++ /dev/null @@ -1,8 +0,0 @@ -conv_transpose1d_weight_norm in candle_transformers::models::encodec - Rust

conv_transpose1d_weight_norm

Function conv_transpose1d_weight_norm 

Source
pub fn conv_transpose1d_weight_norm(
-    in_c: usize,
-    out_c: usize,
-    kernel_size: usize,
-    bias: bool,
-    config: ConvTranspose1dConfig,
-    vb: VarBuilder<'_>,
-) -> Result<ConvTranspose1d>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/index.html b/network-poc/target-native/doc/candle_transformers/models/encodec/index.html deleted file mode 100644 index 2a7b63c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/index.html +++ /dev/null @@ -1,4 +0,0 @@ -candle_transformers::models::encodec - Rust

Module encodec

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/encodec/sidebar-items.js deleted file mode 100644 index 067744b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["NormType","PadMode"],"fn":["conv1d_weight_norm","conv_transpose1d_weight_norm"],"struct":["Config","Decoder","EncodecConv1d","EncodecConvTranspose1d","EncodecLSTM","EncodecResnetBlock","Encoder","EuclideanCodebook","Model","ResidualVectorQuantizer","VectorQuantization"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/encodec/struct.Config.html deleted file mode 100644 index a9ab078..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.Config.html +++ /dev/null @@ -1,54 +0,0 @@ -Config in candle_transformers::models::encodec - Rust

Config

Struct Config 

Source
pub struct Config {
Show 23 fields - pub target_bandwidths: Vec<f64>, - pub sampling_rate: usize, - pub audio_channels: usize, - pub normalize: bool, - pub chunk_length_s: Option<usize>, - pub overlap: Option<usize>, - pub hidden_size: usize, - pub num_filters: usize, - pub num_residual_layers: usize, - pub upsampling_ratios: Vec<usize>, - pub norm_type: NormType, - pub kernel_size: usize, - pub last_kernel_size: usize, - pub residual_kernel_size: usize, - pub dilation_growth_rate: usize, - pub use_causal_conv: bool, - pub pad_mode: PadMode, - pub compress: usize, - pub num_lstm_layers: usize, - pub trim_right_ratio: f64, - pub codebook_size: usize, - pub codebook_dim: Option<usize>, - pub use_conv_shortcut: bool, -
}

Fields§

§target_bandwidths: Vec<f64>§sampling_rate: usize§audio_channels: usize§normalize: bool§chunk_length_s: Option<usize>§overlap: Option<usize>§hidden_size: usize§num_filters: usize§num_residual_layers: usize§upsampling_ratios: Vec<usize>§norm_type: NormType§kernel_size: usize§last_kernel_size: usize§residual_kernel_size: usize§dilation_growth_rate: usize§use_causal_conv: bool§pad_mode: PadMode§compress: usize§num_lstm_layers: usize§trim_right_ratio: f64§codebook_size: usize§codebook_dim: Option<usize>§use_conv_shortcut: bool

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Config

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.Decoder.html b/network-poc/target-native/doc/candle_transformers/models/encodec/struct.Decoder.html deleted file mode 100644 index a305f60..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.Decoder.html +++ /dev/null @@ -1,28 +0,0 @@ -Decoder in candle_transformers::models::encodec - Rust

Decoder

Struct Decoder 

Source
pub struct Decoder { /* private fields */ }

Implementations§

Source§

impl Decoder

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Decoder

Source§

fn clone(&self) -> Decoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Decoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Decoder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecConv1d.html b/network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecConv1d.html deleted file mode 100644 index 023c4b7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecConv1d.html +++ /dev/null @@ -1,36 +0,0 @@ -EncodecConv1d in candle_transformers::models::encodec - Rust

EncodecConv1d

Struct EncodecConv1d 

Source
pub struct EncodecConv1d { /* private fields */ }

Implementations§

Source§

impl EncodecConv1d

Source

pub fn new( - in_c: usize, - out_c: usize, - kernel_size: usize, - stride: usize, - dilation: usize, - cfg: &Config, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for EncodecConv1d

Source§

fn clone(&self) -> EncodecConv1d

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EncodecConv1d

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for EncodecConv1d

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecConvTranspose1d.html b/network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecConvTranspose1d.html deleted file mode 100644 index cc6919a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecConvTranspose1d.html +++ /dev/null @@ -1,28 +0,0 @@ -EncodecConvTranspose1d in candle_transformers::models::encodec - Rust

EncodecConvTranspose1d

Struct EncodecConvTranspose1d 

Source
pub struct EncodecConvTranspose1d { /* private fields */ }

Trait Implementations§

Source§

impl Clone for EncodecConvTranspose1d

Source§

fn clone(&self) -> EncodecConvTranspose1d

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EncodecConvTranspose1d

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for EncodecConvTranspose1d

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecLSTM.html b/network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecLSTM.html deleted file mode 100644 index 5567c41..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecLSTM.html +++ /dev/null @@ -1,28 +0,0 @@ -EncodecLSTM in candle_transformers::models::encodec - Rust

EncodecLSTM

Struct EncodecLSTM 

Source
pub struct EncodecLSTM { /* private fields */ }

Implementations§

Source§

impl EncodecLSTM

Source

pub fn new(dim: usize, cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for EncodecLSTM

Source§

fn clone(&self) -> EncodecLSTM

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EncodecLSTM

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for EncodecLSTM

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecResnetBlock.html b/network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecResnetBlock.html deleted file mode 100644 index 95d412e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.EncodecResnetBlock.html +++ /dev/null @@ -1,33 +0,0 @@ -EncodecResnetBlock in candle_transformers::models::encodec - Rust

EncodecResnetBlock

Struct EncodecResnetBlock 

Source
pub struct EncodecResnetBlock { /* private fields */ }

Implementations§

Source§

impl EncodecResnetBlock

Source

pub fn new( - dim: usize, - (dilation1, dilation2): (usize, usize), - cfg: &Config, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for EncodecResnetBlock

Source§

fn clone(&self) -> EncodecResnetBlock

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EncodecResnetBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for EncodecResnetBlock

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.Encoder.html b/network-poc/target-native/doc/candle_transformers/models/encodec/struct.Encoder.html deleted file mode 100644 index f083b38..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.Encoder.html +++ /dev/null @@ -1,28 +0,0 @@ -Encoder in candle_transformers::models::encodec - Rust

Encoder

Struct Encoder 

Source
pub struct Encoder { /* private fields */ }

Implementations§

Source§

impl Encoder

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Encoder

Source§

fn clone(&self) -> Encoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Encoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Encoder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.EuclideanCodebook.html b/network-poc/target-native/doc/candle_transformers/models/encodec/struct.EuclideanCodebook.html deleted file mode 100644 index c6f6ea8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.EuclideanCodebook.html +++ /dev/null @@ -1,27 +0,0 @@ -EuclideanCodebook in candle_transformers::models::encodec - Rust

EuclideanCodebook

Struct EuclideanCodebook 

Source
pub struct EuclideanCodebook { /* private fields */ }

Implementations§

Source§

impl EuclideanCodebook

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn encode_slow(&self, xs: &Tensor) -> Result<Tensor>

Source

pub fn encode(&self, xs: &Tensor) -> Result<Tensor>

Source

pub fn decode(&self, embed_ind: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for EuclideanCodebook

Source§

fn clone(&self) -> EuclideanCodebook

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EuclideanCodebook

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/encodec/struct.Model.html deleted file mode 100644 index c184392..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.Model.html +++ /dev/null @@ -1,25 +0,0 @@ -Model in candle_transformers::models::encodec - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn encode(&self, xs: &Tensor) -> Result<Tensor>

Source

pub fn decode(&self, codes: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.ResidualVectorQuantizer.html b/network-poc/target-native/doc/candle_transformers/models/encodec/struct.ResidualVectorQuantizer.html deleted file mode 100644 index 1d4a0f1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.ResidualVectorQuantizer.html +++ /dev/null @@ -1,27 +0,0 @@ -ResidualVectorQuantizer in candle_transformers::models::encodec - Rust

ResidualVectorQuantizer

Struct ResidualVectorQuantizer 

Source
pub struct ResidualVectorQuantizer { /* private fields */ }

Implementations§

Source§

impl ResidualVectorQuantizer

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn encode(&self, xs: &Tensor) -> Result<Tensor>

Source

pub fn decode(&self, codes: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for ResidualVectorQuantizer

Source§

fn clone(&self) -> ResidualVectorQuantizer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ResidualVectorQuantizer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.VectorQuantization.html b/network-poc/target-native/doc/candle_transformers/models/encodec/struct.VectorQuantization.html deleted file mode 100644 index 33e420f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/encodec/struct.VectorQuantization.html +++ /dev/null @@ -1,27 +0,0 @@ -VectorQuantization in candle_transformers::models::encodec - Rust

VectorQuantization

Struct VectorQuantization 

Source
pub struct VectorQuantization { /* private fields */ }

Implementations§

Source§

impl VectorQuantization

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn encode(&self, xs: &Tensor) -> Result<Tensor>

Source

pub fn decode(&self, embed_ind: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for VectorQuantization

Source§

fn clone(&self) -> VectorQuantization

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VectorQuantization

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/eva2/fn.vit_base.html b/network-poc/target-native/doc/candle_transformers/models/eva2/fn.vit_base.html deleted file mode 100644 index ad7ba0b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/eva2/fn.vit_base.html +++ /dev/null @@ -1 +0,0 @@ -vit_base in candle_transformers::models::eva2 - Rust

vit_base

Function vit_base 

Source
pub fn vit_base(vb: VarBuilder<'_>) -> Result<EVA2VisionTransformer>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/eva2/fn.vit_large.html b/network-poc/target-native/doc/candle_transformers/models/eva2/fn.vit_large.html deleted file mode 100644 index 880b9b0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/eva2/fn.vit_large.html +++ /dev/null @@ -1 +0,0 @@ -vit_large in candle_transformers::models::eva2 - Rust

vit_large

Function vit_large 

Source
pub fn vit_large(vb: VarBuilder<'_>) -> Result<EVA2VisionTransformer>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/eva2/index.html b/network-poc/target-native/doc/candle_transformers/models/eva2/index.html deleted file mode 100644 index 0ff8642..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/eva2/index.html +++ /dev/null @@ -1,21 +0,0 @@ -candle_transformers::models::eva2 - Rust

Module eva2

Module eva2 

Source
Expand description

EVA-2 inference implementation.

-

EVA-02 is a computer vision model that can be used as an ImageNet classifier. -The model returns the probability for an image to belong to each of the 1000 -ImageNet categories.

-
    -
  • Paper. EVA-02: A Visual Representation for Neon Genesis
  • -
  • Code
  • -
-

§Example

cargo run \
-  --example eva2 \
-  --release -- \
-  --image candle-examples/examples/yolo-v8/assets/bike.jpg
-
-> mountain bike, all-terrain bike, off-roader: 37.09%
-> maillot                 : 8.30%
-> alp                     : 2.13%
-> bicycle-built-for-two, tandem bicycle, tandem: 0.84%
-> crash helmet            : 0.73%
- -
-

Structs§

EVA2VisionTransformer

Functions§

vit_base
vit_large
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/eva2/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/eva2/sidebar-items.js deleted file mode 100644 index 84ce6ea..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/eva2/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["vit_base","vit_large"],"struct":["EVA2VisionTransformer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/eva2/struct.EVA2VisionTransformer.html b/network-poc/target-native/doc/candle_transformers/models/eva2/struct.EVA2VisionTransformer.html deleted file mode 100644 index 561d2ef..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/eva2/struct.EVA2VisionTransformer.html +++ /dev/null @@ -1,38 +0,0 @@ -EVA2VisionTransformer in candle_transformers::models::eva2 - Rust

EVA2VisionTransformer

Struct EVA2VisionTransformer 

Source
pub struct EVA2VisionTransformer { /* private fields */ }

Implementations§

Source§

impl EVA2VisionTransformer

Source

pub fn new( - vb: VarBuilder<'_>, - depth: usize, - embed_dim: usize, - num_heads: usize, -) -> Result<Self>

Source

pub fn get_intermediate_layers( - &self, - xs: &Tensor, - blocks_to_take: &[usize], - reshape: bool, - return_class_token: bool, - norm: bool, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for EVA2VisionTransformer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for EVA2VisionTransformer

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/falcon/index.html b/network-poc/target-native/doc/candle_transformers/models/falcon/index.html deleted file mode 100644 index 2d33dbc..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/falcon/index.html +++ /dev/null @@ -1,4 +0,0 @@ -candle_transformers::models::falcon - Rust

Module falcon

Module falcon 

Source
Expand description

Falcon language model inference implementation

-

See “Falcon: a new approach to large language models”

-

Based on implementation from Huggingface Transformers

-

Structs§

Config
Falcon
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/falcon/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/falcon/sidebar-items.js deleted file mode 100644 index 6314e3c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/falcon/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Falcon"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/falcon/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/falcon/struct.Config.html deleted file mode 100644 index ecad8af..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/falcon/struct.Config.html +++ /dev/null @@ -1,47 +0,0 @@ -Config in candle_transformers::models::falcon - Rust

Config

Struct Config 

Source
pub struct Config {
Show 17 fields - pub vocab_size: usize, - pub hidden_size: usize, - pub num_hidden_layers: usize, - pub num_attention_heads: usize, - pub layer_norm_epsilon: f64, - pub initializer_range: f64, - pub use_cache: bool, - pub bos_token_id: u32, - pub eos_token_id: u32, - pub hidden_dropout: f64, - pub attention_dropout: f64, - pub n_head_kv: Option<usize>, - pub alibi: bool, - pub new_decoder_architecture: bool, - pub multi_query: bool, - pub parallel_attn: bool, - pub bias: bool, -
}

Fields§

§vocab_size: usize§hidden_size: usize§num_hidden_layers: usize§num_attention_heads: usize§layer_norm_epsilon: f64§initializer_range: f64§use_cache: bool§bos_token_id: u32§eos_token_id: u32§hidden_dropout: f64§attention_dropout: f64§n_head_kv: Option<usize>§alibi: bool§new_decoder_architecture: bool§multi_query: bool§parallel_attn: bool§bias: bool

Implementations§

Source§

impl Config

Source

pub fn validate(&self) -> Result<()>

Source

pub fn falcon7b() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Config

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/falcon/struct.Falcon.html b/network-poc/target-native/doc/candle_transformers/models/falcon/struct.Falcon.html deleted file mode 100644 index d69b55f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/falcon/struct.Falcon.html +++ /dev/null @@ -1,27 +0,0 @@ -Falcon in candle_transformers::models::falcon - Rust

Falcon

Struct Falcon 

Source
pub struct Falcon { /* private fields */ }

Implementations§

Source§

impl Falcon

Source

pub fn config(&self) -> &Config

Source

pub fn load(vb: VarBuilder<'_>, cfg: Config) -> Result<Self>

Source

pub fn forward(&mut self, input_ids: &Tensor) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Falcon

Source§

fn clone(&self) -> Falcon

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Falcon

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Falcon

§

impl !RefUnwindSafe for Falcon

§

impl Send for Falcon

§

impl Sync for Falcon

§

impl Unpin for Falcon

§

impl !UnwindSafe for Falcon

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/fastvit/fn.fastvit.html b/network-poc/target-native/doc/candle_transformers/models/fastvit/fn.fastvit.html deleted file mode 100644 index 72ccac2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/fastvit/fn.fastvit.html +++ /dev/null @@ -1,5 +0,0 @@ -fastvit in candle_transformers::models::fastvit - Rust

fastvit

Function fastvit 

Source
pub fn fastvit(
-    cfg: &Config,
-    nclasses: usize,
-    vb: VarBuilder<'_>,
-) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/fastvit/fn.fastvit_no_final_layer.html b/network-poc/target-native/doc/candle_transformers/models/fastvit/fn.fastvit_no_final_layer.html deleted file mode 100644 index 98265b4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/fastvit/fn.fastvit_no_final_layer.html +++ /dev/null @@ -1,4 +0,0 @@ -fastvit_no_final_layer in candle_transformers::models::fastvit - Rust

fastvit_no_final_layer

Function fastvit_no_final_layer 

Source
pub fn fastvit_no_final_layer(
-    cfg: &Config,
-    vb: VarBuilder<'_>,
-) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/fastvit/index.html b/network-poc/target-native/doc/candle_transformers/models/fastvit/index.html deleted file mode 100644 index 3da9d2e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/fastvit/index.html +++ /dev/null @@ -1,4 +0,0 @@ -candle_transformers::models::fastvit - Rust

Module fastvit

Module fastvit 

Source
Expand description

§FastViT inference implementation based on timm

§Description

-

See “FastViT: A Fast Hybrid Vision Transformer using Structural Reparameterization”

-

Implementation based on timm model

-

Structs§

Config

Functions§

fastvit
fastvit_no_final_layer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/fastvit/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/fastvit/sidebar-items.js deleted file mode 100644 index 5c4fd99..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/fastvit/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["fastvit","fastvit_no_final_layer"],"struct":["Config"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/fastvit/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/fastvit/struct.Config.html deleted file mode 100644 index 593ebaf..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/fastvit/struct.Config.html +++ /dev/null @@ -1,36 +0,0 @@ -Config in candle_transformers::models::fastvit - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub exp_ratio: usize,
-    pub in_channels: usize,
-    pub blocks: [usize; 4],
-    pub attn: bool,
-    pub lkc_use_act: bool,
-}

Fields§

§exp_ratio: usize§in_channels: usize§blocks: [usize; 4]§attn: bool§lkc_use_act: bool

Implementations§

Source§

impl Config

Source

pub fn t8() -> Self

Source

pub fn t12() -> Self

Source

pub fn s12() -> Self

Source

pub fn sa12() -> Self

Source

pub fn sa24() -> Self

Source

pub fn sa36() -> Self

Source

pub fn ma36() -> Self

Source

pub fn mci0() -> Self

Source

pub fn mci1() -> Self

Source

pub fn mci2() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for Config

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/index.html b/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/index.html deleted file mode 100644 index 0c76004..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::flux::autoencoder - Rust

Module autoencoder

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/sidebar-items.js deleted file mode 100644 index aca673f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["AutoEncoder","Config","Decoder","DiagonalGaussian","Encoder"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.AutoEncoder.html b/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.AutoEncoder.html deleted file mode 100644 index eea5c06..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.AutoEncoder.html +++ /dev/null @@ -1,28 +0,0 @@ -AutoEncoder in candle_transformers::models::flux::autoencoder - Rust

AutoEncoder

Struct AutoEncoder 

Source
pub struct AutoEncoder { /* private fields */ }

Implementations§

Source§

impl AutoEncoder

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn encode(&self, xs: &Tensor) -> Result<Tensor>

Source

pub fn decode(&self, xs: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for AutoEncoder

Source§

fn clone(&self) -> AutoEncoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AutoEncoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for AutoEncoder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.Config.html deleted file mode 100644 index 1f33a1e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.Config.html +++ /dev/null @@ -1,37 +0,0 @@ -Config in candle_transformers::models::flux::autoencoder - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub resolution: usize,
-    pub in_channels: usize,
-    pub ch: usize,
-    pub out_ch: usize,
-    pub ch_mult: Vec<usize>,
-    pub num_res_blocks: usize,
-    pub z_channels: usize,
-    pub scale_factor: f64,
-    pub shift_factor: f64,
-}

Fields§

§resolution: usize§in_channels: usize§ch: usize§out_ch: usize§ch_mult: Vec<usize>§num_res_blocks: usize§z_channels: usize§scale_factor: f64§shift_factor: f64

Implementations§

Source§

impl Config

Source

pub fn dev() -> Self

Source

pub fn schnell() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.Decoder.html b/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.Decoder.html deleted file mode 100644 index 4ac510a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.Decoder.html +++ /dev/null @@ -1,28 +0,0 @@ -Decoder in candle_transformers::models::flux::autoencoder - Rust

Decoder

Struct Decoder 

Source
pub struct Decoder { /* private fields */ }

Implementations§

Source§

impl Decoder

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Decoder

Source§

fn clone(&self) -> Decoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Decoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Decoder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.DiagonalGaussian.html b/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.DiagonalGaussian.html deleted file mode 100644 index 6c18e3f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.DiagonalGaussian.html +++ /dev/null @@ -1,28 +0,0 @@ -DiagonalGaussian in candle_transformers::models::flux::autoencoder - Rust

DiagonalGaussian

Struct DiagonalGaussian 

Source
pub struct DiagonalGaussian { /* private fields */ }

Implementations§

Source§

impl DiagonalGaussian

Source

pub fn new(sample: bool, chunk_dim: usize) -> Result<Self>

Trait Implementations§

Source§

impl Clone for DiagonalGaussian

Source§

fn clone(&self) -> DiagonalGaussian

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DiagonalGaussian

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for DiagonalGaussian

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.Encoder.html b/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.Encoder.html deleted file mode 100644 index 7ac3993..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/autoencoder/struct.Encoder.html +++ /dev/null @@ -1,28 +0,0 @@ -Encoder in candle_transformers::models::flux::autoencoder - Rust

Encoder

Struct Encoder 

Source
pub struct Encoder { /* private fields */ }

Implementations§

Source§

impl Encoder

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Encoder

Source§

fn clone(&self) -> Encoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Encoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Encoder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/index.html b/network-poc/target-native/doc/candle_transformers/models/flux/index.html deleted file mode 100644 index 09f19b7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/index.html +++ /dev/null @@ -1,15 +0,0 @@ -candle_transformers::models::flux - Rust

Module flux

Module flux 

Source
Expand description

Flux Model

-

Flux is a 12B rectified flow transformer capable of generating images from text descriptions.

- -

§Usage

cargo run --features cuda \
-    --example flux -r -- \
-    --height 1024 --width 1024 \
-    --prompt "a rusty robot walking on a beach holding a small torch, \
-              the robot has the word \"rust\" written on it, high quality, 4k"
- -
-

Modules§

autoencoder
model
quantized_model
sampling

Traits§

WithForward
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/model/index.html b/network-poc/target-native/doc/candle_transformers/models/flux/model/index.html deleted file mode 100644 index 7d2eb15..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/model/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::flux::model - Rust

Module model

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/model/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/flux/model/sidebar-items.js deleted file mode 100644 index 8a39d74..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/model/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","DoubleStreamBlock","EmbedNd","Flux","LastLayer","MlpEmbedder","QkNorm","SelfAttention","SingleStreamBlock"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.Config.html deleted file mode 100644 index d3ff89f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.Config.html +++ /dev/null @@ -1,40 +0,0 @@ -Config in candle_transformers::models::flux::model - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub in_channels: usize,
-    pub vec_in_dim: usize,
-    pub context_in_dim: usize,
-    pub hidden_size: usize,
-    pub mlp_ratio: f64,
-    pub num_heads: usize,
-    pub depth: usize,
-    pub depth_single_blocks: usize,
-    pub axes_dim: Vec<usize>,
-    pub theta: usize,
-    pub qkv_bias: bool,
-    pub guidance_embed: bool,
-}

Fields§

§in_channels: usize§vec_in_dim: usize§context_in_dim: usize§hidden_size: usize§mlp_ratio: f64§num_heads: usize§depth: usize§depth_single_blocks: usize§axes_dim: Vec<usize>§theta: usize§qkv_bias: bool§guidance_embed: bool

Implementations§

Source§

impl Config

Source

pub fn dev() -> Self

Source

pub fn schnell() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.DoubleStreamBlock.html b/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.DoubleStreamBlock.html deleted file mode 100644 index aa76259..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.DoubleStreamBlock.html +++ /dev/null @@ -1,27 +0,0 @@ -DoubleStreamBlock in candle_transformers::models::flux::model - Rust

DoubleStreamBlock

Struct DoubleStreamBlock 

Source
pub struct DoubleStreamBlock { /* private fields */ }

Trait Implementations§

Source§

impl Clone for DoubleStreamBlock

Source§

fn clone(&self) -> DoubleStreamBlock

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DoubleStreamBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.EmbedNd.html b/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.EmbedNd.html deleted file mode 100644 index e27aa23..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.EmbedNd.html +++ /dev/null @@ -1,28 +0,0 @@ -EmbedNd in candle_transformers::models::flux::model - Rust

EmbedNd

Struct EmbedNd 

Source
pub struct EmbedNd { /* private fields */ }

Implementations§

Source§

impl EmbedNd

Source

pub fn new(dim: usize, theta: usize, axes_dim: Vec<usize>) -> Self

Trait Implementations§

Source§

impl Clone for EmbedNd

Source§

fn clone(&self) -> EmbedNd

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EmbedNd

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for EmbedNd

Source§

fn forward(&self, ids: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.Flux.html b/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.Flux.html deleted file mode 100644 index ab629b5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.Flux.html +++ /dev/null @@ -1,36 +0,0 @@ -Flux in candle_transformers::models::flux::model - Rust

Flux

Struct Flux 

Source
pub struct Flux { /* private fields */ }

Implementations§

Source§

impl Flux

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Flux

Source§

fn clone(&self) -> Flux

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Flux

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl WithForward for Flux

Source§

fn forward( - &self, - img: &Tensor, - img_ids: &Tensor, - txt: &Tensor, - txt_ids: &Tensor, - timesteps: &Tensor, - y: &Tensor, - guidance: Option<&Tensor>, -) -> Result<Tensor>

Auto Trait Implementations§

§

impl Freeze for Flux

§

impl !RefUnwindSafe for Flux

§

impl Send for Flux

§

impl Sync for Flux

§

impl Unpin for Flux

§

impl !UnwindSafe for Flux

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.LastLayer.html b/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.LastLayer.html deleted file mode 100644 index c6dc9fe..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.LastLayer.html +++ /dev/null @@ -1,27 +0,0 @@ -LastLayer in candle_transformers::models::flux::model - Rust

LastLayer

Struct LastLayer 

Source
pub struct LastLayer { /* private fields */ }

Trait Implementations§

Source§

impl Clone for LastLayer

Source§

fn clone(&self) -> LastLayer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LastLayer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.MlpEmbedder.html b/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.MlpEmbedder.html deleted file mode 100644 index 3fe0802..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.MlpEmbedder.html +++ /dev/null @@ -1,28 +0,0 @@ -MlpEmbedder in candle_transformers::models::flux::model - Rust

MlpEmbedder

Struct MlpEmbedder 

Source
pub struct MlpEmbedder { /* private fields */ }

Trait Implementations§

Source§

impl Clone for MlpEmbedder

Source§

fn clone(&self) -> MlpEmbedder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MlpEmbedder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for MlpEmbedder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.QkNorm.html b/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.QkNorm.html deleted file mode 100644 index 5ffe680..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.QkNorm.html +++ /dev/null @@ -1,27 +0,0 @@ -QkNorm in candle_transformers::models::flux::model - Rust

QkNorm

Struct QkNorm 

Source
pub struct QkNorm { /* private fields */ }

Trait Implementations§

Source§

impl Clone for QkNorm

Source§

fn clone(&self) -> QkNorm

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for QkNorm

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for QkNorm

§

impl !RefUnwindSafe for QkNorm

§

impl Send for QkNorm

§

impl Sync for QkNorm

§

impl Unpin for QkNorm

§

impl !UnwindSafe for QkNorm

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.SelfAttention.html b/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.SelfAttention.html deleted file mode 100644 index 0f2414a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.SelfAttention.html +++ /dev/null @@ -1,27 +0,0 @@ -SelfAttention in candle_transformers::models::flux::model - Rust

SelfAttention

Struct SelfAttention 

Source
pub struct SelfAttention { /* private fields */ }

Trait Implementations§

Source§

impl Clone for SelfAttention

Source§

fn clone(&self) -> SelfAttention

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SelfAttention

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.SingleStreamBlock.html b/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.SingleStreamBlock.html deleted file mode 100644 index 25bc5e9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/model/struct.SingleStreamBlock.html +++ /dev/null @@ -1,27 +0,0 @@ -SingleStreamBlock in candle_transformers::models::flux::model - Rust

SingleStreamBlock

Struct SingleStreamBlock 

Source
pub struct SingleStreamBlock { /* private fields */ }

Trait Implementations§

Source§

impl Clone for SingleStreamBlock

Source§

fn clone(&self) -> SingleStreamBlock

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SingleStreamBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/index.html b/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/index.html deleted file mode 100644 index 2e4b494..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::flux::quantized_model - Rust

Module quantized_model

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/sidebar-items.js deleted file mode 100644 index 9e19920..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["DoubleStreamBlock","Flux","LastLayer","MlpEmbedder","QkNorm","SelfAttention","SingleStreamBlock"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.DoubleStreamBlock.html b/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.DoubleStreamBlock.html deleted file mode 100644 index 7ad6fd8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.DoubleStreamBlock.html +++ /dev/null @@ -1,27 +0,0 @@ -DoubleStreamBlock in candle_transformers::models::flux::quantized_model - Rust

DoubleStreamBlock

Struct DoubleStreamBlock 

Source
pub struct DoubleStreamBlock { /* private fields */ }

Trait Implementations§

Source§

impl Clone for DoubleStreamBlock

Source§

fn clone(&self) -> DoubleStreamBlock

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DoubleStreamBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.Flux.html b/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.Flux.html deleted file mode 100644 index 6c525ea..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.Flux.html +++ /dev/null @@ -1,36 +0,0 @@ -Flux in candle_transformers::models::flux::quantized_model - Rust

Flux

Struct Flux 

Source
pub struct Flux { /* private fields */ }

Implementations§

Source§

impl Flux

Source

pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Flux

Source§

fn clone(&self) -> Flux

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Flux

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl WithForward for Flux

Source§

fn forward( - &self, - img: &Tensor, - img_ids: &Tensor, - txt: &Tensor, - txt_ids: &Tensor, - timesteps: &Tensor, - y: &Tensor, - guidance: Option<&Tensor>, -) -> Result<Tensor>

Auto Trait Implementations§

§

impl Freeze for Flux

§

impl !RefUnwindSafe for Flux

§

impl Send for Flux

§

impl Sync for Flux

§

impl Unpin for Flux

§

impl !UnwindSafe for Flux

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.LastLayer.html b/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.LastLayer.html deleted file mode 100644 index d8f7507..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.LastLayer.html +++ /dev/null @@ -1,27 +0,0 @@ -LastLayer in candle_transformers::models::flux::quantized_model - Rust

LastLayer

Struct LastLayer 

Source
pub struct LastLayer { /* private fields */ }

Trait Implementations§

Source§

impl Clone for LastLayer

Source§

fn clone(&self) -> LastLayer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LastLayer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.MlpEmbedder.html b/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.MlpEmbedder.html deleted file mode 100644 index d139cdf..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.MlpEmbedder.html +++ /dev/null @@ -1,28 +0,0 @@ -MlpEmbedder in candle_transformers::models::flux::quantized_model - Rust

MlpEmbedder

Struct MlpEmbedder 

Source
pub struct MlpEmbedder { /* private fields */ }

Trait Implementations§

Source§

impl Clone for MlpEmbedder

Source§

fn clone(&self) -> MlpEmbedder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MlpEmbedder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for MlpEmbedder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.QkNorm.html b/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.QkNorm.html deleted file mode 100644 index ee90af2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.QkNorm.html +++ /dev/null @@ -1,27 +0,0 @@ -QkNorm in candle_transformers::models::flux::quantized_model - Rust

QkNorm

Struct QkNorm 

Source
pub struct QkNorm { /* private fields */ }

Trait Implementations§

Source§

impl Clone for QkNorm

Source§

fn clone(&self) -> QkNorm

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for QkNorm

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for QkNorm

§

impl !RefUnwindSafe for QkNorm

§

impl Send for QkNorm

§

impl Sync for QkNorm

§

impl Unpin for QkNorm

§

impl !UnwindSafe for QkNorm

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.SelfAttention.html b/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.SelfAttention.html deleted file mode 100644 index c9f881a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.SelfAttention.html +++ /dev/null @@ -1,27 +0,0 @@ -SelfAttention in candle_transformers::models::flux::quantized_model - Rust

SelfAttention

Struct SelfAttention 

Source
pub struct SelfAttention { /* private fields */ }

Trait Implementations§

Source§

impl Clone for SelfAttention

Source§

fn clone(&self) -> SelfAttention

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SelfAttention

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.SingleStreamBlock.html b/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.SingleStreamBlock.html deleted file mode 100644 index 30a2ba1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/quantized_model/struct.SingleStreamBlock.html +++ /dev/null @@ -1,27 +0,0 @@ -SingleStreamBlock in candle_transformers::models::flux::quantized_model - Rust

SingleStreamBlock

Struct SingleStreamBlock 

Source
pub struct SingleStreamBlock { /* private fields */ }

Trait Implementations§

Source§

impl Clone for SingleStreamBlock

Source§

fn clone(&self) -> SingleStreamBlock

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SingleStreamBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.denoise.html b/network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.denoise.html deleted file mode 100644 index 21e20a1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.denoise.html +++ /dev/null @@ -1,10 +0,0 @@ -denoise in candle_transformers::models::flux::sampling - Rust

denoise

Function denoise 

Source
pub fn denoise<M: WithForward>(
-    model: &M,
-    img: &Tensor,
-    img_ids: &Tensor,
-    txt: &Tensor,
-    txt_ids: &Tensor,
-    vec_: &Tensor,
-    timesteps: &[f64],
-    guidance: f64,
-) -> Result<Tensor>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.get_noise.html b/network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.get_noise.html deleted file mode 100644 index c4ccb41..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.get_noise.html +++ /dev/null @@ -1,6 +0,0 @@ -get_noise in candle_transformers::models::flux::sampling - Rust

get_noise

Function get_noise 

Source
pub fn get_noise(
-    num_samples: usize,
-    height: usize,
-    width: usize,
-    device: &Device,
-) -> Result<Tensor>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.get_schedule.html b/network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.get_schedule.html deleted file mode 100644 index 264a422..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.get_schedule.html +++ /dev/null @@ -1,5 +0,0 @@ -get_schedule in candle_transformers::models::flux::sampling - Rust

get_schedule

Function get_schedule 

Source
pub fn get_schedule(
-    num_steps: usize,
-    shift: Option<(usize, f64, f64)>,
-) -> Vec<f64>
Expand description

shift is a triple (image_seq_len, base_shift, max_shift).

-
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.unpack.html b/network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.unpack.html deleted file mode 100644 index 928652c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/sampling/fn.unpack.html +++ /dev/null @@ -1 +0,0 @@ -unpack in candle_transformers::models::flux::sampling - Rust

unpack

Function unpack 

Source
pub fn unpack(xs: &Tensor, height: usize, width: usize) -> Result<Tensor>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/sampling/index.html b/network-poc/target-native/doc/candle_transformers/models/flux/sampling/index.html deleted file mode 100644 index 463fe9e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/sampling/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::flux::sampling - Rust

Module sampling

Module sampling 

Source

Structs§

State

Functions§

denoise
get_noise
get_schedule
shift is a triple (image_seq_len, base_shift, max_shift).
unpack
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/sampling/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/flux/sampling/sidebar-items.js deleted file mode 100644 index 985a335..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/sampling/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["denoise","get_noise","get_schedule","unpack"],"struct":["State"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/sampling/struct.State.html b/network-poc/target-native/doc/candle_transformers/models/flux/sampling/struct.State.html deleted file mode 100644 index c420329..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/sampling/struct.State.html +++ /dev/null @@ -1,33 +0,0 @@ -State in candle_transformers::models::flux::sampling - Rust

State

Struct State 

Source
pub struct State {
-    pub img: Tensor,
-    pub img_ids: Tensor,
-    pub txt: Tensor,
-    pub txt_ids: Tensor,
-    pub vec: Tensor,
-}

Fields§

§img: Tensor§img_ids: Tensor§txt: Tensor§txt_ids: Tensor§vec: Tensor

Implementations§

Source§

impl State

Source

pub fn new(t5_emb: &Tensor, clip_emb: &Tensor, img: &Tensor) -> Result<Self>

Trait Implementations§

Source§

impl Clone for State

Source§

fn clone(&self) -> State

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for State

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for State

§

impl !RefUnwindSafe for State

§

impl Send for State

§

impl Sync for State

§

impl Unpin for State

§

impl !UnwindSafe for State

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/flux/sidebar-items.js deleted file mode 100644 index 2fe22c6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"mod":["autoencoder","model","quantized_model","sampling"],"trait":["WithForward"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/flux/trait.WithForward.html b/network-poc/target-native/doc/candle_transformers/models/flux/trait.WithForward.html deleted file mode 100644 index 592faad..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/flux/trait.WithForward.html +++ /dev/null @@ -1,22 +0,0 @@ -WithForward in candle_transformers::models::flux - Rust

WithForward

Trait WithForward 

Source
pub trait WithForward {
-    // Required method
-    fn forward(
-        &self,
-        img: &Tensor,
-        img_ids: &Tensor,
-        txt: &Tensor,
-        txt_ids: &Tensor,
-        timesteps: &Tensor,
-        y: &Tensor,
-        guidance: Option<&Tensor>,
-    ) -> Result<Tensor>;
-}

Required Methods§

Source

fn forward( - &self, - img: &Tensor, - img_ids: &Tensor, - txt: &Tensor, - txt_ids: &Tensor, - timesteps: &Tensor, - y: &Tensor, - guidance: Option<&Tensor>, -) -> Result<Tensor>

Implementors§

Source§

impl WithForward for candle_transformers::models::flux::model::Flux

Source§

impl WithForward for candle_transformers::models::flux::quantized_model::Flux

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/gemma/index.html b/network-poc/target-native/doc/candle_transformers/models/gemma/index.html deleted file mode 100644 index 4e2d910..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/gemma/index.html +++ /dev/null @@ -1,4 +0,0 @@ -candle_transformers::models::gemma - Rust

Module gemma

Module gemma 

Source
Expand description

Gemma inference implementation.

-

See “Gemma: Open Models Based on Gemini Technology”

-

Based on implementation from Google and PyTorch

-

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/gemma/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/gemma/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/gemma/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/gemma/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/gemma/struct.Config.html deleted file mode 100644 index 3c95562..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/gemma/struct.Config.html +++ /dev/null @@ -1,43 +0,0 @@ -Config in candle_transformers::models::gemma - Rust

Config

Struct Config 

Source
pub struct Config {
Show 13 fields - pub attention_bias: bool, - pub head_dim: usize, - pub hidden_act: Option<Activation>, - pub hidden_activation: Option<Activation>, - pub hidden_size: usize, - pub intermediate_size: usize, - pub num_attention_heads: usize, - pub num_hidden_layers: usize, - pub num_key_value_heads: usize, - pub rms_norm_eps: f64, - pub rope_theta: f64, - pub vocab_size: usize, - pub max_position_embeddings: usize, -
}

Fields§

§attention_bias: bool§head_dim: usize§hidden_act: Option<Activation>§hidden_activation: Option<Activation>§hidden_size: usize§intermediate_size: usize§num_attention_heads: usize§num_hidden_layers: usize§num_key_value_heads: usize§rms_norm_eps: f64§rope_theta: f64§vocab_size: usize§max_position_embeddings: usize

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/gemma/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/gemma/struct.Model.html deleted file mode 100644 index a8961cb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/gemma/struct.Model.html +++ /dev/null @@ -1,45 +0,0 @@ -Model in candle_transformers::models::gemma - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new( - use_flash_attn: bool, - cfg: &Config, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn embed_tokens(&self) -> &Embedding

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Source

pub fn forward_embeds( - &mut self, - xs: &Tensor, - attn_mask: Option<&Tensor>, - seqlen_offset: usize, -) -> Result<Tensor>

Source

pub fn forward_embeds_without_projection( - &mut self, - xs: &Tensor, - attn_mask: Option<&Tensor>, - seqlen_offset: usize, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/gemma2/index.html b/network-poc/target-native/doc/candle_transformers/models/gemma2/index.html deleted file mode 100644 index 58a30a2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/gemma2/index.html +++ /dev/null @@ -1,4 +0,0 @@ -candle_transformers::models::gemma2 - Rust

Module gemma2

Module gemma2 

Source
Expand description

Gemma LLM architecture (Google) inference implementation.

-

See “Gemma: Open Models Based on Gemini Technology”

-

Based on implementations from Google and OpenLLM

-

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/gemma2/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/gemma2/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/gemma2/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/gemma2/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/gemma2/struct.Config.html deleted file mode 100644 index 7faf052..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/gemma2/struct.Config.html +++ /dev/null @@ -1,46 +0,0 @@ -Config in candle_transformers::models::gemma2 - Rust

Config

Struct Config 

Source
pub struct Config {
Show 16 fields - pub attention_bias: bool, - pub head_dim: usize, - pub hidden_activation: Activation, - pub hidden_size: usize, - pub intermediate_size: usize, - pub num_attention_heads: usize, - pub num_hidden_layers: usize, - pub num_key_value_heads: usize, - pub rms_norm_eps: f64, - pub rope_theta: f64, - pub vocab_size: usize, - pub final_logit_softcapping: Option<f64>, - pub attn_logit_softcapping: Option<f64>, - pub query_pre_attn_scalar: usize, - pub sliding_window: Option<usize>, - pub max_position_embeddings: usize, -
}

Fields§

§attention_bias: bool§head_dim: usize§hidden_activation: Activation§hidden_size: usize§intermediate_size: usize§num_attention_heads: usize§num_hidden_layers: usize§num_key_value_heads: usize§rms_norm_eps: f64§rope_theta: f64§vocab_size: usize§final_logit_softcapping: Option<f64>§attn_logit_softcapping: Option<f64>§query_pre_attn_scalar: usize§sliding_window: Option<usize>§max_position_embeddings: usize

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/gemma2/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/gemma2/struct.Model.html deleted file mode 100644 index 58c0869..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/gemma2/struct.Model.html +++ /dev/null @@ -1,35 +0,0 @@ -Model in candle_transformers::models::gemma2 - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new( - use_flash_attn: bool, - cfg: &Config, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/gemma3/index.html b/network-poc/target-native/doc/candle_transformers/models/gemma3/index.html deleted file mode 100644 index d8969e3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/gemma3/index.html +++ /dev/null @@ -1,4 +0,0 @@ -candle_transformers::models::gemma3 - Rust

Module gemma3

Module gemma3 

Source
Expand description

Gemma LLM architecture (Google) inference implementation.

-

See “Introducing Gemma 3: The most capable model you can run on a single GPU or TPU”

-

Based on implementations from HuggingFace transformers.

-

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/gemma3/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/gemma3/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/gemma3/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/gemma3/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/gemma3/struct.Config.html deleted file mode 100644 index 5134193..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/gemma3/struct.Config.html +++ /dev/null @@ -1,47 +0,0 @@ -Config in candle_transformers::models::gemma3 - Rust

Config

Struct Config 

Source
pub struct Config {
Show 17 fields - pub attention_bias: bool, - pub head_dim: usize, - pub hidden_activation: Activation, - pub hidden_size: usize, - pub intermediate_size: usize, - pub num_attention_heads: usize, - pub num_hidden_layers: usize, - pub num_key_value_heads: usize, - pub rms_norm_eps: f64, - pub rope_theta: f64, - pub vocab_size: usize, - pub final_logit_softcapping: Option<f64>, - pub attn_logit_softcapping: Option<f64>, - pub query_pre_attn_scalar: usize, - pub sliding_window: usize, - pub sliding_window_pattern: usize, - pub max_position_embeddings: usize, -
}

Fields§

§attention_bias: bool§head_dim: usize§hidden_activation: Activation§hidden_size: usize§intermediate_size: usize§num_attention_heads: usize§num_hidden_layers: usize§num_key_value_heads: usize§rms_norm_eps: f64§rope_theta: f64§vocab_size: usize§final_logit_softcapping: Option<f64>§attn_logit_softcapping: Option<f64>§query_pre_attn_scalar: usize§sliding_window: usize§sliding_window_pattern: usize§max_position_embeddings: usize

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/gemma3/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/gemma3/struct.Model.html deleted file mode 100644 index 24768d4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/gemma3/struct.Model.html +++ /dev/null @@ -1,35 +0,0 @@ -Model in candle_transformers::models::gemma3 - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new( - use_flash_attn: bool, - cfg: &Config, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/glm4/index.html b/network-poc/target-native/doc/candle_transformers/models/glm4/index.html deleted file mode 100644 index 57299c8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/glm4/index.html +++ /dev/null @@ -1,4 +0,0 @@ -candle_transformers::models::glm4 - Rust

Module glm4

Module glm4 

Source
Expand description

GLM-4 inference implementation.

-

An open bilingual language model with 130B parameters.

-

Based on implementation from ChatGLM-6B

-

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/glm4/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/glm4/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/glm4/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/glm4/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/glm4/struct.Config.html deleted file mode 100644 index 77cb222..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/glm4/struct.Config.html +++ /dev/null @@ -1,50 +0,0 @@ -Config in candle_transformers::models::glm4 - Rust

Config

Struct Config 

Source
pub struct Config {
Show 20 fields - pub num_layers: usize, - pub padded_vocab_size: usize, - pub hidden_size: usize, - pub ffn_hidden_size: usize, - pub kv_channels: usize, - pub num_attention_heads: usize, - pub seq_length: usize, - pub layernorm_epsilon: f64, - pub rmsnorm: bool, - pub apply_residual_connection_post_layernorm: bool, - pub post_layer_norm: bool, - pub add_bias_linear: bool, - pub add_qkv_bias: bool, - pub bias_dropout_fusion: bool, - pub multi_query_attention: bool, - pub multi_query_group_num: usize, - pub apply_query_key_layer_scaling: bool, - pub attention_softmax_in_fp32: bool, - pub fp32_residual_connection: bool, - pub rope_ratio: usize, -
}

Fields§

§num_layers: usize§padded_vocab_size: usize§hidden_size: usize§ffn_hidden_size: usize§kv_channels: usize§num_attention_heads: usize§seq_length: usize§layernorm_epsilon: f64§rmsnorm: bool§apply_residual_connection_post_layernorm: bool§post_layer_norm: bool§add_bias_linear: bool§add_qkv_bias: bool§bias_dropout_fusion: bool§multi_query_attention: bool§multi_query_group_num: usize§apply_query_key_layer_scaling: bool§attention_softmax_in_fp32: bool§fp32_residual_connection: bool§rope_ratio: usize

Implementations§

Source§

impl Config

Source

pub fn glm4() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Config

Source§

fn default() -> Config

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/glm4/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/glm4/struct.Model.html deleted file mode 100644 index 27d36c9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/glm4/struct.Model.html +++ /dev/null @@ -1,27 +0,0 @@ -Model in candle_transformers::models::glm4 - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn reset_kv_cache(&mut self)

Source

pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/granite/constant.DEFAULT_MAX_SEQ_LEN.html b/network-poc/target-native/doc/candle_transformers/models/granite/constant.DEFAULT_MAX_SEQ_LEN.html deleted file mode 100644 index a12fa2a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/granite/constant.DEFAULT_MAX_SEQ_LEN.html +++ /dev/null @@ -1 +0,0 @@ -DEFAULT_MAX_SEQ_LEN in candle_transformers::models::granite - Rust

DEFAULT_MAX_SEQ_LEN

Constant DEFAULT_MAX_SEQ_LEN 

Source
pub const DEFAULT_MAX_SEQ_LEN: usize = 4096;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/granite/enum.GraniteEosToks.html b/network-poc/target-native/doc/candle_transformers/models/granite/enum.GraniteEosToks.html deleted file mode 100644 index 2308142..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/granite/enum.GraniteEosToks.html +++ /dev/null @@ -1,32 +0,0 @@ -GraniteEosToks in candle_transformers::models::granite - Rust

GraniteEosToks

Enum GraniteEosToks 

Source
pub enum GraniteEosToks {
-    Single(u32),
-    Multiple(Vec<u32>),
-}

Variants§

§

Single(u32)

§

Multiple(Vec<u32>)

Trait Implementations§

Source§

impl Clone for GraniteEosToks

Source§

fn clone(&self) -> GraniteEosToks

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for GraniteEosToks

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for GraniteEosToks

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/granite/enum.GraniteRopeType.html b/network-poc/target-native/doc/candle_transformers/models/granite/enum.GraniteRopeType.html deleted file mode 100644 index 8008fcc..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/granite/enum.GraniteRopeType.html +++ /dev/null @@ -1,32 +0,0 @@ -GraniteRopeType in candle_transformers::models::granite - Rust

GraniteRopeType

Enum GraniteRopeType 

Source
pub enum GraniteRopeType {
-    Granite,
-    Default,
-}

Variants§

§

Granite

§

Default

Trait Implementations§

Source§

impl Clone for GraniteRopeType

Source§

fn clone(&self) -> GraniteRopeType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for GraniteRopeType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for GraniteRopeType

Source§

fn default() -> GraniteRopeType

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for GraniteRopeType

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/granite/index.html b/network-poc/target-native/doc/candle_transformers/models/granite/index.html deleted file mode 100644 index 15065f5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/granite/index.html +++ /dev/null @@ -1,5 +0,0 @@ -candle_transformers::models::granite - Rust

Module granite

Module granite 

Source
Expand description

Granite is a Long Context Transformer Language Model.

-

A high performance transformer model optimized for efficient processing -of very long context sequences

-

Based on implementation from Nod.ai

-

Structs§

Cache
Config
Granite
GraniteConfig
GraniteRopeConfig

Enums§

GraniteEosToks
GraniteRopeType

Constants§

DEFAULT_MAX_SEQ_LEN
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/granite/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/granite/sidebar-items.js deleted file mode 100644 index 6b7a2d8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/granite/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"constant":["DEFAULT_MAX_SEQ_LEN"],"enum":["GraniteEosToks","GraniteRopeType"],"struct":["Cache","Config","Granite","GraniteConfig","GraniteRopeConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/granite/struct.Cache.html b/network-poc/target-native/doc/candle_transformers/models/granite/struct.Cache.html deleted file mode 100644 index 5466505..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/granite/struct.Cache.html +++ /dev/null @@ -1,35 +0,0 @@ -Cache in candle_transformers::models::granite - Rust

Cache

Struct Cache 

Source
pub struct Cache {
-    pub use_kv_cache: bool,
-    /* private fields */
-}

Fields§

§use_kv_cache: bool

Implementations§

Source§

impl Cache

Source

pub fn new( - use_kv_cache: bool, - dtype: DType, - config: &Config, - device: &Device, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Cache

Source§

fn clone(&self) -> Cache

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Cache

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Cache

§

impl !RefUnwindSafe for Cache

§

impl Send for Cache

§

impl Sync for Cache

§

impl Unpin for Cache

§

impl !UnwindSafe for Cache

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/granite/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/granite/struct.Config.html deleted file mode 100644 index 2e9d11f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/granite/struct.Config.html +++ /dev/null @@ -1,41 +0,0 @@ -Config in candle_transformers::models::granite - Rust

Config

Struct Config 

Source
pub struct Config {
Show 13 fields - pub hidden_size: usize, - pub intermediate_size: usize, - pub vocab_size: usize, - pub num_hidden_layers: usize, - pub num_attention_heads: usize, - pub num_key_value_heads: usize, - pub use_flash_attn: bool, - pub rms_norm_eps: f64, - pub rope_theta: f32, - pub bos_token_id: Option<u32>, - pub eos_token_id: Option<GraniteEosToks>, - pub rope_scaling: Option<GraniteRopeConfig>, - pub max_position_embeddings: usize, -
}

Fields§

§hidden_size: usize§intermediate_size: usize§vocab_size: usize§num_hidden_layers: usize§num_attention_heads: usize§num_key_value_heads: usize§use_flash_attn: bool§rms_norm_eps: f64§rope_theta: f32§bos_token_id: Option<u32>§eos_token_id: Option<GraniteEosToks>§rope_scaling: Option<GraniteRopeConfig>§max_position_embeddings: usize

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/granite/struct.Granite.html b/network-poc/target-native/doc/candle_transformers/models/granite/struct.Granite.html deleted file mode 100644 index 9734c6a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/granite/struct.Granite.html +++ /dev/null @@ -1,32 +0,0 @@ -Granite in candle_transformers::models::granite - Rust

Granite

Struct Granite 

Source
pub struct Granite { /* private fields */ }

Implementations§

Source§

impl Granite

Source

pub fn forward( - &self, - x: &Tensor, - index_pos: usize, - cache: &mut Cache, -) -> Result<Tensor>

Source

pub fn load(vb: VarBuilder<'_>, cfg: &Config) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Granite

Source§

fn clone(&self) -> Granite

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Granite

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/granite/struct.GraniteConfig.html b/network-poc/target-native/doc/candle_transformers/models/granite/struct.GraniteConfig.html deleted file mode 100644 index 59c980f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/granite/struct.GraniteConfig.html +++ /dev/null @@ -1,42 +0,0 @@ -GraniteConfig in candle_transformers::models::granite - Rust

GraniteConfig

Struct GraniteConfig 

Source
pub struct GraniteConfig {
-    pub hidden_size: usize,
-    pub intermediate_size: usize,
-    pub vocab_size: usize,
-    pub num_hidden_layers: usize,
-    pub num_attention_heads: usize,
-    pub num_key_value_heads: Option<usize>,
-    pub rms_norm_eps: f64,
-    pub rope_theta: f32,
-    pub bos_token_id: Option<u32>,
-    pub eos_token_id: Option<GraniteEosToks>,
-    pub rope_scaling: Option<GraniteRopeConfig>,
-    pub max_position_embeddings: usize,
-}

Fields§

§hidden_size: usize§intermediate_size: usize§vocab_size: usize§num_hidden_layers: usize§num_attention_heads: usize§num_key_value_heads: Option<usize>§rms_norm_eps: f64§rope_theta: f32§bos_token_id: Option<u32>§eos_token_id: Option<GraniteEosToks>§rope_scaling: Option<GraniteRopeConfig>§max_position_embeddings: usize

Implementations§

Trait Implementations§

Source§

impl Clone for GraniteConfig

Source§

fn clone(&self) -> GraniteConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for GraniteConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for GraniteConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/granite/struct.GraniteRopeConfig.html b/network-poc/target-native/doc/candle_transformers/models/granite/struct.GraniteRopeConfig.html deleted file mode 100644 index bf4f2f5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/granite/struct.GraniteRopeConfig.html +++ /dev/null @@ -1,35 +0,0 @@ -GraniteRopeConfig in candle_transformers::models::granite - Rust

GraniteRopeConfig

Struct GraniteRopeConfig 

Source
pub struct GraniteRopeConfig {
-    pub factor: f32,
-    pub low_freq_factor: f32,
-    pub high_freq_factor: f32,
-    pub original_max_position_embeddings: usize,
-    pub rope_type: GraniteRopeType,
-}

Fields§

§factor: f32§low_freq_factor: f32§high_freq_factor: f32§original_max_position_embeddings: usize§rope_type: GraniteRopeType

Trait Implementations§

Source§

impl Clone for GraniteRopeConfig

Source§

fn clone(&self) -> GraniteRopeConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for GraniteRopeConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for GraniteRopeConfig

Source§

fn default() -> GraniteRopeConfig

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for GraniteRopeConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/helium/index.html b/network-poc/target-native/doc/candle_transformers/models/helium/index.html deleted file mode 100644 index 39ef1c9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/helium/index.html +++ /dev/null @@ -1,3 +0,0 @@ -candle_transformers::models::helium - Rust

Module helium

Module helium 

Source
Expand description

Helium inference implementation.

-

See the model card on Hugging Face’s hub.

-

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/helium/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/helium/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/helium/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/helium/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/helium/struct.Config.html deleted file mode 100644 index 9edc5d9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/helium/struct.Config.html +++ /dev/null @@ -1,47 +0,0 @@ -Config in candle_transformers::models::helium - Rust

Config

Struct Config 

Source
pub struct Config {
Show 17 fields - pub attention_bias: bool, - pub bos_token_id: u32, - pub eos_token_id: u32, - pub head_dim: usize, - pub hidden_act: Activation, - pub hidden_size: usize, - pub intermediate_size: usize, - pub max_position_embeddings: usize, - pub mlp_bias: bool, - pub num_attention_heads: usize, - pub num_hidden_layers: usize, - pub num_key_value_heads: usize, - pub rms_norm_eps: f64, - pub rope_theta: f64, - pub tie_word_embeddings: bool, - pub vocab_size: usize, - pub use_flash_attn: bool, -
}

Fields§

§attention_bias: bool§bos_token_id: u32§eos_token_id: u32§head_dim: usize§hidden_act: Activation§hidden_size: usize§intermediate_size: usize§max_position_embeddings: usize§mlp_bias: bool§num_attention_heads: usize§num_hidden_layers: usize§num_key_value_heads: usize§rms_norm_eps: f64§rope_theta: f64§tie_word_embeddings: bool§vocab_size: usize§use_flash_attn: bool

Implementations§

Source§

impl Config

Source

pub fn config_2b(use_flash_attn: bool) -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/helium/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/helium/struct.Model.html deleted file mode 100644 index a91052e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/helium/struct.Model.html +++ /dev/null @@ -1,31 +0,0 @@ -Model in candle_transformers::models::helium - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn embed_tokens(&self) -> &Embedding

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/hiera/fn.hiera.html b/network-poc/target-native/doc/candle_transformers/models/hiera/fn.hiera.html deleted file mode 100644 index 3918265..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/hiera/fn.hiera.html +++ /dev/null @@ -1,5 +0,0 @@ -hiera in candle_transformers::models::hiera - Rust

hiera

Function hiera 

Source
pub fn hiera(
-    cfg: &Config,
-    nclasses: usize,
-    vb: VarBuilder<'_>,
-) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/hiera/fn.hiera_no_final_layer.html b/network-poc/target-native/doc/candle_transformers/models/hiera/fn.hiera_no_final_layer.html deleted file mode 100644 index d6ed98e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/hiera/fn.hiera_no_final_layer.html +++ /dev/null @@ -1,4 +0,0 @@ -hiera_no_final_layer in candle_transformers::models::hiera - Rust

hiera_no_final_layer

Function hiera_no_final_layer 

Source
pub fn hiera_no_final_layer(
-    cfg: &Config,
-    vb: VarBuilder<'_>,
-) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/hiera/index.html b/network-poc/target-native/doc/candle_transformers/models/hiera/index.html deleted file mode 100644 index d712cd4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/hiera/index.html +++ /dev/null @@ -1,6 +0,0 @@ -candle_transformers::models::hiera - Rust

Module hiera

Module hiera 

Source
Expand description

Hiera inference implementation based on timm.

-
    -
  • 💻 Hiera
  • -
  • 📝 Paper. Hiera: A Hierarchical Vision Transformer without the Bells-and-Whistles
  • -
-

Structs§

Config

Functions§

hiera
hiera_no_final_layer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/hiera/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/hiera/sidebar-items.js deleted file mode 100644 index 2d6a100..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/hiera/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["hiera","hiera_no_final_layer"],"struct":["Config"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/hiera/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/hiera/struct.Config.html deleted file mode 100644 index 7f450c4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/hiera/struct.Config.html +++ /dev/null @@ -1,29 +0,0 @@ -Config in candle_transformers::models::hiera - Rust

Config

Struct Config 

Source
pub struct Config { /* private fields */ }

Implementations§

Source§

impl Config

Source

pub fn tiny() -> Self

Source

pub fn small() -> Self

Source

pub fn base() -> Self

Source

pub fn base_plus() -> Self

Source

pub fn large() -> Self

Source

pub fn huge() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/index.html b/network-poc/target-native/doc/candle_transformers/models/index.html deleted file mode 100644 index 3ce7933..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/index.html +++ /dev/null @@ -1,14 +0,0 @@ -candle_transformers::models - Rust

Module models

Module models 

Source
Expand description

Candle implementations for various deep learning models

-

This crate provides implementations of popular machine learning models and architectures for different modalities.

- -

Some of the models also have quantized variants, e.g. quantized_blip, quantized_llama and quantized_qwen2.

-

The implementations aim to be readable while maintaining good performance. For more information -on each model see the model’s module docs in the links below.

-

Modules§

based
Based from the Stanford Hazy Research group.
beit
Based on the BEIT vision-language model.
bert
BERT (Bidirectional Encoder Representations from Transformers)
bigcode
BigCode implementation in Rust based on the GPT-BigCode model.
blip
Based on the BLIP paper from Salesforce Research.
blip_text
Implementation of BLIP text encoder/decoder.
chatglm
Implementation of the ChatGLM2/3 models from THUDM.
chinese_clip
Chinese contrastive Language-Image Pre-Training
clip
Contrastive Language-Image Pre-Training
codegeex4_9b
CodeGeeX4 - A multi-language code generation model
colpali
Colpali Model for text/image similarity scoring.
convmixer
ConvMixer implementation.
convnext
ConvNeXt implementation.
dac
Implementation of the Descript Audio Codec (DAC) model
debertav2
deepseek2
depth_anything_v2
Implementation of the Depth Anything model from FAIR.
dinov2
Implementation of the DINOv2 models from Meta Research.
dinov2reg4
Implementation of the DINOv2 revision (4 regularization)
distilbert
Implementation of DistilBert, a distilled version of BERT.
efficientnet
Implementation of EfficientBert, an efficient variant of BERT for computer vision tasks.
efficientvit
EfficientViT (MSRA) inference implementation based on timm.
encodec
EnCodec neural audio codec based on the Encodec implementation.
eva2
EVA-2 inference implementation.
falcon
Falcon language model inference implementation
fastvit
FastViT inference implementation based on timm
flux
Flux Model
gemma
Gemma inference implementation.
gemma2
Gemma LLM architecture (Google) inference implementation.
gemma3
Gemma LLM architecture (Google) inference implementation.
glm4
GLM-4 inference implementation.
granite
Granite is a Long Context Transformer Language Model.
helium
Helium inference implementation.
hiera
Hiera inference implementation based on timm.
jina_bert
JinaBERT inference implementation
llama
Llama inference implementation.
llama2_c
Llama2 inference implementation.
llama2_c_weights
Llama2 inference implementation.
llava
The LLaVA (Large Language and Vision Assistant) model.
mamba
Mamba inference implementation.
marian
Marian Neural Machine Translation
metavoice
MetaVoice Studio ML Models
mimi
mimi model
mistral
Mixtral Model, based on the Mistral architecture
mixformer
MixFormer (Microsoft’s Phi Architecture)
mixtral
Mixtral Model, a sparse mixture of expert model based on the Mistral architecture
mmdit
Mix of Multi-scale Dilated and Traditional Convolutions
mobileclip
Mobile CLIP model, combining a lightweight vision encoder with a text encoder
mobilenetv4
MobileNet-v4
mobileone
MobileOne
modernbert
ModernBERT
moondream
MoonDream Model vision-to-text
mpt
Module implementing the MPT (Multi-Purpose Transformer) model
nvembed_v2
NV-Embed-v2
olmo
OLMo (Open Language Model) implementation
openclip
Open Contrastive Language-Image Pre-Training
paligemma
Multimodal multi-purpose model combining Gemma-based language model with SigLIP image understanding
parler_tts
Parler Model implementation for parler_tts text-to-speech synthesis
persimmon
Persimmon Model
phi
Microsoft Phi model implementation
phi3
Microsoft Phi-3 model implementation
pixtral
Pixtral Language-Image Pre-Training
quantized_blip
BLIP model implementation with quantization support.
quantized_blip_text
Quantized BLIP text module implementation.
quantized_llama
Quantized llama model implementation.
quantized_llama2_c
Quantized Llama2 model implementation.
quantized_metavoice
Quantized MetaVoice model implementation.
quantized_mistral
Mistral model implementation with quantization support.
quantized_mixformer
Module containing quantized MixFormer model implementation.
quantized_moondream
Implementation of a quantized Moondream vision language model.
quantized_mpt
Quantized MPT model implementation.
quantized_phi
Phi2 model implementation with quantization support.
quantized_phi3
Phi3 model implementation with quantization support.
quantized_qwen2
Qwen2 model implementation with quantization support.
quantized_recurrent_gemma
Recurrent Gemma model implementation with quantization support.
quantized_rwkv_v5
RWKV v5 model implementation with quantization support.
quantized_rwkv_v6
RWKV v6 model implementation with quantization support.
quantized_stable_lm
Module for quantized StableLM implementation.
quantized_t5
T5 model implementation with quantization support.
qwen2
Qwen2 model implementation with quantization support.
qwen2_moe
Qwen2 model implementation with Mixture of Experts support.
recurrent_gemma
Recurrent Gemma model implementation
repvgg
RepVGG inference implementation
resnet
ResNet Implementation
rwkv_v5
RWKV v5 model implementation.
rwkv_v6
RWKV v6 model implementation.
segformer
Segformer model implementation for semantic segmentation and image classification.
segment_anything
Segment Anything Model (SAM)
siglip
Siglip model implementation.
stable_diffusion
Stable Diffusion
stable_lm
StableLM model implementation.
starcoder2
StarCoder model implementation with quantization support.
stella_en_v5
Stella v5 model implementation.
t5
T5 model implementation.
trocr
TrOCR model implementation.
vgg
VGG-16 model implementation.
vit
Vision Transformer (ViT) implementation.
whisper
Whisper Model Implementation
with_tracing
wuerstchen
Würstchen Efficient Diffusion Model
xlm_roberta
yi
Yi model implementation.
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/jina_bert/constant.DTYPE.html b/network-poc/target-native/doc/candle_transformers/models/jina_bert/constant.DTYPE.html deleted file mode 100644 index 28adcad..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/jina_bert/constant.DTYPE.html +++ /dev/null @@ -1 +0,0 @@ -DTYPE in candle_transformers::models::jina_bert - Rust

DTYPE

Constant DTYPE 

Source
pub const DTYPE: DType;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/jina_bert/enum.PositionEmbeddingType.html b/network-poc/target-native/doc/candle_transformers/models/jina_bert/enum.PositionEmbeddingType.html deleted file mode 100644 index 602e9e3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/jina_bert/enum.PositionEmbeddingType.html +++ /dev/null @@ -1,39 +0,0 @@ -PositionEmbeddingType in candle_transformers::models::jina_bert - Rust

PositionEmbeddingType

Enum PositionEmbeddingType 

Source
pub enum PositionEmbeddingType {
-    Absolute,
-    Alibi,
-}

Variants§

§

Absolute

§

Alibi

Trait Implementations§

Source§

impl Clone for PositionEmbeddingType

Source§

fn clone(&self) -> PositionEmbeddingType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PositionEmbeddingType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for PositionEmbeddingType

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for PositionEmbeddingType

Source§

fn eq(&self, other: &PositionEmbeddingType) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for PositionEmbeddingType

Source§

impl Eq for PositionEmbeddingType

Source§

impl StructuralPartialEq for PositionEmbeddingType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/jina_bert/index.html b/network-poc/target-native/doc/candle_transformers/models/jina_bert/index.html deleted file mode 100644 index ed6d206..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/jina_bert/index.html +++ /dev/null @@ -1,4 +0,0 @@ -candle_transformers::models::jina_bert - Rust

Module jina_bert

Module jina_bert 

Source
Expand description

§JinaBERT inference implementation

-

Based on implementation from huggingface for Jina BERT and its variants

-

See: Jina Embeddings on HuggingFace

-

Structs§

BertModel
Config

Enums§

PositionEmbeddingType

Constants§

DTYPE
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/jina_bert/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/jina_bert/sidebar-items.js deleted file mode 100644 index ba3fe22..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/jina_bert/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"constant":["DTYPE"],"enum":["PositionEmbeddingType"],"struct":["BertModel","Config"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/jina_bert/struct.BertModel.html b/network-poc/target-native/doc/candle_transformers/models/jina_bert/struct.BertModel.html deleted file mode 100644 index b430eaa..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/jina_bert/struct.BertModel.html +++ /dev/null @@ -1,31 +0,0 @@ -BertModel in candle_transformers::models::jina_bert - Rust

BertModel

Struct BertModel 

Source
pub struct BertModel {
-    pub device: Device,
-    /* private fields */
-}

Fields§

§device: Device

Implementations§

Source§

impl BertModel

Source

pub fn new(vb: VarBuilder<'_>, cfg: &Config) -> Result<Self>

Trait Implementations§

Source§

impl Clone for BertModel

Source§

fn clone(&self) -> BertModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for BertModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for BertModel

Source§

fn forward(&self, input_ids: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/jina_bert/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/jina_bert/struct.Config.html deleted file mode 100644 index ebb4b4d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/jina_bert/struct.Config.html +++ /dev/null @@ -1,56 +0,0 @@ -Config in candle_transformers::models::jina_bert - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub vocab_size: usize,
-    pub hidden_size: usize,
-    pub num_hidden_layers: usize,
-    pub num_attention_heads: usize,
-    pub intermediate_size: usize,
-    pub hidden_act: Activation,
-    pub max_position_embeddings: usize,
-    pub type_vocab_size: usize,
-    pub initializer_range: f64,
-    pub layer_norm_eps: f64,
-    pub pad_token_id: usize,
-    pub position_embedding_type: PositionEmbeddingType,
-}

Fields§

§vocab_size: usize§hidden_size: usize§num_hidden_layers: usize§num_attention_heads: usize§intermediate_size: usize§hidden_act: Activation§max_position_embeddings: usize§type_vocab_size: usize§initializer_range: f64§layer_norm_eps: f64§pad_token_id: usize§position_embedding_type: PositionEmbeddingType

Implementations§

Source§

impl Config

Source

pub fn v2_base() -> Self

Source

pub fn new( - vocab_size: usize, - hidden_size: usize, - num_hidden_layers: usize, - num_attention_heads: usize, - intermediate_size: usize, - hidden_act: Activation, - max_position_embeddings: usize, - type_vocab_size: usize, - initializer_range: f64, - layer_norm_eps: f64, - pad_token_id: usize, - position_embedding_type: PositionEmbeddingType, -) -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama/constant.DEFAULT_MAX_SEQ_LEN.html b/network-poc/target-native/doc/candle_transformers/models/llama/constant.DEFAULT_MAX_SEQ_LEN.html deleted file mode 100644 index fa3a24a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama/constant.DEFAULT_MAX_SEQ_LEN.html +++ /dev/null @@ -1 +0,0 @@ -DEFAULT_MAX_SEQ_LEN in candle_transformers::models::llama - Rust

DEFAULT_MAX_SEQ_LEN

Constant DEFAULT_MAX_SEQ_LEN 

Source
pub const DEFAULT_MAX_SEQ_LEN: usize = 4096;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama/enum.Llama3RopeType.html b/network-poc/target-native/doc/candle_transformers/models/llama/enum.Llama3RopeType.html deleted file mode 100644 index bdeab3e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama/enum.Llama3RopeType.html +++ /dev/null @@ -1,32 +0,0 @@ -Llama3RopeType in candle_transformers::models::llama - Rust

Llama3RopeType

Enum Llama3RopeType 

Source
pub enum Llama3RopeType {
-    Llama3,
-    Default,
-}

Variants§

§

Llama3

§

Default

Trait Implementations§

Source§

impl Clone for Llama3RopeType

Source§

fn clone(&self) -> Llama3RopeType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Llama3RopeType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Llama3RopeType

Source§

fn default() -> Llama3RopeType

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Llama3RopeType

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama/enum.LlamaEosToks.html b/network-poc/target-native/doc/candle_transformers/models/llama/enum.LlamaEosToks.html deleted file mode 100644 index a680a6d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama/enum.LlamaEosToks.html +++ /dev/null @@ -1,32 +0,0 @@ -LlamaEosToks in candle_transformers::models::llama - Rust

LlamaEosToks

Enum LlamaEosToks 

Source
pub enum LlamaEosToks {
-    Single(u32),
-    Multiple(Vec<u32>),
-}

Variants§

§

Single(u32)

§

Multiple(Vec<u32>)

Trait Implementations§

Source§

impl Clone for LlamaEosToks

Source§

fn clone(&self) -> LlamaEosToks

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LlamaEosToks

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for LlamaEosToks

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama/index.html b/network-poc/target-native/doc/candle_transformers/models/llama/index.html deleted file mode 100644 index e64ce9d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama/index.html +++ /dev/null @@ -1,4 +0,0 @@ -candle_transformers::models::llama - Rust

Module llama

Module llama 

Source
Expand description

Llama inference implementation.

-

See “LLaMA: Open and Efficient Foundation Language Models”

-

Implementation based on Hugging Face’s transformers

-

Structs§

Cache
Config
Llama
Llama3RopeConfig
LlamaConfig

Enums§

Llama3RopeType
LlamaEosToks

Constants§

DEFAULT_MAX_SEQ_LEN
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/llama/sidebar-items.js deleted file mode 100644 index 061e20c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"constant":["DEFAULT_MAX_SEQ_LEN"],"enum":["Llama3RopeType","LlamaEosToks"],"struct":["Cache","Config","Llama","Llama3RopeConfig","LlamaConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama/struct.Cache.html b/network-poc/target-native/doc/candle_transformers/models/llama/struct.Cache.html deleted file mode 100644 index 9f68caa..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama/struct.Cache.html +++ /dev/null @@ -1,35 +0,0 @@ -Cache in candle_transformers::models::llama - Rust

Cache

Struct Cache 

Source
pub struct Cache {
-    pub use_kv_cache: bool,
-    /* private fields */
-}

Fields§

§use_kv_cache: bool

Implementations§

Source§

impl Cache

Source

pub fn new( - use_kv_cache: bool, - dtype: DType, - config: &Config, - device: &Device, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Cache

Source§

fn clone(&self) -> Cache

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Cache

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Cache

§

impl !RefUnwindSafe for Cache

§

impl Send for Cache

§

impl Sync for Cache

§

impl Unpin for Cache

§

impl !UnwindSafe for Cache

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/llama/struct.Config.html deleted file mode 100644 index 9120cac..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama/struct.Config.html +++ /dev/null @@ -1,42 +0,0 @@ -Config in candle_transformers::models::llama - Rust

Config

Struct Config 

Source
pub struct Config {
Show 14 fields - pub hidden_size: usize, - pub intermediate_size: usize, - pub vocab_size: usize, - pub num_hidden_layers: usize, - pub num_attention_heads: usize, - pub num_key_value_heads: usize, - pub use_flash_attn: bool, - pub rms_norm_eps: f64, - pub rope_theta: f32, - pub bos_token_id: Option<u32>, - pub eos_token_id: Option<LlamaEosToks>, - pub rope_scaling: Option<Llama3RopeConfig>, - pub max_position_embeddings: usize, - pub tie_word_embeddings: bool, -
}

Fields§

§hidden_size: usize§intermediate_size: usize§vocab_size: usize§num_hidden_layers: usize§num_attention_heads: usize§num_key_value_heads: usize§use_flash_attn: bool§rms_norm_eps: f64§rope_theta: f32§bos_token_id: Option<u32>§eos_token_id: Option<LlamaEosToks>§rope_scaling: Option<Llama3RopeConfig>§max_position_embeddings: usize§tie_word_embeddings: bool

Implementations§

Source§

impl Config

Source

pub fn config_7b_v1(use_flash_attn: bool) -> Self

Source

pub fn config_7b_v2(use_flash_attn: bool) -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama/struct.Llama.html b/network-poc/target-native/doc/candle_transformers/models/llama/struct.Llama.html deleted file mode 100644 index 1f0f942..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama/struct.Llama.html +++ /dev/null @@ -1,37 +0,0 @@ -Llama in candle_transformers::models::llama - Rust

Llama

Struct Llama 

Source
pub struct Llama { /* private fields */ }

Implementations§

Source§

impl Llama

Source

pub fn embed(&self, x: &Tensor) -> Result<Tensor>

Source

pub fn forward_input_embed( - &self, - input_embed: &Tensor, - index_pos: usize, - cache: &mut Cache, -) -> Result<Tensor>

Source

pub fn forward( - &self, - x: &Tensor, - index_pos: usize, - cache: &mut Cache, -) -> Result<Tensor>

Source

pub fn load(vb: VarBuilder<'_>, cfg: &Config) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Llama

Source§

fn clone(&self) -> Llama

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Llama

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Llama

§

impl !RefUnwindSafe for Llama

§

impl Send for Llama

§

impl Sync for Llama

§

impl Unpin for Llama

§

impl !UnwindSafe for Llama

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama/struct.Llama3RopeConfig.html b/network-poc/target-native/doc/candle_transformers/models/llama/struct.Llama3RopeConfig.html deleted file mode 100644 index 4a38609..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama/struct.Llama3RopeConfig.html +++ /dev/null @@ -1,35 +0,0 @@ -Llama3RopeConfig in candle_transformers::models::llama - Rust

Llama3RopeConfig

Struct Llama3RopeConfig 

Source
pub struct Llama3RopeConfig {
-    pub factor: f32,
-    pub low_freq_factor: f32,
-    pub high_freq_factor: f32,
-    pub original_max_position_embeddings: usize,
-    pub rope_type: Llama3RopeType,
-}

Fields§

§factor: f32§low_freq_factor: f32§high_freq_factor: f32§original_max_position_embeddings: usize§rope_type: Llama3RopeType

Trait Implementations§

Source§

impl Clone for Llama3RopeConfig

Source§

fn clone(&self) -> Llama3RopeConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Llama3RopeConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Llama3RopeConfig

Source§

fn default() -> Llama3RopeConfig

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Llama3RopeConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama/struct.LlamaConfig.html b/network-poc/target-native/doc/candle_transformers/models/llama/struct.LlamaConfig.html deleted file mode 100644 index eefaa27..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama/struct.LlamaConfig.html +++ /dev/null @@ -1,43 +0,0 @@ -LlamaConfig in candle_transformers::models::llama - Rust

LlamaConfig

Struct LlamaConfig 

Source
pub struct LlamaConfig {
Show 13 fields - pub hidden_size: usize, - pub intermediate_size: usize, - pub vocab_size: usize, - pub num_hidden_layers: usize, - pub num_attention_heads: usize, - pub num_key_value_heads: Option<usize>, - pub rms_norm_eps: f64, - pub rope_theta: f32, - pub bos_token_id: Option<u32>, - pub eos_token_id: Option<LlamaEosToks>, - pub rope_scaling: Option<Llama3RopeConfig>, - pub max_position_embeddings: usize, - pub tie_word_embeddings: Option<bool>, -
}

Fields§

§hidden_size: usize§intermediate_size: usize§vocab_size: usize§num_hidden_layers: usize§num_attention_heads: usize§num_key_value_heads: Option<usize>§rms_norm_eps: f64§rope_theta: f32§bos_token_id: Option<u32>§eos_token_id: Option<LlamaEosToks>§rope_scaling: Option<Llama3RopeConfig>§max_position_embeddings: usize§tie_word_embeddings: Option<bool>

Implementations§

Trait Implementations§

Source§

impl Clone for LlamaConfig

Source§

fn clone(&self) -> LlamaConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LlamaConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for LlamaConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama2_c/index.html b/network-poc/target-native/doc/candle_transformers/models/llama2_c/index.html deleted file mode 100644 index cd29087..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama2_c/index.html +++ /dev/null @@ -1,7 +0,0 @@ -candle_transformers::models::llama2_c - Rust

Module llama2_c

Module llama2_c 

Source
Expand description

Llama2 inference implementation.

-

See “LLaMA 2: Open Foundation and Fine-Tuned Chat Models”

- -

Structs§

Cache
Config
Llama
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama2_c/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/llama2_c/sidebar-items.js deleted file mode 100644 index 83b9c93..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama2_c/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Cache","Config","Llama"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama2_c/struct.Cache.html b/network-poc/target-native/doc/candle_transformers/models/llama2_c/struct.Cache.html deleted file mode 100644 index c40921c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama2_c/struct.Cache.html +++ /dev/null @@ -1,33 +0,0 @@ -Cache in candle_transformers::models::llama2_c - Rust

Cache

Struct Cache 

Source
pub struct Cache {
-    pub use_kv_cache: bool,
-    pub kvs: Vec<Option<(Tensor, Tensor)>>,
-    pub cos: Tensor,
-    pub sin: Tensor,
-    /* private fields */
-}

Fields§

§use_kv_cache: bool§kvs: Vec<Option<(Tensor, Tensor)>>§cos: Tensor§sin: Tensor

Implementations§

Source§

impl Cache

Source

pub fn new(use_kv_cache: bool, cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn mask(&mut self, t: usize) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Cache

Source§

fn clone(&self) -> Cache

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Cache

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Cache

§

impl !RefUnwindSafe for Cache

§

impl Send for Cache

§

impl Sync for Cache

§

impl Unpin for Cache

§

impl !UnwindSafe for Cache

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama2_c/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/llama2_c/struct.Config.html deleted file mode 100644 index 856b674..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama2_c/struct.Config.html +++ /dev/null @@ -1,36 +0,0 @@ -Config in candle_transformers::models::llama2_c - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub dim: usize,
-    pub hidden_dim: usize,
-    pub n_layers: usize,
-    pub n_heads: usize,
-    pub n_kv_heads: usize,
-    pub vocab_size: usize,
-    pub seq_len: usize,
-    pub norm_eps: f64,
-}

Fields§

§dim: usize§hidden_dim: usize§n_layers: usize§n_heads: usize§n_kv_heads: usize§vocab_size: usize§seq_len: usize§norm_eps: f64

Implementations§

Source§

impl Config

Source

pub fn tiny_260k() -> Self

Source

pub fn tiny_15m() -> Self

Source

pub fn tiny_42m() -> Self

Source

pub fn tiny_110m() -> Self

Source§

impl Config

Source

pub fn from_reader<R: Read>(r: &mut R) -> Result<Self>

Source

pub fn head_size(&self) -> usize

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama2_c/struct.Llama.html b/network-poc/target-native/doc/candle_transformers/models/llama2_c/struct.Llama.html deleted file mode 100644 index 0410db9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama2_c/struct.Llama.html +++ /dev/null @@ -1,35 +0,0 @@ -Llama in candle_transformers::models::llama2_c - Rust

Llama

Struct Llama 

Source
pub struct Llama {
-    pub config: Config,
-    /* private fields */
-}

Fields§

§config: Config

Implementations§

Source§

impl Llama

Source

pub fn forward( - &self, - x: &Tensor, - index_pos: usize, - cache: &mut Cache, -) -> Result<Tensor>

Source

pub fn load(vb: VarBuilder<'_>, cfg: Config) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Llama

Source§

fn clone(&self) -> Llama

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Llama

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Llama

§

impl !RefUnwindSafe for Llama

§

impl Send for Llama

§

impl Sync for Llama

§

impl Unpin for Llama

§

impl !UnwindSafe for Llama

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama2_c_weights/index.html b/network-poc/target-native/doc/candle_transformers/models/llama2_c_weights/index.html deleted file mode 100644 index c425284..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama2_c_weights/index.html +++ /dev/null @@ -1,4 +0,0 @@ -candle_transformers::models::llama2_c_weights - Rust

Module llama2_c_weights

Module llama2_c_weights 

Source
Expand description

Llama2 inference implementation.

-

See “LLaMA 2: Open Foundation and Fine-Tuned Chat Models”

-

Based on the llama2.c implementation

-

Structs§

TransformerWeights
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama2_c_weights/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/llama2_c_weights/sidebar-items.js deleted file mode 100644 index 3aa7873..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama2_c_weights/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["TransformerWeights"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llama2_c_weights/struct.TransformerWeights.html b/network-poc/target-native/doc/candle_transformers/models/llama2_c_weights/struct.TransformerWeights.html deleted file mode 100644 index 0f77d96..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llama2_c_weights/struct.TransformerWeights.html +++ /dev/null @@ -1,29 +0,0 @@ -TransformerWeights in candle_transformers::models::llama2_c_weights - Rust

TransformerWeights

Struct TransformerWeights 

Source
pub struct TransformerWeights { /* private fields */ }

Implementations§

Source§

impl TransformerWeights

Source

pub fn from_reader<R: Read>(r: &mut R, c: &Config, dev: &Device) -> Result<Self>

Source

pub fn var_builder( - &self, - cfg: &Config, - device: &Device, -) -> Result<VarBuilder<'static>>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/config/index.html b/network-poc/target-native/doc/candle_transformers/models/llava/config/index.html deleted file mode 100644 index 03477e2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/config/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::llava::config - Rust

Module config

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/config/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/llava/config/sidebar-items.js deleted file mode 100644 index f8fd365..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/config/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["HFGenerationConfig","HFLLaVAConfig","HFLLaVATextConfig","HFLLaVAVisionConfig","HFPreProcessorConfig","LLaVAConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFGenerationConfig.html b/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFGenerationConfig.html deleted file mode 100644 index 255aa4b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFGenerationConfig.html +++ /dev/null @@ -1,35 +0,0 @@ -HFGenerationConfig in candle_transformers::models::llava::config - Rust

HFGenerationConfig

Struct HFGenerationConfig 

Source
pub struct HFGenerationConfig {
-    pub bos_token_id: usize,
-    pub eos_token_id: usize,
-    pub max_length: usize,
-    pub pad_token_id: usize,
-}

Fields§

§bos_token_id: usize§eos_token_id: usize§max_length: usize§pad_token_id: usize

Trait Implementations§

Source§

impl Clone for HFGenerationConfig

Source§

fn clone(&self) -> HFGenerationConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for HFGenerationConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for HFGenerationConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for HFGenerationConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFLLaVAConfig.html b/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFLLaVAConfig.html deleted file mode 100644 index 24c8a2f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFLLaVAConfig.html +++ /dev/null @@ -1,48 +0,0 @@ -HFLLaVAConfig in candle_transformers::models::llava::config - Rust

HFLLaVAConfig

Struct HFLLaVAConfig 

Source
pub struct HFLLaVAConfig {
Show 13 fields - pub architectures: Vec<String>, - pub ignore_index: isize, - pub image_grid_pinpoints: Vec<(u32, u32)>, - pub image_token_index: isize, - pub model_type: String, - pub projector_hidden_act: String, - pub text_config: HFLLaVATextConfig, - pub torch_dtype: String, - pub use_image_newline_parameter: bool, - pub vision_config: HFLLaVAVisionConfig, - pub vision_feature_layer: isize, - pub vision_feature_select_strategy: String, - pub vocab_size: usize, -
}

Fields§

§architectures: Vec<String>§ignore_index: isize§image_grid_pinpoints: Vec<(u32, u32)>§image_token_index: isize§model_type: String§projector_hidden_act: String§text_config: HFLLaVATextConfig§torch_dtype: String§use_image_newline_parameter: bool§vision_config: HFLLaVAVisionConfig§vision_feature_layer: isize§vision_feature_select_strategy: String§vocab_size: usize

Implementations§

Source§

impl HFLLaVAConfig

Source

pub fn to_clip_vision_config(&self) -> ClipVisionConfig

Source

pub fn to_llava_config( - &self, - generation_config: &HFGenerationConfig, - preprocessor_config: &HFPreProcessorConfig, -) -> LLaVAConfig

Trait Implementations§

Source§

impl Clone for HFLLaVAConfig

Source§

fn clone(&self) -> HFLLaVAConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for HFLLaVAConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for HFLLaVAConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for HFLLaVAConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFLLaVATextConfig.html b/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFLLaVATextConfig.html deleted file mode 100644 index 6952d9b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFLLaVATextConfig.html +++ /dev/null @@ -1,46 +0,0 @@ -HFLLaVATextConfig in candle_transformers::models::llava::config - Rust

HFLLaVATextConfig

Struct HFLLaVATextConfig 

Source
pub struct HFLLaVATextConfig {
Show 15 fields - pub architectures: Vec<String>, - pub hidden_size: usize, - pub intermediate_size: usize, - pub max_length: usize, - pub max_position_embeddings: usize, - pub model_type: String, - pub num_attention_heads: usize, - pub num_hidden_layers: usize, - pub num_key_value_heads: usize, - pub pad_token_id: usize, - pub rms_norm_eps: f32, - pub rope_theta: f32, - pub torch_dtype: String, - pub use_cache: bool, - pub vocab_size: usize, -
}

Fields§

§architectures: Vec<String>§hidden_size: usize§intermediate_size: usize§max_length: usize§max_position_embeddings: usize§model_type: String§num_attention_heads: usize§num_hidden_layers: usize§num_key_value_heads: usize§pad_token_id: usize§rms_norm_eps: f32§rope_theta: f32§torch_dtype: String§use_cache: bool§vocab_size: usize

Trait Implementations§

Source§

impl Clone for HFLLaVATextConfig

Source§

fn clone(&self) -> HFLLaVATextConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for HFLLaVATextConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for HFLLaVATextConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for HFLLaVATextConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFLLaVAVisionConfig.html b/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFLLaVAVisionConfig.html deleted file mode 100644 index 87452fb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFLLaVAVisionConfig.html +++ /dev/null @@ -1,40 +0,0 @@ -HFLLaVAVisionConfig in candle_transformers::models::llava::config - Rust

HFLLaVAVisionConfig

Struct HFLLaVAVisionConfig 

Source
pub struct HFLLaVAVisionConfig {
-    pub hidden_size: usize,
-    pub image_size: usize,
-    pub intermediate_size: usize,
-    pub model_type: String,
-    pub num_attention_heads: usize,
-    pub num_hidden_layers: usize,
-    pub patch_size: usize,
-    pub projection_dim: usize,
-    pub vocab_size: usize,
-}

Fields§

§hidden_size: usize§image_size: usize§intermediate_size: usize§model_type: String§num_attention_heads: usize§num_hidden_layers: usize§patch_size: usize§projection_dim: usize§vocab_size: usize

Trait Implementations§

Source§

impl Clone for HFLLaVAVisionConfig

Source§

fn clone(&self) -> HFLLaVAVisionConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for HFLLaVAVisionConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for HFLLaVAVisionConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for HFLLaVAVisionConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFPreProcessorConfig.html b/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFPreProcessorConfig.html deleted file mode 100644 index c2e539f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.HFPreProcessorConfig.html +++ /dev/null @@ -1,43 +0,0 @@ -HFPreProcessorConfig in candle_transformers::models::llava::config - Rust

HFPreProcessorConfig

Struct HFPreProcessorConfig 

Source
pub struct HFPreProcessorConfig {
-    pub aspect_ratio_setting: String,
-    pub crop_size: HashMap<String, usize>,
-    pub do_center_crop: bool,
-    pub do_convert_rgb: bool,
-    pub do_normalize: bool,
-    pub do_rescale: bool,
-    pub do_resize: bool,
-    pub image_mean: Vec<f32>,
-    pub image_std: Vec<f32>,
-    pub resample: u32,
-    pub rescale_factor: f32,
-    pub size: HashMap<String, f32>,
-}

Fields§

§aspect_ratio_setting: String§crop_size: HashMap<String, usize>§do_center_crop: bool§do_convert_rgb: bool§do_normalize: bool§do_rescale: bool§do_resize: bool§image_mean: Vec<f32>§image_std: Vec<f32>§resample: u32§rescale_factor: f32§size: HashMap<String, f32>

Trait Implementations§

Source§

impl Clone for HFPreProcessorConfig

Source§

fn clone(&self) -> HFPreProcessorConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for HFPreProcessorConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for HFPreProcessorConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for HFPreProcessorConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.LLaVAConfig.html b/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.LLaVAConfig.html deleted file mode 100644 index 39d22c0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/config/struct.LLaVAConfig.html +++ /dev/null @@ -1,62 +0,0 @@ -LLaVAConfig in candle_transformers::models::llava::config - Rust

LLaVAConfig

Struct LLaVAConfig 

Source
pub struct LLaVAConfig {
Show 31 fields - pub architectures: Vec<String>, - pub bos_token_id: usize, - pub eos_token_id: usize, - pub hidden_size: usize, - pub image_aspect_ratio: String, - pub image_crop_resolution: usize, - pub image_grid_pinpoints: Vec<(u32, u32)>, - pub image_split_resolution: usize, - pub intermediate_size: usize, - pub max_position_embeddings: usize, - pub mm_hidden_size: usize, - pub mm_patch_merge_type: String, - pub mm_projector_type: String, - pub mm_use_im_start_end: bool, - pub mm_vision_select_feature: String, - pub mm_vision_select_layer: isize, - pub mm_vision_tower: Option<String>, - pub model_type: String, - pub num_attention_heads: usize, - pub num_hidden_layers: usize, - pub num_key_value_heads: usize, - pub pad_token_id: usize, - pub rms_norm_eps: f32, - pub rope_theta: f32, - pub tokenizer_model_max_length: Option<usize>, - pub torch_dtype: String, - pub use_cache: bool, - pub vocab_size: usize, - pub image_token_index: isize, - pub hf: bool, - pub tie_word_embeddings: Option<bool>, -
}

Fields§

§architectures: Vec<String>§bos_token_id: usize§eos_token_id: usize§hidden_size: usize§image_aspect_ratio: String§image_crop_resolution: usize§image_grid_pinpoints: Vec<(u32, u32)>§image_split_resolution: usize§intermediate_size: usize§max_position_embeddings: usize§mm_hidden_size: usize§mm_patch_merge_type: String§mm_projector_type: String§mm_use_im_start_end: bool§mm_vision_select_feature: String§mm_vision_select_layer: isize§mm_vision_tower: Option<String>§model_type: String§num_attention_heads: usize§num_hidden_layers: usize§num_key_value_heads: usize§pad_token_id: usize§rms_norm_eps: f32§rope_theta: f32§tokenizer_model_max_length: Option<usize>§torch_dtype: String§use_cache: bool§vocab_size: usize§image_token_index: isize§hf: bool§tie_word_embeddings: Option<bool>

Implementations§

Trait Implementations§

Source§

impl Clone for LLaVAConfig

Source§

fn clone(&self) -> LLaVAConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LLaVAConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for LLaVAConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for LLaVAConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/index.html b/network-poc/target-native/doc/candle_transformers/models/llava/index.html deleted file mode 100644 index 7181cec..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/index.html +++ /dev/null @@ -1,8 +0,0 @@ -candle_transformers::models::llava - Rust

Module llava

Module llava 

Source
Expand description

The LLaVA (Large Language and Vision Assistant) model.

-

This provides the main model implementation combining a vision tower (CLIP) with -language model (Llama) for multimodal capabilities. The architecture implements the training-free projection technique.

- -

Modules§

config
utils

Structs§

ClipVisionTower
IdentityMap
LLaVA
MMProjector
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/llava/sidebar-items.js deleted file mode 100644 index 8a0d21d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"mod":["config","utils"],"struct":["ClipVisionTower","IdentityMap","LLaVA","MMProjector"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/struct.ClipVisionTower.html b/network-poc/target-native/doc/candle_transformers/models/llava/struct.ClipVisionTower.html deleted file mode 100644 index a26fb8f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/struct.ClipVisionTower.html +++ /dev/null @@ -1,33 +0,0 @@ -ClipVisionTower in candle_transformers::models::llava - Rust

ClipVisionTower

Struct ClipVisionTower 

Source
pub struct ClipVisionTower {
-    pub config: ClipVisionConfig,
-    /* private fields */
-}

Fields§

§config: ClipVisionConfig

Implementations§

Source§

impl ClipVisionTower

Source

pub fn new( - vb: VarBuilder<'_>, - select_layer: isize, - select_feature_method: &str, - config: &Option<ClipVisionConfig>, -) -> Result<Self>

Source

pub fn forward(&self, x: &Tensor) -> Result<Tensor>

Source

pub fn num_patches_per_side(&self) -> usize

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/struct.IdentityMap.html b/network-poc/target-native/doc/candle_transformers/models/llava/struct.IdentityMap.html deleted file mode 100644 index 7803349..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/struct.IdentityMap.html +++ /dev/null @@ -1,26 +0,0 @@ -IdentityMap in candle_transformers::models::llava - Rust

IdentityMap

Struct IdentityMap 

Source
pub struct IdentityMap {}

Trait Implementations§

Source§

impl Module for IdentityMap

Source§

fn forward(&self, x: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/struct.LLaVA.html b/network-poc/target-native/doc/candle_transformers/models/llava/struct.LLaVA.html deleted file mode 100644 index bf81ea2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/struct.LLaVA.html +++ /dev/null @@ -1,45 +0,0 @@ -LLaVA in candle_transformers::models::llava - Rust

LLaVA

Struct LLaVA 

Source
pub struct LLaVA {
-    pub clip_vision_tower: ClipVisionTower,
-    pub image_newline: Tensor,
-    pub mm_projector: MMProjector,
-    pub llama: Llama,
-    /* private fields */
-}

Fields§

§clip_vision_tower: ClipVisionTower§image_newline: Tensor§mm_projector: MMProjector§llama: Llama

Implementations§

Source§

impl LLaVA

Source

pub fn load( - vb: VarBuilder<'_>, - config: &LLaVAConfig, - clip_vision_config: Option<ClipVisionConfig>, -) -> Result<Self>

Source

pub fn encode_images(&self, x: &Tensor) -> Result<Tensor>

Source

pub fn prepare_inputs_labels_for_multimodal( - &self, - input_ids: &Tensor, - images: &[Tensor], - image_sizes: &[(u32, u32)], -) -> Result<Tensor>

Source

pub fn forward( - &self, - input_embeds: &Tensor, - position_id: usize, - cache: &mut Cache, -) -> Result<Tensor>

Auto Trait Implementations§

§

impl Freeze for LLaVA

§

impl !RefUnwindSafe for LLaVA

§

impl !Send for LLaVA

§

impl !Sync for LLaVA

§

impl Unpin for LLaVA

§

impl !UnwindSafe for LLaVA

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/struct.MMProjector.html b/network-poc/target-native/doc/candle_transformers/models/llava/struct.MMProjector.html deleted file mode 100644 index 1b6295b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/struct.MMProjector.html +++ /dev/null @@ -1,27 +0,0 @@ -MMProjector in candle_transformers::models::llava - Rust

MMProjector

Struct MMProjector 

Source
pub struct MMProjector {
-    pub modules: Sequential,
-}

Fields§

§modules: Sequential

Implementations§

Source§

impl MMProjector

Source

pub fn load(vb: &VarBuilder<'_>, config: &LLaVAConfig) -> Result<Self>

Source

pub fn forward(&self, x: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/utils/fn.get_anyres_image_grid_shape.html b/network-poc/target-native/doc/candle_transformers/models/llava/utils/fn.get_anyres_image_grid_shape.html deleted file mode 100644 index 1b50c65..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/utils/fn.get_anyres_image_grid_shape.html +++ /dev/null @@ -1,5 +0,0 @@ -get_anyres_image_grid_shape in candle_transformers::models::llava::utils - Rust

get_anyres_image_grid_shape

Function get_anyres_image_grid_shape 

Source
pub fn get_anyres_image_grid_shape(
-    image_size: (u32, u32),
-    grid_pinpoints: &[(u32, u32)],
-    patch_size: u32,
-) -> (u32, u32)
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/utils/fn.select_best_resolution.html b/network-poc/target-native/doc/candle_transformers/models/llava/utils/fn.select_best_resolution.html deleted file mode 100644 index 7cb1268..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/utils/fn.select_best_resolution.html +++ /dev/null @@ -1,4 +0,0 @@ -select_best_resolution in candle_transformers::models::llava::utils - Rust

select_best_resolution

Function select_best_resolution 

Source
pub fn select_best_resolution(
-    original_size: (u32, u32),
-    possible_resolutions: &[(u32, u32)],
-) -> (u32, u32)
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/utils/index.html b/network-poc/target-native/doc/candle_transformers/models/llava/utils/index.html deleted file mode 100644 index 654e0bd..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/utils/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::llava::utils - Rust

Module utils

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/llava/utils/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/llava/utils/sidebar-items.js deleted file mode 100644 index 8773c28..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/llava/utils/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["get_anyres_image_grid_shape","select_best_resolution"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mamba/index.html b/network-poc/target-native/doc/candle_transformers/models/mamba/index.html deleted file mode 100644 index c699a35..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mamba/index.html +++ /dev/null @@ -1,6 +0,0 @@ -candle_transformers::models::mamba - Rust

Module mamba

Module mamba 

Source
Expand description

Mamba inference implementation.

-

See “Mamba: Linear-Time Sequence Modeling with Selective State Spaces”

-

Based on reference implementation from the AlbertMamba project -A fast implementation of mamba for inference only. -Based on Laurent Mazare’s rust implementation: mamba.rs

-

Structs§

Config
MambaBlock
Model
ResidualBlock
State
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mamba/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mamba/sidebar-items.js deleted file mode 100644 index b590fa8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mamba/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","MambaBlock","Model","ResidualBlock","State"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mamba/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/mamba/struct.Config.html deleted file mode 100644 index f8ae818..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mamba/struct.Config.html +++ /dev/null @@ -1,34 +0,0 @@ -Config in candle_transformers::models::mamba - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub d_model: usize,
-    pub n_layer: usize,
-    pub vocab_size: usize,
-    pub pad_vocab_size_multiple: usize,
-}

Fields§

§d_model: usize§n_layer: usize§vocab_size: usize§pad_vocab_size_multiple: usize

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mamba/struct.MambaBlock.html b/network-poc/target-native/doc/candle_transformers/models/mamba/struct.MambaBlock.html deleted file mode 100644 index 5ca235f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mamba/struct.MambaBlock.html +++ /dev/null @@ -1,27 +0,0 @@ -MambaBlock in candle_transformers::models::mamba - Rust

MambaBlock

Struct MambaBlock 

Source
pub struct MambaBlock { /* private fields */ }

Implementations§

Source§

impl MambaBlock

Source

pub fn new(layer_index: usize, cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for MambaBlock

Source§

fn clone(&self) -> MambaBlock

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MambaBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mamba/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/mamba/struct.Model.html deleted file mode 100644 index 7e4dec8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mamba/struct.Model.html +++ /dev/null @@ -1,27 +0,0 @@ -Model in candle_transformers::models::mamba - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward(&self, input_ids: &Tensor, state: &mut State) -> Result<Tensor>

Source

pub fn dtype(&self) -> DType

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mamba/struct.ResidualBlock.html b/network-poc/target-native/doc/candle_transformers/models/mamba/struct.ResidualBlock.html deleted file mode 100644 index 2a0f0ea..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mamba/struct.ResidualBlock.html +++ /dev/null @@ -1,27 +0,0 @@ -ResidualBlock in candle_transformers::models::mamba - Rust

ResidualBlock

Struct ResidualBlock 

Source
pub struct ResidualBlock { /* private fields */ }

Implementations§

Source§

impl ResidualBlock

Source

pub fn new(layer_index: usize, cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for ResidualBlock

Source§

fn clone(&self) -> ResidualBlock

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ResidualBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mamba/struct.State.html b/network-poc/target-native/doc/candle_transformers/models/mamba/struct.State.html deleted file mode 100644 index ce9eeda..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mamba/struct.State.html +++ /dev/null @@ -1,34 +0,0 @@ -State in candle_transformers::models::mamba - Rust

State

Struct State 

Source
pub struct State {
-    pub hs: Vec<Tensor>,
-    pub prev_xs: Vec<[Tensor; 4]>,
-    pub pos: usize,
-}

Fields§

§hs: Vec<Tensor>§prev_xs: Vec<[Tensor; 4]>§pos: usize

Implementations§

Source§

impl State

Source

pub fn new( - batch_size: usize, - cfg: &Config, - dtype: DType, - device: &Device, -) -> Result<Self>

Auto Trait Implementations§

§

impl Freeze for State

§

impl !RefUnwindSafe for State

§

impl Send for State

§

impl Sync for State

§

impl Unpin for State

§

impl !UnwindSafe for State

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/marian/index.html b/network-poc/target-native/doc/candle_transformers/models/marian/index.html deleted file mode 100644 index ddf37d9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/marian/index.html +++ /dev/null @@ -1,7 +0,0 @@ -candle_transformers::models::marian - Rust

Module marian

Module marian 

Source
Expand description

Marian Neural Machine Translation

-

See “Marian: Fast Neural Machine Translation in C++” Junczys-Dowmunt et al. 2018

- -

Structs§

Config
Decoder
Encoder
MTModel
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/marian/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/marian/sidebar-items.js deleted file mode 100644 index f465b39..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/marian/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Decoder","Encoder","MTModel"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/marian/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/marian/struct.Config.html deleted file mode 100644 index 97b6725..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/marian/struct.Config.html +++ /dev/null @@ -1,49 +0,0 @@ -Config in candle_transformers::models::marian - Rust

Config

Struct Config 

Source
pub struct Config {
Show 19 fields - pub vocab_size: usize, - pub decoder_vocab_size: Option<usize>, - pub max_position_embeddings: usize, - pub encoder_layers: usize, - pub encoder_ffn_dim: usize, - pub encoder_attention_heads: usize, - pub decoder_layers: usize, - pub decoder_ffn_dim: usize, - pub decoder_attention_heads: usize, - pub use_cache: bool, - pub is_encoder_decoder: bool, - pub activation_function: Activation, - pub d_model: usize, - pub decoder_start_token_id: u32, - pub scale_embedding: bool, - pub pad_token_id: u32, - pub eos_token_id: u32, - pub forced_eos_token_id: u32, - pub share_encoder_decoder_embeddings: bool, -
}

Fields§

§vocab_size: usize§decoder_vocab_size: Option<usize>§max_position_embeddings: usize§encoder_layers: usize§encoder_ffn_dim: usize§encoder_attention_heads: usize§decoder_layers: usize§decoder_ffn_dim: usize§decoder_attention_heads: usize§use_cache: bool§is_encoder_decoder: bool§activation_function: Activation§d_model: usize§decoder_start_token_id: u32§scale_embedding: bool§pad_token_id: u32§eos_token_id: u32§forced_eos_token_id: u32§share_encoder_decoder_embeddings: bool

Implementations§

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/marian/struct.Decoder.html b/network-poc/target-native/doc/candle_transformers/models/marian/struct.Decoder.html deleted file mode 100644 index 08f1090..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/marian/struct.Decoder.html +++ /dev/null @@ -1,33 +0,0 @@ -Decoder in candle_transformers::models::marian - Rust

Decoder

Struct Decoder 

Source
pub struct Decoder { /* private fields */ }

Implementations§

Source§

impl Decoder

Source

pub fn forward( - &mut self, - xs: &Tensor, - encoder_xs: Option<&Tensor>, - past_kv_len: usize, - attn_mask: &Tensor, -) -> Result<Tensor>

Source

pub fn reset_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Decoder

Source§

fn clone(&self) -> Decoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Decoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/marian/struct.Encoder.html b/network-poc/target-native/doc/candle_transformers/models/marian/struct.Encoder.html deleted file mode 100644 index 0cc1c9e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/marian/struct.Encoder.html +++ /dev/null @@ -1,27 +0,0 @@ -Encoder in candle_transformers::models::marian - Rust

Encoder

Struct Encoder 

Source
pub struct Encoder { /* private fields */ }

Implementations§

Source§

impl Encoder

Source

pub fn forward(&mut self, xs: &Tensor, past_kv_len: usize) -> Result<Tensor>

Source

pub fn reset_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Encoder

Source§

fn clone(&self) -> Encoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Encoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/marian/struct.MTModel.html b/network-poc/target-native/doc/candle_transformers/models/marian/struct.MTModel.html deleted file mode 100644 index 992052b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/marian/struct.MTModel.html +++ /dev/null @@ -1,32 +0,0 @@ -MTModel in candle_transformers::models::marian - Rust

MTModel

Struct MTModel 

Source
pub struct MTModel { /* private fields */ }

Implementations§

Source§

impl MTModel

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn encoder(&mut self) -> &mut Encoder

Source

pub fn decoder(&mut self) -> &mut Decoder

Source

pub fn decode( - &mut self, - xs: &Tensor, - encoder_xs: &Tensor, - past_kv_len: usize, -) -> Result<Tensor>

Source

pub fn reset_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for MTModel

Source§

fn clone(&self) -> MTModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MTModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/index.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/index.html deleted file mode 100644 index 0539c2a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::metavoice::adapters - Rust

Module adapters

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/sidebar-items.js deleted file mode 100644 index 95ea8f9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["FlattenedInterleavedEncodec2Codebook","TiltedEncodec"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/struct.FlattenedInterleavedEncodec2Codebook.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/struct.FlattenedInterleavedEncodec2Codebook.html deleted file mode 100644 index 4ebb242..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/struct.FlattenedInterleavedEncodec2Codebook.html +++ /dev/null @@ -1,25 +0,0 @@ -FlattenedInterleavedEncodec2Codebook in candle_transformers::models::metavoice::adapters - Rust

FlattenedInterleavedEncodec2Codebook

Struct FlattenedInterleavedEncodec2Codebook 

Source
pub struct FlattenedInterleavedEncodec2Codebook { /* private fields */ }

Implementations§

Source§

impl FlattenedInterleavedEncodec2Codebook

Source

pub fn new(end_of_audio_token: u32) -> Self

Source

pub fn decode(&self, tokens: &[u32]) -> (Vec<u32>, Vec<u32>, Vec<u32>)

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/struct.TiltedEncodec.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/struct.TiltedEncodec.html deleted file mode 100644 index 3291ec2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/adapters/struct.TiltedEncodec.html +++ /dev/null @@ -1,25 +0,0 @@ -TiltedEncodec in candle_transformers::models::metavoice::adapters - Rust

TiltedEncodec

Struct TiltedEncodec 

Source
pub struct TiltedEncodec { /* private fields */ }

Implementations§

Source§

impl TiltedEncodec

Source

pub fn new(end_of_audio_token: u32) -> Self

Source

pub fn decode(&self, tokens: &[Vec<u32>]) -> (Vec<u32>, Vec<Vec<u32>>)

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/enum.AttnKernelType.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/enum.AttnKernelType.html deleted file mode 100644 index 1ec7184..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/enum.AttnKernelType.html +++ /dev/null @@ -1,40 +0,0 @@ -AttnKernelType in candle_transformers::models::metavoice::gpt - Rust

AttnKernelType

Enum AttnKernelType 

Source
pub enum AttnKernelType {
-    Fa2,
-    TorchAttn,
-    Hand,
-}

Variants§

§

Fa2

§

TorchAttn

§

Hand

Trait Implementations§

Source§

impl Clone for AttnKernelType

Source§

fn clone(&self) -> AttnKernelType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AttnKernelType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Hash for AttnKernelType

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for AttnKernelType

Source§

fn eq(&self, other: &AttnKernelType) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for AttnKernelType

Source§

impl Eq for AttnKernelType

Source§

impl StructuralPartialEq for AttnKernelType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/enum.NonLinearityType.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/enum.NonLinearityType.html deleted file mode 100644 index 81f7ffc..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/enum.NonLinearityType.html +++ /dev/null @@ -1,39 +0,0 @@ -NonLinearityType in candle_transformers::models::metavoice::gpt - Rust

NonLinearityType

Enum NonLinearityType 

Source
pub enum NonLinearityType {
-    Gelu,
-    Swiglu,
-}

Variants§

§

Gelu

§

Swiglu

Trait Implementations§

Source§

impl Clone for NonLinearityType

Source§

fn clone(&self) -> NonLinearityType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NonLinearityType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Hash for NonLinearityType

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for NonLinearityType

Source§

fn eq(&self, other: &NonLinearityType) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for NonLinearityType

Source§

impl Eq for NonLinearityType

Source§

impl StructuralPartialEq for NonLinearityType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/enum.NormType.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/enum.NormType.html deleted file mode 100644 index d4a0076..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/enum.NormType.html +++ /dev/null @@ -1,39 +0,0 @@ -NormType in candle_transformers::models::metavoice::gpt - Rust

NormType

Enum NormType 

Source
pub enum NormType {
-    LayerNorm,
-    RMSNorm,
-}

Variants§

§

LayerNorm

§

RMSNorm

Trait Implementations§

Source§

impl Clone for NormType

Source§

fn clone(&self) -> NormType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NormType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Hash for NormType

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for NormType

Source§

fn eq(&self, other: &NormType) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for NormType

Source§

impl Eq for NormType

Source§

impl StructuralPartialEq for NormType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/index.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/index.html deleted file mode 100644 index a8b2960..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::metavoice::gpt - Rust

Module gpt

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/sidebar-items.js deleted file mode 100644 index ac5d4a4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["AttnKernelType","NonLinearityType","NormType"],"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/struct.Config.html deleted file mode 100644 index 4f8e846..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/struct.Config.html +++ /dev/null @@ -1,43 +0,0 @@ -Config in candle_transformers::models::metavoice::gpt - Rust

Config

Struct Config 

Source
pub struct Config {
Show 15 fields - pub block_size: usize, - pub vocab_sizes: Vec<usize>, - pub target_vocab_sizes: Vec<usize>, - pub n_layer: usize, - pub n_head: usize, - pub n_embd: usize, - pub bias: bool, - pub causal: bool, - pub spk_emb_on_text: bool, - pub norm_type: NormType, - pub rmsnorm_eps: f64, - pub nonlinearity_type: NonLinearityType, - pub swiglu_multiple_of: Option<usize>, - pub attn_kernel_type: AttnKernelType, - pub kv_cache_enabled: bool, -
}

Fields§

§block_size: usize§vocab_sizes: Vec<usize>§target_vocab_sizes: Vec<usize>§n_layer: usize§n_head: usize§n_embd: usize§bias: bool§causal: bool§spk_emb_on_text: bool§norm_type: NormType§rmsnorm_eps: f64§nonlinearity_type: NonLinearityType§swiglu_multiple_of: Option<usize>§attn_kernel_type: AttnKernelType§kv_cache_enabled: bool

Implementations§

Source§

impl Config

Source

pub fn cfg1b_v0_1() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/struct.Model.html deleted file mode 100644 index 8242031..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/gpt/struct.Model.html +++ /dev/null @@ -1,25 +0,0 @@ -Model in candle_transformers::models::metavoice::gpt - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn config(&self) -> &Config

Source

pub fn forward(&self, idx: &Tensor) -> Result<Vec<Tensor>>

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/index.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/index.html deleted file mode 100644 index 982d70c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/index.html +++ /dev/null @@ -1,7 +0,0 @@ -candle_transformers::models::metavoice - Rust

Module metavoice

Module metavoice 

Source
Expand description

MetaVoice Studio ML Models

-

See MetaVoice’s TTS and voice cloning models:

- -

Modules§

adapters
gpt
speaker_encoder
tokenizers
transformer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/metavoice/sidebar-items.js deleted file mode 100644 index ebe0791..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"mod":["adapters","gpt","speaker_encoder","tokenizers","transformer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/index.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/index.html deleted file mode 100644 index 824ba3e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::metavoice::speaker_encoder - Rust

Module speaker_encoder

Module speaker_encoder 

Source

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/struct.Config.html deleted file mode 100644 index fcb0cdb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/struct.Config.html +++ /dev/null @@ -1,38 +0,0 @@ -Config in candle_transformers::models::metavoice::speaker_encoder - Rust

Config

pub struct Config {
-    pub sampling_rate: usize,
-    pub partial_n_frames: usize,
-    pub model_hidden_size: usize,
-    pub model_embedding_size: usize,
-    pub model_num_layers: usize,
-    pub mel_window_length: usize,
-    pub mel_window_step: usize,
-    pub mel_n_channels: usize,
-}

Fields§

§sampling_rate: usize§partial_n_frames: usize§model_hidden_size: usize§model_embedding_size: usize§model_num_layers: usize§mel_window_length: usize§mel_window_step: usize§mel_n_channels: usize

Implementations§

Source§

impl Config

Source

pub fn cfg() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/struct.Model.html deleted file mode 100644 index 6f296f5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/speaker_encoder/struct.Model.html +++ /dev/null @@ -1,33 +0,0 @@ -Model in candle_transformers::models::metavoice::speaker_encoder - Rust

Model

pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn embed_utterance( - &self, - wav: &[f32], - mel_filters: &[f32], - rate: f64, - min_c: f64, - device: &Device, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Module for Model

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/tokenizers/index.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/tokenizers/index.html deleted file mode 100644 index 8a7458c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/tokenizers/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::metavoice::tokenizers - Rust

Module tokenizers

Module tokenizers 

Source

Structs§

BPE
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/tokenizers/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/metavoice/tokenizers/sidebar-items.js deleted file mode 100644 index 4cca468..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/tokenizers/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["BPE"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/tokenizers/struct.BPE.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/tokenizers/struct.BPE.html deleted file mode 100644 index 104c9ee..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/tokenizers/struct.BPE.html +++ /dev/null @@ -1,31 +0,0 @@ -BPE in candle_transformers::models::metavoice::tokenizers - Rust

BPE

pub struct BPE {
-    pub re: Regex,
-    pub end_of_text: usize,
-    pub offset: usize,
-    pub ranks: HashMap<Vec<u8>, u32>,
-    /* private fields */
-}

Fields§

§re: Regex§end_of_text: usize§offset: usize§ranks: HashMap<Vec<u8>, u32>

Implementations§

Source§

impl BPE

Source

pub fn from_json(json: &Value, end_of_text: usize) -> Result<Self>

Source

pub fn byte_pair_encode(&self, piece: &[u8]) -> Vec<u32>

Source

pub fn encode(&self, text: &str) -> Result<Vec<u32>>

Auto Trait Implementations§

§

impl Freeze for BPE

§

impl !RefUnwindSafe for BPE

§

impl Send for BPE

§

impl Sync for BPE

§

impl Unpin for BPE

§

impl !UnwindSafe for BPE

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/index.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/index.html deleted file mode 100644 index f41cdee..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::metavoice::transformer - Rust

Module transformer

Module transformer 

Source

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/struct.Config.html deleted file mode 100644 index 4108e4b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/struct.Config.html +++ /dev/null @@ -1,39 +0,0 @@ -Config in candle_transformers::models::metavoice::transformer - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub block_size: usize,
-    pub vocab_size: usize,
-    pub n_layer: usize,
-    pub n_head: usize,
-    pub dim: usize,
-    pub speaker_emb_dim: usize,
-    pub intermediate_size: Option<usize>,
-    pub n_local_heads: Option<usize>,
-    pub norm_eps: f64,
-}

Fields§

§block_size: usize§vocab_size: usize§n_layer: usize§n_head: usize§dim: usize§speaker_emb_dim: usize§intermediate_size: Option<usize>§n_local_heads: Option<usize>§norm_eps: f64

Implementations§

Source§

impl Config

Source

pub fn cfg1b_v0_1() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/struct.Model.html deleted file mode 100644 index 6416939..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/metavoice/transformer/struct.Model.html +++ /dev/null @@ -1,32 +0,0 @@ -Model in candle_transformers::models::metavoice::transformer - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn clear_kv_cache(&mut self)

Source

pub fn forward( - &mut self, - xs: &Tensor, - spk_emb: &Tensor, - pos: usize, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/enum.Norm.html b/network-poc/target-native/doc/candle_transformers/models/mimi/conv/enum.Norm.html deleted file mode 100644 index 800a4ba..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/enum.Norm.html +++ /dev/null @@ -1,38 +0,0 @@ -Norm in candle_transformers::models::mimi::conv - Rust

Norm

Enum Norm 

Source
pub enum Norm {
-    WeightNorm,
-    SpectralNorm,
-    TimeGroupNorm,
-}

Variants§

§

WeightNorm

§

SpectralNorm

§

TimeGroupNorm

Trait Implementations§

Source§

impl Clone for Norm

Source§

fn clone(&self) -> Norm

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Norm

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Norm

Source§

fn eq(&self, other: &Norm) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for Norm

Source§

impl Eq for Norm

Source§

impl StructuralPartialEq for Norm

Auto Trait Implementations§

§

impl Freeze for Norm

§

impl RefUnwindSafe for Norm

§

impl Send for Norm

§

impl Sync for Norm

§

impl Unpin for Norm

§

impl UnwindSafe for Norm

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/enum.PadMode.html b/network-poc/target-native/doc/candle_transformers/models/mimi/conv/enum.PadMode.html deleted file mode 100644 index bc431cc..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/enum.PadMode.html +++ /dev/null @@ -1,38 +0,0 @@ -PadMode in candle_transformers::models::mimi::conv - Rust

PadMode

Enum PadMode 

Source
pub enum PadMode {
-    Constant,
-    Reflect,
-    Replicate,
-}

Variants§

§

Constant

§

Reflect

§

Replicate

Trait Implementations§

Source§

impl Clone for PadMode

Source§

fn clone(&self) -> PadMode

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PadMode

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for PadMode

Source§

fn eq(&self, other: &PadMode) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for PadMode

Source§

impl Eq for PadMode

Source§

impl StructuralPartialEq for PadMode

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/index.html b/network-poc/target-native/doc/candle_transformers/models/mimi/conv/index.html deleted file mode 100644 index 092140a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::mimi::conv - Rust

Module conv

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mimi/conv/sidebar-items.js deleted file mode 100644 index 2b80a49..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["Norm","PadMode"],"struct":["ConvDownsample1d","ConvTrUpsample1d","NormConv1d","NormConvTranspose1d","StreamableConv1d","StreamableConvTranspose1d"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.ConvDownsample1d.html b/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.ConvDownsample1d.html deleted file mode 100644 index 389eab6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.ConvDownsample1d.html +++ /dev/null @@ -1,34 +0,0 @@ -ConvDownsample1d in candle_transformers::models::mimi::conv - Rust

ConvDownsample1d

Struct ConvDownsample1d 

Source
pub struct ConvDownsample1d { /* private fields */ }

Implementations§

Source§

impl ConvDownsample1d

Source

pub fn new( - stride: usize, - dim: usize, - causal: bool, - learnt: bool, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for ConvDownsample1d

Source§

fn clone(&self) -> ConvDownsample1d

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ConvDownsample1d

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for ConvDownsample1d

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Source§

impl StreamingModule for ConvDownsample1d

Source§

fn reset_state(&mut self)

Source§

fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.ConvTrUpsample1d.html b/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.ConvTrUpsample1d.html deleted file mode 100644 index 22cfd25..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.ConvTrUpsample1d.html +++ /dev/null @@ -1,34 +0,0 @@ -ConvTrUpsample1d in candle_transformers::models::mimi::conv - Rust

ConvTrUpsample1d

Struct ConvTrUpsample1d 

Source
pub struct ConvTrUpsample1d { /* private fields */ }

Implementations§

Source§

impl ConvTrUpsample1d

Source

pub fn new( - stride: usize, - dim: usize, - causal: bool, - learnt: bool, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for ConvTrUpsample1d

Source§

fn clone(&self) -> ConvTrUpsample1d

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ConvTrUpsample1d

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for ConvTrUpsample1d

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Source§

impl StreamingModule for ConvTrUpsample1d

Source§

fn reset_state(&mut self)

Source§

fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.NormConv1d.html b/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.NormConv1d.html deleted file mode 100644 index 5506257..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.NormConv1d.html +++ /dev/null @@ -1,37 +0,0 @@ -NormConv1d in candle_transformers::models::mimi::conv - Rust

NormConv1d

Struct NormConv1d 

Source
pub struct NormConv1d { /* private fields */ }

Implementations§

Source§

impl NormConv1d

Source

pub fn new( - in_c: usize, - out_c: usize, - k_size: usize, - causal: bool, - norm: Option<Norm>, - bias: bool, - cfg: Conv1dConfig, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for NormConv1d

Source§

fn clone(&self) -> NormConv1d

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NormConv1d

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for NormConv1d

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.NormConvTranspose1d.html b/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.NormConvTranspose1d.html deleted file mode 100644 index 862775f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.NormConvTranspose1d.html +++ /dev/null @@ -1,38 +0,0 @@ -NormConvTranspose1d in candle_transformers::models::mimi::conv - Rust

NormConvTranspose1d

Struct NormConvTranspose1d 

Source
pub struct NormConvTranspose1d { /* private fields */ }

Implementations§

Source§

impl NormConvTranspose1d

Source

pub fn new( - in_c: usize, - out_c: usize, - k_size: usize, - causal: bool, - norm: Option<Norm>, - bias: bool, - stride: usize, - groups: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for NormConvTranspose1d

Source§

fn clone(&self) -> NormConvTranspose1d

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NormConvTranspose1d

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for NormConvTranspose1d

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.StreamableConv1d.html b/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.StreamableConv1d.html deleted file mode 100644 index 7da6e83..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.StreamableConv1d.html +++ /dev/null @@ -1,40 +0,0 @@ -StreamableConv1d in candle_transformers::models::mimi::conv - Rust

StreamableConv1d

Struct StreamableConv1d 

Source
pub struct StreamableConv1d { /* private fields */ }

Implementations§

Source§

impl StreamableConv1d

Source

pub fn new( - in_c: usize, - out_c: usize, - k_size: usize, - stride: usize, - dilation: usize, - groups: usize, - bias: bool, - causal: bool, - norm: Option<Norm>, - pad_mode: PadMode, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for StreamableConv1d

Source§

fn clone(&self) -> StreamableConv1d

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for StreamableConv1d

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for StreamableConv1d

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Source§

impl StreamingModule for StreamableConv1d

Source§

fn reset_state(&mut self)

Source§

fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.StreamableConvTranspose1d.html b/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.StreamableConvTranspose1d.html deleted file mode 100644 index ef97d3c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/conv/struct.StreamableConvTranspose1d.html +++ /dev/null @@ -1,38 +0,0 @@ -StreamableConvTranspose1d in candle_transformers::models::mimi::conv - Rust

StreamableConvTranspose1d

Struct StreamableConvTranspose1d 

Source
pub struct StreamableConvTranspose1d { /* private fields */ }

Implementations§

Source§

impl StreamableConvTranspose1d

Source

pub fn new( - in_c: usize, - out_c: usize, - k_size: usize, - stride: usize, - groups: usize, - bias: bool, - causal: bool, - norm: Option<Norm>, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for StreamableConvTranspose1d

Source§

fn clone(&self) -> StreamableConvTranspose1d

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for StreamableConvTranspose1d

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for StreamableConvTranspose1d

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Source§

impl StreamingModule for StreamableConvTranspose1d

Source§

fn reset_state(&mut self)

Source§

fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/enum.ResampleMethod.html b/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/enum.ResampleMethod.html deleted file mode 100644 index 1ca4515..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/enum.ResampleMethod.html +++ /dev/null @@ -1,37 +0,0 @@ -ResampleMethod in candle_transformers::models::mimi::encodec - Rust

ResampleMethod

Enum ResampleMethod 

Source
pub enum ResampleMethod {
-    Conv,
-    Interpolate,
-}

Variants§

§

Conv

§

Interpolate

Trait Implementations§

Source§

impl Clone for ResampleMethod

Source§

fn clone(&self) -> ResampleMethod

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ResampleMethod

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for ResampleMethod

Source§

fn eq(&self, other: &ResampleMethod) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for ResampleMethod

Source§

impl Eq for ResampleMethod

Source§

impl StructuralPartialEq for ResampleMethod

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/fn.load.html b/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/fn.load.html deleted file mode 100644 index 04efdc7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/fn.load.html +++ /dev/null @@ -1,5 +0,0 @@ -load in candle_transformers::models::mimi::encodec - Rust

load

Function load 

Source
pub fn load(
-    model_file: &str,
-    num_codebooks: Option<usize>,
-    dev: &Device,
-) -> Result<Encodec>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/index.html b/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/index.html deleted file mode 100644 index 26cb9bd..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::mimi::encodec - Rust

Module encodec

Module encodec 

Source

Structs§

Config
Encodec

Enums§

ResampleMethod

Functions§

load
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/sidebar-items.js deleted file mode 100644 index b4ddd6a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["ResampleMethod"],"fn":["load"],"struct":["Config","Encodec"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/struct.Config.html deleted file mode 100644 index 073b488..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/struct.Config.html +++ /dev/null @@ -1,38 +0,0 @@ -Config in candle_transformers::models::mimi::encodec - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub channels: usize,
-    pub sample_rate: f64,
-    pub frame_rate: f64,
-    pub renormalize: bool,
-    pub resample_method: ResampleMethod,
-    pub seanet: Config,
-    pub transformer: Config,
-    pub quantizer_n_q: usize,
-    pub quantizer_bins: usize,
-    pub quantizer_dim: usize,
-}

Fields§

§channels: usize§sample_rate: f64§frame_rate: f64§renormalize: bool§resample_method: ResampleMethod§seanet: Config§transformer: Config§quantizer_n_q: usize§quantizer_bins: usize§quantizer_dim: usize

Implementations§

Source§

impl Config

Source

pub fn v0_1(num_codebooks: Option<usize>) -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/struct.Encodec.html b/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/struct.Encodec.html deleted file mode 100644 index 8117d02..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/encodec/struct.Encodec.html +++ /dev/null @@ -1,27 +0,0 @@ -Encodec in candle_transformers::models::mimi::encodec - Rust

Encodec

Struct Encodec 

Source
pub struct Encodec { /* private fields */ }

Implementations§

Source§

impl Encodec

Source

pub fn new(cfg: Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn config(&self) -> &Config

Source

pub fn encode_pre_quantize(&mut self, xs: &Tensor) -> Result<Tensor>

Source

pub fn encode(&mut self, xs: &Tensor) -> Result<Tensor>

Source

pub fn encode_step(&mut self, xs: &StreamTensor) -> Result<StreamTensor>

Source

pub fn decode(&mut self, codes: &Tensor) -> Result<Tensor>

Source

pub fn decode_step(&mut self, codes: &StreamTensor) -> Result<StreamTensor>

Source

pub fn reset_state(&mut self)

Trait Implementations§

Source§

impl Clone for Encodec

Source§

fn clone(&self) -> Encodec

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Encodec

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/enum.NormType.html b/network-poc/target-native/doc/candle_transformers/models/mimi/enum.NormType.html deleted file mode 100644 index baa3d1c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/enum.NormType.html +++ /dev/null @@ -1,37 +0,0 @@ -NormType in candle_transformers::models::mimi - Rust

NormType

Enum NormType 

Source
pub enum NormType {
-    RmsNorm,
-    LayerNorm,
-}

Variants§

§

RmsNorm

§

LayerNorm

Trait Implementations§

Source§

impl Clone for NormType

Source§

fn clone(&self) -> NormType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NormType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for NormType

Source§

fn eq(&self, other: &NormType) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for NormType

Source§

impl Eq for NormType

Source§

impl StructuralPartialEq for NormType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/index.html b/network-poc/target-native/doc/candle_transformers/models/mimi/index.html deleted file mode 100644 index 70c6343..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/index.html +++ /dev/null @@ -1,20 +0,0 @@ -candle_transformers::models::mimi - Rust

Module mimi

Module mimi 

Source
Expand description

mimi model

-

Mimi is a state of the art audio -compression model using an encoder/decoder architecture with residual vector -quantization. The candle implementation supports streaming meaning that it’s -possible to encode or decode a stream of audio tokens on the flight to provide -low latency interaction with an audio model.

- -

§Example

# Generating some audio tokens from an audio files.
-wget https://github.com/metavoiceio/metavoice-src/raw/main/assets/bria.mp3
-cargo run --example mimi \
-  --features mimi --release -- \
-  audio-to-code bria.mp3 bria.safetensors
-
-# And decoding the audio tokens back into a sound file.
-cargo run --example mimi
-  --features mimi --release -- \
-  code-to-audio bria.safetensors bria.wav

Re-exports§

pub use encodec::load;
pub use encodec::Config;
pub use encodec::Encodec as Model;
pub use candle;
pub use candle_nn;

Modules§

conv
encodec
quantization
seanet
transformer

Enums§

NormType
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/index.html b/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/index.html deleted file mode 100644 index 12226ac..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::mimi::quantization - Rust

Module quantization

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/sidebar-items.js deleted file mode 100644 index 904a564..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["EuclideanCodebook","ResidualVectorQuantization","ResidualVectorQuantizer","SplitResidualVectorQuantizer","VectorQuantization"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.EuclideanCodebook.html b/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.EuclideanCodebook.html deleted file mode 100644 index 6fbaf1d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.EuclideanCodebook.html +++ /dev/null @@ -1,27 +0,0 @@ -EuclideanCodebook in candle_transformers::models::mimi::quantization - Rust

EuclideanCodebook

Struct EuclideanCodebook 

Source
pub struct EuclideanCodebook { /* private fields */ }

Implementations§

Source§

impl EuclideanCodebook

Source

pub fn new(dim: usize, codebook_size: usize, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn encode_very_slow(&self, xs: &Tensor) -> Result<Tensor>

Source

pub fn encode_slow(&self, xs: &Tensor) -> Result<Tensor>

Source

pub fn encode(&self, xs: &Tensor) -> Result<Tensor>

Source

pub fn decode(&self, indexes: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for EuclideanCodebook

Source§

fn clone(&self) -> EuclideanCodebook

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EuclideanCodebook

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.ResidualVectorQuantization.html b/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.ResidualVectorQuantization.html deleted file mode 100644 index 20e9dbd..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.ResidualVectorQuantization.html +++ /dev/null @@ -1,33 +0,0 @@ -ResidualVectorQuantization in candle_transformers::models::mimi::quantization - Rust

ResidualVectorQuantization

Struct ResidualVectorQuantization 

Source
pub struct ResidualVectorQuantization { /* private fields */ }

Implementations§

Source§

impl ResidualVectorQuantization

Source

pub fn new( - n_q: usize, - dim: usize, - codebook_size: usize, - codebook_dim: Option<usize>, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn encode(&self, xs: &Tensor) -> Result<Tensor>

Source

pub fn decode(&self, xs: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for ResidualVectorQuantization

Source§

fn clone(&self) -> ResidualVectorQuantization

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ResidualVectorQuantization

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.ResidualVectorQuantizer.html b/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.ResidualVectorQuantizer.html deleted file mode 100644 index 0de03fc..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.ResidualVectorQuantizer.html +++ /dev/null @@ -1,35 +0,0 @@ -ResidualVectorQuantizer in candle_transformers::models::mimi::quantization - Rust

ResidualVectorQuantizer

Struct ResidualVectorQuantizer 

Source
pub struct ResidualVectorQuantizer { /* private fields */ }

Implementations§

Source§

impl ResidualVectorQuantizer

Source

pub fn new( - dim: usize, - input_dim: Option<usize>, - output_dim: Option<usize>, - n_q: usize, - bins: usize, - force_projection: bool, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn encode(&self, xs: &Tensor) -> Result<Tensor>

Source

pub fn decode(&self, codes: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for ResidualVectorQuantizer

Source§

fn clone(&self) -> ResidualVectorQuantizer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ResidualVectorQuantizer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.SplitResidualVectorQuantizer.html b/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.SplitResidualVectorQuantizer.html deleted file mode 100644 index 07d486e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.SplitResidualVectorQuantizer.html +++ /dev/null @@ -1,34 +0,0 @@ -SplitResidualVectorQuantizer in candle_transformers::models::mimi::quantization - Rust

SplitResidualVectorQuantizer

Struct SplitResidualVectorQuantizer 

Source
pub struct SplitResidualVectorQuantizer { /* private fields */ }

Implementations§

Source§

impl SplitResidualVectorQuantizer

Source

pub fn new( - dim: usize, - input_dim: Option<usize>, - output_dim: Option<usize>, - n_q: usize, - bins: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn encode(&self, xs: &Tensor) -> Result<Tensor>

Source

pub fn decode(&self, codes: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for SplitResidualVectorQuantizer

Source§

fn clone(&self) -> SplitResidualVectorQuantizer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SplitResidualVectorQuantizer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.VectorQuantization.html b/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.VectorQuantization.html deleted file mode 100644 index c3c2118..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/quantization/struct.VectorQuantization.html +++ /dev/null @@ -1,32 +0,0 @@ -VectorQuantization in candle_transformers::models::mimi::quantization - Rust

VectorQuantization

Struct VectorQuantization 

Source
pub struct VectorQuantization { /* private fields */ }

Implementations§

Source§

impl VectorQuantization

Source

pub fn new( - dim: usize, - codebook_size: usize, - codebook_dim: Option<usize>, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn encode(&self, xs: &Tensor) -> Result<Tensor>

Source

pub fn decode(&self, codes: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for VectorQuantization

Source§

fn clone(&self) -> VectorQuantization

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VectorQuantization

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/index.html b/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/index.html deleted file mode 100644 index 4b1ab40..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::mimi::seanet - Rust

Module seanet

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/sidebar-items.js deleted file mode 100644 index a17e41a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","SeaNetDecoder","SeaNetEncoder","SeaNetResnetBlock"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.Config.html deleted file mode 100644 index c49b1bd..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.Config.html +++ /dev/null @@ -1,46 +0,0 @@ -Config in candle_transformers::models::mimi::seanet - Rust

Config

Struct Config 

Source
pub struct Config {
Show 18 fields - pub dimension: usize, - pub channels: usize, - pub causal: bool, - pub n_filters: usize, - pub n_residual_layers: usize, - pub ratios: Vec<usize>, - pub activation: Activation, - pub norm: Norm, - pub kernel_size: usize, - pub residual_kernel_size: usize, - pub last_kernel_size: usize, - pub dilation_base: usize, - pub pad_mode: PadMode, - pub true_skip: bool, - pub compress: usize, - pub lstm: usize, - pub disable_norm_outer_blocks: usize, - pub final_activation: Option<Activation>, -
}

Fields§

§dimension: usize§channels: usize§causal: bool§n_filters: usize§n_residual_layers: usize§ratios: Vec<usize>§activation: Activation§norm: Norm§kernel_size: usize§residual_kernel_size: usize§last_kernel_size: usize§dilation_base: usize§pad_mode: PadMode§true_skip: bool§compress: usize§lstm: usize§disable_norm_outer_blocks: usize§final_activation: Option<Activation>

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.SeaNetDecoder.html b/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.SeaNetDecoder.html deleted file mode 100644 index b5a6bef..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.SeaNetDecoder.html +++ /dev/null @@ -1,28 +0,0 @@ -SeaNetDecoder in candle_transformers::models::mimi::seanet - Rust

SeaNetDecoder

Struct SeaNetDecoder 

Source
pub struct SeaNetDecoder { /* private fields */ }

Implementations§

Source§

impl SeaNetDecoder

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for SeaNetDecoder

Source§

fn clone(&self) -> SeaNetDecoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SeaNetDecoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for SeaNetDecoder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Source§

impl StreamingModule for SeaNetDecoder

Source§

fn reset_state(&mut self)

Source§

fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.SeaNetEncoder.html b/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.SeaNetEncoder.html deleted file mode 100644 index 9d36a73..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.SeaNetEncoder.html +++ /dev/null @@ -1,28 +0,0 @@ -SeaNetEncoder in candle_transformers::models::mimi::seanet - Rust

SeaNetEncoder

Struct SeaNetEncoder 

Source
pub struct SeaNetEncoder { /* private fields */ }

Implementations§

Source§

impl SeaNetEncoder

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for SeaNetEncoder

Source§

fn clone(&self) -> SeaNetEncoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SeaNetEncoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for SeaNetEncoder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Source§

impl StreamingModule for SeaNetEncoder

Source§

fn reset_state(&mut self)

Source§

fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.SeaNetResnetBlock.html b/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.SeaNetResnetBlock.html deleted file mode 100644 index 2173cf4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/seanet/struct.SeaNetResnetBlock.html +++ /dev/null @@ -1,38 +0,0 @@ -SeaNetResnetBlock in candle_transformers::models::mimi::seanet - Rust

SeaNetResnetBlock

Struct SeaNetResnetBlock 

Source
pub struct SeaNetResnetBlock { /* private fields */ }

Implementations§

Source§

impl SeaNetResnetBlock

Source

pub fn new( - dim: usize, - k_sizes_and_dilations: &[(usize, usize)], - activation: Activation, - norm: Option<Norm>, - causal: bool, - pad_mode: PadMode, - compress: usize, - true_skip: bool, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for SeaNetResnetBlock

Source§

fn clone(&self) -> SeaNetResnetBlock

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SeaNetResnetBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for SeaNetResnetBlock

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Source§

impl StreamingModule for SeaNetResnetBlock

Source§

fn reset_state(&mut self)

Source§

fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mimi/sidebar-items.js deleted file mode 100644 index 4d3e359..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["NormType"],"mod":["conv","encodec","quantization","seanet","transformer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/enum.Mlp.html b/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/enum.Mlp.html deleted file mode 100644 index 81139ad..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/enum.Mlp.html +++ /dev/null @@ -1,42 +0,0 @@ -Mlp in candle_transformers::models::mimi::transformer - Rust

Mlp

Enum Mlp 

Source
pub enum Mlp {
-    NoGating {
-        span1: Span,
-        linear1: Linear,
-        span2: Span,
-        linear2: Linear,
-        span: Span,
-    },
-    Gating {
-        linear_in: Linear,
-        linear_out: Linear,
-        activation: Activation,
-        span: Span,
-    },
-}

Variants§

§

NoGating

Fields

§span1: Span
§linear1: Linear
§span2: Span
§linear2: Linear
§span: Span
§

Gating

Fields

§linear_in: Linear
§linear_out: Linear
§activation: Activation
§span: Span

Implementations§

Source§

impl Mlp

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Mlp

Source§

fn clone(&self) -> Mlp

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Mlp

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Mlp

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

§

impl Freeze for Mlp

§

impl !RefUnwindSafe for Mlp

§

impl Send for Mlp

§

impl Sync for Mlp

§

impl Unpin for Mlp

§

impl !UnwindSafe for Mlp

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/enum.Norm.html b/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/enum.Norm.html deleted file mode 100644 index 1f52cd3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/enum.Norm.html +++ /dev/null @@ -1,31 +0,0 @@ -Norm in candle_transformers::models::mimi::transformer - Rust

Norm

Enum Norm 

Source
pub enum Norm {
-    LayerNorm(LayerNorm),
-    RmsNorm(RmsNorm),
-}

Variants§

§

LayerNorm(LayerNorm)

§

RmsNorm(RmsNorm)

Implementations§

Source§

impl Norm

Source

pub fn new(d_model: usize, cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Norm

Source§

fn clone(&self) -> Norm

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Norm

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Norm

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

§

impl Freeze for Norm

§

impl !RefUnwindSafe for Norm

§

impl Send for Norm

§

impl Sync for Norm

§

impl Unpin for Norm

§

impl !UnwindSafe for Norm

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/enum.PositionalEmbedding.html b/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/enum.PositionalEmbedding.html deleted file mode 100644 index 552606a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/enum.PositionalEmbedding.html +++ /dev/null @@ -1,38 +0,0 @@ -PositionalEmbedding in candle_transformers::models::mimi::transformer - Rust

PositionalEmbedding

Enum PositionalEmbedding 

Source
pub enum PositionalEmbedding {
-    Rope,
-    Sin,
-    None,
-}

Variants§

§

Rope

§

Sin

§

None

Trait Implementations§

Source§

impl Clone for PositionalEmbedding

Source§

fn clone(&self) -> PositionalEmbedding

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PositionalEmbedding

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for PositionalEmbedding

Source§

fn eq(&self, other: &PositionalEmbedding) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for PositionalEmbedding

Source§

impl Eq for PositionalEmbedding

Source§

impl StructuralPartialEq for PositionalEmbedding

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/index.html b/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/index.html deleted file mode 100644 index 36f0552..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::mimi::transformer - Rust

Module transformer

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/sidebar-items.js deleted file mode 100644 index fbf6d50..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["Mlp","Norm","PositionalEmbedding"],"struct":["Config","LayerScale","ProjectedTransformer","RmsNorm","RotaryEmbedding","StreamingMultiheadAttention","StreamingMultiheadCrossAttention","StreamingTransformer","StreamingTransformerLayer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.Config.html deleted file mode 100644 index 17b6dad..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.Config.html +++ /dev/null @@ -1,49 +0,0 @@ -Config in candle_transformers::models::mimi::transformer - Rust

Config

Struct Config 

Source
pub struct Config {
Show 21 fields - pub d_model: usize, - pub num_heads: usize, - pub num_layers: usize, - pub causal: bool, - pub norm_first: bool, - pub bias_ff: bool, - pub bias_attn: bool, - pub layer_scale: Option<f64>, - pub positional_embedding: PositionalEmbedding, - pub use_conv_block: bool, - pub cross_attention: bool, - pub conv_kernel_size: usize, - pub use_conv_bias: bool, - pub gating: Option<Activation>, - pub norm: NormType, - pub context: usize, - pub max_period: usize, - pub max_seq_len: usize, - pub kv_repeat: usize, - pub dim_feedforward: usize, - pub conv_layout: bool, -
}

Fields§

§d_model: usize§num_heads: usize§num_layers: usize§causal: bool§norm_first: bool§bias_ff: bool§bias_attn: bool§layer_scale: Option<f64>§positional_embedding: PositionalEmbedding§use_conv_block: bool§cross_attention: bool§conv_kernel_size: usize§use_conv_bias: bool§gating: Option<Activation>§norm: NormType§context: usize§max_period: usize§max_seq_len: usize§kv_repeat: usize§dim_feedforward: usize§conv_layout: bool

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.LayerScale.html b/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.LayerScale.html deleted file mode 100644 index 7ec233e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.LayerScale.html +++ /dev/null @@ -1,28 +0,0 @@ -LayerScale in candle_transformers::models::mimi::transformer - Rust

LayerScale

Struct LayerScale 

Source
pub struct LayerScale { /* private fields */ }

Implementations§

Source§

impl LayerScale

Source

pub fn new(d_model: usize, _init: f64, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for LayerScale

Source§

fn clone(&self) -> LayerScale

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LayerScale

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for LayerScale

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.ProjectedTransformer.html b/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.ProjectedTransformer.html deleted file mode 100644 index 87e4cf2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.ProjectedTransformer.html +++ /dev/null @@ -1,32 +0,0 @@ -ProjectedTransformer in candle_transformers::models::mimi::transformer - Rust

ProjectedTransformer

Struct ProjectedTransformer 

Source
pub struct ProjectedTransformer { /* private fields */ }

Implementations§

Source§

impl ProjectedTransformer

Source

pub fn new( - input_dim: usize, - output_dims: &[usize], - cfg: &Config, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward(&mut self, xs: &Tensor) -> Result<Vec<Tensor>>

Trait Implementations§

Source§

impl Clone for ProjectedTransformer

Source§

fn clone(&self) -> ProjectedTransformer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ProjectedTransformer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl StreamingModule for ProjectedTransformer

Source§

fn reset_state(&mut self)

Source§

fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.RmsNorm.html b/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.RmsNorm.html deleted file mode 100644 index c1a8c25..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.RmsNorm.html +++ /dev/null @@ -1,28 +0,0 @@ -RmsNorm in candle_transformers::models::mimi::transformer - Rust

RmsNorm

Struct RmsNorm 

Source
pub struct RmsNorm { /* private fields */ }

Implementations§

Source§

impl RmsNorm

Source

pub fn new(d_model: usize, eps: f32, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for RmsNorm

Source§

fn clone(&self) -> RmsNorm

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RmsNorm

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for RmsNorm

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.RotaryEmbedding.html b/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.RotaryEmbedding.html deleted file mode 100644 index cbabf67..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.RotaryEmbedding.html +++ /dev/null @@ -1,36 +0,0 @@ -RotaryEmbedding in candle_transformers::models::mimi::transformer - Rust

RotaryEmbedding

Struct RotaryEmbedding 

Source
pub struct RotaryEmbedding { /* private fields */ }

Implementations§

Source§

impl RotaryEmbedding

Source

pub fn new( - dim: usize, - max_seq_len: usize, - theta: f32, - dev: &Device, -) -> Result<Self>

Source

pub fn apply_rotary_emb( - &self, - qk: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for RotaryEmbedding

Source§

fn clone(&self) -> RotaryEmbedding

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RotaryEmbedding

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingMultiheadAttention.html b/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingMultiheadAttention.html deleted file mode 100644 index fbc2d6b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingMultiheadAttention.html +++ /dev/null @@ -1,31 +0,0 @@ -StreamingMultiheadAttention in candle_transformers::models::mimi::transformer - Rust

StreamingMultiheadAttention

Struct StreamingMultiheadAttention 

Source
pub struct StreamingMultiheadAttention { /* private fields */ }

Implementations§

Source§

impl StreamingMultiheadAttention

Source

pub fn new( - rope: &Option<Arc<RotaryEmbedding>>, - cfg: &Config, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward(&mut self, xs: &Tensor, mask: Option<&Tensor>) -> Result<Tensor>

Source

pub fn reset_kv_cache(&mut self)

Source

pub fn set_kv_cache(&mut self, kv_cache: RotatingKvCache)

Trait Implementations§

Source§

impl Clone for StreamingMultiheadAttention

Source§

fn clone(&self) -> StreamingMultiheadAttention

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for StreamingMultiheadAttention

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingMultiheadCrossAttention.html b/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingMultiheadCrossAttention.html deleted file mode 100644 index 553383b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingMultiheadCrossAttention.html +++ /dev/null @@ -1,32 +0,0 @@ -StreamingMultiheadCrossAttention in candle_transformers::models::mimi::transformer - Rust

StreamingMultiheadCrossAttention

Struct StreamingMultiheadCrossAttention 

Source
pub struct StreamingMultiheadCrossAttention { /* private fields */ }

Implementations§

Source§

impl StreamingMultiheadCrossAttention

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &self, - xs: &Tensor, - ca_src: &Tensor, - mask: Option<&Tensor>, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for StreamingMultiheadCrossAttention

Source§

fn clone(&self) -> StreamingMultiheadCrossAttention

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for StreamingMultiheadCrossAttention

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingTransformer.html b/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingTransformer.html deleted file mode 100644 index a39eb77..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingTransformer.html +++ /dev/null @@ -1,31 +0,0 @@ -StreamingTransformer in candle_transformers::models::mimi::transformer - Rust

StreamingTransformer

Struct StreamingTransformer 

Source
pub struct StreamingTransformer { /* private fields */ }

Implementations§

Source§

impl StreamingTransformer

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor>

Source

pub fn forward_ca( - &mut self, - xs: &Tensor, - ca_src: Option<&Tensor>, -) -> Result<Tensor>

Source

pub fn copy_state(&mut self, from: &Self) -> Result<()>

Trait Implementations§

Source§

impl Clone for StreamingTransformer

Source§

fn clone(&self) -> StreamingTransformer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for StreamingTransformer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl StreamingModule for StreamingTransformer

Source§

fn reset_state(&mut self)

Source§

fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingTransformerLayer.html b/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingTransformerLayer.html deleted file mode 100644 index 2b1b16e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mimi/transformer/struct.StreamingTransformerLayer.html +++ /dev/null @@ -1,36 +0,0 @@ -StreamingTransformerLayer in candle_transformers::models::mimi::transformer - Rust

StreamingTransformerLayer

Struct StreamingTransformerLayer 

Source
pub struct StreamingTransformerLayer { /* private fields */ }

Implementations§

Source§

impl StreamingTransformerLayer

Source

pub fn new( - rope: &Option<Arc<RotaryEmbedding>>, - cfg: &Config, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward( - &mut self, - xs: &Tensor, - ca_src: Option<&Tensor>, - mask: Option<&Tensor>, -) -> Result<Tensor>

Source

pub fn reset_kv_cache(&mut self)

Source

pub fn set_kv_cache(&mut self, kv_cache: RotatingKvCache)

Trait Implementations§

Source§

impl Clone for StreamingTransformerLayer

Source§

fn clone(&self) -> StreamingTransformerLayer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for StreamingTransformerLayer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mistral/index.html b/network-poc/target-native/doc/candle_transformers/models/mistral/index.html deleted file mode 100644 index 9d8b4e5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mistral/index.html +++ /dev/null @@ -1,7 +0,0 @@ -candle_transformers::models::mistral - Rust

Module mistral

Module mistral 

Source
Expand description

Mixtral Model, based on the Mistral architecture

-

See Mistral and Mixtral at:

- -

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mistral/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mistral/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mistral/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mistral/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/mistral/struct.Config.html deleted file mode 100644 index 3ff43b0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mistral/struct.Config.html +++ /dev/null @@ -1,44 +0,0 @@ -Config in candle_transformers::models::mistral - Rust

Config

Struct Config 

Source
pub struct Config {
Show 13 fields - pub vocab_size: usize, - pub hidden_size: usize, - pub intermediate_size: usize, - pub num_hidden_layers: usize, - pub num_attention_heads: usize, - pub head_dim: Option<usize>, - pub num_key_value_heads: usize, - pub hidden_act: Activation, - pub max_position_embeddings: usize, - pub rms_norm_eps: f64, - pub rope_theta: f64, - pub sliding_window: Option<usize>, - pub use_flash_attn: bool, -
}

Fields§

§vocab_size: usize§hidden_size: usize§intermediate_size: usize§num_hidden_layers: usize§num_attention_heads: usize§head_dim: Option<usize>§num_key_value_heads: usize§hidden_act: Activation§max_position_embeddings: usize§rms_norm_eps: f64§rope_theta: f64§sliding_window: Option<usize>§use_flash_attn: bool

Implementations§

Source§

impl Config

Source

pub fn config_7b_v0_1(use_flash_attn: bool) -> Self

Source

pub fn config_chat_ml(use_flash_attn: bool) -> Self

Source

pub fn config_amazon_mistral_lite(use_flash_attn: bool) -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mistral/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/mistral/struct.Model.html deleted file mode 100644 index 641c5df..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mistral/struct.Model.html +++ /dev/null @@ -1,36 +0,0 @@ -Model in candle_transformers::models::mistral - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn embed_tokens(&self) -> &Embedding

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Source

pub fn forward_embeds( - &mut self, - xs: &Tensor, - attn_mask: Option<&Tensor>, - seqlen_offset: usize, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mixformer/index.html b/network-poc/target-native/doc/candle_transformers/models/mixformer/index.html deleted file mode 100644 index 1d0074e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mixformer/index.html +++ /dev/null @@ -1,7 +0,0 @@ -candle_transformers::models::mixformer - Rust

Module mixformer

Module mixformer 

Source
Expand description

MixFormer (Microsoft’s Phi Architecture)

-

See “Textbooks Are All You Need II: phi-1.5 technical report”, Lin et al. 2023

- -

Structs§

Config
MixFormerSequentialForCausalLM
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mixformer/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mixformer/sidebar-items.js deleted file mode 100644 index 01e79c5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mixformer/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","MixFormerSequentialForCausalLM"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mixformer/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/mixformer/struct.Config.html deleted file mode 100644 index 7b57a06..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mixformer/struct.Config.html +++ /dev/null @@ -1,30 +0,0 @@ -Config in candle_transformers::models::mixformer - Rust

Config

Struct Config 

Source
pub struct Config { /* private fields */ }

Implementations§

Source§

impl Config

Source

pub fn v1() -> Self

Source

pub fn v1_5() -> Self

Source

pub fn v2() -> Self

Source

pub fn puffin_phi_v2() -> Self

Source

pub fn phi_hermes_1_3b() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mixformer/struct.MixFormerSequentialForCausalLM.html b/network-poc/target-native/doc/candle_transformers/models/mixformer/struct.MixFormerSequentialForCausalLM.html deleted file mode 100644 index 1682aed..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mixformer/struct.MixFormerSequentialForCausalLM.html +++ /dev/null @@ -1,32 +0,0 @@ -MixFormerSequentialForCausalLM in candle_transformers::models::mixformer - Rust

MixFormerSequentialForCausalLM

Struct MixFormerSequentialForCausalLM 

Source
pub struct MixFormerSequentialForCausalLM { /* private fields */ }

Implementations§

Source§

impl MixFormerSequentialForCausalLM

Source

pub fn new_v2(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor>

Source

pub fn forward_with_img( - &mut self, - bos_token: &Tensor, - xs: &Tensor, - img_embeds: &Tensor, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for MixFormerSequentialForCausalLM

Source§

fn clone(&self) -> MixFormerSequentialForCausalLM

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MixFormerSequentialForCausalLM

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mixtral/index.html b/network-poc/target-native/doc/candle_transformers/models/mixtral/index.html deleted file mode 100644 index 9886a01..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mixtral/index.html +++ /dev/null @@ -1,19 +0,0 @@ -candle_transformers::models::mixtral - Rust

Module mixtral

Module mixtral 

Source
Expand description

Mixtral Model, a sparse mixture of expert model based on the Mistral architecture

-

See Mixtral model details at:

- -

The model uses a mixture of experts architecture with:

-
    -
  • 8 experts per layer
  • -
  • Top 2 expert routing
  • -
  • Sliding window attention
  • -
  • RoPE embeddings
  • -
-

References:

- -

Structs§

Config
https://github.com/huggingface/transformers/blob/1a585c1222a56bcaecc070966d558d4a9d862e83/src/transformers/models/mixtral/configuration_mixtral.py#L113
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mixtral/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mixtral/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mixtral/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mixtral/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/mixtral/struct.Config.html deleted file mode 100644 index 6938f05..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mixtral/struct.Config.html +++ /dev/null @@ -1,32 +0,0 @@ -Config in candle_transformers::models::mixtral - Rust

Config

Struct Config 

Source
pub struct Config { /* private fields */ }
Expand description

https://github.com/huggingface/transformers/blob/1a585c1222a56bcaecc070966d558d4a9d862e83/src/transformers/models/mixtral/configuration_mixtral.py#L113

-

Implementations§

Source§

impl Config

Source

pub fn v0_1_8x7b(use_flash_attn: bool) -> Self

https://huggingface.co/mistralai/Mixtral-8x7B-v0.1/blob/main/config.json

-

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mixtral/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/mixtral/struct.Model.html deleted file mode 100644 index eac7a47..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mixtral/struct.Model.html +++ /dev/null @@ -1,31 +0,0 @@ -Model in candle_transformers::models::mixtral - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/index.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/index.html deleted file mode 100644 index 3ba543c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::mmdit::blocks - Rust

Module blocks

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/sidebar-items.js deleted file mode 100644 index 133e1be..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["ContextQkvOnlyJointBlock","DiTBlock","FinalLayer","LayerNormNoAffine","MMDiTJointBlock","MMDiTXJointBlock","ModulateIntermediates","QkvOnlyDiTBlock","SelfAttnDiTBlock","SelfAttnModulateIntermediates"],"trait":["JointBlock"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.ContextQkvOnlyJointBlock.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.ContextQkvOnlyJointBlock.html deleted file mode 100644 index 84141a8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.ContextQkvOnlyJointBlock.html +++ /dev/null @@ -1,35 +0,0 @@ -ContextQkvOnlyJointBlock in candle_transformers::models::mmdit::blocks - Rust

ContextQkvOnlyJointBlock

Struct ContextQkvOnlyJointBlock 

Source
pub struct ContextQkvOnlyJointBlock { /* private fields */ }

Implementations§

Source§

impl ContextQkvOnlyJointBlock

Source

pub fn new( - hidden_size: usize, - num_heads: usize, - use_flash_attn: bool, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward( - &self, - context: &Tensor, - x: &Tensor, - c: &Tensor, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.DiTBlock.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.DiTBlock.html deleted file mode 100644 index 0c1eff4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.DiTBlock.html +++ /dev/null @@ -1,38 +0,0 @@ -DiTBlock in candle_transformers::models::mmdit::blocks - Rust

DiTBlock

Struct DiTBlock 

Source
pub struct DiTBlock { /* private fields */ }

Implementations§

Source§

impl DiTBlock

Source

pub fn new( - hidden_size: usize, - num_heads: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn pre_attention( - &self, - x: &Tensor, - c: &Tensor, -) -> Result<(Qkv, ModulateIntermediates)>

Source

pub fn post_attention( - &self, - attn: &Tensor, - x: &Tensor, - mod_interm: &ModulateIntermediates, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.FinalLayer.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.FinalLayer.html deleted file mode 100644 index 80997f5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.FinalLayer.html +++ /dev/null @@ -1,30 +0,0 @@ -FinalLayer in candle_transformers::models::mmdit::blocks - Rust

FinalLayer

Struct FinalLayer 

Source
pub struct FinalLayer { /* private fields */ }

Implementations§

Source§

impl FinalLayer

Source

pub fn new( - hidden_size: usize, - patch_size: usize, - out_channels: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward(&self, x: &Tensor, c: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.LayerNormNoAffine.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.LayerNormNoAffine.html deleted file mode 100644 index 52bb5ee..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.LayerNormNoAffine.html +++ /dev/null @@ -1,26 +0,0 @@ -LayerNormNoAffine in candle_transformers::models::mmdit::blocks - Rust

LayerNormNoAffine

Struct LayerNormNoAffine 

Source
pub struct LayerNormNoAffine { /* private fields */ }

Implementations§

Source§

impl LayerNormNoAffine

Source

pub fn new(eps: f64) -> Self

Trait Implementations§

Source§

impl Module for LayerNormNoAffine

Source§

fn forward(&self, x: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.MMDiTJointBlock.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.MMDiTJointBlock.html deleted file mode 100644 index 4ffbe61..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.MMDiTJointBlock.html +++ /dev/null @@ -1,35 +0,0 @@ -MMDiTJointBlock in candle_transformers::models::mmdit::blocks - Rust

MMDiTJointBlock

Struct MMDiTJointBlock 

Source
pub struct MMDiTJointBlock { /* private fields */ }

Implementations§

Source§

impl MMDiTJointBlock

Source

pub fn new( - hidden_size: usize, - num_heads: usize, - use_flash_attn: bool, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl JointBlock for MMDiTJointBlock

Source§

fn forward( - &self, - context: &Tensor, - x: &Tensor, - c: &Tensor, -) -> Result<(Tensor, Tensor)>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.MMDiTXJointBlock.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.MMDiTXJointBlock.html deleted file mode 100644 index a636112..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.MMDiTXJointBlock.html +++ /dev/null @@ -1,35 +0,0 @@ -MMDiTXJointBlock in candle_transformers::models::mmdit::blocks - Rust

MMDiTXJointBlock

Struct MMDiTXJointBlock 

Source
pub struct MMDiTXJointBlock { /* private fields */ }

Implementations§

Source§

impl MMDiTXJointBlock

Source

pub fn new( - hidden_size: usize, - num_heads: usize, - use_flash_attn: bool, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl JointBlock for MMDiTXJointBlock

Source§

fn forward( - &self, - context: &Tensor, - x: &Tensor, - c: &Tensor, -) -> Result<(Tensor, Tensor)>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.ModulateIntermediates.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.ModulateIntermediates.html deleted file mode 100644 index fb7ed10..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.ModulateIntermediates.html +++ /dev/null @@ -1,25 +0,0 @@ -ModulateIntermediates in candle_transformers::models::mmdit::blocks - Rust

ModulateIntermediates

Struct ModulateIntermediates 

Source
pub struct ModulateIntermediates { /* private fields */ }

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.QkvOnlyDiTBlock.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.QkvOnlyDiTBlock.html deleted file mode 100644 index 0292e2d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.QkvOnlyDiTBlock.html +++ /dev/null @@ -1,29 +0,0 @@ -QkvOnlyDiTBlock in candle_transformers::models::mmdit::blocks - Rust

QkvOnlyDiTBlock

Struct QkvOnlyDiTBlock 

Source
pub struct QkvOnlyDiTBlock { /* private fields */ }

Implementations§

Source§

impl QkvOnlyDiTBlock

Source

pub fn new( - hidden_size: usize, - num_heads: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn pre_attention(&self, x: &Tensor, c: &Tensor) -> Result<Qkv>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.SelfAttnDiTBlock.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.SelfAttnDiTBlock.html deleted file mode 100644 index bda8eb0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.SelfAttnDiTBlock.html +++ /dev/null @@ -1,39 +0,0 @@ -SelfAttnDiTBlock in candle_transformers::models::mmdit::blocks - Rust

SelfAttnDiTBlock

Struct SelfAttnDiTBlock 

Source
pub struct SelfAttnDiTBlock { /* private fields */ }

Implementations§

Source§

impl SelfAttnDiTBlock

Source

pub fn new( - hidden_size: usize, - num_heads: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn pre_attention( - &self, - x: &Tensor, - c: &Tensor, -) -> Result<(Qkv, Qkv, SelfAttnModulateIntermediates)>

Source

pub fn post_attention( - &self, - attn: &Tensor, - attn2: &Tensor, - x: &Tensor, - mod_interm: &SelfAttnModulateIntermediates, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.SelfAttnModulateIntermediates.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.SelfAttnModulateIntermediates.html deleted file mode 100644 index 4cf663c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/struct.SelfAttnModulateIntermediates.html +++ /dev/null @@ -1,25 +0,0 @@ -SelfAttnModulateIntermediates in candle_transformers::models::mmdit::blocks - Rust

SelfAttnModulateIntermediates

Struct SelfAttnModulateIntermediates 

Source
pub struct SelfAttnModulateIntermediates { /* private fields */ }

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/trait.JointBlock.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/trait.JointBlock.html deleted file mode 100644 index 2eb5ed2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/blocks/trait.JointBlock.html +++ /dev/null @@ -1,14 +0,0 @@ -JointBlock in candle_transformers::models::mmdit::blocks - Rust

JointBlock

Trait JointBlock 

Source
pub trait JointBlock {
-    // Required method
-    fn forward(
-        &self,
-        context: &Tensor,
-        x: &Tensor,
-        c: &Tensor,
-    ) -> Result<(Tensor, Tensor)>;
-}

Required Methods§

Source

fn forward( - &self, - context: &Tensor, - x: &Tensor, - c: &Tensor, -) -> Result<(Tensor, Tensor)>

Implementors§

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/index.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/index.html deleted file mode 100644 index d36ff9b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::mmdit::embedding - Rust

Module embedding

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/sidebar-items.js deleted file mode 100644 index 6043309..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["PatchEmbedder","PositionEmbedder","TimestepEmbedder","Unpatchifier","VectorEmbedder"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.PatchEmbedder.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.PatchEmbedder.html deleted file mode 100644 index 34d6679..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.PatchEmbedder.html +++ /dev/null @@ -1,31 +0,0 @@ -PatchEmbedder in candle_transformers::models::mmdit::embedding - Rust

PatchEmbedder

Struct PatchEmbedder 

Source
pub struct PatchEmbedder { /* private fields */ }

Implementations§

Source§

impl PatchEmbedder

Source

pub fn new( - patch_size: usize, - in_channels: usize, - embed_dim: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Module for PatchEmbedder

Source§

fn forward(&self, x: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.PositionEmbedder.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.PositionEmbedder.html deleted file mode 100644 index 6ac8a04..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.PositionEmbedder.html +++ /dev/null @@ -1,30 +0,0 @@ -PositionEmbedder in candle_transformers::models::mmdit::embedding - Rust

PositionEmbedder

Struct PositionEmbedder 

Source
pub struct PositionEmbedder { /* private fields */ }

Implementations§

Source§

impl PositionEmbedder

Source

pub fn new( - hidden_size: usize, - patch_size: usize, - pos_embed_max_size: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn get_cropped_pos_embed(&self, h: usize, w: usize) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.TimestepEmbedder.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.TimestepEmbedder.html deleted file mode 100644 index f9bbe8c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.TimestepEmbedder.html +++ /dev/null @@ -1,30 +0,0 @@ -TimestepEmbedder in candle_transformers::models::mmdit::embedding - Rust

TimestepEmbedder

Struct TimestepEmbedder 

Source
pub struct TimestepEmbedder { /* private fields */ }

Implementations§

Source§

impl TimestepEmbedder

Source

pub fn new( - hidden_size: usize, - frequency_embedding_size: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Module for TimestepEmbedder

Source§

fn forward(&self, t: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.Unpatchifier.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.Unpatchifier.html deleted file mode 100644 index f78ac58..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.Unpatchifier.html +++ /dev/null @@ -1,25 +0,0 @@ -Unpatchifier in candle_transformers::models::mmdit::embedding - Rust

Unpatchifier

Struct Unpatchifier 

Source
pub struct Unpatchifier { /* private fields */ }

Implementations§

Source§

impl Unpatchifier

Source

pub fn new(patch_size: usize, out_channels: usize) -> Result<Self>

Source

pub fn unpatchify(&self, x: &Tensor, h: usize, w: usize) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.VectorEmbedder.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.VectorEmbedder.html deleted file mode 100644 index fb05788..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/embedding/struct.VectorEmbedder.html +++ /dev/null @@ -1,30 +0,0 @@ -VectorEmbedder in candle_transformers::models::mmdit::embedding - Rust

VectorEmbedder

Struct VectorEmbedder 

Source
pub struct VectorEmbedder { /* private fields */ }

Implementations§

Source§

impl VectorEmbedder

Source

pub fn new( - input_dim: usize, - hidden_size: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Module for VectorEmbedder

Source§

fn forward(&self, x: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/index.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/index.html deleted file mode 100644 index aa602fa..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/index.html +++ /dev/null @@ -1,13 +0,0 @@ -candle_transformers::models::mmdit - Rust

Module mmdit

Module mmdit 

Source
Expand description

Mix of Multi-scale Dilated and Traditional Convolutions

-

Mix of Multi-scale Dilated and Traditional Convolutions (MMDiT) is an architecture -introduced for Stable Diffusion 3, with the MMDiT-X variant used in Stable Diffusion 3.5.

- -

Modules§

blocks
embedding
model
projections
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/model/index.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/model/index.html deleted file mode 100644 index 6d6ac30..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/model/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::mmdit::model - Rust

Module model

Module model 

Source

Structs§

Config
MMDiT
MMDiTCore
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/model/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mmdit/model/sidebar-items.js deleted file mode 100644 index bc8dd90..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/model/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","MMDiT","MMDiTCore"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/model/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/model/struct.Config.html deleted file mode 100644 index 1b949d7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/model/struct.Config.html +++ /dev/null @@ -1,37 +0,0 @@ -Config in candle_transformers::models::mmdit::model - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub patch_size: usize,
-    pub in_channels: usize,
-    pub out_channels: usize,
-    pub depth: usize,
-    pub head_size: usize,
-    pub adm_in_channels: usize,
-    pub pos_embed_max_size: usize,
-    pub context_embed_size: usize,
-    pub frequency_embedding_size: usize,
-}

Fields§

§patch_size: usize§in_channels: usize§out_channels: usize§depth: usize§head_size: usize§adm_in_channels: usize§pos_embed_max_size: usize§context_embed_size: usize§frequency_embedding_size: usize

Implementations§

Source§

impl Config

Source

pub fn sd3_medium() -> Self

Source

pub fn sd3_5_medium() -> Self

Source

pub fn sd3_5_large() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/model/struct.MMDiT.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/model/struct.MMDiT.html deleted file mode 100644 index 081e0eb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/model/struct.MMDiT.html +++ /dev/null @@ -1,36 +0,0 @@ -MMDiT in candle_transformers::models::mmdit::model - Rust

MMDiT

Struct MMDiT 

Source
pub struct MMDiT { /* private fields */ }

Implementations§

Source§

impl MMDiT

Source

pub fn new( - cfg: &Config, - use_flash_attn: bool, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward( - &self, - x: &Tensor, - t: &Tensor, - y: &Tensor, - context: &Tensor, - skip_layers: Option<&[usize]>, -) -> Result<Tensor>

Auto Trait Implementations§

§

impl Freeze for MMDiT

§

impl !RefUnwindSafe for MMDiT

§

impl !Send for MMDiT

§

impl !Sync for MMDiT

§

impl Unpin for MMDiT

§

impl !UnwindSafe for MMDiT

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/model/struct.MMDiTCore.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/model/struct.MMDiTCore.html deleted file mode 100644 index 66cb708..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/model/struct.MMDiTCore.html +++ /dev/null @@ -1,39 +0,0 @@ -MMDiTCore in candle_transformers::models::mmdit::model - Rust

MMDiTCore

Struct MMDiTCore 

Source
pub struct MMDiTCore { /* private fields */ }

Implementations§

Source§

impl MMDiTCore

Source

pub fn new( - depth: usize, - hidden_size: usize, - num_heads: usize, - patch_size: usize, - out_channels: usize, - use_flash_attn: bool, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward( - &self, - context: &Tensor, - x: &Tensor, - c: &Tensor, - skip_layers: Option<&[usize]>, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/index.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/index.html deleted file mode 100644 index 0967786..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::mmdit::projections - Rust

Module projections

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/sidebar-items.js deleted file mode 100644 index 115efc2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["AttnProjections","Mlp","Qkv","QkvOnlyAttnProjections"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.AttnProjections.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.AttnProjections.html deleted file mode 100644 index 3a9e0cd..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.AttnProjections.html +++ /dev/null @@ -1,25 +0,0 @@ -AttnProjections in candle_transformers::models::mmdit::projections - Rust

AttnProjections

Struct AttnProjections 

Source
pub struct AttnProjections { /* private fields */ }

Implementations§

Source§

impl AttnProjections

Source

pub fn new(dim: usize, num_heads: usize, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn pre_attention(&self, x: &Tensor) -> Result<Qkv>

Source

pub fn post_attention(&self, x: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.Mlp.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.Mlp.html deleted file mode 100644 index 5a1653c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.Mlp.html +++ /dev/null @@ -1,30 +0,0 @@ -Mlp in candle_transformers::models::mmdit::projections - Rust

Mlp

Struct Mlp 

Source
pub struct Mlp { /* private fields */ }

Implementations§

Source§

impl Mlp

Source

pub fn new( - in_features: usize, - hidden_features: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Module for Mlp

Source§

fn forward(&self, x: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

§

impl Freeze for Mlp

§

impl !RefUnwindSafe for Mlp

§

impl Send for Mlp

§

impl Sync for Mlp

§

impl Unpin for Mlp

§

impl !UnwindSafe for Mlp

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.Qkv.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.Qkv.html deleted file mode 100644 index fe17fca..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.Qkv.html +++ /dev/null @@ -1,29 +0,0 @@ -Qkv in candle_transformers::models::mmdit::projections - Rust

Qkv

Struct Qkv 

Source
pub struct Qkv {
-    pub q: Tensor,
-    pub k: Tensor,
-    pub v: Tensor,
-}

Fields§

§q: Tensor§k: Tensor§v: Tensor

Auto Trait Implementations§

§

impl Freeze for Qkv

§

impl !RefUnwindSafe for Qkv

§

impl Send for Qkv

§

impl Sync for Qkv

§

impl Unpin for Qkv

§

impl !UnwindSafe for Qkv

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.QkvOnlyAttnProjections.html b/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.QkvOnlyAttnProjections.html deleted file mode 100644 index b370b37..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/projections/struct.QkvOnlyAttnProjections.html +++ /dev/null @@ -1,25 +0,0 @@ -QkvOnlyAttnProjections in candle_transformers::models::mmdit::projections - Rust

QkvOnlyAttnProjections

Struct QkvOnlyAttnProjections 

Source
pub struct QkvOnlyAttnProjections { /* private fields */ }

Implementations§

Source§

impl QkvOnlyAttnProjections

Source

pub fn new(dim: usize, num_heads: usize, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn pre_attention(&self, x: &Tensor) -> Result<Qkv>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mmdit/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mmdit/sidebar-items.js deleted file mode 100644 index 175754b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mmdit/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"mod":["blocks","embedding","model","projections"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mobileclip/fn.div_l2_norm.html b/network-poc/target-native/doc/candle_transformers/models/mobileclip/fn.div_l2_norm.html deleted file mode 100644 index 5362905..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mobileclip/fn.div_l2_norm.html +++ /dev/null @@ -1 +0,0 @@ -div_l2_norm in candle_transformers::models::mobileclip - Rust

div_l2_norm

Function div_l2_norm 

Source
pub fn div_l2_norm(v: &Tensor) -> Result<Tensor>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mobileclip/index.html b/network-poc/target-native/doc/candle_transformers/models/mobileclip/index.html deleted file mode 100644 index 1fd90b0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mobileclip/index.html +++ /dev/null @@ -1,18 +0,0 @@ -candle_transformers::models::mobileclip - Rust

Module mobileclip

Module mobileclip 

Source
Expand description

Mobile CLIP model, combining a lightweight vision encoder with a text encoder

-

A mobile-optimized CLIP implementation that uses:

-
    -
  • FastViT as the vision encoder
  • -
  • OpenCLIP text encoder
  • -
  • Projection layers to align the feature spaces
  • -
-

See model details at:

- -

References:

- -

Structs§

MobileClipConfig
MobileClipModel

Functions§

div_l2_norm
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mobileclip/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mobileclip/sidebar-items.js deleted file mode 100644 index ff37485..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mobileclip/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["div_l2_norm"],"struct":["MobileClipConfig","MobileClipModel"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mobileclip/struct.MobileClipConfig.html b/network-poc/target-native/doc/candle_transformers/models/mobileclip/struct.MobileClipConfig.html deleted file mode 100644 index bc207e9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mobileclip/struct.MobileClipConfig.html +++ /dev/null @@ -1,31 +0,0 @@ -MobileClipConfig in candle_transformers::models::mobileclip - Rust

MobileClipConfig

Struct MobileClipConfig 

Source
pub struct MobileClipConfig {
-    pub text_config: Config,
-    pub vision_config: Config,
-    pub image_size: usize,
-}

Fields§

§text_config: Config§vision_config: Config§image_size: usize

Implementations§

Source§

impl MobileClipConfig

Source

pub fn s1() -> Self

Source

pub fn s2() -> Self

Trait Implementations§

Source§

impl Clone for MobileClipConfig

Source§

fn clone(&self) -> MobileClipConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MobileClipConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mobileclip/struct.MobileClipModel.html b/network-poc/target-native/doc/candle_transformers/models/mobileclip/struct.MobileClipModel.html deleted file mode 100644 index 3a70899..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mobileclip/struct.MobileClipModel.html +++ /dev/null @@ -1,31 +0,0 @@ -MobileClipModel in candle_transformers::models::mobileclip - Rust

MobileClipModel

Struct MobileClipModel 

Source
pub struct MobileClipModel { /* private fields */ }

Implementations§

Source§

impl MobileClipModel

Source

pub fn new(vs: VarBuilder<'_>, c: &MobileClipConfig) -> Result<Self>

Source

pub fn get_text_features(&self, input_ids: &Tensor) -> Result<Tensor>

Source

pub fn get_image_features(&self, pixel_values: &Tensor) -> Result<Tensor>

Source

pub fn forward( - &self, - pixel_values: &Tensor, - input_ids: &Tensor, -) -> Result<(Tensor, Tensor)>

Trait Implementations§

Source§

impl Clone for MobileClipModel

Source§

fn clone(&self) -> MobileClipModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MobileClipModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mobilenetv4/fn.mobilenetv4.html b/network-poc/target-native/doc/candle_transformers/models/mobilenetv4/fn.mobilenetv4.html deleted file mode 100644 index 4573290..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mobilenetv4/fn.mobilenetv4.html +++ /dev/null @@ -1,5 +0,0 @@ -mobilenetv4 in candle_transformers::models::mobilenetv4 - Rust

mobilenetv4

Function mobilenetv4 

Source
pub fn mobilenetv4(
-    cfg: &Config,
-    nclasses: usize,
-    vb: VarBuilder<'_>,
-) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mobilenetv4/fn.mobilenetv4_no_final_layer.html b/network-poc/target-native/doc/candle_transformers/models/mobilenetv4/fn.mobilenetv4_no_final_layer.html deleted file mode 100644 index 8d4f4f7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mobilenetv4/fn.mobilenetv4_no_final_layer.html +++ /dev/null @@ -1,4 +0,0 @@ -mobilenetv4_no_final_layer in candle_transformers::models::mobilenetv4 - Rust

mobilenetv4_no_final_layer

Function mobilenetv4_no_final_layer 

Source
pub fn mobilenetv4_no_final_layer(
-    cfg: &Config,
-    vb: VarBuilder<'_>,
-) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mobilenetv4/index.html b/network-poc/target-native/doc/candle_transformers/models/mobilenetv4/index.html deleted file mode 100644 index ae79a22..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mobilenetv4/index.html +++ /dev/null @@ -1,9 +0,0 @@ -candle_transformers::models::mobilenetv4 - Rust

Module mobilenetv4

Module mobilenetv4 

Source
Expand description

§MobileNet-v4

-

MobileNet-v4 inference implementation based on timm.

-

§Paper

-

“MobileNetV4 - Universal Models for the Mobile Ecosystem”

-

§References

- -

Structs§

Config

Functions§

mobilenetv4
mobilenetv4_no_final_layer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mobilenetv4/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mobilenetv4/sidebar-items.js deleted file mode 100644 index ff3eb20..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mobilenetv4/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["mobilenetv4","mobilenetv4_no_final_layer"],"struct":["Config"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mobilenetv4/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/mobilenetv4/struct.Config.html deleted file mode 100644 index 7f6a7d7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mobilenetv4/struct.Config.html +++ /dev/null @@ -1,27 +0,0 @@ -Config in candle_transformers::models::mobilenetv4 - Rust

Config

Struct Config 

Source
pub struct Config { /* private fields */ }

Implementations§

Source§

impl Config

Source

pub fn small() -> Self

Source

pub fn medium() -> Self

Source

pub fn hybrid_medium() -> Self

Source

pub fn large() -> Self

Source

pub fn hybrid_large() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mobileone/fn.mobileone.html b/network-poc/target-native/doc/candle_transformers/models/mobileone/fn.mobileone.html deleted file mode 100644 index 6e6fe52..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mobileone/fn.mobileone.html +++ /dev/null @@ -1,5 +0,0 @@ -mobileone in candle_transformers::models::mobileone - Rust

mobileone

Function mobileone 

Source
pub fn mobileone(
-    cfg: &Config,
-    nclasses: usize,
-    vb: VarBuilder<'_>,
-) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mobileone/fn.mobileone_no_final_layer.html b/network-poc/target-native/doc/candle_transformers/models/mobileone/fn.mobileone_no_final_layer.html deleted file mode 100644 index e941a70..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mobileone/fn.mobileone_no_final_layer.html +++ /dev/null @@ -1,4 +0,0 @@ -mobileone_no_final_layer in candle_transformers::models::mobileone - Rust

mobileone_no_final_layer

Function mobileone_no_final_layer 

Source
pub fn mobileone_no_final_layer(
-    cfg: &Config,
-    vb: VarBuilder<'_>,
-) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mobileone/index.html b/network-poc/target-native/doc/candle_transformers/models/mobileone/index.html deleted file mode 100644 index 12ac651..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mobileone/index.html +++ /dev/null @@ -1,4 +0,0 @@ -candle_transformers::models::mobileone - Rust

Module mobileone

Module mobileone 

Source
Expand description

§MobileOne

-

MobileOne inference implementation based on timm and candle-repvgg

-

See “MobileOne: An Improved One millisecond Mobile Backbone”

-

Structs§

Config

Functions§

mobileone
mobileone_no_final_layer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mobileone/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mobileone/sidebar-items.js deleted file mode 100644 index 68f2ac1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mobileone/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["mobileone","mobileone_no_final_layer"],"struct":["Config"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mobileone/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/mobileone/struct.Config.html deleted file mode 100644 index 9860b10..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mobileone/struct.Config.html +++ /dev/null @@ -1,27 +0,0 @@ -Config in candle_transformers::models::mobileone - Rust

Config

Struct Config 

Source
pub struct Config { /* private fields */ }

Implementations§

Source§

impl Config

Source

pub fn s0() -> Self

Source

pub fn s1() -> Self

Source

pub fn s2() -> Self

Source

pub fn s3() -> Self

Source

pub fn s4() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/modernbert/enum.ClassifierPooling.html b/network-poc/target-native/doc/candle_transformers/models/modernbert/enum.ClassifierPooling.html deleted file mode 100644 index 4a497d1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/modernbert/enum.ClassifierPooling.html +++ /dev/null @@ -1,35 +0,0 @@ -ClassifierPooling in candle_transformers::models::modernbert - Rust

ClassifierPooling

Enum ClassifierPooling 

Source
pub enum ClassifierPooling {
-    CLS,
-    MEAN,
-}

Variants§

§

CLS

§

MEAN

Trait Implementations§

Source§

impl Clone for ClassifierPooling

Source§

fn clone(&self) -> ClassifierPooling

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClassifierPooling

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ClassifierPooling

Source§

fn default() -> ClassifierPooling

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for ClassifierPooling

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for ClassifierPooling

Source§

fn eq(&self, other: &ClassifierPooling) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for ClassifierPooling

Source§

impl StructuralPartialEq for ClassifierPooling

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/modernbert/index.html b/network-poc/target-native/doc/candle_transformers/models/modernbert/index.html deleted file mode 100644 index 9392d53..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/modernbert/index.html +++ /dev/null @@ -1,8 +0,0 @@ -candle_transformers::models::modernbert - Rust

Module modernbert

Module modernbert 

Source
Expand description

ModernBERT

-

ModernBERT is a modernized bidirectional encoder-only Transformer model.

-
    -
  • Arxiv “Smarter, Better, Faster, Longer: A Modern Bidirectional Encoder for Fast, Memory Efficient, and Long Context Finetuning and Inference”
  • -
  • Upstream Github repo.
  • -
  • See modernbert in candle-examples for runnable code
  • -
-

Structs§

ClassifierConfig
Config
ModernBert
ModernBertClassifier
ModernBertDecoder
ModernBertForMaskedLM
ModernBertForSequenceClassification
ModernBertHead
ModernBertLayer
ModernBertMLP

Enums§

ClassifierPooling
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/modernbert/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/modernbert/sidebar-items.js deleted file mode 100644 index 66d2fce..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/modernbert/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["ClassifierPooling"],"struct":["ClassifierConfig","Config","ModernBert","ModernBertClassifier","ModernBertDecoder","ModernBertForMaskedLM","ModernBertForSequenceClassification","ModernBertHead","ModernBertLayer","ModernBertMLP"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ClassifierConfig.html b/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ClassifierConfig.html deleted file mode 100644 index e0dd9ab..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ClassifierConfig.html +++ /dev/null @@ -1,34 +0,0 @@ -ClassifierConfig in candle_transformers::models::modernbert - Rust

ClassifierConfig

Struct ClassifierConfig 

Source
pub struct ClassifierConfig {
-    pub id2label: HashMap<String, String>,
-    pub label2id: HashMap<String, String>,
-    pub classifier_pooling: ClassifierPooling,
-}

Fields§

§id2label: HashMap<String, String>§label2id: HashMap<String, String>§classifier_pooling: ClassifierPooling

Trait Implementations§

Source§

impl Clone for ClassifierConfig

Source§

fn clone(&self) -> ClassifierConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClassifierConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for ClassifierConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for ClassifierConfig

Source§

fn eq(&self, other: &ClassifierConfig) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for ClassifierConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.Config.html deleted file mode 100644 index 9e43d5e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.Config.html +++ /dev/null @@ -1,44 +0,0 @@ -Config in candle_transformers::models::modernbert - Rust

Config

Struct Config 

Source
pub struct Config {
Show 13 fields - pub vocab_size: usize, - pub hidden_size: usize, - pub num_hidden_layers: usize, - pub num_attention_heads: usize, - pub intermediate_size: usize, - pub max_position_embeddings: usize, - pub layer_norm_eps: f64, - pub pad_token_id: u32, - pub global_attn_every_n_layers: usize, - pub global_rope_theta: f64, - pub local_attention: usize, - pub local_rope_theta: f64, - pub classifier_config: Option<ClassifierConfig>, -
}

Fields§

§vocab_size: usize§hidden_size: usize§num_hidden_layers: usize§num_attention_heads: usize§intermediate_size: usize§max_position_embeddings: usize§layer_norm_eps: f64§pad_token_id: u32§global_attn_every_n_layers: usize§global_rope_theta: f64§local_attention: usize§local_rope_theta: f64§classifier_config: Option<ClassifierConfig>

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBert.html b/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBert.html deleted file mode 100644 index 4a98766..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBert.html +++ /dev/null @@ -1,27 +0,0 @@ -ModernBert in candle_transformers::models::modernbert - Rust

ModernBert

Struct ModernBert 

Source
pub struct ModernBert { /* private fields */ }

Implementations§

Source§

impl ModernBert

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, mask: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for ModernBert

Source§

fn clone(&self) -> ModernBert

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertClassifier.html b/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertClassifier.html deleted file mode 100644 index ac53246..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertClassifier.html +++ /dev/null @@ -1,28 +0,0 @@ -ModernBertClassifier in candle_transformers::models::modernbert - Rust

ModernBertClassifier

Struct ModernBertClassifier 

Source
pub struct ModernBertClassifier { /* private fields */ }

Trait Implementations§

Source§

impl Clone for ModernBertClassifier

Source§

fn clone(&self) -> ModernBertClassifier

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Module for ModernBertClassifier

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertDecoder.html b/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertDecoder.html deleted file mode 100644 index 591cfa2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertDecoder.html +++ /dev/null @@ -1,28 +0,0 @@ -ModernBertDecoder in candle_transformers::models::modernbert - Rust

ModernBertDecoder

Struct ModernBertDecoder 

Source
pub struct ModernBertDecoder { /* private fields */ }

Trait Implementations§

Source§

impl Clone for ModernBertDecoder

Source§

fn clone(&self) -> ModernBertDecoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Module for ModernBertDecoder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertForMaskedLM.html b/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertForMaskedLM.html deleted file mode 100644 index cba500b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertForMaskedLM.html +++ /dev/null @@ -1,27 +0,0 @@ -ModernBertForMaskedLM in candle_transformers::models::modernbert - Rust

ModernBertForMaskedLM

Struct ModernBertForMaskedLM 

Source
pub struct ModernBertForMaskedLM { /* private fields */ }

Implementations§

Source§

impl ModernBertForMaskedLM

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, mask: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for ModernBertForMaskedLM

Source§

fn clone(&self) -> ModernBertForMaskedLM

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertForSequenceClassification.html b/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertForSequenceClassification.html deleted file mode 100644 index 1b61863..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertForSequenceClassification.html +++ /dev/null @@ -1,27 +0,0 @@ -ModernBertForSequenceClassification in candle_transformers::models::modernbert - Rust

ModernBertForSequenceClassification

Struct ModernBertForSequenceClassification 

Source
pub struct ModernBertForSequenceClassification { /* private fields */ }

Implementations§

Source§

impl ModernBertForSequenceClassification

Source

pub fn load(vb: VarBuilder<'_>, config: &Config) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, mask: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for ModernBertForSequenceClassification

Source§

fn clone(&self) -> ModernBertForSequenceClassification

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertHead.html b/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertHead.html deleted file mode 100644 index 0c4979d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertHead.html +++ /dev/null @@ -1,28 +0,0 @@ -ModernBertHead in candle_transformers::models::modernbert - Rust

ModernBertHead

Struct ModernBertHead 

Source
pub struct ModernBertHead { /* private fields */ }

Trait Implementations§

Source§

impl Clone for ModernBertHead

Source§

fn clone(&self) -> ModernBertHead

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Module for ModernBertHead

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertLayer.html b/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertLayer.html deleted file mode 100644 index c12808d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertLayer.html +++ /dev/null @@ -1,27 +0,0 @@ -ModernBertLayer in candle_transformers::models::modernbert - Rust

ModernBertLayer

Struct ModernBertLayer 

Source
pub struct ModernBertLayer { /* private fields */ }

Trait Implementations§

Source§

impl Clone for ModernBertLayer

Source§

fn clone(&self) -> ModernBertLayer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertMLP.html b/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertMLP.html deleted file mode 100644 index 6fa9399..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/modernbert/struct.ModernBertMLP.html +++ /dev/null @@ -1,28 +0,0 @@ -ModernBertMLP in candle_transformers::models::modernbert - Rust

ModernBertMLP

Struct ModernBertMLP 

Source
pub struct ModernBertMLP { /* private fields */ }

Trait Implementations§

Source§

impl Clone for ModernBertMLP

Source§

fn clone(&self) -> ModernBertMLP

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Module for ModernBertMLP

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/moondream/index.html b/network-poc/target-native/doc/candle_transformers/models/moondream/index.html deleted file mode 100644 index 274bc54..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/moondream/index.html +++ /dev/null @@ -1,29 +0,0 @@ -candle_transformers::models::moondream - Rust

Module moondream

Module moondream 

Source
Expand description

MoonDream Model vision-to-text

-

Moondream is a computer-vision model that can answer real-world questions about images. -It’s lightweight with only 1.6B parameters, enabling it to run on mobile phones and edge devices. -MoonDream Original Implementation

-

The model consists of:

-
    -
  • Vision encoder using a ViT-style architecture
  • -
  • Text decoder based on Microsoft’s Phi model
  • -
  • Vision projection module to align vision and text embeddings
  • -
-

§Examples

-
# download an example image
-wget https://raw.githubusercontent.com/vikhyat/moondream/main/assets/demo-1.jpg
-
-# Now you can run Moondream from the `candle-examples` crate:
-cargo run --example moondream \
-  --release -- \
-  --prompt "What is the girl eating?"
-  --image "./demo-1.jpg"
-
-> avavx: false, neon: true, simd128: false, f16c: false
-> temp: 0.00 repeat-penalty: 1.00 repeat-last-n: 64
-> retrieved the files in 3.395583ms
-> Running on CPU, to run on GPU(metal), build this example with `--features metal`
-> loaded the model in 5.485493792s
-> loaded and encoded the image Tensor[dims 3, 378, 378; f32] in 4.801396417s
-> starting the inference loop
-> The girl is eating a hamburger.<
-> 9 tokens generated (0.68 token/s)

Structs§

Config
Encoder
Model
VisionConfig
VisionEncoder
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/moondream/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/moondream/sidebar-items.js deleted file mode 100644 index ed728d3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/moondream/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Encoder","Model","VisionConfig","VisionEncoder"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/moondream/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/moondream/struct.Config.html deleted file mode 100644 index 03b76d7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/moondream/struct.Config.html +++ /dev/null @@ -1,32 +0,0 @@ -Config in candle_transformers::models::moondream - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub phi_config: Config,
-    pub vision_config: VisionConfig,
-}

Fields§

§phi_config: Config§vision_config: VisionConfig

Implementations§

Source§

impl Config

Source

pub fn v2() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/moondream/struct.Encoder.html b/network-poc/target-native/doc/candle_transformers/models/moondream/struct.Encoder.html deleted file mode 100644 index e9cdc60..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/moondream/struct.Encoder.html +++ /dev/null @@ -1,28 +0,0 @@ -Encoder in candle_transformers::models::moondream - Rust

Encoder

Struct Encoder 

Source
pub struct Encoder { /* private fields */ }

Trait Implementations§

Source§

impl Clone for Encoder

Source§

fn clone(&self) -> Encoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Encoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Encoder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/moondream/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/moondream/struct.Model.html deleted file mode 100644 index a960eb8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/moondream/struct.Model.html +++ /dev/null @@ -1,30 +0,0 @@ -Model in candle_transformers::models::moondream - Rust

Model

Struct Model 

Source
pub struct Model {
-    pub text_model: MixFormerSequentialForCausalLM,
-    pub vision_encoder: VisionEncoder,
-}

Fields§

§text_model: MixFormerSequentialForCausalLM§vision_encoder: VisionEncoder

Implementations§

Source§

impl Model

Source

pub fn new(config: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn vision_encoder(&self) -> &VisionEncoder

Source

pub fn text_model(&mut self) -> &mut PhiModel

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/moondream/struct.VisionConfig.html b/network-poc/target-native/doc/candle_transformers/models/moondream/struct.VisionConfig.html deleted file mode 100644 index 4ebb5e5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/moondream/struct.VisionConfig.html +++ /dev/null @@ -1,30 +0,0 @@ -VisionConfig in candle_transformers::models::moondream - Rust

VisionConfig

Struct VisionConfig 

Source
pub struct VisionConfig { /* private fields */ }

Implementations§

Source§

impl VisionConfig

Source

pub fn v2() -> Self

Trait Implementations§

Source§

impl Clone for VisionConfig

Source§

fn clone(&self) -> VisionConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VisionConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for VisionConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for VisionConfig

Source§

fn eq(&self, other: &VisionConfig) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for VisionConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/moondream/struct.VisionEncoder.html b/network-poc/target-native/doc/candle_transformers/models/moondream/struct.VisionEncoder.html deleted file mode 100644 index 6e2cb40..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/moondream/struct.VisionEncoder.html +++ /dev/null @@ -1,28 +0,0 @@ -VisionEncoder in candle_transformers::models::moondream - Rust

VisionEncoder

Struct VisionEncoder 

Source
pub struct VisionEncoder { /* private fields */ }

Implementations§

Source§

impl VisionEncoder

Source

pub fn new(cfg: &VisionConfig, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for VisionEncoder

Source§

fn clone(&self) -> VisionEncoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VisionEncoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for VisionEncoder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mpt/index.html b/network-poc/target-native/doc/candle_transformers/models/mpt/index.html deleted file mode 100644 index c4b1542..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mpt/index.html +++ /dev/null @@ -1,8 +0,0 @@ -candle_transformers::models::mpt - Rust

Module mpt

Module mpt 

Source
Expand description

Module implementing the MPT (Multi-Purpose Transformer) model

-

References:

- -

The model uses grouped query attention and alibi positional embeddings.

-

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mpt/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/mpt/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mpt/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mpt/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/mpt/struct.Config.html deleted file mode 100644 index 0a28257..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mpt/struct.Config.html +++ /dev/null @@ -1,28 +0,0 @@ -Config in candle_transformers::models::mpt - Rust

Config

Struct Config 

Source
pub struct Config { /* private fields */ }

Implementations§

Source§

impl Config

Source

pub fn replit_code_v1_5_3b() -> Self

Source

pub fn is_causal(&self) -> bool

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/mpt/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/mpt/struct.Model.html deleted file mode 100644 index 2834f9c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/mpt/struct.Model.html +++ /dev/null @@ -1,27 +0,0 @@ -Model in candle_transformers::models::mpt - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/embedding/index.html b/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/embedding/index.html deleted file mode 100644 index d01b79e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/embedding/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::nvembed_v2::embedding - Rust

Module embedding

Module embedding 

Source

Structs§

Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/embedding/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/embedding/sidebar-items.js deleted file mode 100644 index 5f9d0bb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/embedding/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/embedding/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/embedding/struct.Model.html deleted file mode 100644 index 6ca59ea..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/embedding/struct.Model.html +++ /dev/null @@ -1,35 +0,0 @@ -Model in candle_transformers::models::nvembed_v2::embedding - Rust

Model

Struct Model 

Source
pub struct Model {
-    pub cfg: Config,
-    /* private fields */
-}

Fields§

§cfg: Config

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - attn_mask: &Tensor, - input_ids: &Tensor, - dtype: DType, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/index.html b/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/index.html deleted file mode 100644 index c6d2c85..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/index.html +++ /dev/null @@ -1,4 +0,0 @@ -candle_transformers::models::nvembed_v2 - Rust

Module nvembed_v2

Module nvembed_v2 

Source
Expand description

NV-Embed-v2

-

NV-Embed-v2 is a text embedding model that combines a Mistral decoder with a latent attention mechanism to produce high-quality text embeddings.

-

This implementation is based on the paper and weights

-

§Query-Passage Retrieval Example

cargo run --example nvembed_v2 --release

§Sentence Embedding Example

cargo run --example nvembed_v2 --release -- --prompt "Here is a test sentence"

Modules§

embedding
model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/model/index.html b/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/model/index.html deleted file mode 100644 index d17103c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/model/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::nvembed_v2::model - Rust

Module model

Module model 

Source

Structs§

Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/model/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/model/sidebar-items.js deleted file mode 100644 index 5f9d0bb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/model/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/model/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/model/struct.Model.html deleted file mode 100644 index 97d2238..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/model/struct.Model.html +++ /dev/null @@ -1,34 +0,0 @@ -Model in candle_transformers::models::nvembed_v2::model - Rust

Model

Struct Model 

Source
pub struct Model {
-    pub device: Device,
-    pub dtype: DType,
-    /* private fields */
-}

Fields§

§device: Device§dtype: DType

Implementations§

Source§

impl Model

Source

pub fn new(vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - attn_mask: &Tensor, - pool_mask: &Tensor, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/sidebar-items.js deleted file mode 100644 index a4dd9a8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/nvembed_v2/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"mod":["embedding","model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/olmo/index.html b/network-poc/target-native/doc/candle_transformers/models/olmo/index.html deleted file mode 100644 index 414487c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/olmo/index.html +++ /dev/null @@ -1,18 +0,0 @@ -candle_transformers::models::olmo - Rust

Module olmo

Module olmo 

Source
Expand description

OLMo (Open Language Model) implementation

-

See OLMo model details at:

- -

The model uses:

-
    -
  • RoPE embeddings
  • -
  • Sliding window attention
  • -
  • Transformer architecture
  • -
-

References:

- -

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/olmo/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/olmo/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/olmo/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/olmo/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/olmo/struct.Config.html deleted file mode 100644 index d515827..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/olmo/struct.Config.html +++ /dev/null @@ -1,42 +0,0 @@ -Config in candle_transformers::models::olmo - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub vocab_size: usize,
-    pub hidden_size: usize,
-    pub intermediate_size: usize,
-    pub attention_bias: bool,
-    pub num_hidden_layers: usize,
-    pub num_attention_heads: usize,
-    pub num_key_value_heads: usize,
-    pub hidden_act: Activation,
-    pub max_position_embeddings: usize,
-    pub rope_theta: f64,
-    pub tie_word_embeddings: bool,
-    pub clip_qkv: Option<f64>,
-}

Fields§

§vocab_size: usize§hidden_size: usize§intermediate_size: usize§attention_bias: bool§num_hidden_layers: usize§num_attention_heads: usize§num_key_value_heads: usize§hidden_act: Activation§max_position_embeddings: usize§rope_theta: f64§tie_word_embeddings: bool§clip_qkv: Option<f64>

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/olmo/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/olmo/struct.Model.html deleted file mode 100644 index 9b49e2a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/olmo/struct.Model.html +++ /dev/null @@ -1,31 +0,0 @@ -Model in candle_transformers::models::olmo - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/openclip/index.html b/network-poc/target-native/doc/candle_transformers/models/openclip/index.html deleted file mode 100644 index c6398ed..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/openclip/index.html +++ /dev/null @@ -1,11 +0,0 @@ -candle_transformers::models::openclip - Rust

Module openclip

Module openclip 

Source
Expand description

Open Contrastive Language-Image Pre-Training

-

Open Contrastive Language-Image Pre-Training (OpenCLIP) is an architecture trained on -pairs of images with related texts.

- -

§Overview

-

-

Modules§

text_model
Text encoder as used in most OpenCLIP pretrained models -https://github.com/mlfoundations/open_clip
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/openclip/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/openclip/sidebar-items.js deleted file mode 100644 index dc42926..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/openclip/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"mod":["text_model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/openclip/text_model/index.html b/network-poc/target-native/doc/candle_transformers/models/openclip/text_model/index.html deleted file mode 100644 index 32ba8e3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/openclip/text_model/index.html +++ /dev/null @@ -1,3 +0,0 @@ -candle_transformers::models::openclip::text_model - Rust

Module text_model

Module text_model 

Source
Expand description

Text encoder as used in most OpenCLIP pretrained models -https://github.com/mlfoundations/open_clip

-

Structs§

Config
Encoder
OpenClipTextTransformer
A text transformer as used in CLIP variants.
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/openclip/text_model/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/openclip/text_model/sidebar-items.js deleted file mode 100644 index 5f48a7d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/openclip/text_model/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Encoder","OpenClipTextTransformer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/openclip/text_model/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/openclip/text_model/struct.Config.html deleted file mode 100644 index 451e427..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/openclip/text_model/struct.Config.html +++ /dev/null @@ -1,36 +0,0 @@ -Config in candle_transformers::models::openclip::text_model - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub vocab_size: usize,
-    pub embed_dim: usize,
-    pub intermediate_size: usize,
-    pub max_position_embeddings: usize,
-    pub pad_with: Option<String>,
-    pub num_hidden_layers: usize,
-    pub num_attention_heads: usize,
-    pub projection_dim: usize,
-}

Fields§

§vocab_size: usize§embed_dim: usize§intermediate_size: usize§max_position_embeddings: usize§pad_with: Option<String>§num_hidden_layers: usize§num_attention_heads: usize§projection_dim: usize

Implementations§

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/openclip/text_model/struct.Encoder.html b/network-poc/target-native/doc/candle_transformers/models/openclip/text_model/struct.Encoder.html deleted file mode 100644 index 2cdbe7f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/openclip/text_model/struct.Encoder.html +++ /dev/null @@ -1,27 +0,0 @@ -Encoder in candle_transformers::models::openclip::text_model - Rust

Encoder

Struct Encoder 

Source
pub struct Encoder { /* private fields */ }

Implementations§

Source§

impl Encoder

Source

pub fn new(vs: VarBuilder<'_>, c: &Config) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Encoder

Source§

fn clone(&self) -> Encoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Encoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/openclip/text_model/struct.OpenClipTextTransformer.html b/network-poc/target-native/doc/candle_transformers/models/openclip/text_model/struct.OpenClipTextTransformer.html deleted file mode 100644 index 7b169d4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/openclip/text_model/struct.OpenClipTextTransformer.html +++ /dev/null @@ -1,29 +0,0 @@ -OpenClipTextTransformer in candle_transformers::models::openclip::text_model - Rust

OpenClipTextTransformer

Struct OpenClipTextTransformer 

Source
pub struct OpenClipTextTransformer { /* private fields */ }
Expand description

A text transformer as used in CLIP variants.

-

Implementations§

Source§

impl OpenClipTextTransformer

Source

pub fn new(vs: VarBuilder<'_>, c: &Config) -> Result<Self>

Source

pub fn forward(&self, input_ids: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for OpenClipTextTransformer

Source§

fn clone(&self) -> OpenClipTextTransformer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for OpenClipTextTransformer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for OpenClipTextTransformer

Source§

fn forward(&self, input_ids: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/paligemma/index.html b/network-poc/target-native/doc/candle_transformers/models/paligemma/index.html deleted file mode 100644 index 40406d2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/paligemma/index.html +++ /dev/null @@ -1,18 +0,0 @@ -candle_transformers::models::paligemma - Rust

Module paligemma

Module paligemma 

Source
Expand description

Multimodal multi-purpose model combining Gemma-based language model with SigLIP image understanding

-

See PaLiGemma details at:

- -

The model is a multimodal combination of:

-
    -
  • SigLIP vision encoder
  • -
  • Gemma language model
  • -
  • Cross-projection layers
  • -
-

References:

- -

Structs§

Config
Model
MultiModalProjector
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/paligemma/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/paligemma/sidebar-items.js deleted file mode 100644 index 2ef622e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/paligemma/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model","MultiModalProjector"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/paligemma/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/paligemma/struct.Config.html deleted file mode 100644 index cd8d3fb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/paligemma/struct.Config.html +++ /dev/null @@ -1,33 +0,0 @@ -Config in candle_transformers::models::paligemma - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub vision_config: VisionConfig,
-    pub text_config: Config,
-    pub projection_dim: usize,
-}

Fields§

§vision_config: VisionConfig§text_config: Config§projection_dim: usize

Implementations§

Source§

impl Config

Source

pub fn paligemma_3b_224() -> Self

Source

pub fn paligemma_3b_448() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/paligemma/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/paligemma/struct.Model.html deleted file mode 100644 index 7d6a7af..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/paligemma/struct.Model.html +++ /dev/null @@ -1,38 +0,0 @@ -Model in candle_transformers::models::paligemma - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn setup( - &mut self, - pixel_values: &Tensor, - input_ids: &Tensor, -) -> Result<Tensor>

Source

pub fn forward(&mut self, input_ids: &Tensor) -> Result<Tensor>

Source

pub fn forward_without_projection( - &mut self, - input_ids: &Tensor, -) -> Result<Tensor>

Source

pub fn setup_without_projection( - &mut self, - pixel_values: &Tensor, - input_ids: &Tensor, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/paligemma/struct.MultiModalProjector.html b/network-poc/target-native/doc/candle_transformers/models/paligemma/struct.MultiModalProjector.html deleted file mode 100644 index cc8d1c0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/paligemma/struct.MultiModalProjector.html +++ /dev/null @@ -1,28 +0,0 @@ -MultiModalProjector in candle_transformers::models::paligemma - Rust

MultiModalProjector

Struct MultiModalProjector 

Source
pub struct MultiModalProjector { /* private fields */ }

Trait Implementations§

Source§

impl Clone for MultiModalProjector

Source§

fn clone(&self) -> MultiModalProjector

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MultiModalProjector

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for MultiModalProjector

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/parler_tts/index.html b/network-poc/target-native/doc/candle_transformers/models/parler_tts/index.html deleted file mode 100644 index a057c7d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/parler_tts/index.html +++ /dev/null @@ -1,15 +0,0 @@ -candle_transformers::models::parler_tts - Rust

Module parler_tts

Module parler_tts 

Source
Expand description

Parler Model implementation for parler_tts text-to-speech synthesis

-

Implements a transformer-based decoder architecture for generating audio tokens -from text using discrete tokens. The model converts text into audio segments -using multiple codebooks of quantized audio tokens.

-

The model architecture includes:

-
    -
  • Multi-head attention layers for text and audio processing
  • -
  • Feed-forward networks
  • -
  • Layer normalization
  • -
  • Positional embeddings
  • -
  • Multiple codebook prediction heads
  • -
-

The implementation follows the original parler_tts architecture while focusing -on audio token generation for text-to-speech synthesis.

-

Structs§

Attention
Config
Decoder
DecoderConfig
DecoderLayer
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/parler_tts/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/parler_tts/sidebar-items.js deleted file mode 100644 index 2317ce3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/parler_tts/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Attention","Config","Decoder","DecoderConfig","DecoderLayer","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Attention.html b/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Attention.html deleted file mode 100644 index b8eeb11..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Attention.html +++ /dev/null @@ -1,27 +0,0 @@ -Attention in candle_transformers::models::parler_tts - Rust

Attention

Struct Attention 

Source
pub struct Attention { /* private fields */ }

Trait Implementations§

Source§

impl Clone for Attention

Source§

fn clone(&self) -> Attention

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Attention

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Config.html deleted file mode 100644 index 2f283bb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Config.html +++ /dev/null @@ -1,36 +0,0 @@ -Config in candle_transformers::models::parler_tts - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub decoder_start_token_id: u32,
-    pub pad_token_id: u32,
-    pub decoder: DecoderConfig,
-    pub text_encoder: Config,
-    pub vocab_size: usize,
-    pub audio_encoder: Config,
-}

Fields§

§decoder_start_token_id: u32§pad_token_id: u32§decoder: DecoderConfig§text_encoder: Config§vocab_size: usize§audio_encoder: Config

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Decoder.html b/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Decoder.html deleted file mode 100644 index 33daf22..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Decoder.html +++ /dev/null @@ -1,35 +0,0 @@ -Decoder in candle_transformers::models::parler_tts - Rust

Decoder

Struct Decoder 

Source
pub struct Decoder { /* private fields */ }

Implementations§

Source§

impl Decoder

Source

pub fn new(cfg: &DecoderConfig, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - prompt_hidden_states: Option<&Tensor>, - attention_mask: Option<&Tensor>, - encoder_xs: &Tensor, - encoder_attention_mask: Option<&Tensor>, - seqlen_offset: usize, -) -> Result<Vec<Tensor>>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Decoder

Source§

fn clone(&self) -> Decoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Decoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.DecoderConfig.html b/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.DecoderConfig.html deleted file mode 100644 index d0d7943..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.DecoderConfig.html +++ /dev/null @@ -1,47 +0,0 @@ -DecoderConfig in candle_transformers::models::parler_tts - Rust

DecoderConfig

Struct DecoderConfig 

Source
pub struct DecoderConfig {
Show 17 fields - pub vocab_size: usize, - pub max_position_embeddings: usize, - pub num_hidden_layers: usize, - pub ffn_dim: usize, - pub num_attention_heads: usize, - pub num_key_value_heads: Option<usize>, - pub num_cross_attention_key_value_heads: Option<usize>, - pub activation_function: Activation, - pub hidden_size: usize, - pub scale_embedding: bool, - pub num_codebooks: usize, - pub pad_token_id: usize, - pub bos_token_id: usize, - pub eos_token_id: usize, - pub tie_word_embeddings: bool, - pub rope_embeddings: bool, - pub rope_theta: f64, -
}

Fields§

§vocab_size: usize§max_position_embeddings: usize§num_hidden_layers: usize§ffn_dim: usize§num_attention_heads: usize§num_key_value_heads: Option<usize>§num_cross_attention_key_value_heads: Option<usize>§activation_function: Activation§hidden_size: usize§scale_embedding: bool§num_codebooks: usize§pad_token_id: usize§bos_token_id: usize§eos_token_id: usize§tie_word_embeddings: bool§rope_embeddings: bool§rope_theta: f64

Trait Implementations§

Source§

impl Clone for DecoderConfig

Source§

fn clone(&self) -> DecoderConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DecoderConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for DecoderConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.DecoderLayer.html b/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.DecoderLayer.html deleted file mode 100644 index b45d983..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.DecoderLayer.html +++ /dev/null @@ -1,27 +0,0 @@ -DecoderLayer in candle_transformers::models::parler_tts - Rust

DecoderLayer

Struct DecoderLayer 

Source
pub struct DecoderLayer { /* private fields */ }

Trait Implementations§

Source§

impl Clone for DecoderLayer

Source§

fn clone(&self) -> DecoderLayer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DecoderLayer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Model.html deleted file mode 100644 index 9195839..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/parler_tts/struct.Model.html +++ /dev/null @@ -1,42 +0,0 @@ -Model in candle_transformers::models::parler_tts - Rust

Model

Struct Model 

Source
pub struct Model {
-    pub embed_prompts: Embedding,
-    pub enc_to_dec_proj: Option<Linear>,
-    pub decoder: Decoder,
-    pub text_encoder: T5EncoderModel,
-    pub decoder_start_token_id: u32,
-    pub pad_token_id: u32,
-    pub audio_encoder: Model,
-}

Fields§

§embed_prompts: Embedding§enc_to_dec_proj: Option<Linear>§decoder: Decoder§text_encoder: T5EncoderModel§decoder_start_token_id: u32§pad_token_id: u32§audio_encoder: Model

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn generate( - &mut self, - prompt_tokens: &Tensor, - description_tokens: &Tensor, - lp: LogitsProcessor, - max_steps: usize, -) -> Result<Tensor>

Note that the returned tensor uses the CPU device.

-

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/persimmon/constant.DTYPE.html b/network-poc/target-native/doc/candle_transformers/models/persimmon/constant.DTYPE.html deleted file mode 100644 index 2747a9a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/persimmon/constant.DTYPE.html +++ /dev/null @@ -1 +0,0 @@ -DTYPE in candle_transformers::models::persimmon - Rust

DTYPE

Constant DTYPE 

Source
pub const DTYPE: DType;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/persimmon/enum.PositionEmbeddingType.html b/network-poc/target-native/doc/candle_transformers/models/persimmon/enum.PositionEmbeddingType.html deleted file mode 100644 index bbbe847..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/persimmon/enum.PositionEmbeddingType.html +++ /dev/null @@ -1,39 +0,0 @@ -PositionEmbeddingType in candle_transformers::models::persimmon - Rust

PositionEmbeddingType

Enum PositionEmbeddingType 

Source
pub enum PositionEmbeddingType {
-    Absolute,
-    Alibi,
-}

Variants§

§

Absolute

§

Alibi

Trait Implementations§

Source§

impl Clone for PositionEmbeddingType

Source§

fn clone(&self) -> PositionEmbeddingType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PositionEmbeddingType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for PositionEmbeddingType

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for PositionEmbeddingType

Source§

fn eq(&self, other: &PositionEmbeddingType) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for PositionEmbeddingType

Source§

impl Eq for PositionEmbeddingType

Source§

impl StructuralPartialEq for PositionEmbeddingType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/persimmon/index.html b/network-poc/target-native/doc/candle_transformers/models/persimmon/index.html deleted file mode 100644 index 0ee032a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/persimmon/index.html +++ /dev/null @@ -1,15 +0,0 @@ -candle_transformers::models::persimmon - Rust

Module persimmon

Module persimmon 

Source
Expand description

Persimmon Model

-

A transformer language model for efficient inference and general-purpose tasks. The model uses a standard transformer architecture with:

-
    -
  • Layer normalization for Q/K attention
  • -
  • RoPE embeddings with partial rotary factor
  • -
  • ReLU activation
  • -
  • Separate number of attention heads and KV heads
  • -
-

References:

- -

Structs§

Config

Enums§

PositionEmbeddingType

Constants§

DTYPE
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/persimmon/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/persimmon/sidebar-items.js deleted file mode 100644 index 779f906..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/persimmon/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"constant":["DTYPE"],"enum":["PositionEmbeddingType"],"struct":["Config"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/persimmon/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/persimmon/struct.Config.html deleted file mode 100644 index bba58d7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/persimmon/struct.Config.html +++ /dev/null @@ -1,47 +0,0 @@ -Config in candle_transformers::models::persimmon - Rust

Config

Struct Config 

Source
pub struct Config {
Show 16 fields - pub vocab_size: usize, - pub hidden_size: usize, - pub intermediate_size: usize, - pub num_hidden_layers: usize, - pub num_attention_heads: usize, - pub num_key_value_heads: usize, - pub hidden_act: Activation, - pub max_position_embeddings: usize, - pub initializer_range: f64, - pub layer_norm_eps: f64, - pub rms_norm_eps: f64, - pub use_cache: bool, - pub tie_word_embeddings: bool, - pub rope_theta: f64, - pub qk_layernorm: bool, - pub partial_rotary_factor: f64, -
}

Fields§

§vocab_size: usize§hidden_size: usize§intermediate_size: usize§num_hidden_layers: usize§num_attention_heads: usize§num_key_value_heads: usize§hidden_act: Activation§max_position_embeddings: usize§initializer_range: f64§layer_norm_eps: f64§rms_norm_eps: f64§use_cache: bool§tie_word_embeddings: bool§rope_theta: f64§qk_layernorm: bool§partial_rotary_factor: f64

Implementations§

Source§

impl Config

Source

pub fn base_8b() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/phi/index.html b/network-poc/target-native/doc/candle_transformers/models/phi/index.html deleted file mode 100644 index d090cb2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/phi/index.html +++ /dev/null @@ -1,24 +0,0 @@ -candle_transformers::models::phi - Rust

Module phi

Module phi 

Source
Expand description

Microsoft Phi model implementation

-

The Phi series are decoder-only transformers designed for code and language tasks.

-

Key characteristics:

-
    -
  • -

    Decoder-only transformer architecture

    -
  • -
  • -

    RoPE embeddings

    -
  • -
  • -

    Layer normalization

    -
  • -
  • -

    QK normalization

    -
  • -
  • -

    Interactive Wasm Example

    -
  • -
  • -

    🤗 HF Link

    -
  • -
-

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/phi/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/phi/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/phi/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/phi/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/phi/struct.Config.html deleted file mode 100644 index f24ac14..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/phi/struct.Config.html +++ /dev/null @@ -1,30 +0,0 @@ -Config in candle_transformers::models::phi - Rust

Config

Struct Config 

Source
pub struct Config { /* private fields */ }

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/phi/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/phi/struct.Model.html deleted file mode 100644 index f8cf1e6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/phi/struct.Model.html +++ /dev/null @@ -1,27 +0,0 @@ -Model in candle_transformers::models::phi - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/phi3/index.html b/network-poc/target-native/doc/candle_transformers/models/phi3/index.html deleted file mode 100644 index ee586d0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/phi3/index.html +++ /dev/null @@ -1,21 +0,0 @@ -candle_transformers::models::phi3 - Rust

Module phi3

Module phi3 

Source
Expand description

Microsoft Phi-3 model implementation

-

See Phi model details at:

- -

The Phi series are decoder-only transformers designed for code and language tasks. -Key characteristics:

-
    -
  • Decoder-only transformer architecture
  • -
  • RoPE embeddings
  • -
  • Layer normalization
  • -
  • QK normalization
  • -
  • Mixed activation functions
  • -
  • Improved context window handling
  • -
-

References:

- -

Structs§

Config
Model
RotaryEmbedding
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/phi3/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/phi3/sidebar-items.js deleted file mode 100644 index eeefc13..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/phi3/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model","RotaryEmbedding"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/phi3/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/phi3/struct.Config.html deleted file mode 100644 index acc905a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/phi3/struct.Config.html +++ /dev/null @@ -1,43 +0,0 @@ -Config in candle_transformers::models::phi3 - Rust

Config

Struct Config 

Source
pub struct Config {
Show 13 fields - pub vocab_size: usize, - pub hidden_act: Activation, - pub hidden_size: usize, - pub intermediate_size: usize, - pub num_hidden_layers: usize, - pub num_attention_heads: usize, - pub num_key_value_heads: usize, - pub rms_norm_eps: f64, - pub rope_theta: f64, - pub bos_token_id: Option<u32>, - pub eos_token_id: Option<u32>, - pub rope_scaling: Option<String>, - pub max_position_embeddings: usize, -
}

Fields§

§vocab_size: usize§hidden_act: Activation§hidden_size: usize§intermediate_size: usize§num_hidden_layers: usize§num_attention_heads: usize§num_key_value_heads: usize§rms_norm_eps: f64§rope_theta: f64§bos_token_id: Option<u32>§eos_token_id: Option<u32>§rope_scaling: Option<String>§max_position_embeddings: usize

Implementations§

Source§

impl Config

Source

pub fn head_dim(&self) -> usize

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/phi3/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/phi3/struct.Model.html deleted file mode 100644 index 1ff4cce..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/phi3/struct.Model.html +++ /dev/null @@ -1,31 +0,0 @@ -Model in candle_transformers::models::phi3 - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/phi3/struct.RotaryEmbedding.html b/network-poc/target-native/doc/candle_transformers/models/phi3/struct.RotaryEmbedding.html deleted file mode 100644 index fdf8988..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/phi3/struct.RotaryEmbedding.html +++ /dev/null @@ -1,32 +0,0 @@ -RotaryEmbedding in candle_transformers::models::phi3 - Rust

RotaryEmbedding

Struct RotaryEmbedding 

Source
pub struct RotaryEmbedding { /* private fields */ }

Implementations§

Source§

impl RotaryEmbedding

Source

pub fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self>

Source

pub fn apply_rotary_emb_qkv( - &self, - q: &Tensor, - k: &Tensor, - seqlen_offset: usize, -) -> Result<(Tensor, Tensor)>

Trait Implementations§

Source§

impl Clone for RotaryEmbedding

Source§

fn clone(&self) -> RotaryEmbedding

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RotaryEmbedding

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/pixtral/index.html b/network-poc/target-native/doc/candle_transformers/models/pixtral/index.html deleted file mode 100644 index e380535..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/pixtral/index.html +++ /dev/null @@ -1,28 +0,0 @@ -candle_transformers::models::pixtral - Rust

Module pixtral

Module pixtral 

Source
Expand description

Pixtral Language-Image Pre-Training

-

Pixtral is an architecture trained for multimodal learning -using images paired with text descriptions.

- -

§Example

- -
-
cargo run --profile=release-with-debug \
-   --features cuda \
-   --example pixtral -- \
-   --image candle-examples/examples/flux/assets/flux-robot.jpg
Describe the image.
-
-The image depicts a charming, rustic robot standing on a sandy beach at sunset.
-The robot has a vintage, steampunk aesthetic with visible gears and mechanical
-parts. It is holding a small lantern in one hand, which emits a warm glow, and
-its other arm is extended forward as if reaching out or guiding the way. The
-robot's body is adorned with the word "RUST" in bright orange letters, adding to
-its rustic theme.
-
-The background features a dramatic sky filled with clouds, illuminated by the
-setting sun, casting a golden hue over the scene. Gentle waves lap against the
-shore, creating a serene and picturesque atmosphere. The overall mood of the
-image is whimsical and nostalgic, evoking a sense of adventure and tranquility.

Re-exports§

pub use llava::Config;
pub use llava::Model;

Modules§

llava
vision_model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/pixtral/llava/index.html b/network-poc/target-native/doc/candle_transformers/models/pixtral/llava/index.html deleted file mode 100644 index e56c6c2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/pixtral/llava/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::pixtral::llava - Rust

Module llava

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/pixtral/llava/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/pixtral/llava/sidebar-items.js deleted file mode 100644 index 2ef622e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/pixtral/llava/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model","MultiModalProjector"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/pixtral/llava/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/pixtral/llava/struct.Config.html deleted file mode 100644 index 028596a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/pixtral/llava/struct.Config.html +++ /dev/null @@ -1,35 +0,0 @@ -Config in candle_transformers::models::pixtral::llava - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub projector_hidden_act: Activation,
-    pub text_config: Config,
-    pub vision_config: Config,
-    pub image_token_index: usize,
-    pub image_seq_length: usize,
-}

Fields§

§projector_hidden_act: Activation§text_config: Config§vision_config: Config§image_token_index: usize§image_seq_length: usize

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/pixtral/llava/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/pixtral/llava/struct.Model.html deleted file mode 100644 index 5a9aac8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/pixtral/llava/struct.Model.html +++ /dev/null @@ -1,34 +0,0 @@ -Model in candle_transformers::models::pixtral::llava - Rust

Model

Struct Model 

Source
pub struct Model {
-    pub multi_modal_projector: MultiModalProjector,
-    pub language_model: Model,
-    pub vision_tower: Model,
-    pub patch_size: usize,
-    pub dtype: DType,
-    pub pos: usize,
-}

Fields§

§multi_modal_projector: MultiModalProjector§language_model: Model§vision_tower: Model§patch_size: usize§dtype: DType§pos: usize

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn clear_kv_cache(&mut self)

Source

pub fn encode_image(&self, image: &Tensor) -> Result<Tensor>

Source

pub fn lm_forward(&mut self, input_ids: &Tensor) -> Result<Tensor>

Source

pub fn lm_forward_embeds(&mut self, xs: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/pixtral/llava/struct.MultiModalProjector.html b/network-poc/target-native/doc/candle_transformers/models/pixtral/llava/struct.MultiModalProjector.html deleted file mode 100644 index e1be034..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/pixtral/llava/struct.MultiModalProjector.html +++ /dev/null @@ -1,28 +0,0 @@ -MultiModalProjector in candle_transformers::models::pixtral::llava - Rust

MultiModalProjector

Struct MultiModalProjector 

Source
pub struct MultiModalProjector { /* private fields */ }

Implementations§

Source§

impl MultiModalProjector

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for MultiModalProjector

Source§

fn clone(&self) -> MultiModalProjector

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MultiModalProjector

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for MultiModalProjector

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/pixtral/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/pixtral/sidebar-items.js deleted file mode 100644 index 427b373..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/pixtral/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"mod":["llava","vision_model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/index.html b/network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/index.html deleted file mode 100644 index fd9083a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::pixtral::vision_model - Rust

Module vision_model

Module vision_model 

Source

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/struct.Config.html deleted file mode 100644 index 6f405d9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/struct.Config.html +++ /dev/null @@ -1,40 +0,0 @@ -Config in candle_transformers::models::pixtral::vision_model - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub hidden_size: usize,
-    pub num_channels: usize,
-    pub image_size: usize,
-    pub patch_size: usize,
-    pub rope_theta: f64,
-    pub intermediate_size: usize,
-    pub num_hidden_layers: usize,
-    pub head_dim: Option<usize>,
-    pub num_attention_heads: usize,
-    pub hidden_act: Activation,
-}

Fields§

§hidden_size: usize§num_channels: usize§image_size: usize§patch_size: usize§rope_theta: f64§intermediate_size: usize§num_hidden_layers: usize§head_dim: Option<usize>§num_attention_heads: usize§hidden_act: Activation

Implementations§

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/struct.Model.html deleted file mode 100644 index 18621f0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/pixtral/vision_model/struct.Model.html +++ /dev/null @@ -1,33 +0,0 @@ -Model in candle_transformers::models::pixtral::vision_model - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn position_ids_in_meshgrid( - &self, - num_patches_h: usize, - num_patches_w: usize, - device: &Device, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Model

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_blip/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_blip/index.html deleted file mode 100644 index e465954..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_blip/index.html +++ /dev/null @@ -1,16 +0,0 @@ -candle_transformers::models::quantized_blip - Rust

Module quantized_blip

Module quantized_blip 

Source
Expand description

BLIP model implementation with quantization support.

-

BLIP is a vision-language model for image understanding and generation tasks. -This implementation provides quantization for reduced memory and compute.

-

Key characteristics:

-
    -
  • Vision encoder using ViT architecture
  • -
  • Text decoder using BERT-style transformer
  • -
  • Cross-attention between vision and text features
  • -
  • Support for 8-bit quantization
  • -
-

References:

- -

Re-exports§

pub use crate::quantized_var_builder::VarBuilder;

Structs§

BlipForConditionalGeneration
VisionModel

Type Aliases§

Config
VisionConfig
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_blip/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_blip/sidebar-items.js deleted file mode 100644 index 133ae72..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_blip/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["BlipForConditionalGeneration","VisionModel"],"type":["Config","VisionConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_blip/struct.BlipForConditionalGeneration.html b/network-poc/target-native/doc/candle_transformers/models/quantized_blip/struct.BlipForConditionalGeneration.html deleted file mode 100644 index 579b18b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_blip/struct.BlipForConditionalGeneration.html +++ /dev/null @@ -1,27 +0,0 @@ -BlipForConditionalGeneration in candle_transformers::models::quantized_blip - Rust

BlipForConditionalGeneration

Struct BlipForConditionalGeneration 

Source
pub struct BlipForConditionalGeneration { /* private fields */ }

Implementations§

Source§

impl BlipForConditionalGeneration

Source

pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self>

Source

pub fn vision_model(&self) -> &VisionModel

Source

pub fn text_decoder(&mut self) -> &mut TextLMHeadModel

Source

pub fn reset_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for BlipForConditionalGeneration

Source§

fn clone(&self) -> BlipForConditionalGeneration

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for BlipForConditionalGeneration

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_blip/struct.VisionModel.html b/network-poc/target-native/doc/candle_transformers/models/quantized_blip/struct.VisionModel.html deleted file mode 100644 index 9f98159..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_blip/struct.VisionModel.html +++ /dev/null @@ -1,28 +0,0 @@ -VisionModel in candle_transformers::models::quantized_blip - Rust

VisionModel

Struct VisionModel 

Source
pub struct VisionModel { /* private fields */ }

Trait Implementations§

Source§

impl Clone for VisionModel

Source§

fn clone(&self) -> VisionModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VisionModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for VisionModel

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_blip/type.Config.html b/network-poc/target-native/doc/candle_transformers/models/quantized_blip/type.Config.html deleted file mode 100644 index 4f095f7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_blip/type.Config.html +++ /dev/null @@ -1,6 +0,0 @@ -Config in candle_transformers::models::quantized_blip - Rust

Config

Type Alias Config 

Source
pub type Config = Config;

Aliased Type§

pub struct Config {
-    pub text_config: Config,
-    pub vision_config: VisionConfig,
-    pub projection_dim: usize,
-    pub image_text_hidden_size: usize,
-}

Fields§

§text_config: Config§vision_config: VisionConfig§projection_dim: usize§image_text_hidden_size: usize
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_blip/type.VisionConfig.html b/network-poc/target-native/doc/candle_transformers/models/quantized_blip/type.VisionConfig.html deleted file mode 100644 index a2d33be..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_blip/type.VisionConfig.html +++ /dev/null @@ -1,11 +0,0 @@ -VisionConfig in candle_transformers::models::quantized_blip - Rust

VisionConfig

Type Alias VisionConfig 

Source
pub type VisionConfig = VisionConfig;

Aliased Type§

pub struct VisionConfig {
-    pub hidden_size: usize,
-    pub intermediate_size: usize,
-    pub projection_dim: usize,
-    pub num_hidden_layers: usize,
-    pub num_attention_heads: usize,
-    pub image_size: usize,
-    pub patch_size: usize,
-    pub hidden_act: Activation,
-    pub layer_norm_eps: f64,
-}

Fields§

§hidden_size: usize§intermediate_size: usize§projection_dim: usize§num_hidden_layers: usize§num_attention_heads: usize§image_size: usize§patch_size: usize§hidden_act: Activation§layer_norm_eps: f64
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/index.html deleted file mode 100644 index 95f140d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/index.html +++ /dev/null @@ -1,17 +0,0 @@ -candle_transformers::models::quantized_blip_text - Rust

Module quantized_blip_text

Module quantized_blip_text 

Source
Expand description

Quantized BLIP text module implementation.

-

Provides the text decoder portion of the BLIP model with 8-bit quantization. -Uses a BERT-style transformer architecture for text processing.

-

Key components:

-
    -
  • Text embeddings layer with position embeddings
  • -
  • Multi-head self attention layers
  • -
  • Cross-attention for vision-text fusion
  • -
  • Layer normalization and feed-forward layers
  • -
  • Quantized linear transformations
  • -
-

References:

- -

Re-exports§

pub use crate::quantized_var_builder::VarBuilder;

Structs§

TextLMHeadModel
TextPooler

Type Aliases§

Config
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/sidebar-items.js deleted file mode 100644 index 456a54f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["TextLMHeadModel","TextPooler"],"type":["Config"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/struct.TextLMHeadModel.html b/network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/struct.TextLMHeadModel.html deleted file mode 100644 index 164fa0a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/struct.TextLMHeadModel.html +++ /dev/null @@ -1,31 +0,0 @@ -TextLMHeadModel in candle_transformers::models::quantized_blip_text - Rust

TextLMHeadModel

Struct TextLMHeadModel 

Source
pub struct TextLMHeadModel { /* private fields */ }

Implementations§

Source§

impl TextLMHeadModel

Source

pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - encoder_hidden_states: &Tensor, -) -> Result<Tensor>

Source

pub fn reset_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for TextLMHeadModel

Source§

fn clone(&self) -> TextLMHeadModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TextLMHeadModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/struct.TextPooler.html b/network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/struct.TextPooler.html deleted file mode 100644 index 6cad1a7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/struct.TextPooler.html +++ /dev/null @@ -1,28 +0,0 @@ -TextPooler in candle_transformers::models::quantized_blip_text - Rust

TextPooler

Struct TextPooler 

Source
pub struct TextPooler { /* private fields */ }

Implementations§

Source§

impl TextPooler

Source

pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self>

Trait Implementations§

Source§

impl Clone for TextPooler

Source§

fn clone(&self) -> TextPooler

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TextPooler

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for TextPooler

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/type.Config.html b/network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/type.Config.html deleted file mode 100644 index cf58e24..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_blip_text/type.Config.html +++ /dev/null @@ -1,13 +0,0 @@ -Config in candle_transformers::models::quantized_blip_text - Rust

Config

Type Alias Config 

Source
pub type Config = Config;

Aliased Type§

pub struct Config {
-    pub vocab_size: usize,
-    pub hidden_size: usize,
-    pub encoder_hidden_size: usize,
-    pub intermediate_size: usize,
-    pub projection_dim: usize,
-    pub num_hidden_layers: usize,
-    pub num_attention_heads: usize,
-    pub max_position_embeddings: usize,
-    pub hidden_act: Activation,
-    pub layer_norm_eps: f64,
-    pub is_decoder: bool,
-}

Fields§

§vocab_size: usize§hidden_size: usize§encoder_hidden_size: usize§intermediate_size: usize§projection_dim: usize§num_hidden_layers: usize§num_attention_heads: usize§max_position_embeddings: usize§hidden_act: Activation§layer_norm_eps: f64§is_decoder: bool
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_llama/constant.MAX_SEQ_LEN.html b/network-poc/target-native/doc/candle_transformers/models/quantized_llama/constant.MAX_SEQ_LEN.html deleted file mode 100644 index 51b8bf3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_llama/constant.MAX_SEQ_LEN.html +++ /dev/null @@ -1 +0,0 @@ -MAX_SEQ_LEN in candle_transformers::models::quantized_llama - Rust

MAX_SEQ_LEN

Constant MAX_SEQ_LEN 

Source
pub const MAX_SEQ_LEN: usize = 4096;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_llama/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_llama/index.html deleted file mode 100644 index 086e42e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_llama/index.html +++ /dev/null @@ -1,27 +0,0 @@ -candle_transformers::models::quantized_llama - Rust

Module quantized_llama

Module quantized_llama 

Source
Expand description

Quantized llama model implementation.

-

This provides a quantized implementation of the llama language model architecture. -The model implements parameter efficient quantization for reduced memory usage -while maintaining model quality.

-

Key characteristics:

-
    -
  • -

    Transformer decoder architecture

    -
  • -
  • -

    Support for 2/3/4/8-bit quantization

    -
  • -
  • -

    Optimized memory usage through quantization

    -
  • -
  • -

    Configurable model sizes and parameter counts

    -
  • -
  • -

    💻 GH Link

    -
  • -
  • -

    📝 Paper

    -
  • -
-

-

Structs§

ModelWeights

Constants§

MAX_SEQ_LEN
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_llama/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_llama/sidebar-items.js deleted file mode 100644 index 30b4da5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_llama/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"constant":["MAX_SEQ_LEN"],"struct":["ModelWeights"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_llama/struct.ModelWeights.html b/network-poc/target-native/doc/candle_transformers/models/quantized_llama/struct.ModelWeights.html deleted file mode 100644 index 53b5462..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_llama/struct.ModelWeights.html +++ /dev/null @@ -1,31 +0,0 @@ -ModelWeights in candle_transformers::models::quantized_llama - Rust

ModelWeights

Struct ModelWeights 

Source
pub struct ModelWeights { /* private fields */ }

Implementations§

Source§

impl ModelWeights

Source

pub fn from_ggml(ct: Content, gqa: usize) -> Result<Self>

Source

pub fn from_gguf<R: Seek + Read>( - ct: Content, - reader: &mut R, - device: &Device, -) -> Result<Self>

Source

pub fn forward(&mut self, x: &Tensor, index_pos: usize) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for ModelWeights

Source§

fn clone(&self) -> ModelWeights

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ModelWeights

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_llama2_c/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_llama2_c/index.html deleted file mode 100644 index 10b5eef..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_llama2_c/index.html +++ /dev/null @@ -1,16 +0,0 @@ -candle_transformers::models::quantized_llama2_c - Rust

Module quantized_llama2_c

Module quantized_llama2_c 

Source
Expand description

Quantized Llama2 model implementation.

-

This provides an 8-bit quantized implementation of Meta’s LLaMA2 language model -for reduced memory usage and faster inference.

-

Key characteristics:

-
    -
  • Decoder-only transformer architecture
  • -
  • RoPE position embeddings
  • -
  • Grouped Query Attention
  • -
  • 8-bit quantization of weights
  • -
-

References:

- -

Re-exports§

pub use crate::quantized_var_builder::VarBuilder;

Structs§

QLlama
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_llama2_c/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_llama2_c/sidebar-items.js deleted file mode 100644 index 9f4788d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_llama2_c/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["QLlama"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_llama2_c/struct.QLlama.html b/network-poc/target-native/doc/candle_transformers/models/quantized_llama2_c/struct.QLlama.html deleted file mode 100644 index a7c7180..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_llama2_c/struct.QLlama.html +++ /dev/null @@ -1,35 +0,0 @@ -QLlama in candle_transformers::models::quantized_llama2_c - Rust

QLlama

Struct QLlama 

Source
pub struct QLlama {
-    pub config: Config,
-    /* private fields */
-}

Fields§

§config: Config

Implementations§

Source§

impl QLlama

Source

pub fn forward( - &self, - x: &Tensor, - index_pos: usize, - cache: &mut Cache, -) -> Result<Tensor>

Source

pub fn load(vb: VarBuilder, cfg: Config) -> Result<Self>

Trait Implementations§

Source§

impl Clone for QLlama

Source§

fn clone(&self) -> QLlama

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for QLlama

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for QLlama

§

impl !RefUnwindSafe for QLlama

§

impl Send for QLlama

§

impl Sync for QLlama

§

impl Unpin for QLlama

§

impl !UnwindSafe for QLlama

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/index.html deleted file mode 100644 index bf16c54..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/index.html +++ /dev/null @@ -1,16 +0,0 @@ -candle_transformers::models::quantized_metavoice - Rust

Module quantized_metavoice

Module quantized_metavoice 

Source
Expand description

Quantized MetaVoice model implementation.

-

MetaVoice is a conditional text-to-speech model based on a transformer architecture. -This implementation provides quantization for reduced memory and compute.

-

Key characteristics:

-
    -
  • Transformer-based autoregressive decoder
  • -
  • Speaker conditioning
  • -
  • Support for 8-bit quantization
  • -
  • Key-value caching for efficient inference
  • -
  • RMS normalization layers
  • -
-

References:

- -

Re-exports§

pub use crate::quantized_var_builder::VarBuilder;

Modules§

transformer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/sidebar-items.js deleted file mode 100644 index 12b25d1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"mod":["transformer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/transformer/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/transformer/index.html deleted file mode 100644 index 4fb6e8d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/transformer/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::quantized_metavoice::transformer - Rust

Module transformer

Module transformer 

Source

Structs§

Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/transformer/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/transformer/sidebar-items.js deleted file mode 100644 index 5f9d0bb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/transformer/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/transformer/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/transformer/struct.Model.html deleted file mode 100644 index 961bcba..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_metavoice/transformer/struct.Model.html +++ /dev/null @@ -1,32 +0,0 @@ -Model in candle_transformers::models::quantized_metavoice::transformer - Rust

Model

pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self>

Source

pub fn clear_kv_cache(&mut self)

Source

pub fn forward( - &mut self, - xs: &Tensor, - spk_emb: &Tensor, - pos: usize, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_mistral/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_mistral/index.html deleted file mode 100644 index e7596df..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_mistral/index.html +++ /dev/null @@ -1,17 +0,0 @@ -candle_transformers::models::quantized_mistral - Rust

Module quantized_mistral

Module quantized_mistral 

Source
Expand description

Mistral model implementation with quantization support.

-

Mistral is a large language model optimized for efficiency. -This implementation provides quantization for reduced memory and compute.

-

Key characteristics:

-
    -
  • Sliding window attention mechanism
  • -
  • Grouped query attention (GQA)
  • -
  • RMSNorm for layer normalization
  • -
  • Rotary positional embeddings (RoPE)
  • -
  • Support for 8-bit quantization
  • -
-

References:

- -

Re-exports§

pub use crate::quantized_var_builder::VarBuilder;
pub use crate::models::mistral::Config;

Structs§

Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_mistral/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_mistral/sidebar-items.js deleted file mode 100644 index 5f9d0bb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_mistral/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_mistral/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/quantized_mistral/struct.Model.html deleted file mode 100644 index ab477f7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_mistral/struct.Model.html +++ /dev/null @@ -1,31 +0,0 @@ -Model in candle_transformers::models::quantized_mistral - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_mixformer/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_mixformer/index.html deleted file mode 100644 index c7645a4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_mixformer/index.html +++ /dev/null @@ -1,12 +0,0 @@ -candle_transformers::models::quantized_mixformer - Rust

Module quantized_mixformer

Module quantized_mixformer 

Source
Expand description

Module containing quantized MixFormer model implementation.

-

MixFormer is an efficient transformer variant for text generation that uses -mixture-of-experts and parallel attention/feed-forward blocks. -This implementation provides quantization for reduced memory usage.

-

Key features:

-
    -
  • Parallel attention and feed-forward computation
  • -
  • Rotary positional embeddings
  • -
  • Optional key-value caching
  • -
  • Support for 8-bit quantization
  • -
-

Re-exports§

pub use crate::quantized_var_builder::VarBuilder;
pub use crate::models::mixformer::Config;

Structs§

MixFormerSequentialForCausalLM
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_mixformer/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_mixformer/sidebar-items.js deleted file mode 100644 index 500fcec..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_mixformer/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["MixFormerSequentialForCausalLM"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_mixformer/struct.MixFormerSequentialForCausalLM.html b/network-poc/target-native/doc/candle_transformers/models/quantized_mixformer/struct.MixFormerSequentialForCausalLM.html deleted file mode 100644 index 79309cf..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_mixformer/struct.MixFormerSequentialForCausalLM.html +++ /dev/null @@ -1,32 +0,0 @@ -MixFormerSequentialForCausalLM in candle_transformers::models::quantized_mixformer - Rust

MixFormerSequentialForCausalLM

Struct MixFormerSequentialForCausalLM 

Source
pub struct MixFormerSequentialForCausalLM { /* private fields */ }

Implementations§

Source§

impl MixFormerSequentialForCausalLM

Source

pub fn new_v2(cfg: &Config, vb: VarBuilder) -> Result<Self>

Source

pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self>

Source

pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor>

Source

pub fn forward_with_img( - &mut self, - bos_token: &Tensor, - xs: &Tensor, - img_embeds: &Tensor, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for MixFormerSequentialForCausalLM

Source§

fn clone(&self) -> MixFormerSequentialForCausalLM

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MixFormerSequentialForCausalLM

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_moondream/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_moondream/index.html deleted file mode 100644 index 09caa36..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_moondream/index.html +++ /dev/null @@ -1,15 +0,0 @@ -candle_transformers::models::quantized_moondream - Rust

Module quantized_moondream

Module quantized_moondream 

Source
Expand description

Implementation of a quantized Moondream vision language model.

-

Moondream is a lightweight vision-language model for image understanding and generation. -This module provides a quantized version for reduced memory usage and faster inference.

-

Key features:

-
    -
  • ViT-based vision encoder
  • -
  • Phi-2 text decoder model
  • -
  • Memory efficient 8-bit quantization
  • -
  • Optimized for efficient deployment
  • -
-

References:

- -

Structs§

Encoder
Model
VisionEncoder
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_moondream/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_moondream/sidebar-items.js deleted file mode 100644 index e3c14ba..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_moondream/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Encoder","Model","VisionEncoder"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_moondream/struct.Encoder.html b/network-poc/target-native/doc/candle_transformers/models/quantized_moondream/struct.Encoder.html deleted file mode 100644 index e6357e5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_moondream/struct.Encoder.html +++ /dev/null @@ -1,28 +0,0 @@ -Encoder in candle_transformers::models::quantized_moondream - Rust

Encoder

Struct Encoder 

Source
pub struct Encoder { /* private fields */ }

Trait Implementations§

Source§

impl Clone for Encoder

Source§

fn clone(&self) -> Encoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Encoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Encoder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_moondream/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/quantized_moondream/struct.Model.html deleted file mode 100644 index 46436ed..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_moondream/struct.Model.html +++ /dev/null @@ -1,28 +0,0 @@ -Model in candle_transformers::models::quantized_moondream - Rust

Model

pub struct Model {
-    pub text_model: MixFormerSequentialForCausalLM,
-    pub vision_encoder: VisionEncoder,
-}

Fields§

§text_model: MixFormerSequentialForCausalLM§vision_encoder: VisionEncoder

Implementations§

Source§

impl Model

Source

pub fn new(config: &Config, vb: VarBuilder) -> Result<Self>

Source

pub fn vision_encoder(&self) -> &VisionEncoder

Source

pub fn text_model(&mut self) -> &mut PhiModel

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_moondream/struct.VisionEncoder.html b/network-poc/target-native/doc/candle_transformers/models/quantized_moondream/struct.VisionEncoder.html deleted file mode 100644 index cdec15a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_moondream/struct.VisionEncoder.html +++ /dev/null @@ -1,28 +0,0 @@ -VisionEncoder in candle_transformers::models::quantized_moondream - Rust

VisionEncoder

Struct VisionEncoder 

Source
pub struct VisionEncoder { /* private fields */ }

Implementations§

Source§

impl VisionEncoder

Source

pub fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self>

Trait Implementations§

Source§

impl Clone for VisionEncoder

Source§

fn clone(&self) -> VisionEncoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VisionEncoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for VisionEncoder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_mpt/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_mpt/index.html deleted file mode 100644 index 6460b06..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_mpt/index.html +++ /dev/null @@ -1,16 +0,0 @@ -candle_transformers::models::quantized_mpt - Rust

Module quantized_mpt

Module quantized_mpt 

Source
Expand description

Quantized MPT model implementation.

-

MPT (MPT-7B) is a causal transformer model series optimized for code generation. -This implementation provides quantization for reduced memory and compute.

-

Key characteristics:

-
    -
  • Multi-Query Grouped Attention (MQA)
  • -
  • Support for KV-caching
  • -
  • Pre-computed ALiBi attention biases
  • -
  • Support for 8-bit quantization
  • -
-

References:

- -

Re-exports§

pub use crate::quantized_var_builder::VarBuilder;
pub use super::mpt::Config;

Structs§

Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_mpt/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_mpt/sidebar-items.js deleted file mode 100644 index 5f9d0bb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_mpt/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_mpt/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/quantized_mpt/struct.Model.html deleted file mode 100644 index 54345d1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_mpt/struct.Model.html +++ /dev/null @@ -1,27 +0,0 @@ -Model in candle_transformers::models::quantized_mpt - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self>

Source

pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_phi/constant.MAX_SEQ_LEN.html b/network-poc/target-native/doc/candle_transformers/models/quantized_phi/constant.MAX_SEQ_LEN.html deleted file mode 100644 index 4f646e2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_phi/constant.MAX_SEQ_LEN.html +++ /dev/null @@ -1 +0,0 @@ -MAX_SEQ_LEN in candle_transformers::models::quantized_phi - Rust

MAX_SEQ_LEN

Constant MAX_SEQ_LEN 

Source
pub const MAX_SEQ_LEN: usize = 4096;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_phi/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_phi/index.html deleted file mode 100644 index c6eeea6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_phi/index.html +++ /dev/null @@ -1,17 +0,0 @@ -candle_transformers::models::quantized_phi - Rust

Module quantized_phi

Module quantized_phi 

Source
Expand description

Phi2 model implementation with quantization support.

-

Phi2 is a 2.7B parameter language model using scaled-up Transformer decoder architecture. -This implementation provides quantization for reduced memory and compute usage.

-

Key characteristics:

-
    -
  • Partial attention with learned mixing to reduce quadratic costs
  • -
  • Layer reuse for improved inference efficiency
  • -
  • Linear transformations with scalar mixing
  • -
  • Rotary positional embeddings (RoPE)
  • -
  • Support for 8-bit quantization
  • -
-

References:

- -

Structs§

ModelWeights

Constants§

MAX_SEQ_LEN
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_phi/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_phi/sidebar-items.js deleted file mode 100644 index 30b4da5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_phi/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"constant":["MAX_SEQ_LEN"],"struct":["ModelWeights"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_phi/struct.ModelWeights.html b/network-poc/target-native/doc/candle_transformers/models/quantized_phi/struct.ModelWeights.html deleted file mode 100644 index b7bda20..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_phi/struct.ModelWeights.html +++ /dev/null @@ -1,31 +0,0 @@ -ModelWeights in candle_transformers::models::quantized_phi - Rust

ModelWeights

Struct ModelWeights 

Source
pub struct ModelWeights { /* private fields */ }

Implementations§

Source§

impl ModelWeights

Source

pub fn from_gguf<R: Seek + Read>( - ct: Content, - reader: &mut R, - device: &Device, -) -> Result<Self>

Source

pub fn forward(&mut self, xs: &Tensor, index_pos: usize) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for ModelWeights

Source§

fn clone(&self) -> ModelWeights

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ModelWeights

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_phi3/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_phi3/index.html deleted file mode 100644 index 0ccad25..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_phi3/index.html +++ /dev/null @@ -1,15 +0,0 @@ -candle_transformers::models::quantized_phi3 - Rust

Module quantized_phi3

Module quantized_phi3 

Source
Expand description

Phi3 model implementation with quantization support.

-

Phi3 is a language model intended for research purposes. -This implementation provides quantization for reduced memory usage.

-

Key characteristics:

-
    -
  • Multi-head attention
  • -
  • RMSNorm for layer normalization
  • -
  • Rotary positional embeddings (RoPE)
  • -
  • Support for quantization
  • -
-

References:

- -

Structs§

ModelWeights
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_phi3/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_phi3/sidebar-items.js deleted file mode 100644 index 4c37a1c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_phi3/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["ModelWeights"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_phi3/struct.ModelWeights.html b/network-poc/target-native/doc/candle_transformers/models/quantized_phi3/struct.ModelWeights.html deleted file mode 100644 index d5ca8af..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_phi3/struct.ModelWeights.html +++ /dev/null @@ -1,32 +0,0 @@ -ModelWeights in candle_transformers::models::quantized_phi3 - Rust

ModelWeights

Struct ModelWeights 

Source
pub struct ModelWeights { /* private fields */ }

Implementations§

Source§

impl ModelWeights

Source

pub fn from_gguf<R: Seek + Read>( - use_flash_attn: bool, - ct: Content, - reader: &mut R, - device: &Device, -) -> Result<Self>

Source

pub fn forward(&mut self, xs: &Tensor, index_pos: usize) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for ModelWeights

Source§

fn clone(&self) -> ModelWeights

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ModelWeights

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_qwen2/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_qwen2/index.html deleted file mode 100644 index c07b96e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_qwen2/index.html +++ /dev/null @@ -1,15 +0,0 @@ -candle_transformers::models::quantized_qwen2 - Rust

Module quantized_qwen2

Module quantized_qwen2 

Source
Expand description

Qwen2 model implementation with quantization support.

-

Qwen2 is a chat-optimized language model that supports 8-bit quantization -for reduced memory usage and faster inference.

-

Key characteristics:

-
    -
  • Group Query Attention (GQA)
  • -
  • RMSNorm for layer normalization
  • -
  • Rotary positional embeddings (RoPE)
  • -
  • Support for 8-bit quantization
  • -
-

References:

- -

Structs§

ModelWeights
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_qwen2/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_qwen2/sidebar-items.js deleted file mode 100644 index 4c37a1c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_qwen2/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["ModelWeights"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_qwen2/struct.ModelWeights.html b/network-poc/target-native/doc/candle_transformers/models/quantized_qwen2/struct.ModelWeights.html deleted file mode 100644 index ac1f197..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_qwen2/struct.ModelWeights.html +++ /dev/null @@ -1,29 +0,0 @@ -ModelWeights in candle_transformers::models::quantized_qwen2 - Rust

ModelWeights

Struct ModelWeights 

Source
pub struct ModelWeights { /* private fields */ }

Implementations§

Source§

impl ModelWeights

Source

pub fn from_gguf<R: Seek + Read>( - ct: Content, - reader: &mut R, - device: &Device, -) -> Result<Self>

Source

pub fn forward(&mut self, x: &Tensor, index_pos: usize) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_recurrent_gemma/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_recurrent_gemma/index.html deleted file mode 100644 index 92b682b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_recurrent_gemma/index.html +++ /dev/null @@ -1,17 +0,0 @@ -candle_transformers::models::quantized_recurrent_gemma - Rust

Module quantized_recurrent_gemma

Module quantized_recurrent_gemma 

Source
Expand description

Recurrent Gemma model implementation with quantization support.

-

Gemma is a large language model optimized for efficiency. -This implementation provides quantization for reduced memory and compute.

-

Key characteristics:

-
    -
  • Recurrent blocks with gated recurrent units
  • -
  • Convolution and attention blocks
  • -
  • RMSNorm for layer normalization
  • -
  • Rotary positional embeddings (RoPE)
  • -
  • Support for 8-bit quantization
  • -
-

References:

- -

Re-exports§

pub use crate::quantized_var_builder::VarBuilder;

Structs§

Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_recurrent_gemma/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_recurrent_gemma/sidebar-items.js deleted file mode 100644 index 5f9d0bb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_recurrent_gemma/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_recurrent_gemma/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/quantized_recurrent_gemma/struct.Model.html deleted file mode 100644 index bd293a3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_recurrent_gemma/struct.Model.html +++ /dev/null @@ -1,27 +0,0 @@ -Model in candle_transformers::models::quantized_recurrent_gemma - Rust

Model

pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self>

Source

pub fn forward(&mut self, xs: &Tensor, pos: usize) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v5/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v5/index.html deleted file mode 100644 index 03b8ea7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v5/index.html +++ /dev/null @@ -1,17 +0,0 @@ -candle_transformers::models::quantized_rwkv_v5 - Rust

Module quantized_rwkv_v5

Module quantized_rwkv_v5 

Source
Expand description

RWKV v5 model implementation with quantization support.

-

RWKV v5 is an attention-free language model optimized for efficiency. -This implementation provides quantization for reduced memory and compute.

-

Key characteristics:

-
    -
  • Linear attention mechanism
  • -
  • GroupNorm layer normalization
  • -
  • Time-mixing layers
  • -
  • State-based sequential processing
  • -
  • Support for 8-bit quantization
  • -
-

References:

- -

Re-exports§

pub use crate::models::rwkv_v5::Config;
pub use crate::models::rwkv_v5::State;
pub use crate::models::rwkv_v5::Tokenizer;

Structs§

Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v5/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v5/sidebar-items.js deleted file mode 100644 index 5f9d0bb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v5/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v5/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v5/struct.Model.html deleted file mode 100644 index 385aab6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v5/struct.Model.html +++ /dev/null @@ -1,27 +0,0 @@ -Model in candle_transformers::models::quantized_rwkv_v5 - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v6/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v6/index.html deleted file mode 100644 index e9e4711..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v6/index.html +++ /dev/null @@ -1,18 +0,0 @@ -candle_transformers::models::quantized_rwkv_v6 - Rust

Module quantized_rwkv_v6

Module quantized_rwkv_v6 

Source
Expand description

RWKV v6 model implementation with quantization support.

-

RWKV is a linear attention model that combines the efficiency of RNNs -with the parallelizable training of Transformers. Version 6 builds on previous -versions with further optimizations.

-

Key characteristics:

-
    -
  • Linear attention mechanism
  • -
  • Time mixing layers
  • -
  • Channel mixing layers
  • -
  • RMSNorm for normalization
  • -
  • Support for 8-bit quantization
  • -
-

References:

- -

Re-exports§

pub use crate::models::rwkv_v5::Config;
pub use crate::models::rwkv_v5::State;
pub use crate::models::rwkv_v5::Tokenizer;

Structs§

Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v6/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v6/sidebar-items.js deleted file mode 100644 index 5f9d0bb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v6/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v6/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v6/struct.Model.html deleted file mode 100644 index 42cbd9d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_rwkv_v6/struct.Model.html +++ /dev/null @@ -1,27 +0,0 @@ -Model in candle_transformers::models::quantized_rwkv_v6 - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_stable_lm/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_stable_lm/index.html deleted file mode 100644 index f105994..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_stable_lm/index.html +++ /dev/null @@ -1,15 +0,0 @@ -candle_transformers::models::quantized_stable_lm - Rust

Module quantized_stable_lm

Module quantized_stable_lm 

Source
Expand description

Module for quantized StableLM implementation.

-

StableLM is a series of open-source large language models -optimized for performance and stability. This implementation -provides quantization support for efficient model deployment.

-

Key characteristics:

-
    -
  • RMSNorm for layer normalization
  • -
  • Rotary positional embeddings (RoPE)
  • -
  • Support for 8-bit quantization
  • -
-

References:

- -

Re-exports§

pub use crate::quantized_var_builder::VarBuilder;
pub use crate::models::stable_lm::Config;

Structs§

Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_stable_lm/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_stable_lm/sidebar-items.js deleted file mode 100644 index 5f9d0bb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_stable_lm/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_stable_lm/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/quantized_stable_lm/struct.Model.html deleted file mode 100644 index f0031a7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_stable_lm/struct.Model.html +++ /dev/null @@ -1,31 +0,0 @@ -Model in candle_transformers::models::quantized_stable_lm - Rust

Model

pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_t5/index.html b/network-poc/target-native/doc/candle_transformers/models/quantized_t5/index.html deleted file mode 100644 index c7a6045..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_t5/index.html +++ /dev/null @@ -1,18 +0,0 @@ -candle_transformers::models::quantized_t5 - Rust

Module quantized_t5

Module quantized_t5 

Source
Expand description

T5 model implementation with quantization support.

-

T5 is an encoder-decoder model pre-trained on a multi-task mixture of supervised -and unsupervised tasks. This implementation provides quantization for reduced -memory and compute requirements.

-

Key characteristics:

-
    -
  • Encoder-decoder architecture
  • -
  • Layer normalization
  • -
  • Relative positional encodings
  • -
  • Support for 8-bit quantization
  • -
-

References:

- -

Re-exports§

pub use crate::quantized_var_builder::VarBuilder;

Structs§

Config
T5EncoderModel
T5ForConditionalGeneration
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_t5/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/quantized_t5/sidebar-items.js deleted file mode 100644 index f8bf3d0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_t5/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","T5EncoderModel","T5ForConditionalGeneration"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_t5/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/quantized_t5/struct.Config.html deleted file mode 100644 index fae24aa..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_t5/struct.Config.html +++ /dev/null @@ -1,37 +0,0 @@ -Config in candle_transformers::models::quantized_t5 - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub feed_forward_proj: ActivationWithOptionalGating,
-    pub use_cache: bool,
-    pub pad_token_id: usize,
-    pub eos_token_id: usize,
-    pub decoder_start_token_id: Option<usize>,
-    /* private fields */
-}

Fields§

§feed_forward_proj: ActivationWithOptionalGating§use_cache: bool§pad_token_id: usize§eos_token_id: usize§decoder_start_token_id: Option<usize>

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Config

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_t5/struct.T5EncoderModel.html b/network-poc/target-native/doc/candle_transformers/models/quantized_t5/struct.T5EncoderModel.html deleted file mode 100644 index 77add7c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_t5/struct.T5EncoderModel.html +++ /dev/null @@ -1,27 +0,0 @@ -T5EncoderModel in candle_transformers::models::quantized_t5 - Rust

T5EncoderModel

Struct T5EncoderModel 

Source
pub struct T5EncoderModel { /* private fields */ }

Implementations§

Source§

impl T5EncoderModel

Source

pub fn load(vb: VarBuilder, cfg: &Config) -> Result<Self>

Source

pub fn forward(&mut self, input_ids: &Tensor) -> Result<Tensor>

Source

pub fn device(&self) -> &Device

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for T5EncoderModel

Source§

fn clone(&self) -> T5EncoderModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for T5EncoderModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/quantized_t5/struct.T5ForConditionalGeneration.html b/network-poc/target-native/doc/candle_transformers/models/quantized_t5/struct.T5ForConditionalGeneration.html deleted file mode 100644 index c81b8ee..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/quantized_t5/struct.T5ForConditionalGeneration.html +++ /dev/null @@ -1,35 +0,0 @@ -T5ForConditionalGeneration in candle_transformers::models::quantized_t5 - Rust

T5ForConditionalGeneration

Struct T5ForConditionalGeneration 

Source
pub struct T5ForConditionalGeneration { /* private fields */ }

Implementations§

Source§

impl T5ForConditionalGeneration

Source

pub fn load(vb: VarBuilder, cfg: &Config) -> Result<Self>

Source

pub fn encode(&mut self, input_ids: &Tensor) -> Result<Tensor>

Source

pub fn decode( - &mut self, - decoder_input_ids: &Tensor, - encoder_output: &Tensor, -) -> Result<Tensor>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - decoder_input_ids: &Tensor, -) -> Result<Tensor>

Source

pub fn device(&self) -> &Device

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for T5ForConditionalGeneration

Source§

fn clone(&self) -> T5ForConditionalGeneration

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for T5ForConditionalGeneration

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/qwen2/index.html b/network-poc/target-native/doc/candle_transformers/models/qwen2/index.html deleted file mode 100644 index 6ff3449..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/qwen2/index.html +++ /dev/null @@ -1,16 +0,0 @@ -candle_transformers::models::qwen2 - Rust

Module qwen2

Module qwen2 

Source
Expand description

Qwen2 model implementation with quantization support.

-

Qwen2 is a large language model from Alibaba optimized for efficiency. -This implementation provides quantization for reduced memory and compute.

-

Key characteristics:

-
    -
  • Streaming decode support
  • -
  • Grouped query attention (GQA)
  • -
  • RMSNorm for layer normalization
  • -
  • Rotary positional embeddings (RoPE)
  • -
  • Support for 8-bit quantization
  • -
-

References:

- -

Structs§

Config
Model
ModelForCausalLM
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/qwen2/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/qwen2/sidebar-items.js deleted file mode 100644 index 14f4caa..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/qwen2/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model","ModelForCausalLM"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/qwen2/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/qwen2/struct.Config.html deleted file mode 100644 index d0f29a7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/qwen2/struct.Config.html +++ /dev/null @@ -1,45 +0,0 @@ -Config in candle_transformers::models::qwen2 - Rust

Config

Struct Config 

Source
pub struct Config {
Show 14 fields - pub vocab_size: usize, - pub hidden_size: usize, - pub intermediate_size: usize, - pub num_hidden_layers: usize, - pub num_attention_heads: usize, - pub num_key_value_heads: usize, - pub max_position_embeddings: usize, - pub sliding_window: usize, - pub max_window_layers: usize, - pub tie_word_embeddings: bool, - pub rope_theta: f64, - pub rms_norm_eps: f64, - pub use_sliding_window: bool, - pub hidden_act: Activation, -
}

Fields§

§vocab_size: usize§hidden_size: usize§intermediate_size: usize§num_hidden_layers: usize§num_attention_heads: usize§num_key_value_heads: usize§max_position_embeddings: usize§sliding_window: usize§max_window_layers: usize§tie_word_embeddings: bool§rope_theta: f64§rms_norm_eps: f64§use_sliding_window: bool§hidden_act: Activation

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/qwen2/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/qwen2/struct.Model.html deleted file mode 100644 index 12d5781..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/qwen2/struct.Model.html +++ /dev/null @@ -1,32 +0,0 @@ -Model in candle_transformers::models::qwen2 - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, - attn_mask: Option<&Tensor>, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/qwen2/struct.ModelForCausalLM.html b/network-poc/target-native/doc/candle_transformers/models/qwen2/struct.ModelForCausalLM.html deleted file mode 100644 index eb51bc6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/qwen2/struct.ModelForCausalLM.html +++ /dev/null @@ -1,31 +0,0 @@ -ModelForCausalLM in candle_transformers::models::qwen2 - Rust

ModelForCausalLM

Struct ModelForCausalLM 

Source
pub struct ModelForCausalLM { /* private fields */ }

Implementations§

Source§

impl ModelForCausalLM

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for ModelForCausalLM

Source§

fn clone(&self) -> ModelForCausalLM

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ModelForCausalLM

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/qwen2_moe/index.html b/network-poc/target-native/doc/candle_transformers/models/qwen2_moe/index.html deleted file mode 100644 index c893f85..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/qwen2_moe/index.html +++ /dev/null @@ -1,18 +0,0 @@ -candle_transformers::models::qwen2_moe - Rust

Module qwen2_moe

Module qwen2_moe 

Source
Expand description

Qwen2 model implementation with Mixture of Experts support.

-

Qwen2 is a large language model using sparse Mixture of Experts (MoE). -This implementation provides support for sparsely activated MoE layers.

-

Key characteristics:

-
    -
  • Mixture of Experts architecture
  • -
  • Sparse expert activation
  • -
  • Shared expert routing mechanism
  • -
  • Grouped query attention (GQA)
  • -
  • RMSNorm for layer normalization
  • -
  • Rotary positional embeddings (RoPE)
  • -
-

References:

- -

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/qwen2_moe/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/qwen2_moe/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/qwen2_moe/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/qwen2_moe/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/qwen2_moe/struct.Config.html deleted file mode 100644 index eb3a9f1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/qwen2_moe/struct.Config.html +++ /dev/null @@ -1,51 +0,0 @@ -Config in candle_transformers::models::qwen2_moe - Rust

Config

Struct Config 

Source
pub struct Config {
Show 20 fields - pub vocab_size: usize, - pub hidden_size: usize, - pub intermediate_size: usize, - pub num_hidden_layers: usize, - pub num_attention_heads: usize, - pub num_key_value_heads: usize, - pub max_position_embeddings: usize, - pub sliding_window: usize, - pub max_window_layers: usize, - pub tie_word_embeddings: bool, - pub rope_theta: f64, - pub rms_norm_eps: f64, - pub use_sliding_window: bool, - pub hidden_act: Activation, - pub decoder_sparse_step: usize, - pub moe_intermediate_size: usize, - pub shared_expert_intermediate_size: usize, - pub num_experts_per_tok: usize, - pub num_experts: usize, - pub norm_topk_prob: bool, -
}

Fields§

§vocab_size: usize§hidden_size: usize§intermediate_size: usize§num_hidden_layers: usize§num_attention_heads: usize§num_key_value_heads: usize§max_position_embeddings: usize§sliding_window: usize§max_window_layers: usize§tie_word_embeddings: bool§rope_theta: f64§rms_norm_eps: f64§use_sliding_window: bool§hidden_act: Activation§decoder_sparse_step: usize§moe_intermediate_size: usize§shared_expert_intermediate_size: usize§num_experts_per_tok: usize§num_experts: usize§norm_topk_prob: bool

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/qwen2_moe/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/qwen2_moe/struct.Model.html deleted file mode 100644 index 8c4d148..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/qwen2_moe/struct.Model.html +++ /dev/null @@ -1,31 +0,0 @@ -Model in candle_transformers::models::qwen2_moe - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/enum.TemporalBlockType.html b/network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/enum.TemporalBlockType.html deleted file mode 100644 index a318a08..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/enum.TemporalBlockType.html +++ /dev/null @@ -1,32 +0,0 @@ -TemporalBlockType in candle_transformers::models::recurrent_gemma - Rust

TemporalBlockType

Enum TemporalBlockType 

Source
pub enum TemporalBlockType {
-    Attention,
-    Recurrent,
-}

Variants§

§

Attention

§

Recurrent

Trait Implementations§

Source§

impl Clone for TemporalBlockType

Source§

fn clone(&self) -> TemporalBlockType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TemporalBlockType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for TemporalBlockType

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Copy for TemporalBlockType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/index.html b/network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/index.html deleted file mode 100644 index bebad87..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/index.html +++ /dev/null @@ -1,19 +0,0 @@ -candle_transformers::models::recurrent_gemma - Rust

Module recurrent_gemma

Module recurrent_gemma 

Source
Expand description

Recurrent Gemma model implementation

-

Recurrent Gemma is a version of the Gemma language model that incorporates recurrent memory. -This allows the model to maintain state between predictions and have longer-range memory.

-

Key characteristics:

-
    -
  • Real-gated linear recurrent units (RGLRU)
  • -
  • 1D convolution for local context
  • -
  • RMSNorm for layer normalization
  • -
  • Rotary positional embeddings (RoPE)
  • -
  • Grouped query attention
  • -
-

References:

- -

This implementation is based on the python version from huggingface/transformers. -https://github.com/huggingface/transformers/blob/b109257f4fb8b1166e7c53cc5418632014ed53a5/src/transformers/models/recurrent_gemma/modeling_recurrent_gemma.py#L2

-

Structs§

Config
Model

Enums§

TemporalBlockType
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/sidebar-items.js deleted file mode 100644 index 8583d0b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["TemporalBlockType"],"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/struct.Config.html deleted file mode 100644 index 4ca6745..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/struct.Config.html +++ /dev/null @@ -1,48 +0,0 @@ -Config in candle_transformers::models::recurrent_gemma - Rust

Config

Struct Config 

Source
pub struct Config {
Show 18 fields - pub num_hidden_layers: usize, - pub vocab_size: usize, - pub hidden_size: usize, - pub intermediate_size: usize, - pub num_attention_heads: usize, - pub num_key_value_heads: usize, - pub head_dim: usize, - pub lru_width: Option<usize>, - pub attention_window_size: usize, - pub conv1d_width: usize, - pub logits_soft_cap: f64, - pub hidden_activation: Activation, - pub partial_rotary_factor: f64, - pub rms_norm_eps: f64, - pub rope_theta: f64, - pub block_types: Vec<TemporalBlockType>, - pub attention_bias: bool, - pub max_seq_len: usize, -
}

Fields§

§num_hidden_layers: usize§vocab_size: usize§hidden_size: usize§intermediate_size: usize§num_attention_heads: usize§num_key_value_heads: usize§head_dim: usize§lru_width: Option<usize>§attention_window_size: usize§conv1d_width: usize§logits_soft_cap: f64§hidden_activation: Activation§partial_rotary_factor: f64§rms_norm_eps: f64§rope_theta: f64§block_types: Vec<TemporalBlockType>§attention_bias: bool§max_seq_len: usize

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/struct.Model.html deleted file mode 100644 index 6c1dcd6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/recurrent_gemma/struct.Model.html +++ /dev/null @@ -1,27 +0,0 @@ -Model in candle_transformers::models::recurrent_gemma - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward(&mut self, xs: &Tensor, pos: usize) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/repvgg/fn.repvgg.html b/network-poc/target-native/doc/candle_transformers/models/repvgg/fn.repvgg.html deleted file mode 100644 index 2367ac4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/repvgg/fn.repvgg.html +++ /dev/null @@ -1,5 +0,0 @@ -repvgg in candle_transformers::models::repvgg - Rust

repvgg

Function repvgg 

Source
pub fn repvgg(
-    cfg: &Config,
-    nclasses: usize,
-    vb: VarBuilder<'_>,
-) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/repvgg/fn.repvgg_no_final_layer.html b/network-poc/target-native/doc/candle_transformers/models/repvgg/fn.repvgg_no_final_layer.html deleted file mode 100644 index 0c716df..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/repvgg/fn.repvgg_no_final_layer.html +++ /dev/null @@ -1,4 +0,0 @@ -repvgg_no_final_layer in candle_transformers::models::repvgg - Rust

repvgg_no_final_layer

Function repvgg_no_final_layer 

Source
pub fn repvgg_no_final_layer(
-    cfg: &Config,
-    vb: VarBuilder<'_>,
-) -> Result<Func<'static>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/repvgg/index.html b/network-poc/target-native/doc/candle_transformers/models/repvgg/index.html deleted file mode 100644 index c1ba2b6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/repvgg/index.html +++ /dev/null @@ -1,14 +0,0 @@ -candle_transformers::models::repvgg - Rust

Module repvgg

Module repvgg 

Source
Expand description

RepVGG inference implementation

-

Key characteristics:

-
    -
  • Efficient inference architecture through structural reparameterization
  • -
  • Single 3x3 conv layer after fusing 3x3 branch, 1x1 branch and identity branch
  • -
  • Different configurations including a0-a2, b0-b3 and variants with group convolutions
  • -
  • High accuracy with VGG-like plain architecture and training
  • -
-

References:

- -

Structs§

Config

Functions§

repvgg
repvgg_no_final_layer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/repvgg/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/repvgg/sidebar-items.js deleted file mode 100644 index 1e9d67a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/repvgg/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["repvgg","repvgg_no_final_layer"],"struct":["Config"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/repvgg/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/repvgg/struct.Config.html deleted file mode 100644 index 1a8d8ea..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/repvgg/struct.Config.html +++ /dev/null @@ -1,27 +0,0 @@ -Config in candle_transformers::models::repvgg - Rust

Config

Struct Config 

Source
pub struct Config { /* private fields */ }

Implementations§

Source§

impl Config

Source

pub fn a0() -> Self

Source

pub fn a1() -> Self

Source

pub fn a2() -> Self

Source

pub fn b0() -> Self

Source

pub fn b1() -> Self

Source

pub fn b2() -> Self

Source

pub fn b3() -> Self

Source

pub fn b1g4() -> Self

Source

pub fn b2g4() -> Self

Source

pub fn b3g4() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet101.html b/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet101.html deleted file mode 100644 index 7486807..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet101.html +++ /dev/null @@ -1 +0,0 @@ -resnet101 in candle_transformers::models::resnet - Rust

resnet101

Function resnet101 

Source
pub fn resnet101(num_classes: usize, vb: VarBuilder<'_>) -> Result<Func<'_>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet101_no_final_layer.html b/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet101_no_final_layer.html deleted file mode 100644 index 4aa708e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet101_no_final_layer.html +++ /dev/null @@ -1 +0,0 @@ -resnet101_no_final_layer in candle_transformers::models::resnet - Rust

resnet101_no_final_layer

Function resnet101_no_final_layer 

Source
pub fn resnet101_no_final_layer(vb: VarBuilder<'_>) -> Result<Func<'_>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet152.html b/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet152.html deleted file mode 100644 index 63e6d4d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet152.html +++ /dev/null @@ -1 +0,0 @@ -resnet152 in candle_transformers::models::resnet - Rust

resnet152

Function resnet152 

Source
pub fn resnet152(num_classes: usize, vb: VarBuilder<'_>) -> Result<Func<'_>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet152_no_final_layer.html b/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet152_no_final_layer.html deleted file mode 100644 index 35868e5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet152_no_final_layer.html +++ /dev/null @@ -1 +0,0 @@ -resnet152_no_final_layer in candle_transformers::models::resnet - Rust

resnet152_no_final_layer

Function resnet152_no_final_layer 

Source
pub fn resnet152_no_final_layer(vb: VarBuilder<'_>) -> Result<Func<'_>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet18.html b/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet18.html deleted file mode 100644 index 619898e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet18.html +++ /dev/null @@ -1,2 +0,0 @@ -resnet18 in candle_transformers::models::resnet - Rust

resnet18

Function resnet18 

Source
pub fn resnet18(num_classes: usize, vb: VarBuilder<'_>) -> Result<Func<'_>>
Expand description

Creates a ResNet-18 model.

-
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet18_no_final_layer.html b/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet18_no_final_layer.html deleted file mode 100644 index 767be6e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet18_no_final_layer.html +++ /dev/null @@ -1 +0,0 @@ -resnet18_no_final_layer in candle_transformers::models::resnet - Rust

resnet18_no_final_layer

Function resnet18_no_final_layer 

Source
pub fn resnet18_no_final_layer(vb: VarBuilder<'_>) -> Result<Func<'_>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet34.html b/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet34.html deleted file mode 100644 index bc7a466..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet34.html +++ /dev/null @@ -1,2 +0,0 @@ -resnet34 in candle_transformers::models::resnet - Rust

resnet34

Function resnet34 

Source
pub fn resnet34(num_classes: usize, vb: VarBuilder<'_>) -> Result<Func<'_>>
Expand description

Creates a ResNet-34 model.

-
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet34_no_final_layer.html b/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet34_no_final_layer.html deleted file mode 100644 index ae9cbd4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet34_no_final_layer.html +++ /dev/null @@ -1 +0,0 @@ -resnet34_no_final_layer in candle_transformers::models::resnet - Rust

resnet34_no_final_layer

Function resnet34_no_final_layer 

Source
pub fn resnet34_no_final_layer(vb: VarBuilder<'_>) -> Result<Func<'_>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet50.html b/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet50.html deleted file mode 100644 index 0889f11..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet50.html +++ /dev/null @@ -1 +0,0 @@ -resnet50 in candle_transformers::models::resnet - Rust

resnet50

Function resnet50 

Source
pub fn resnet50(num_classes: usize, vb: VarBuilder<'_>) -> Result<Func<'_>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet50_no_final_layer.html b/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet50_no_final_layer.html deleted file mode 100644 index 233fac3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/resnet/fn.resnet50_no_final_layer.html +++ /dev/null @@ -1 +0,0 @@ -resnet50_no_final_layer in candle_transformers::models::resnet - Rust

resnet50_no_final_layer

Function resnet50_no_final_layer 

Source
pub fn resnet50_no_final_layer(vb: VarBuilder<'_>) -> Result<Func<'_>>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/resnet/index.html b/network-poc/target-native/doc/candle_transformers/models/resnet/index.html deleted file mode 100644 index 1f380b8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/resnet/index.html +++ /dev/null @@ -1,8 +0,0 @@ -candle_transformers::models::resnet - Rust

Module resnet

Module resnet 

Source
Expand description

§ResNet Implementation

-

Implementation of ResNet architectures as described in the paper:

-

§Reference

-

Deep Residual Learning for Image Recognition -He et al. (2015)

-

This paper introduced ResNet, a deep neural network architecture that utilizes -skip connections (“residual connections”) to enable training of very deep networks.

-

Functions§

resnet18
Creates a ResNet-18 model.
resnet34
Creates a ResNet-34 model.
resnet50
resnet18_no_final_layer
resnet34_no_final_layer
resnet50_no_final_layer
resnet101
resnet152
resnet101_no_final_layer
resnet152_no_final_layer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/resnet/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/resnet/sidebar-items.js deleted file mode 100644 index 9e74afa..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/resnet/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["resnet101","resnet101_no_final_layer","resnet152","resnet152_no_final_layer","resnet18","resnet18_no_final_layer","resnet34","resnet34_no_final_layer","resnet50","resnet50_no_final_layer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/index.html b/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/index.html deleted file mode 100644 index f6cdddb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/index.html +++ /dev/null @@ -1,28 +0,0 @@ -candle_transformers::models::rwkv_v5 - Rust

Module rwkv_v5

Module rwkv_v5 

Source
Expand description

RWKV v5 model implementation.

-

The RWKV model is a recurrent neural network model -with performance on par with transformer architectures. Several variants are -available, candle implements the v5 and v6 versions and can be used with -Eagle 7B(blog post).

-

Key characteristics:

-
    -
  • Time-mix attention mechanism
  • -
  • Channel-mix feed-forward network
  • -
  • Linear attention
  • -
  • Group normalization
  • -
  • Token shift mechanism
  • -
-

References:

- -

§Example

cargo run --example rwkv --release -- \
-  --prompt "The smallest prime is "
-
-> avx: true, neon: false, simd128: false, f16c: true
-> temp: 0.00 repeat-penalty: 1.10 repeat-last-n: 64
-> The smallest prime is ϕ(2) = 2.
-> The smallest composite is ϕ(3) = 3.
-> The smallest perfect number is ϕ(5) = 5.
-> The smallest perfect square is ϕ(4) = 4.
-> The smallest perfect cube is ϕ(6) = 6.

Structs§

Config
Model
State
StatePerLayer
Tokenizer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/sidebar-items.js deleted file mode 100644 index 25c4a29..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model","State","StatePerLayer","Tokenizer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.Config.html deleted file mode 100644 index 1b98730..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.Config.html +++ /dev/null @@ -1,39 +0,0 @@ -Config in candle_transformers::models::rwkv_v5 - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub vocab_size: usize,
-    pub hidden_size: usize,
-    pub num_hidden_layers: usize,
-    pub attention_hidden_size: usize,
-    pub num_attention_heads: usize,
-    pub head_size: usize,
-    pub intermediate_size: Option<usize>,
-    pub layer_norm_epsilon: f64,
-    pub rescale_every: usize,
-}

Fields§

§vocab_size: usize§hidden_size: usize§num_hidden_layers: usize§attention_hidden_size: usize§num_attention_heads: usize§head_size: usize§intermediate_size: Option<usize>§layer_norm_epsilon: f64§rescale_every: usize

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.Model.html deleted file mode 100644 index 2159ff0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.Model.html +++ /dev/null @@ -1,27 +0,0 @@ -Model in candle_transformers::models::rwkv_v5 - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.State.html b/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.State.html deleted file mode 100644 index 2000d95..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.State.html +++ /dev/null @@ -1,28 +0,0 @@ -State in candle_transformers::models::rwkv_v5 - Rust

State

Struct State 

Source
pub struct State {
-    pub per_layer: Vec<StatePerLayer>,
-    pub pos: usize,
-}

Fields§

§per_layer: Vec<StatePerLayer>§pos: usize

Implementations§

Source§

impl State

Source

pub fn new(batch_size: usize, cfg: &Config, dev: &Device) -> Result<Self>

Auto Trait Implementations§

§

impl Freeze for State

§

impl !RefUnwindSafe for State

§

impl Send for State

§

impl Sync for State

§

impl Unpin for State

§

impl !UnwindSafe for State

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.StatePerLayer.html b/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.StatePerLayer.html deleted file mode 100644 index d43e378..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.StatePerLayer.html +++ /dev/null @@ -1,29 +0,0 @@ -StatePerLayer in candle_transformers::models::rwkv_v5 - Rust

StatePerLayer

Struct StatePerLayer 

Source
pub struct StatePerLayer {
-    pub extract_key_value: Tensor,
-    pub linear_attention: Tensor,
-    pub feed_forward: Tensor,
-}

Fields§

§extract_key_value: Tensor§linear_attention: Tensor§feed_forward: Tensor

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.Tokenizer.html b/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.Tokenizer.html deleted file mode 100644 index 0a30d8a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/rwkv_v5/struct.Tokenizer.html +++ /dev/null @@ -1,25 +0,0 @@ -Tokenizer in candle_transformers::models::rwkv_v5 - Rust

Tokenizer

Struct Tokenizer 

Source
pub struct Tokenizer { /* private fields */ }

Implementations§

Source§

impl Tokenizer

Source

pub fn new<P: AsRef<Path>>(p: P) -> Result<Self>

Source

pub fn decode_bytes(&self, tokens: &[u32]) -> Vec<u8>

Source

pub fn decode(&self, tokens: &[u32]) -> Result<String>

Source

pub fn encode_bytes(&self, bytes: &[u8]) -> Result<Vec<u32>>

Source

pub fn encode(&self, str: &str) -> Result<Vec<u32>>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/rwkv_v6/index.html b/network-poc/target-native/doc/candle_transformers/models/rwkv_v6/index.html deleted file mode 100644 index 8060b49..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/rwkv_v6/index.html +++ /dev/null @@ -1,23 +0,0 @@ -candle_transformers::models::rwkv_v6 - Rust

Module rwkv_v6

Module rwkv_v6 

Source
Expand description

RWKV v6 model implementation.

-

The RWKV model is a recurrent neural network model -with performance on par with transformer architectures. Several variants are -available, candle implements the v5 and v6 versions and can be used with -Eagle 7B(blog post).

-

Key characteristics:

-
    -
  • Linear attention mechanism
  • -
  • Time-mixing for temporal dependencies
  • -
  • Group normalization
  • -
  • Feed forward gating
  • -
  • State recycling for efficient inference
  • -
-

§Example

cargo run --example rwkv --release -- \
-  --prompt "The smallest prime is "
-
-> avx: true, neon: false, simd128: false, f16c: true
-> temp: 0.00 repeat-penalty: 1.10 repeat-last-n: 64
-> The smallest prime is ϕ(2) = 2.
-> The smallest composite is ϕ(3) = 3.
-> The smallest perfect number is ϕ(5) = 5.
-> The smallest perfect square is ϕ(4) = 4.
-> The smallest perfect cube is ϕ(6) = 6.

Re-exports§

pub use crate::models::rwkv_v5::Config;
pub use crate::models::rwkv_v5::State;
pub use crate::models::rwkv_v5::Tokenizer;

Structs§

Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/rwkv_v6/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/rwkv_v6/sidebar-items.js deleted file mode 100644 index 5f9d0bb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/rwkv_v6/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/rwkv_v6/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/rwkv_v6/struct.Model.html deleted file mode 100644 index b0eaa86..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/rwkv_v6/struct.Model.html +++ /dev/null @@ -1,27 +0,0 @@ -Model in candle_transformers::models::rwkv_v6 - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segformer/index.html b/network-poc/target-native/doc/candle_transformers/models/segformer/index.html deleted file mode 100644 index 4035e2c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segformer/index.html +++ /dev/null @@ -1,16 +0,0 @@ -candle_transformers::models::segformer - Rust

Module segformer

Module segformer 

Source
Expand description

Segformer model implementation for semantic segmentation and image classification.

-

Segformer is a transformer-based model designed for vision tasks. It uses a hierarchical -structure that progressively generates features at different scales.

-

Key characteristics:

-
    -
  • Efficient self-attention with sequence reduction
  • -
  • Hierarchical feature generation
  • -
  • Mix-FFN for local and global feature interaction
  • -
  • Lightweight all-MLP decode head
  • -
-

References:

- -

Structs§

Config
ImageClassificationModel
SemanticSegmentationModel
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segformer/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/segformer/sidebar-items.js deleted file mode 100644 index e46c350..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segformer/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","ImageClassificationModel","SemanticSegmentationModel"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segformer/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/segformer/struct.Config.html deleted file mode 100644 index 3c5c14d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segformer/struct.Config.html +++ /dev/null @@ -1,44 +0,0 @@ -Config in candle_transformers::models::segformer - Rust

Config

Struct Config 

Source
pub struct Config {
Show 13 fields - pub id2label: HashMap<String, String>, - pub num_channels: usize, - pub num_encoder_blocks: usize, - pub depths: Vec<usize>, - pub sr_ratios: Vec<usize>, - pub hidden_sizes: Vec<usize>, - pub patch_sizes: Vec<usize>, - pub strides: Vec<usize>, - pub num_attention_heads: Vec<usize>, - pub mlp_ratios: Vec<usize>, - pub hidden_act: Activation, - pub layer_norm_eps: f64, - pub decoder_hidden_size: usize, -
}

Fields§

§id2label: HashMap<String, String>§num_channels: usize§num_encoder_blocks: usize§depths: Vec<usize>§sr_ratios: Vec<usize>§hidden_sizes: Vec<usize>§patch_sizes: Vec<usize>§strides: Vec<usize>§num_attention_heads: Vec<usize>§mlp_ratios: Vec<usize>§hidden_act: Activation§layer_norm_eps: f64§decoder_hidden_size: usize

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segformer/struct.ImageClassificationModel.html b/network-poc/target-native/doc/candle_transformers/models/segformer/struct.ImageClassificationModel.html deleted file mode 100644 index bc0139a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segformer/struct.ImageClassificationModel.html +++ /dev/null @@ -1,32 +0,0 @@ -ImageClassificationModel in candle_transformers::models::segformer - Rust

ImageClassificationModel

Struct ImageClassificationModel 

Source
pub struct ImageClassificationModel { /* private fields */ }

Implementations§

Source§

impl ImageClassificationModel

Source

pub fn new( - config: &Config, - num_labels: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for ImageClassificationModel

Source§

fn clone(&self) -> ImageClassificationModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ImageClassificationModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for ImageClassificationModel

Source§

fn forward(&self, x: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segformer/struct.SemanticSegmentationModel.html b/network-poc/target-native/doc/candle_transformers/models/segformer/struct.SemanticSegmentationModel.html deleted file mode 100644 index aa6baac..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segformer/struct.SemanticSegmentationModel.html +++ /dev/null @@ -1,32 +0,0 @@ -SemanticSegmentationModel in candle_transformers::models::segformer - Rust

SemanticSegmentationModel

Struct SemanticSegmentationModel 

Source
pub struct SemanticSegmentationModel { /* private fields */ }

Implementations§

Source§

impl SemanticSegmentationModel

Source

pub fn new( - config: &Config, - num_labels: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for SemanticSegmentationModel

Source§

fn clone(&self) -> SemanticSegmentationModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SemanticSegmentationModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for SemanticSegmentationModel

Source§

fn forward(&self, x: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/fn.linear.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/fn.linear.html deleted file mode 100644 index bb015c2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/fn.linear.html +++ /dev/null @@ -1,6 +0,0 @@ -linear in candle_transformers::models::segment_anything - Rust

linear

Function linear 

Source
pub fn linear(
-    vb: VarBuilder<'_>,
-    in_dim: usize,
-    out_dim: usize,
-    bias: bool,
-) -> Result<Linear>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/image_encoder/index.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/image_encoder/index.html deleted file mode 100644 index 7160a2e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/image_encoder/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::segment_anything::image_encoder - Rust

Module image_encoder

Module image_encoder 

Source

Structs§

ImageEncoderViT
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/image_encoder/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/segment_anything/image_encoder/sidebar-items.js deleted file mode 100644 index 9055f58..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/image_encoder/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["ImageEncoderViT"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/image_encoder/struct.ImageEncoderViT.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/image_encoder/struct.ImageEncoderViT.html deleted file mode 100644 index ec9cc73..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/image_encoder/struct.ImageEncoderViT.html +++ /dev/null @@ -1,40 +0,0 @@ -ImageEncoderViT in candle_transformers::models::segment_anything::image_encoder - Rust

ImageEncoderViT

Struct ImageEncoderViT 

Source
pub struct ImageEncoderViT { /* private fields */ }

Implementations§

Source§

impl ImageEncoderViT

Source

pub fn new( - img_size: usize, - patch_size: usize, - in_chans: usize, - embed_dim: usize, - depth: usize, - num_heads: usize, - out_chans: usize, - qkv_bias: bool, - use_rel_pos: bool, - use_abs_pos: bool, - window_size: usize, - global_attn_indexes: &[usize], - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Debug for ImageEncoderViT

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for ImageEncoderViT

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/index.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/index.html deleted file mode 100644 index 9a7538b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/index.html +++ /dev/null @@ -1,23 +0,0 @@ -candle_transformers::models::segment_anything - Rust

Module segment_anything

Module segment_anything 

Source
Expand description

Segment Anything Model (SAM)

-

SAM is an architecture for image segmentation, capable of segmenting any object -in an image based on prompts like points or boxes. //! This model provides a robust and fast image segmentation pipeline that can be tweaked via -some prompting (requesting some points to be in the target mask, requesting some -points to be part of the background so not in the target mask, specifying some -bounding box).

- -

§Example

cargo run --example segment-anything --release -- \
-    --image candle-examples/examples/yolo-v8/assets/bike.jpg
-    --use-tiny --point 0.6,0.6 --point 0.6,0.55
- - - -
-
-

Original; Prompt with --point 0.6,0.55; Prompt with --point 0.6,0.6 --point 0.6,0.55

-
-

Re-exports§

pub use crate::models::with_tracing::Linear;

Modules§

image_encoder
mask_decoder
prompt_encoder
sam
tiny_vit
transformer

Structs§

LayerNorm2d
MlpBlock

Functions§

linear
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/mask_decoder/index.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/mask_decoder/index.html deleted file mode 100644 index eae7fe6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/mask_decoder/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::segment_anything::mask_decoder - Rust

Module mask_decoder

Module mask_decoder 

Source

Structs§

MaskDecoder
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/mask_decoder/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/segment_anything/mask_decoder/sidebar-items.js deleted file mode 100644 index 870ba07..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/mask_decoder/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["MaskDecoder"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/mask_decoder/struct.MaskDecoder.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/mask_decoder/struct.MaskDecoder.html deleted file mode 100644 index 9fb77a0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/mask_decoder/struct.MaskDecoder.html +++ /dev/null @@ -1,38 +0,0 @@ -MaskDecoder in candle_transformers::models::segment_anything::mask_decoder - Rust

MaskDecoder

Struct MaskDecoder 

Source
pub struct MaskDecoder { /* private fields */ }

Implementations§

Source§

impl MaskDecoder

Source

pub fn new( - transformer_dim: usize, - num_multimask_outputs: usize, - iou_head_depth: usize, - iou_head_hidden_dim: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward( - &self, - image_embeddings: &Tensor, - image_pe: &Tensor, - sparse_prompt_embeddings: &Tensor, - dense_prompt_embeddings: &Tensor, - multimask_output: bool, -) -> Result<(Tensor, Tensor)>

Trait Implementations§

Source§

impl Debug for MaskDecoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/prompt_encoder/index.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/prompt_encoder/index.html deleted file mode 100644 index 379d117..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/prompt_encoder/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::segment_anything::prompt_encoder - Rust

Module prompt_encoder

Module prompt_encoder 

Source

Structs§

PromptEncoder
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/prompt_encoder/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/segment_anything/prompt_encoder/sidebar-items.js deleted file mode 100644 index 0328037..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/prompt_encoder/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["PromptEncoder"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/prompt_encoder/struct.PromptEncoder.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/prompt_encoder/struct.PromptEncoder.html deleted file mode 100644 index c9e6981..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/prompt_encoder/struct.PromptEncoder.html +++ /dev/null @@ -1,36 +0,0 @@ -PromptEncoder in candle_transformers::models::segment_anything::prompt_encoder - Rust

PromptEncoder

Struct PromptEncoder 

Source
pub struct PromptEncoder { /* private fields */ }

Implementations§

Source§

impl PromptEncoder

Source

pub fn new( - embed_dim: usize, - image_embedding_size: (usize, usize), - input_image_size: (usize, usize), - mask_in_chans: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn get_dense_pe(&self) -> Result<Tensor>

Source

pub fn forward( - &self, - points: Option<(&Tensor, &Tensor)>, - boxes: Option<&Tensor>, - masks: Option<&Tensor>, -) -> Result<(Tensor, Tensor)>

Trait Implementations§

Source§

impl Debug for PromptEncoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/constant.IMAGE_SIZE.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/constant.IMAGE_SIZE.html deleted file mode 100644 index 9ddc061..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/constant.IMAGE_SIZE.html +++ /dev/null @@ -1 +0,0 @@ -IMAGE_SIZE in candle_transformers::models::segment_anything::sam - Rust

IMAGE_SIZE

Constant IMAGE_SIZE 

Source
pub const IMAGE_SIZE: usize = 1024;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/index.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/index.html deleted file mode 100644 index d8e578f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::segment_anything::sam - Rust

Module sam

Structs§

Sam

Constants§

IMAGE_SIZE
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/sidebar-items.js deleted file mode 100644 index 04098b9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"constant":["IMAGE_SIZE"],"struct":["Sam"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/struct.Sam.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/struct.Sam.html deleted file mode 100644 index e6821ae..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/sam/struct.Sam.html +++ /dev/null @@ -1,54 +0,0 @@ -Sam in candle_transformers::models::segment_anything::sam - Rust

Sam

pub struct Sam { /* private fields */ }

Implementations§

Source§

impl Sam

Source

pub fn new( - encoder_embed_dim: usize, - encoder_depth: usize, - encoder_num_heads: usize, - encoder_global_attn_indexes: &[usize], - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn new_tiny(vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn embeddings(&self, img: &Tensor) -> Result<Tensor>

Source

pub fn forward( - &self, - img: &Tensor, - points: &[(f64, f64, bool)], - multimask_output: bool, -) -> Result<(Tensor, Tensor)>

Source

pub fn forward_for_embeddings( - &self, - img_embeddings: &Tensor, - original_h: usize, - original_w: usize, - points: &[(f64, f64, bool)], - multimask_output: bool, -) -> Result<(Tensor, Tensor)>

Generate the mask and IOU predictions from some image embeddings and prompt.

-

The prompt is specified as a list of points (x, y, b). x and y are the point -coordinates (between 0 and 1) and b is true for points that should be part of the mask -and false for points that should be part of the background and so excluded from the mask.

-
Source

pub fn unpreprocess(&self, img: &Tensor) -> Result<Tensor>

Source

pub fn preprocess(&self, img: &Tensor) -> Result<Tensor>

Source

pub fn generate_masks( - &self, - img: &Tensor, - points_per_side: usize, - crop_n_layer: usize, - crop_overlap_ratio: f64, - crop_n_points_downscale_factor: usize, -) -> Result<Vec<Bbox<Tensor>>>

Trait Implementations§

Source§

impl Debug for Sam

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Sam

§

impl !RefUnwindSafe for Sam

§

impl Send for Sam

§

impl Sync for Sam

§

impl Unpin for Sam

§

impl !UnwindSafe for Sam

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/segment_anything/sidebar-items.js deleted file mode 100644 index d0a4d86..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["linear"],"mod":["image_encoder","mask_decoder","prompt_encoder","sam","tiny_vit","transformer"],"struct":["LayerNorm2d","MlpBlock"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/struct.LayerNorm2d.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/struct.LayerNorm2d.html deleted file mode 100644 index 3a58f30..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/struct.LayerNorm2d.html +++ /dev/null @@ -1,26 +0,0 @@ -LayerNorm2d in candle_transformers::models::segment_anything - Rust

LayerNorm2d

Struct LayerNorm2d 

Source
pub struct LayerNorm2d { /* private fields */ }

Implementations§

Source§

impl LayerNorm2d

Source

pub fn new(num_channels: usize, eps: f64, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Debug for LayerNorm2d

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for LayerNorm2d

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/struct.MlpBlock.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/struct.MlpBlock.html deleted file mode 100644 index 0bb0f8f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/struct.MlpBlock.html +++ /dev/null @@ -1,31 +0,0 @@ -MlpBlock in candle_transformers::models::segment_anything - Rust

MlpBlock

Struct MlpBlock 

Source
pub struct MlpBlock { /* private fields */ }

Implementations§

Source§

impl MlpBlock

Source

pub fn new( - embedding_dim: usize, - mlp_dim: usize, - activation: Activation, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Debug for MlpBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for MlpBlock

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/fn.tiny_vit_5m.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/fn.tiny_vit_5m.html deleted file mode 100644 index 6cd629c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/fn.tiny_vit_5m.html +++ /dev/null @@ -1 +0,0 @@ -tiny_vit_5m in candle_transformers::models::segment_anything::tiny_vit - Rust

tiny_vit_5m

Function tiny_vit_5m 

Source
pub fn tiny_vit_5m(vb: VarBuilder<'_>) -> Result<TinyViT>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/index.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/index.html deleted file mode 100644 index 8818286..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::segment_anything::tiny_vit - Rust

Module tiny_vit

Module tiny_vit 

Source

Structs§

TinyViT

Functions§

tiny_vit_5m
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/sidebar-items.js deleted file mode 100644 index c60c499..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["tiny_vit_5m"],"struct":["TinyViT"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/struct.TinyViT.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/struct.TinyViT.html deleted file mode 100644 index 88dc879..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/tiny_vit/struct.TinyViT.html +++ /dev/null @@ -1,33 +0,0 @@ -TinyViT in candle_transformers::models::segment_anything::tiny_vit - Rust

TinyViT

Struct TinyViT 

Source
pub struct TinyViT { /* private fields */ }

Implementations§

Source§

impl TinyViT

Source

pub fn new( - embed_dims: &[usize], - depths: &[usize], - num_heads: &[usize], - window_sizes: &[usize], - _num_classes: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Debug for TinyViT

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for TinyViT

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/transformer/index.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/transformer/index.html deleted file mode 100644 index 48dd0eb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/transformer/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::segment_anything::transformer - Rust

Module transformer

Module transformer 

Source

Structs§

TwoWayTransformer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/transformer/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/segment_anything/transformer/sidebar-items.js deleted file mode 100644 index 5876ad2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/transformer/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["TwoWayTransformer"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/segment_anything/transformer/struct.TwoWayTransformer.html b/network-poc/target-native/doc/candle_transformers/models/segment_anything/transformer/struct.TwoWayTransformer.html deleted file mode 100644 index f4b51d1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/segment_anything/transformer/struct.TwoWayTransformer.html +++ /dev/null @@ -1,36 +0,0 @@ -TwoWayTransformer in candle_transformers::models::segment_anything::transformer - Rust

TwoWayTransformer

Struct TwoWayTransformer 

Source
pub struct TwoWayTransformer { /* private fields */ }

Implementations§

Source§

impl TwoWayTransformer

Source

pub fn new( - depth: usize, - embedding_dim: usize, - num_heads: usize, - mlp_dim: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward( - &self, - image_embedding: &Tensor, - image_pe: &Tensor, - point_embedding: &Tensor, -) -> Result<(Tensor, Tensor)>

Trait Implementations§

Source§

impl Debug for TwoWayTransformer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/sidebar-items.js deleted file mode 100644 index e2d0baf..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"mod":["based","beit","bert","bigcode","blip","blip_text","chatglm","chinese_clip","clip","codegeex4_9b","colpali","convmixer","convnext","dac","debertav2","deepseek2","depth_anything_v2","dinov2","dinov2reg4","distilbert","efficientnet","efficientvit","encodec","eva2","falcon","fastvit","flux","gemma","gemma2","gemma3","glm4","granite","helium","hiera","jina_bert","llama","llama2_c","llama2_c_weights","llava","mamba","marian","metavoice","mimi","mistral","mixformer","mixtral","mmdit","mobileclip","mobilenetv4","mobileone","modernbert","moondream","mpt","nvembed_v2","olmo","openclip","paligemma","parler_tts","persimmon","phi","phi3","pixtral","quantized_blip","quantized_blip_text","quantized_llama","quantized_llama2_c","quantized_metavoice","quantized_mistral","quantized_mixformer","quantized_moondream","quantized_mpt","quantized_phi","quantized_phi3","quantized_qwen2","quantized_recurrent_gemma","quantized_rwkv_v5","quantized_rwkv_v6","quantized_stable_lm","quantized_t5","qwen2","qwen2_moe","recurrent_gemma","repvgg","resnet","rwkv_v5","rwkv_v6","segformer","segment_anything","siglip","stable_diffusion","stable_lm","starcoder2","stella_en_v5","t5","trocr","vgg","vit","whisper","with_tracing","wuerstchen","xlm_roberta","yi"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/siglip/index.html b/network-poc/target-native/doc/candle_transformers/models/siglip/index.html deleted file mode 100644 index 1ba5cac..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/siglip/index.html +++ /dev/null @@ -1,7 +0,0 @@ -candle_transformers::models::siglip - Rust

Module siglip

Module siglip 

Source
Expand description

Siglip model implementation.

-

Siglip architecture combining vision and language for zero-shot tasks.

-

References:

- -

Structs§

Config
Model
TextConfig
TextModel
TextTransformer
VisionConfig
VisionModel
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/siglip/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/siglip/sidebar-items.js deleted file mode 100644 index fec3c36..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/siglip/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model","TextConfig","TextModel","TextTransformer","VisionConfig","VisionModel"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/siglip/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/siglip/struct.Config.html deleted file mode 100644 index 2fec8f2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/siglip/struct.Config.html +++ /dev/null @@ -1,32 +0,0 @@ -Config in candle_transformers::models::siglip - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub text_config: TextConfig,
-    pub vision_config: VisionConfig,
-}

Fields§

§text_config: TextConfig§vision_config: VisionConfig

Implementations§

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/siglip/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/siglip/struct.Model.html deleted file mode 100644 index a7c9044..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/siglip/struct.Model.html +++ /dev/null @@ -1,31 +0,0 @@ -Model in candle_transformers::models::siglip - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn get_text_features(&self, input_ids: &Tensor) -> Result<Tensor>

Source

pub fn get_image_features(&self, pixel_values: &Tensor) -> Result<Tensor>

Source

pub fn forward( - &self, - pixel_values: &Tensor, - input_ids: &Tensor, -) -> Result<(Tensor, Tensor)>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/siglip/struct.TextConfig.html b/network-poc/target-native/doc/candle_transformers/models/siglip/struct.TextConfig.html deleted file mode 100644 index 8f595c3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/siglip/struct.TextConfig.html +++ /dev/null @@ -1,41 +0,0 @@ -TextConfig in candle_transformers::models::siglip - Rust

TextConfig

Struct TextConfig 

Source
pub struct TextConfig {
-    pub vocab_size: usize,
-    pub hidden_size: usize,
-    pub intermediate_size: usize,
-    pub num_hidden_layers: usize,
-    pub num_attention_heads: usize,
-    pub max_position_embeddings: usize,
-    pub hidden_act: Activation,
-    pub layer_norm_eps: f64,
-    pub pad_token_id: u32,
-    pub bos_token_id: u32,
-    pub eos_token_id: u32,
-}

Fields§

§vocab_size: usize§hidden_size: usize§intermediate_size: usize§num_hidden_layers: usize§num_attention_heads: usize§max_position_embeddings: usize§hidden_act: Activation§layer_norm_eps: f64§pad_token_id: u32§bos_token_id: u32§eos_token_id: u32

Trait Implementations§

Source§

impl Clone for TextConfig

Source§

fn clone(&self) -> TextConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TextConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for TextConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/siglip/struct.TextModel.html b/network-poc/target-native/doc/candle_transformers/models/siglip/struct.TextModel.html deleted file mode 100644 index 9dbe51b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/siglip/struct.TextModel.html +++ /dev/null @@ -1,30 +0,0 @@ -TextModel in candle_transformers::models::siglip - Rust

TextModel

Struct TextModel 

Source
pub struct TextModel {
-    pub text_model: TextTransformer,
-}

Fields§

§text_model: TextTransformer

Implementations§

Source§

impl TextModel

Source

pub fn new(cfg: &TextConfig, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for TextModel

Source§

fn clone(&self) -> TextModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TextModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for TextModel

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/siglip/struct.TextTransformer.html b/network-poc/target-native/doc/candle_transformers/models/siglip/struct.TextTransformer.html deleted file mode 100644 index 0939640..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/siglip/struct.TextTransformer.html +++ /dev/null @@ -1,31 +0,0 @@ -TextTransformer in candle_transformers::models::siglip - Rust

TextTransformer

Struct TextTransformer 

Source
pub struct TextTransformer {
-    pub head: Linear,
-    /* private fields */
-}

Fields§

§head: Linear

Trait Implementations§

Source§

impl Clone for TextTransformer

Source§

fn clone(&self) -> TextTransformer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TextTransformer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for TextTransformer

Source§

fn forward(&self, input_ids: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/siglip/struct.VisionConfig.html b/network-poc/target-native/doc/candle_transformers/models/siglip/struct.VisionConfig.html deleted file mode 100644 index 76422ee..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/siglip/struct.VisionConfig.html +++ /dev/null @@ -1,39 +0,0 @@ -VisionConfig in candle_transformers::models::siglip - Rust

VisionConfig

Struct VisionConfig 

Source
pub struct VisionConfig {
-    pub hidden_size: usize,
-    pub intermediate_size: usize,
-    pub num_hidden_layers: usize,
-    pub num_attention_heads: usize,
-    pub num_channels: usize,
-    pub image_size: usize,
-    pub patch_size: usize,
-    pub hidden_act: Activation,
-    pub layer_norm_eps: f64,
-}

Fields§

§hidden_size: usize§intermediate_size: usize§num_hidden_layers: usize§num_attention_heads: usize§num_channels: usize§image_size: usize§patch_size: usize§hidden_act: Activation§layer_norm_eps: f64

Implementations§

Source§

impl VisionConfig

Source

pub fn paligemma_3b_224() -> Self

Source

pub fn paligemma_3b_448() -> Self

Source

pub fn paligemma_3b_896() -> Self

Source

pub fn num_patches(&self) -> usize

Trait Implementations§

Source§

impl Clone for VisionConfig

Source§

fn clone(&self) -> VisionConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VisionConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for VisionConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/siglip/struct.VisionModel.html b/network-poc/target-native/doc/candle_transformers/models/siglip/struct.VisionModel.html deleted file mode 100644 index 83edeba..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/siglip/struct.VisionModel.html +++ /dev/null @@ -1,32 +0,0 @@ -VisionModel in candle_transformers::models::siglip - Rust

VisionModel

Struct VisionModel 

Source
pub struct VisionModel { /* private fields */ }

Implementations§

Source§

impl VisionModel

Source

pub fn new( - cfg: &VisionConfig, - use_head: bool, - vb: VarBuilder<'_>, -) -> Result<Self>

Trait Implementations§

Source§

impl Clone for VisionModel

Source§

fn clone(&self) -> VisionModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for VisionModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for VisionModel

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/index.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/index.html deleted file mode 100644 index 3a10b59..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/index.html +++ /dev/null @@ -1,2 +0,0 @@ -candle_transformers::models::stable_diffusion::attention - Rust

Module attention

Module attention 

Source
Expand description

Attention Based Building Blocks

-

Structs§

AttentionBlock
AttentionBlockConfig
Configuration for an attention block.
CrossAttention
SpatialTransformer
SpatialTransformerConfig
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/sidebar-items.js deleted file mode 100644 index f3a8505..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["AttentionBlock","AttentionBlockConfig","CrossAttention","SpatialTransformer","SpatialTransformerConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.AttentionBlock.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.AttentionBlock.html deleted file mode 100644 index ece864b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.AttentionBlock.html +++ /dev/null @@ -1,30 +0,0 @@ -AttentionBlock in candle_transformers::models::stable_diffusion::attention - Rust

AttentionBlock

Struct AttentionBlock 

Source
pub struct AttentionBlock { /* private fields */ }

Implementations§

Source§

impl AttentionBlock

Source

pub fn new( - vs: VarBuilder<'_>, - channels: usize, - config: AttentionBlockConfig, -) -> Result<Self>

Trait Implementations§

Source§

impl Debug for AttentionBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for AttentionBlock

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.AttentionBlockConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.AttentionBlockConfig.html deleted file mode 100644 index da59066..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.AttentionBlockConfig.html +++ /dev/null @@ -1,33 +0,0 @@ -AttentionBlockConfig in candle_transformers::models::stable_diffusion::attention - Rust

AttentionBlockConfig

Struct AttentionBlockConfig 

Source
pub struct AttentionBlockConfig {
-    pub num_head_channels: Option<usize>,
-    pub num_groups: usize,
-    pub rescale_output_factor: f64,
-    pub eps: f64,
-}
Expand description

Configuration for an attention block.

-

Fields§

§num_head_channels: Option<usize>§num_groups: usize§rescale_output_factor: f64§eps: f64

Trait Implementations§

Source§

impl Clone for AttentionBlockConfig

Source§

fn clone(&self) -> AttentionBlockConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AttentionBlockConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for AttentionBlockConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for AttentionBlockConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.CrossAttention.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.CrossAttention.html deleted file mode 100644 index 91c36d4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.CrossAttention.html +++ /dev/null @@ -1,33 +0,0 @@ -CrossAttention in candle_transformers::models::stable_diffusion::attention - Rust

CrossAttention

Struct CrossAttention 

Source
pub struct CrossAttention { /* private fields */ }

Implementations§

Source§

impl CrossAttention

Source

pub fn new( - vs: VarBuilder<'_>, - query_dim: usize, - context_dim: Option<usize>, - heads: usize, - dim_head: usize, - slice_size: Option<usize>, - use_flash_attn: bool, -) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, context: Option<&Tensor>) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for CrossAttention

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.SpatialTransformer.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.SpatialTransformer.html deleted file mode 100644 index 119afb9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.SpatialTransformer.html +++ /dev/null @@ -1,35 +0,0 @@ -SpatialTransformer in candle_transformers::models::stable_diffusion::attention - Rust

SpatialTransformer

Struct SpatialTransformer 

Source
pub struct SpatialTransformer {
-    pub config: SpatialTransformerConfig,
-    /* private fields */
-}

Fields§

§config: SpatialTransformerConfig

Implementations§

Source§

impl SpatialTransformer

Source

pub fn new( - vs: VarBuilder<'_>, - in_channels: usize, - n_heads: usize, - d_head: usize, - use_flash_attn: bool, - config: SpatialTransformerConfig, -) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, context: Option<&Tensor>) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for SpatialTransformer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.SpatialTransformerConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.SpatialTransformerConfig.html deleted file mode 100644 index b9f7650..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/attention/struct.SpatialTransformerConfig.html +++ /dev/null @@ -1,33 +0,0 @@ -SpatialTransformerConfig in candle_transformers::models::stable_diffusion::attention - Rust

SpatialTransformerConfig

Struct SpatialTransformerConfig 

Source
pub struct SpatialTransformerConfig {
-    pub depth: usize,
-    pub num_groups: usize,
-    pub context_dim: Option<usize>,
-    pub sliced_attention_size: Option<usize>,
-    pub use_linear_projection: bool,
-}

Fields§

§depth: usize§num_groups: usize§context_dim: Option<usize>§sliced_attention_size: Option<usize>§use_linear_projection: bool

Trait Implementations§

Source§

impl Clone for SpatialTransformerConfig

Source§

fn clone(&self) -> SpatialTransformerConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SpatialTransformerConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for SpatialTransformerConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for SpatialTransformerConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/enum.Activation.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/enum.Activation.html deleted file mode 100644 index 76e7faf..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/enum.Activation.html +++ /dev/null @@ -1,32 +0,0 @@ -Activation in candle_transformers::models::stable_diffusion::clip - Rust

Activation

Enum Activation 

Source
pub enum Activation {
-    QuickGelu,
-    Gelu,
-    GeluErf,
-}

Variants§

§

QuickGelu

§

Gelu

§

GeluErf

Trait Implementations§

Source§

impl Clone for Activation

Source§

fn clone(&self) -> Activation

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Activation

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Activation

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Source§

impl Copy for Activation

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/index.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/index.html deleted file mode 100644 index dbf9877..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/index.html +++ /dev/null @@ -1,7 +0,0 @@ -candle_transformers::models::stable_diffusion::clip - Rust

Module clip

Module clip 

Source
Expand description

Contrastive Language-Image Pre-Training

-

Contrastive Language-Image Pre-Training (CLIP) is an architecture trained on -pairs of images with related texts.

- -

Structs§

ClipTextTransformer
A CLIP transformer based model.
Config

Enums§

Activation
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/sidebar-items.js deleted file mode 100644 index 8dd5ba0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["Activation"],"struct":["ClipTextTransformer","Config"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/struct.ClipTextTransformer.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/struct.ClipTextTransformer.html deleted file mode 100644 index 80f1cdb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/struct.ClipTextTransformer.html +++ /dev/null @@ -1,36 +0,0 @@ -ClipTextTransformer in candle_transformers::models::stable_diffusion::clip - Rust

ClipTextTransformer

Struct ClipTextTransformer 

Source
pub struct ClipTextTransformer { /* private fields */ }
Expand description

A CLIP transformer based model.

-

Implementations§

Source§

impl ClipTextTransformer

Source

pub fn new(vs: VarBuilder<'_>, c: &Config) -> Result<Self>

Source

pub fn forward_with_mask( - &self, - xs: &Tensor, - mask_after: usize, -) -> Result<Tensor>

Source

pub fn forward_until_encoder_layer( - &self, - xs: &Tensor, - mask_after: usize, - until_layer: isize, -) -> Result<(Tensor, Tensor)>

Trait Implementations§

Source§

impl Debug for ClipTextTransformer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for ClipTextTransformer

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/struct.Config.html deleted file mode 100644 index 4c2f1fd..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/clip/struct.Config.html +++ /dev/null @@ -1,31 +0,0 @@ -Config in candle_transformers::models::stable_diffusion::clip - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub max_position_embeddings: usize,
-    pub pad_with: Option<String>,
-    /* private fields */
-}

Fields§

§max_position_embeddings: usize§pad_with: Option<String>

Implementations§

Source§

impl Config

Source

pub fn v1_5() -> Self

Source

pub fn v2_1() -> Self

Source

pub fn sdxl() -> Self

Source

pub fn sdxl2() -> Self

Source

pub fn ssd1b() -> Self

Source

pub fn ssd1b2() -> Self

Source

pub fn wuerstchen() -> Self

Source

pub fn wuerstchen_prior() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/index.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/index.html deleted file mode 100644 index b117947..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/index.html +++ /dev/null @@ -1,8 +0,0 @@ -candle_transformers::models::stable_diffusion::ddim - Rust

Module ddim

Module ddim 

Source
Expand description

§Denoising Diffusion Implicit Models

-

The Denoising Diffusion Implicit Models (DDIM) is a simple scheduler -similar to Denoising Diffusion Probabilistic Models (DDPM). The DDPM -generative process is the reverse of a Markovian process, DDIM generalizes -this to non-Markovian guidance.

-

Denoising Diffusion Implicit Models, J. Song et al, 2020. -https://arxiv.org/abs/2010.02502

-

Structs§

DDIMScheduler
The DDIM scheduler.
DDIMSchedulerConfig
The configuration for the DDIM scheduler.
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/sidebar-items.js deleted file mode 100644 index 7145fb9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["DDIMScheduler","DDIMSchedulerConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/struct.DDIMScheduler.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/struct.DDIMScheduler.html deleted file mode 100644 index b9bd531..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/struct.DDIMScheduler.html +++ /dev/null @@ -1,44 +0,0 @@ -DDIMScheduler in candle_transformers::models::stable_diffusion::ddim - Rust

DDIMScheduler

Struct DDIMScheduler 

Source
pub struct DDIMScheduler {
-    pub config: DDIMSchedulerConfig,
-    /* private fields */
-}
Expand description

The DDIM scheduler.

-

Fields§

§config: DDIMSchedulerConfig

Trait Implementations§

Source§

impl Clone for DDIMScheduler

Source§

fn clone(&self) -> DDIMScheduler

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DDIMScheduler

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Scheduler for DDIMScheduler

Source§

fn step( - &mut self, - model_output: &Tensor, - timestep: usize, - sample: &Tensor, -) -> Result<Tensor>

Performs a backward step during inference.

-
Source§

fn scale_model_input(&self, sample: Tensor, _timestep: usize) -> Result<Tensor>

Ensures interchangeability with schedulers that need to scale the denoising model input -depending on the current timestep.

-
Source§

fn timesteps(&self) -> &[usize]

Source§

fn add_noise( - &self, - original: &Tensor, - noise: Tensor, - timestep: usize, -) -> Result<Tensor>

Source§

fn init_noise_sigma(&self) -> f64

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/struct.DDIMSchedulerConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/struct.DDIMSchedulerConfig.html deleted file mode 100644 index 03dd3e4..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddim/struct.DDIMSchedulerConfig.html +++ /dev/null @@ -1,46 +0,0 @@ -DDIMSchedulerConfig in candle_transformers::models::stable_diffusion::ddim - Rust

DDIMSchedulerConfig

Struct DDIMSchedulerConfig 

Source
pub struct DDIMSchedulerConfig {
-    pub beta_start: f64,
-    pub beta_end: f64,
-    pub beta_schedule: BetaSchedule,
-    pub eta: f64,
-    pub steps_offset: usize,
-    pub prediction_type: PredictionType,
-    pub train_timesteps: usize,
-    pub timestep_spacing: TimestepSpacing,
-}
Expand description

The configuration for the DDIM scheduler.

-

Fields§

§beta_start: f64

The value of beta at the beginning of training.

-
§beta_end: f64

The value of beta at the end of training.

-
§beta_schedule: BetaSchedule

How beta evolved during training.

-
§eta: f64

The amount of noise to be added at each step.

-
§steps_offset: usize

Adjust the indexes of the inference schedule by this value.

-
§prediction_type: PredictionType

prediction type of the scheduler function, one of epsilon (predicting -the noise of the diffusion process), sample (directly predicting the noisy sample) or v_prediction` (see section 2.4 https://imagen.research.google/video/paper.pdf)

-
§train_timesteps: usize

number of diffusion steps used to train the model

-
§timestep_spacing: TimestepSpacing

time step spacing for the diffusion process

-

Trait Implementations§

Source§

impl Clone for DDIMSchedulerConfig

Source§

fn clone(&self) -> DDIMSchedulerConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DDIMSchedulerConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for DDIMSchedulerConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl SchedulerConfig for DDIMSchedulerConfig

Source§

fn build(&self, inference_steps: usize) -> Result<Box<dyn Scheduler>>

Source§

impl Copy for DDIMSchedulerConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/enum.DDPMVarianceType.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/enum.DDPMVarianceType.html deleted file mode 100644 index 89a13a6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/enum.DDPMVarianceType.html +++ /dev/null @@ -1,38 +0,0 @@ -DDPMVarianceType in candle_transformers::models::stable_diffusion::ddpm - Rust

DDPMVarianceType

Enum DDPMVarianceType 

Source
pub enum DDPMVarianceType {
-    FixedSmall,
-    FixedSmallLog,
-    FixedLarge,
-    FixedLargeLog,
-    Learned,
-}

Variants§

§

FixedSmall

§

FixedSmallLog

§

FixedLarge

§

FixedLargeLog

§

Learned

Trait Implementations§

Source§

impl Clone for DDPMVarianceType

Source§

fn clone(&self) -> DDPMVarianceType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DDPMVarianceType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for DDPMVarianceType

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl PartialEq for DDPMVarianceType

Source§

fn eq(&self, other: &DDPMVarianceType) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Eq for DDPMVarianceType

Source§

impl StructuralPartialEq for DDPMVarianceType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where - Q: Eq + ?Sized, - K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/index.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/index.html deleted file mode 100644 index 47c5c58..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::stable_diffusion::ddpm - Rust

Module ddpm

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/sidebar-items.js deleted file mode 100644 index 18f63cf..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["DDPMVarianceType"],"struct":["DDPMScheduler","DDPMSchedulerConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/struct.DDPMScheduler.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/struct.DDPMScheduler.html deleted file mode 100644 index cee1ae2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/struct.DDPMScheduler.html +++ /dev/null @@ -1,40 +0,0 @@ -DDPMScheduler in candle_transformers::models::stable_diffusion::ddpm - Rust

DDPMScheduler

Struct DDPMScheduler 

Source
pub struct DDPMScheduler {
-    pub config: DDPMSchedulerConfig,
-    /* private fields */
-}

Fields§

§config: DDPMSchedulerConfig

Implementations§

Source§

impl DDPMScheduler

Source

pub fn new(inference_steps: usize, config: DDPMSchedulerConfig) -> Result<Self>

Source

pub fn timesteps(&self) -> &[usize]

Source

pub fn scale_model_input(&self, sample: Tensor, _timestep: usize) -> Tensor

Ensures interchangeability with schedulers that need to scale the denoising model input -depending on the current timestep.

-
Source

pub fn step( - &self, - model_output: &Tensor, - timestep: usize, - sample: &Tensor, -) -> Result<Tensor>

Source

pub fn add_noise( - &self, - original_samples: &Tensor, - noise: Tensor, - timestep: usize, -) -> Result<Tensor>

Source

pub fn init_noise_sigma(&self) -> f64

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/struct.DDPMSchedulerConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/struct.DDPMSchedulerConfig.html deleted file mode 100644 index d1e3600..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/ddpm/struct.DDPMSchedulerConfig.html +++ /dev/null @@ -1,42 +0,0 @@ -DDPMSchedulerConfig in candle_transformers::models::stable_diffusion::ddpm - Rust

DDPMSchedulerConfig

Struct DDPMSchedulerConfig 

Source
pub struct DDPMSchedulerConfig {
-    pub beta_start: f64,
-    pub beta_end: f64,
-    pub beta_schedule: BetaSchedule,
-    pub clip_sample: bool,
-    pub variance_type: DDPMVarianceType,
-    pub prediction_type: PredictionType,
-    pub train_timesteps: usize,
-}

Fields§

§beta_start: f64

The value of beta at the beginning of training.

-
§beta_end: f64

The value of beta at the end of training.

-
§beta_schedule: BetaSchedule

How beta evolved during training.

-
§clip_sample: bool

Option to predicted sample between -1 and 1 for numerical stability.

-
§variance_type: DDPMVarianceType

Option to clip the variance used when adding noise to the denoised sample.

-
§prediction_type: PredictionType

prediction type of the scheduler function

-
§train_timesteps: usize

number of diffusion steps used to train the model.

-

Trait Implementations§

Source§

impl Clone for DDPMSchedulerConfig

Source§

fn clone(&self) -> DDPMSchedulerConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DDPMSchedulerConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for DDPMSchedulerConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/index.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/index.html deleted file mode 100644 index 822ee16..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::stable_diffusion::embeddings - Rust

Module embeddings

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/sidebar-items.js deleted file mode 100644 index d64d1ce..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["TimestepEmbedding","Timesteps"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/struct.TimestepEmbedding.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/struct.TimestepEmbedding.html deleted file mode 100644 index abd5046..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/struct.TimestepEmbedding.html +++ /dev/null @@ -1,30 +0,0 @@ -TimestepEmbedding in candle_transformers::models::stable_diffusion::embeddings - Rust

TimestepEmbedding

Struct TimestepEmbedding 

Source
pub struct TimestepEmbedding { /* private fields */ }

Implementations§

Source§

impl TimestepEmbedding

Source

pub fn new( - vs: VarBuilder<'_>, - channel: usize, - time_embed_dim: usize, -) -> Result<Self>

Trait Implementations§

Source§

impl Debug for TimestepEmbedding

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for TimestepEmbedding

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/struct.Timesteps.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/struct.Timesteps.html deleted file mode 100644 index f36f2b0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/embeddings/struct.Timesteps.html +++ /dev/null @@ -1,30 +0,0 @@ -Timesteps in candle_transformers::models::stable_diffusion::embeddings - Rust

Timesteps

Struct Timesteps 

Source
pub struct Timesteps { /* private fields */ }

Implementations§

Source§

impl Timesteps

Source

pub fn new( - num_channels: usize, - flip_sin_to_cos: bool, - downscale_freq_shift: f64, -) -> Self

Trait Implementations§

Source§

impl Debug for Timesteps

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Timesteps

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/index.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/index.html deleted file mode 100644 index 30ae87d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/index.html +++ /dev/null @@ -1,3 +0,0 @@ -candle_transformers::models::stable_diffusion::euler_ancestral_discrete - Rust

Module euler_ancestral_discrete

Module euler_ancestral_discrete 

Source
Expand description

Ancestral sampling with Euler method steps.

-

Based on the original k-diffusion implementation by Katherine Crowson.

-

Structs§

EulerAncestralDiscreteScheduler
The EulerAncestral Discrete scheduler.
EulerAncestralDiscreteSchedulerConfig
The configuration for the EulerAncestral Discrete scheduler.
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/sidebar-items.js deleted file mode 100644 index 1720f65..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["EulerAncestralDiscreteScheduler","EulerAncestralDiscreteSchedulerConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/struct.EulerAncestralDiscreteScheduler.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/struct.EulerAncestralDiscreteScheduler.html deleted file mode 100644 index 8dcb5ce..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/struct.EulerAncestralDiscreteScheduler.html +++ /dev/null @@ -1,51 +0,0 @@ -EulerAncestralDiscreteScheduler in candle_transformers::models::stable_diffusion::euler_ancestral_discrete - Rust

EulerAncestralDiscreteScheduler

Struct EulerAncestralDiscreteScheduler 

Source
pub struct EulerAncestralDiscreteScheduler {
-    pub config: EulerAncestralDiscreteSchedulerConfig,
-    /* private fields */
-}
Expand description

The EulerAncestral Discrete scheduler.

-

Fields§

§config: EulerAncestralDiscreteSchedulerConfig

Implementations§

Source§

impl EulerAncestralDiscreteScheduler

Source

pub fn new( - inference_steps: usize, - config: EulerAncestralDiscreteSchedulerConfig, -) -> Result<Self>

Creates a new EulerAncestral Discrete scheduler given the number of steps to be -used for inference as well as the number of steps that was used -during training.

-

Trait Implementations§

Source§

impl Clone for EulerAncestralDiscreteScheduler

Source§

fn clone(&self) -> EulerAncestralDiscreteScheduler

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EulerAncestralDiscreteScheduler

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Scheduler for EulerAncestralDiscreteScheduler

Source§

fn scale_model_input(&self, sample: Tensor, timestep: usize) -> Result<Tensor>

Ensures interchangeability with schedulers that need to scale the denoising model input -depending on the current timestep.

-

Scales the denoising model input by (sigma**2 + 1) ** 0.5 to match the K-LMS algorithm

-
Source§

fn step( - &mut self, - model_output: &Tensor, - timestep: usize, - sample: &Tensor, -) -> Result<Tensor>

Performs a backward step during inference.

-
Source§

fn timesteps(&self) -> &[usize]

Source§

fn add_noise( - &self, - original: &Tensor, - noise: Tensor, - timestep: usize, -) -> Result<Tensor>

Source§

fn init_noise_sigma(&self) -> f64

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/struct.EulerAncestralDiscreteSchedulerConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/struct.EulerAncestralDiscreteSchedulerConfig.html deleted file mode 100644 index 1c35504..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/euler_ancestral_discrete/struct.EulerAncestralDiscreteSchedulerConfig.html +++ /dev/null @@ -1,44 +0,0 @@ -EulerAncestralDiscreteSchedulerConfig in candle_transformers::models::stable_diffusion::euler_ancestral_discrete - Rust

EulerAncestralDiscreteSchedulerConfig

Struct EulerAncestralDiscreteSchedulerConfig 

Source
pub struct EulerAncestralDiscreteSchedulerConfig {
-    pub beta_start: f64,
-    pub beta_end: f64,
-    pub beta_schedule: BetaSchedule,
-    pub steps_offset: usize,
-    pub prediction_type: PredictionType,
-    pub train_timesteps: usize,
-    pub timestep_spacing: TimestepSpacing,
-}
Expand description

The configuration for the EulerAncestral Discrete scheduler.

-

Fields§

§beta_start: f64

The value of beta at the beginning of training.n

-
§beta_end: f64

The value of beta at the end of training.

-
§beta_schedule: BetaSchedule

How beta evolved during training.

-
§steps_offset: usize

Adjust the indexes of the inference schedule by this value.

-
§prediction_type: PredictionType

prediction type of the scheduler function, one of epsilon (predicting -the noise of the diffusion process), sample (directly predicting the noisy sample) or v_prediction` (see section 2.4)

-
§train_timesteps: usize

number of diffusion steps used to train the model

-
§timestep_spacing: TimestepSpacing

time step spacing for the diffusion process

-

Trait Implementations§

Source§

impl Clone for EulerAncestralDiscreteSchedulerConfig

Source§

fn clone(&self) -> EulerAncestralDiscreteSchedulerConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EulerAncestralDiscreteSchedulerConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for EulerAncestralDiscreteSchedulerConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl SchedulerConfig for EulerAncestralDiscreteSchedulerConfig

Source§

fn build(&self, inference_steps: usize) -> Result<Box<dyn Scheduler>>

Source§

impl Copy for EulerAncestralDiscreteSchedulerConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/fn.build_clip_transformer.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/fn.build_clip_transformer.html deleted file mode 100644 index eddf6d8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/fn.build_clip_transformer.html +++ /dev/null @@ -1,6 +0,0 @@ -build_clip_transformer in candle_transformers::models::stable_diffusion - Rust

build_clip_transformer

Function build_clip_transformer 

Source
pub fn build_clip_transformer<P: AsRef<Path>>(
-    clip: &Config,
-    clip_weights: P,
-    device: &Device,
-    dtype: DType,
-) -> Result<ClipTextTransformer>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/index.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/index.html deleted file mode 100644 index 876f559..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/index.html +++ /dev/null @@ -1,30 +0,0 @@ -candle_transformers::models::stable_diffusion - Rust

Module stable_diffusion

Module stable_diffusion 

Source
Expand description

Stable Diffusion

-

Stable Diffusion is a latent text-to-image diffusion model capable of -generating photo-realistic images given any text input.

-
    -
  • 💻 Original Repository
  • -
  • 🤗 Hugging Face
  • -
  • The default scheduler for the v1.5, v2.1 and XL 1.0 version is the Denoising Diffusion Implicit Model scheduler (DDIM). The original paper and some code can be found in the associated repo. The default scheduler for the XL Turbo version is the Euler Ancestral scheduler.
  • -
-

§Example

- rusty robot holding a candle -
-

“A rusty robot holding a fire torch in its hand.” Generated by Stable Diffusion XL using Rust and candle.

-
# example running with cuda
-# see the candle-examples/examples/stable-diffusion for all options
-cargo run --example stable-diffusion --release --features=cuda,cudnn \
-    -- --prompt "a cosmonaut on a horse (hd, realistic, high-def)"
-
-# with sd-turbo
-cargo run --example stable-diffusion --release --features=cuda,cudnn \
-    -- --prompt "a cosmonaut on a horse (hd, realistic, high-def)" \
-    --sd-version turbo
-
-# with flash attention.
-# feature flag: `--features flash-attn`
-# cli flag: `--use-flash-attn`.
-# flash-attention-v2 is only compatible with Ampere, Ada, \
-# or Hopper GPUs (e.g., A100/H100, RTX 3090/4090).
-cargo run --example stable-diffusion --release --features=cuda,cudnn \
-    -- --prompt "a cosmonaut on a horse (hd, realistic, high-def)" \
-    --use-flash-attn

Modules§

attention
Attention Based Building Blocks
clip
Contrastive Language-Image Pre-Training
ddim
Denoising Diffusion Implicit Models
ddpm
embeddings
euler_ancestral_discrete
Ancestral sampling with Euler method steps.
resnet
ResNet Building Blocks
schedulers
Diffusion pipelines and models
unet_2d
2D UNet Denoising Models
unet_2d_blocks
2D UNet Building Blocks
uni_pc
UniPC Scheduler
utils
vae
Variational Auto-Encoder (VAE) Models.

Structs§

StableDiffusionConfig

Functions§

build_clip_transformer
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/index.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/index.html deleted file mode 100644 index 7512ad3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/index.html +++ /dev/null @@ -1,7 +0,0 @@ -candle_transformers::models::stable_diffusion::resnet - Rust

Module resnet

Module resnet 

Source
Expand description

ResNet Building Blocks

-

Some Residual Network blocks used in UNet models.

-

Denoising Diffusion Implicit Models, K. He and al, 2015.

- -

Structs§

ResnetBlock2D
ResnetBlock2DConfig
Configuration for a ResNet block.
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/sidebar-items.js deleted file mode 100644 index c5e111f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["ResnetBlock2D","ResnetBlock2DConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/struct.ResnetBlock2D.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/struct.ResnetBlock2D.html deleted file mode 100644 index 27800e9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/struct.ResnetBlock2D.html +++ /dev/null @@ -1,29 +0,0 @@ -ResnetBlock2D in candle_transformers::models::stable_diffusion::resnet - Rust

ResnetBlock2D

Struct ResnetBlock2D 

Source
pub struct ResnetBlock2D { /* private fields */ }

Implementations§

Source§

impl ResnetBlock2D

Source

pub fn new( - vs: VarBuilder<'_>, - in_channels: usize, - config: ResnetBlock2DConfig, -) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, temb: Option<&Tensor>) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for ResnetBlock2D

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/struct.ResnetBlock2DConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/struct.ResnetBlock2DConfig.html deleted file mode 100644 index afa0751..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/resnet/struct.ResnetBlock2DConfig.html +++ /dev/null @@ -1,43 +0,0 @@ -ResnetBlock2DConfig in candle_transformers::models::stable_diffusion::resnet - Rust

ResnetBlock2DConfig

Struct ResnetBlock2DConfig 

Source
pub struct ResnetBlock2DConfig {
-    pub out_channels: Option<usize>,
-    pub temb_channels: Option<usize>,
-    pub groups: usize,
-    pub groups_out: Option<usize>,
-    pub eps: f64,
-    pub use_in_shortcut: Option<bool>,
-    pub output_scale_factor: f64,
-}
Expand description

Configuration for a ResNet block.

-

Fields§

§out_channels: Option<usize>

The number of output channels, defaults to the number of input channels.

-
§temb_channels: Option<usize>§groups: usize

The number of groups to use in group normalization.

-
§groups_out: Option<usize>§eps: f64

The epsilon to be used in the group normalization operations.

-
§use_in_shortcut: Option<bool>

Whether to use a 2D convolution in the skip connection. When using None, -such a convolution is used if the number of input channels is different from -the number of output channels.

-
§output_scale_factor: f64

The final output is scaled by dividing by this value.

-

Trait Implementations§

Source§

impl Clone for ResnetBlock2DConfig

Source§

fn clone(&self) -> ResnetBlock2DConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ResnetBlock2DConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ResnetBlock2DConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for ResnetBlock2DConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/enum.BetaSchedule.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/enum.BetaSchedule.html deleted file mode 100644 index 7d1d48a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/enum.BetaSchedule.html +++ /dev/null @@ -1,36 +0,0 @@ -BetaSchedule in candle_transformers::models::stable_diffusion::schedulers - Rust

BetaSchedule

Enum BetaSchedule 

Source
pub enum BetaSchedule {
-    Linear,
-    ScaledLinear,
-    SquaredcosCapV2,
-}
Expand description

This represents how beta ranges from its minimum value to the maximum -during training.

-

Variants§

§

Linear

Linear interpolation.

-
§

ScaledLinear

Linear interpolation of the square root of beta.

-
§

SquaredcosCapV2

Glide cosine schedule

-

Trait Implementations§

Source§

impl Clone for BetaSchedule

Source§

fn clone(&self) -> BetaSchedule

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for BetaSchedule

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Copy for BetaSchedule

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/enum.PredictionType.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/enum.PredictionType.html deleted file mode 100644 index 3df1e79..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/enum.PredictionType.html +++ /dev/null @@ -1,31 +0,0 @@ -PredictionType in candle_transformers::models::stable_diffusion::schedulers - Rust

PredictionType

Enum PredictionType 

Source
pub enum PredictionType {
-    Epsilon,
-    VPrediction,
-    Sample,
-}

Variants§

§

Epsilon

§

VPrediction

§

Sample

Trait Implementations§

Source§

impl Clone for PredictionType

Source§

fn clone(&self) -> PredictionType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PredictionType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Copy for PredictionType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/enum.TimestepSpacing.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/enum.TimestepSpacing.html deleted file mode 100644 index 8a8e3d2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/enum.TimestepSpacing.html +++ /dev/null @@ -1,33 +0,0 @@ -TimestepSpacing in candle_transformers::models::stable_diffusion::schedulers - Rust

TimestepSpacing

Enum TimestepSpacing 

Source
pub enum TimestepSpacing {
-    Leading,
-    Linspace,
-    Trailing,
-}
Expand description

Time step spacing for the diffusion process.

-

“linspace”, “leading”, “trailing” corresponds to annotation of Table 2. of the paper

-

Variants§

§

Leading

§

Linspace

§

Trailing

Trait Implementations§

Source§

impl Clone for TimestepSpacing

Source§

fn clone(&self) -> TimestepSpacing

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TimestepSpacing

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for TimestepSpacing

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for TimestepSpacing

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/index.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/index.html deleted file mode 100644 index 0e1767f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/index.html +++ /dev/null @@ -1,5 +0,0 @@ -candle_transformers::models::stable_diffusion::schedulers - Rust

Module schedulers

Module schedulers 

Source
Expand description

§Diffusion pipelines and models

-

Noise schedulers can be used to set the trade-off between -inference speed and quality.

-

Enums§

BetaSchedule
This represents how beta ranges from its minimum value to the maximum -during training.
PredictionType
TimestepSpacing
Time step spacing for the diffusion process.

Traits§

Scheduler
This trait represents a scheduler for the diffusion process.
SchedulerConfig
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/sidebar-items.js deleted file mode 100644 index b53a64d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["BetaSchedule","PredictionType","TimestepSpacing"],"trait":["Scheduler","SchedulerConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/trait.Scheduler.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/trait.Scheduler.html deleted file mode 100644 index 5a99e42..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/trait.Scheduler.html +++ /dev/null @@ -1,33 +0,0 @@ -Scheduler in candle_transformers::models::stable_diffusion::schedulers - Rust

Scheduler

Trait Scheduler 

Source
pub trait Scheduler {
-    // Required methods
-    fn timesteps(&self) -> &[usize];
-    fn add_noise(
-        &self,
-        original: &Tensor,
-        noise: Tensor,
-        timestep: usize,
-    ) -> Result<Tensor>;
-    fn init_noise_sigma(&self) -> f64;
-    fn scale_model_input(
-        &self,
-        sample: Tensor,
-        _timestep: usize,
-    ) -> Result<Tensor>;
-    fn step(
-        &mut self,
-        model_output: &Tensor,
-        timestep: usize,
-        sample: &Tensor,
-    ) -> Result<Tensor>;
-}
Expand description

This trait represents a scheduler for the diffusion process.

-

Required Methods§

Source

fn timesteps(&self) -> &[usize]

Source

fn add_noise( - &self, - original: &Tensor, - noise: Tensor, - timestep: usize, -) -> Result<Tensor>

Source

fn init_noise_sigma(&self) -> f64

Source

fn scale_model_input(&self, sample: Tensor, _timestep: usize) -> Result<Tensor>

Source

fn step( - &mut self, - model_output: &Tensor, - timestep: usize, - sample: &Tensor, -) -> Result<Tensor>

Implementors§

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/trait.SchedulerConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/trait.SchedulerConfig.html deleted file mode 100644 index 00fafea..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/schedulers/trait.SchedulerConfig.html +++ /dev/null @@ -1,7 +0,0 @@ -SchedulerConfig in candle_transformers::models::stable_diffusion::schedulers - Rust

SchedulerConfig

Trait SchedulerConfig 

Source
pub trait SchedulerConfig:
-    Debug
-    + Send
-    + Sync {
-    // Required method
-    fn build(&self, inference_steps: usize) -> Result<Box<dyn Scheduler>>;
-}

Required Methods§

Source

fn build(&self, inference_steps: usize) -> Result<Box<dyn Scheduler>>

Implementors§

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/sidebar-items.js deleted file mode 100644 index bcb00a6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["build_clip_transformer"],"mod":["attention","clip","ddim","ddpm","embeddings","euler_ancestral_discrete","resnet","schedulers","unet_2d","unet_2d_blocks","uni_pc","utils","vae"],"struct":["StableDiffusionConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/struct.StableDiffusionConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/struct.StableDiffusionConfig.html deleted file mode 100644 index 58df861..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/struct.StableDiffusionConfig.html +++ /dev/null @@ -1,65 +0,0 @@ -StableDiffusionConfig in candle_transformers::models::stable_diffusion - Rust

StableDiffusionConfig

Struct StableDiffusionConfig 

Source
pub struct StableDiffusionConfig {
-    pub width: usize,
-    pub height: usize,
-    pub clip: Config,
-    pub clip2: Option<Config>,
-    /* private fields */
-}

Fields§

§width: usize§height: usize§clip: Config§clip2: Option<Config>

Implementations§

Source§

impl StableDiffusionConfig

Source

pub fn v1_5( - sliced_attention_size: Option<usize>, - height: Option<usize>, - width: Option<usize>, -) -> Self

Source

pub fn v2_1( - sliced_attention_size: Option<usize>, - height: Option<usize>, - width: Option<usize>, -) -> Self

Source

pub fn sdxl( - sliced_attention_size: Option<usize>, - height: Option<usize>, - width: Option<usize>, -) -> Self

Source

pub fn sdxl_turbo( - sliced_attention_size: Option<usize>, - height: Option<usize>, - width: Option<usize>, -) -> Self

Source

pub fn ssd1b( - sliced_attention_size: Option<usize>, - height: Option<usize>, - width: Option<usize>, -) -> Self

Source

pub fn build_vae<P: AsRef<Path>>( - &self, - vae_weights: P, - device: &Device, - dtype: DType, -) -> Result<AutoEncoderKL>

Source

pub fn build_unet<P: AsRef<Path>>( - &self, - unet_weights: P, - device: &Device, - in_channels: usize, - use_flash_attn: bool, - dtype: DType, -) -> Result<UNet2DConditionModel>

Source

pub fn build_scheduler(&self, n_steps: usize) -> Result<Box<dyn Scheduler>>

Trait Implementations§

Source§

impl Clone for StableDiffusionConfig

Source§

fn clone(&self) -> StableDiffusionConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for StableDiffusionConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/index.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/index.html deleted file mode 100644 index 38a9a72..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/index.html +++ /dev/null @@ -1,4 +0,0 @@ -candle_transformers::models::stable_diffusion::unet_2d - Rust

Module unet_2d

Module unet_2d 

Source
Expand description

2D UNet Denoising Models

-

The 2D Unet models take as input a noisy sample and the current diffusion -timestep and return a denoised version of the input.

-

Structs§

BlockConfig
UNet2DConditionModel
UNet2DConditionModelConfig
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/sidebar-items.js deleted file mode 100644 index 542ecb8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["BlockConfig","UNet2DConditionModel","UNet2DConditionModelConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/struct.BlockConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/struct.BlockConfig.html deleted file mode 100644 index b98289e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/struct.BlockConfig.html +++ /dev/null @@ -1,33 +0,0 @@ -BlockConfig in candle_transformers::models::stable_diffusion::unet_2d - Rust

BlockConfig

Struct BlockConfig 

Source
pub struct BlockConfig {
-    pub out_channels: usize,
-    pub use_cross_attn: Option<usize>,
-    pub attention_head_dim: usize,
-}

Fields§

§out_channels: usize§use_cross_attn: Option<usize>

When None no cross-attn is used, when Some(d) then cross-attn is used and d is the -number of transformer blocks to be used.

-
§attention_head_dim: usize

Trait Implementations§

Source§

impl Clone for BlockConfig

Source§

fn clone(&self) -> BlockConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for BlockConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Copy for BlockConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/struct.UNet2DConditionModel.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/struct.UNet2DConditionModel.html deleted file mode 100644 index 445acbc..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/struct.UNet2DConditionModel.html +++ /dev/null @@ -1,43 +0,0 @@ -UNet2DConditionModel in candle_transformers::models::stable_diffusion::unet_2d - Rust

UNet2DConditionModel

Struct UNet2DConditionModel 

Source
pub struct UNet2DConditionModel { /* private fields */ }

Implementations§

Source§

impl UNet2DConditionModel

Source

pub fn new( - vs: VarBuilder<'_>, - in_channels: usize, - out_channels: usize, - use_flash_attn: bool, - config: UNet2DConditionModelConfig, -) -> Result<Self>

Source

pub fn forward( - &self, - xs: &Tensor, - timestep: f64, - encoder_hidden_states: &Tensor, -) -> Result<Tensor>

Source

pub fn forward_with_additional_residuals( - &self, - xs: &Tensor, - timestep: f64, - encoder_hidden_states: &Tensor, - down_block_additional_residuals: Option<&[Tensor]>, - mid_block_additional_residual: Option<&Tensor>, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for UNet2DConditionModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/struct.UNet2DConditionModelConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/struct.UNet2DConditionModelConfig.html deleted file mode 100644 index 2dec7ba..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d/struct.UNet2DConditionModelConfig.html +++ /dev/null @@ -1,40 +0,0 @@ -UNet2DConditionModelConfig in candle_transformers::models::stable_diffusion::unet_2d - Rust

UNet2DConditionModelConfig

Struct UNet2DConditionModelConfig 

Source
pub struct UNet2DConditionModelConfig {
-    pub center_input_sample: bool,
-    pub flip_sin_to_cos: bool,
-    pub freq_shift: f64,
-    pub blocks: Vec<BlockConfig>,
-    pub layers_per_block: usize,
-    pub downsample_padding: usize,
-    pub mid_block_scale_factor: f64,
-    pub norm_num_groups: usize,
-    pub norm_eps: f64,
-    pub cross_attention_dim: usize,
-    pub sliced_attention_size: Option<usize>,
-    pub use_linear_projection: bool,
-}

Fields§

§center_input_sample: bool§flip_sin_to_cos: bool§freq_shift: f64§blocks: Vec<BlockConfig>§layers_per_block: usize§downsample_padding: usize§mid_block_scale_factor: f64§norm_num_groups: usize§norm_eps: f64§cross_attention_dim: usize§sliced_attention_size: Option<usize>§use_linear_projection: bool

Trait Implementations§

Source§

impl Clone for UNet2DConditionModelConfig

Source§

fn clone(&self) -> UNet2DConditionModelConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for UNet2DConditionModelConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for UNet2DConditionModelConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/index.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/index.html deleted file mode 100644 index 9b998e0..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/index.html +++ /dev/null @@ -1,2 +0,0 @@ -candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

Module unet_2d_blocks

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/sidebar-items.js deleted file mode 100644 index 754d104..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["CrossAttnDownBlock2D","CrossAttnDownBlock2DConfig","CrossAttnUpBlock2D","CrossAttnUpBlock2DConfig","DownBlock2D","DownBlock2DConfig","DownEncoderBlock2D","DownEncoderBlock2DConfig","UNetMidBlock2D","UNetMidBlock2DConfig","UNetMidBlock2DCrossAttn","UNetMidBlock2DCrossAttnConfig","UpBlock2D","UpBlock2DConfig","UpDecoderBlock2D","UpDecoderBlock2DConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnDownBlock2D.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnDownBlock2D.html deleted file mode 100644 index bdf00d7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnDownBlock2D.html +++ /dev/null @@ -1,40 +0,0 @@ -CrossAttnDownBlock2D in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

CrossAttnDownBlock2D

Struct CrossAttnDownBlock2D 

Source
pub struct CrossAttnDownBlock2D {
-    pub config: CrossAttnDownBlock2DConfig,
-    /* private fields */
-}

Fields§

§config: CrossAttnDownBlock2DConfig

Implementations§

Source§

impl CrossAttnDownBlock2D

Source

pub fn new( - vs: VarBuilder<'_>, - in_channels: usize, - out_channels: usize, - temb_channels: Option<usize>, - use_flash_attn: bool, - config: CrossAttnDownBlock2DConfig, -) -> Result<Self>

Source

pub fn forward( - &self, - xs: &Tensor, - temb: Option<&Tensor>, - encoder_hidden_states: Option<&Tensor>, -) -> Result<(Tensor, Vec<Tensor>)>

Trait Implementations§

Source§

impl Debug for CrossAttnDownBlock2D

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnDownBlock2DConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnDownBlock2DConfig.html deleted file mode 100644 index de1361c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnDownBlock2DConfig.html +++ /dev/null @@ -1,34 +0,0 @@ -CrossAttnDownBlock2DConfig in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

CrossAttnDownBlock2DConfig

Struct CrossAttnDownBlock2DConfig 

Source
pub struct CrossAttnDownBlock2DConfig {
-    pub downblock: DownBlock2DConfig,
-    pub attn_num_head_channels: usize,
-    pub cross_attention_dim: usize,
-    pub sliced_attention_size: Option<usize>,
-    pub use_linear_projection: bool,
-    pub transformer_layers_per_block: usize,
-}

Fields§

§downblock: DownBlock2DConfig§attn_num_head_channels: usize§cross_attention_dim: usize§sliced_attention_size: Option<usize>§use_linear_projection: bool§transformer_layers_per_block: usize

Trait Implementations§

Source§

impl Clone for CrossAttnDownBlock2DConfig

Source§

fn clone(&self) -> CrossAttnDownBlock2DConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CrossAttnDownBlock2DConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for CrossAttnDownBlock2DConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for CrossAttnDownBlock2DConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnUpBlock2D.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnUpBlock2D.html deleted file mode 100644 index 8606ec3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnUpBlock2D.html +++ /dev/null @@ -1,45 +0,0 @@ -CrossAttnUpBlock2D in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

CrossAttnUpBlock2D

Struct CrossAttnUpBlock2D 

Source
pub struct CrossAttnUpBlock2D {
-    pub upblock: UpBlock2D,
-    pub attentions: Vec<SpatialTransformer>,
-    pub config: CrossAttnUpBlock2DConfig,
-    /* private fields */
-}

Fields§

§upblock: UpBlock2D§attentions: Vec<SpatialTransformer>§config: CrossAttnUpBlock2DConfig

Implementations§

Source§

impl CrossAttnUpBlock2D

Source

pub fn new( - vs: VarBuilder<'_>, - in_channels: usize, - prev_output_channels: usize, - out_channels: usize, - temb_channels: Option<usize>, - use_flash_attn: bool, - config: CrossAttnUpBlock2DConfig, -) -> Result<Self>

Source

pub fn forward( - &self, - xs: &Tensor, - res_xs: &[Tensor], - temb: Option<&Tensor>, - upsample_size: Option<(usize, usize)>, - encoder_hidden_states: Option<&Tensor>, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for CrossAttnUpBlock2D

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnUpBlock2DConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnUpBlock2DConfig.html deleted file mode 100644 index 33823ee..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.CrossAttnUpBlock2DConfig.html +++ /dev/null @@ -1,34 +0,0 @@ -CrossAttnUpBlock2DConfig in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

CrossAttnUpBlock2DConfig

Struct CrossAttnUpBlock2DConfig 

Source
pub struct CrossAttnUpBlock2DConfig {
-    pub upblock: UpBlock2DConfig,
-    pub attn_num_head_channels: usize,
-    pub cross_attention_dim: usize,
-    pub sliced_attention_size: Option<usize>,
-    pub use_linear_projection: bool,
-    pub transformer_layers_per_block: usize,
-}

Fields§

§upblock: UpBlock2DConfig§attn_num_head_channels: usize§cross_attention_dim: usize§sliced_attention_size: Option<usize>§use_linear_projection: bool§transformer_layers_per_block: usize

Trait Implementations§

Source§

impl Clone for CrossAttnUpBlock2DConfig

Source§

fn clone(&self) -> CrossAttnUpBlock2DConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CrossAttnUpBlock2DConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for CrossAttnUpBlock2DConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for CrossAttnUpBlock2DConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownBlock2D.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownBlock2D.html deleted file mode 100644 index 13b5d1d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownBlock2D.html +++ /dev/null @@ -1,38 +0,0 @@ -DownBlock2D in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

DownBlock2D

Struct DownBlock2D 

Source
pub struct DownBlock2D {
-    pub config: DownBlock2DConfig,
-    /* private fields */
-}

Fields§

§config: DownBlock2DConfig

Implementations§

Source§

impl DownBlock2D

Source

pub fn new( - vs: VarBuilder<'_>, - in_channels: usize, - out_channels: usize, - temb_channels: Option<usize>, - config: DownBlock2DConfig, -) -> Result<Self>

Source

pub fn forward( - &self, - xs: &Tensor, - temb: Option<&Tensor>, -) -> Result<(Tensor, Vec<Tensor>)>

Trait Implementations§

Source§

impl Debug for DownBlock2D

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownBlock2DConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownBlock2DConfig.html deleted file mode 100644 index 2704c92..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownBlock2DConfig.html +++ /dev/null @@ -1,34 +0,0 @@ -DownBlock2DConfig in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

DownBlock2DConfig

Struct DownBlock2DConfig 

Source
pub struct DownBlock2DConfig {
-    pub num_layers: usize,
-    pub resnet_eps: f64,
-    pub resnet_groups: usize,
-    pub output_scale_factor: f64,
-    pub add_downsample: bool,
-    pub downsample_padding: usize,
-}

Fields§

§num_layers: usize§resnet_eps: f64§resnet_groups: usize§output_scale_factor: f64§add_downsample: bool§downsample_padding: usize

Trait Implementations§

Source§

impl Clone for DownBlock2DConfig

Source§

fn clone(&self) -> DownBlock2DConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DownBlock2DConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for DownBlock2DConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for DownBlock2DConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownEncoderBlock2D.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownEncoderBlock2D.html deleted file mode 100644 index 7290b1a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownEncoderBlock2D.html +++ /dev/null @@ -1,34 +0,0 @@ -DownEncoderBlock2D in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

DownEncoderBlock2D

Struct DownEncoderBlock2D 

Source
pub struct DownEncoderBlock2D {
-    pub config: DownEncoderBlock2DConfig,
-    /* private fields */
-}

Fields§

§config: DownEncoderBlock2DConfig

Implementations§

Source§

impl DownEncoderBlock2D

Source

pub fn new( - vs: VarBuilder<'_>, - in_channels: usize, - out_channels: usize, - config: DownEncoderBlock2DConfig, -) -> Result<Self>

Trait Implementations§

Source§

impl Debug for DownEncoderBlock2D

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for DownEncoderBlock2D

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownEncoderBlock2DConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownEncoderBlock2DConfig.html deleted file mode 100644 index 2cdc079..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.DownEncoderBlock2DConfig.html +++ /dev/null @@ -1,34 +0,0 @@ -DownEncoderBlock2DConfig in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

DownEncoderBlock2DConfig

Struct DownEncoderBlock2DConfig 

Source
pub struct DownEncoderBlock2DConfig {
-    pub num_layers: usize,
-    pub resnet_eps: f64,
-    pub resnet_groups: usize,
-    pub output_scale_factor: f64,
-    pub add_downsample: bool,
-    pub downsample_padding: usize,
-}

Fields§

§num_layers: usize§resnet_eps: f64§resnet_groups: usize§output_scale_factor: f64§add_downsample: bool§downsample_padding: usize

Trait Implementations§

Source§

impl Clone for DownEncoderBlock2DConfig

Source§

fn clone(&self) -> DownEncoderBlock2DConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DownEncoderBlock2DConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for DownEncoderBlock2DConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for DownEncoderBlock2DConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2D.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2D.html deleted file mode 100644 index ff36d87..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2D.html +++ /dev/null @@ -1,33 +0,0 @@ -UNetMidBlock2D in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

UNetMidBlock2D

Struct UNetMidBlock2D 

Source
pub struct UNetMidBlock2D {
-    pub config: UNetMidBlock2DConfig,
-    /* private fields */
-}

Fields§

§config: UNetMidBlock2DConfig

Implementations§

Source§

impl UNetMidBlock2D

Source

pub fn new( - vs: VarBuilder<'_>, - in_channels: usize, - temb_channels: Option<usize>, - config: UNetMidBlock2DConfig, -) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, temb: Option<&Tensor>) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for UNetMidBlock2D

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2DConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2DConfig.html deleted file mode 100644 index fcf0a1c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2DConfig.html +++ /dev/null @@ -1,33 +0,0 @@ -UNetMidBlock2DConfig in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

UNetMidBlock2DConfig

Struct UNetMidBlock2DConfig 

Source
pub struct UNetMidBlock2DConfig {
-    pub num_layers: usize,
-    pub resnet_eps: f64,
-    pub resnet_groups: Option<usize>,
-    pub attn_num_head_channels: Option<usize>,
-    pub output_scale_factor: f64,
-}

Fields§

§num_layers: usize§resnet_eps: f64§resnet_groups: Option<usize>§attn_num_head_channels: Option<usize>§output_scale_factor: f64

Trait Implementations§

Source§

impl Clone for UNetMidBlock2DConfig

Source§

fn clone(&self) -> UNetMidBlock2DConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for UNetMidBlock2DConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for UNetMidBlock2DConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for UNetMidBlock2DConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2DCrossAttn.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2DCrossAttn.html deleted file mode 100644 index f36ba44..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2DCrossAttn.html +++ /dev/null @@ -1,39 +0,0 @@ -UNetMidBlock2DCrossAttn in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

UNetMidBlock2DCrossAttn

Struct UNetMidBlock2DCrossAttn 

Source
pub struct UNetMidBlock2DCrossAttn {
-    pub config: UNetMidBlock2DCrossAttnConfig,
-    /* private fields */
-}

Fields§

§config: UNetMidBlock2DCrossAttnConfig

Implementations§

Source§

impl UNetMidBlock2DCrossAttn

Source

pub fn new( - vs: VarBuilder<'_>, - in_channels: usize, - temb_channels: Option<usize>, - use_flash_attn: bool, - config: UNetMidBlock2DCrossAttnConfig, -) -> Result<Self>

Source

pub fn forward( - &self, - xs: &Tensor, - temb: Option<&Tensor>, - encoder_hidden_states: Option<&Tensor>, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for UNetMidBlock2DCrossAttn

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2DCrossAttnConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2DCrossAttnConfig.html deleted file mode 100644 index 864cead..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UNetMidBlock2DCrossAttnConfig.html +++ /dev/null @@ -1,37 +0,0 @@ -UNetMidBlock2DCrossAttnConfig in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

UNetMidBlock2DCrossAttnConfig

Struct UNetMidBlock2DCrossAttnConfig 

Source
pub struct UNetMidBlock2DCrossAttnConfig {
-    pub num_layers: usize,
-    pub resnet_eps: f64,
-    pub resnet_groups: Option<usize>,
-    pub attn_num_head_channels: usize,
-    pub output_scale_factor: f64,
-    pub cross_attn_dim: usize,
-    pub sliced_attention_size: Option<usize>,
-    pub use_linear_projection: bool,
-    pub transformer_layers_per_block: usize,
-}

Fields§

§num_layers: usize§resnet_eps: f64§resnet_groups: Option<usize>§attn_num_head_channels: usize§output_scale_factor: f64§cross_attn_dim: usize§sliced_attention_size: Option<usize>§use_linear_projection: bool§transformer_layers_per_block: usize

Trait Implementations§

Source§

impl Clone for UNetMidBlock2DCrossAttnConfig

Source§

fn clone(&self) -> UNetMidBlock2DCrossAttnConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for UNetMidBlock2DCrossAttnConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for UNetMidBlock2DCrossAttnConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for UNetMidBlock2DCrossAttnConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpBlock2D.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpBlock2D.html deleted file mode 100644 index 2f8bf06..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpBlock2D.html +++ /dev/null @@ -1,42 +0,0 @@ -UpBlock2D in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

UpBlock2D

pub struct UpBlock2D {
-    pub resnets: Vec<ResnetBlock2D>,
-    pub config: UpBlock2DConfig,
-    /* private fields */
-}

Fields§

§resnets: Vec<ResnetBlock2D>§config: UpBlock2DConfig

Implementations§

Source§

impl UpBlock2D

Source

pub fn new( - vs: VarBuilder<'_>, - in_channels: usize, - prev_output_channels: usize, - out_channels: usize, - temb_channels: Option<usize>, - config: UpBlock2DConfig, -) -> Result<Self>

Source

pub fn forward( - &self, - xs: &Tensor, - res_xs: &[Tensor], - temb: Option<&Tensor>, - upsample_size: Option<(usize, usize)>, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for UpBlock2D

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpBlock2DConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpBlock2DConfig.html deleted file mode 100644 index cb2601f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpBlock2DConfig.html +++ /dev/null @@ -1,33 +0,0 @@ -UpBlock2DConfig in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

UpBlock2DConfig

Struct UpBlock2DConfig 

Source
pub struct UpBlock2DConfig {
-    pub num_layers: usize,
-    pub resnet_eps: f64,
-    pub resnet_groups: usize,
-    pub output_scale_factor: f64,
-    pub add_upsample: bool,
-}

Fields§

§num_layers: usize§resnet_eps: f64§resnet_groups: usize§output_scale_factor: f64§add_upsample: bool

Trait Implementations§

Source§

impl Clone for UpBlock2DConfig

Source§

fn clone(&self) -> UpBlock2DConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for UpBlock2DConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for UpBlock2DConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for UpBlock2DConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpDecoderBlock2D.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpDecoderBlock2D.html deleted file mode 100644 index a22f4a2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpDecoderBlock2D.html +++ /dev/null @@ -1,34 +0,0 @@ -UpDecoderBlock2D in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

UpDecoderBlock2D

Struct UpDecoderBlock2D 

Source
pub struct UpDecoderBlock2D {
-    pub config: UpDecoderBlock2DConfig,
-    /* private fields */
-}

Fields§

§config: UpDecoderBlock2DConfig

Implementations§

Source§

impl UpDecoderBlock2D

Source

pub fn new( - vs: VarBuilder<'_>, - in_channels: usize, - out_channels: usize, - config: UpDecoderBlock2DConfig, -) -> Result<Self>

Trait Implementations§

Source§

impl Debug for UpDecoderBlock2D

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for UpDecoderBlock2D

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpDecoderBlock2DConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpDecoderBlock2DConfig.html deleted file mode 100644 index 90590aa..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/unet_2d_blocks/struct.UpDecoderBlock2DConfig.html +++ /dev/null @@ -1,33 +0,0 @@ -UpDecoderBlock2DConfig in candle_transformers::models::stable_diffusion::unet_2d_blocks - Rust

UpDecoderBlock2DConfig

Struct UpDecoderBlock2DConfig 

Source
pub struct UpDecoderBlock2DConfig {
-    pub num_layers: usize,
-    pub resnet_eps: f64,
-    pub resnet_groups: usize,
-    pub output_scale_factor: f64,
-    pub add_upsample: bool,
-}

Fields§

§num_layers: usize§resnet_eps: f64§resnet_groups: usize§output_scale_factor: f64§add_upsample: bool

Trait Implementations§

Source§

impl Clone for UpDecoderBlock2DConfig

Source§

fn clone(&self) -> UpDecoderBlock2DConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for UpDecoderBlock2DConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for UpDecoderBlock2DConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for UpDecoderBlock2DConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.AlgorithmType.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.AlgorithmType.html deleted file mode 100644 index f3892e2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.AlgorithmType.html +++ /dev/null @@ -1,30 +0,0 @@ -AlgorithmType in candle_transformers::models::stable_diffusion::uni_pc - Rust

AlgorithmType

Enum AlgorithmType 

Source
pub enum AlgorithmType {
-    DpmSolverPlusPlus,
-    SdeDpmSolverPlusPlus,
-}

Variants§

§

DpmSolverPlusPlus

§

SdeDpmSolverPlusPlus

Trait Implementations§

Source§

impl Clone for AlgorithmType

Source§

fn clone(&self) -> AlgorithmType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AlgorithmType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for AlgorithmType

Source§

fn default() -> AlgorithmType

Returns the “default value” for a type. Read more
Source§

impl Copy for AlgorithmType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.CorrectorConfiguration.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.CorrectorConfiguration.html deleted file mode 100644 index 25608ac..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.CorrectorConfiguration.html +++ /dev/null @@ -1,32 +0,0 @@ -CorrectorConfiguration in candle_transformers::models::stable_diffusion::uni_pc - Rust

CorrectorConfiguration

Enum CorrectorConfiguration 

Source
pub enum CorrectorConfiguration {
-    Disabled,
-    Enabled {
-        skip_steps: HashSet<usize>,
-    },
-}

Variants§

§

Disabled

§

Enabled

Fields

§skip_steps: HashSet<usize>

Implementations§

Source§

impl CorrectorConfiguration

Source

pub fn new(disabled_steps: impl IntoIterator<Item = usize>) -> Self

Trait Implementations§

Source§

impl Clone for CorrectorConfiguration

Source§

fn clone(&self) -> CorrectorConfiguration

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CorrectorConfiguration

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for CorrectorConfiguration

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.FinalSigmasType.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.FinalSigmasType.html deleted file mode 100644 index 188fa12..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.FinalSigmasType.html +++ /dev/null @@ -1,30 +0,0 @@ -FinalSigmasType in candle_transformers::models::stable_diffusion::uni_pc - Rust

FinalSigmasType

Enum FinalSigmasType 

Source
pub enum FinalSigmasType {
-    Zero,
-    SigmaMin,
-}

Variants§

§

Zero

§

SigmaMin

Trait Implementations§

Source§

impl Clone for FinalSigmasType

Source§

fn clone(&self) -> FinalSigmasType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for FinalSigmasType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for FinalSigmasType

Source§

fn default() -> FinalSigmasType

Returns the “default value” for a type. Read more
Source§

impl Copy for FinalSigmasType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.SigmaSchedule.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.SigmaSchedule.html deleted file mode 100644 index abad225..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.SigmaSchedule.html +++ /dev/null @@ -1,30 +0,0 @@ -SigmaSchedule in candle_transformers::models::stable_diffusion::uni_pc - Rust

SigmaSchedule

Enum SigmaSchedule 

Source
pub enum SigmaSchedule {
-    Karras(KarrasSigmaSchedule),
-    Exponential(ExponentialSigmaSchedule),
-}

Variants§

Trait Implementations§

Source§

impl Clone for SigmaSchedule

Source§

fn clone(&self) -> SigmaSchedule

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SigmaSchedule

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for SigmaSchedule

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for SigmaSchedule

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.SolverType.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.SolverType.html deleted file mode 100644 index a7d6a79..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.SolverType.html +++ /dev/null @@ -1,30 +0,0 @@ -SolverType in candle_transformers::models::stable_diffusion::uni_pc - Rust

SolverType

Enum SolverType 

Source
pub enum SolverType {
-    Bh1,
-    Bh2,
-}

Variants§

§

Bh1

§

Bh2

Trait Implementations§

Source§

impl Clone for SolverType

Source§

fn clone(&self) -> SolverType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SolverType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for SolverType

Source§

fn default() -> SolverType

Returns the “default value” for a type. Read more
Source§

impl Copy for SolverType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.TimestepSchedule.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.TimestepSchedule.html deleted file mode 100644 index 9c97491..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/enum.TimestepSchedule.html +++ /dev/null @@ -1,32 +0,0 @@ -TimestepSchedule in candle_transformers::models::stable_diffusion::uni_pc - Rust

TimestepSchedule

Enum TimestepSchedule 

Source
pub enum TimestepSchedule {
-    FromSigmas,
-    Linspace,
-}

Variants§

§

FromSigmas

Timesteps will be determined by interpolation of sigmas

-
§

Linspace

Timesteps will be separated by regular intervals

-

Trait Implementations§

Source§

impl Clone for TimestepSchedule

Source§

fn clone(&self) -> TimestepSchedule

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TimestepSchedule

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/index.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/index.html deleted file mode 100644 index 331b31c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/index.html +++ /dev/null @@ -1,13 +0,0 @@ -candle_transformers::models::stable_diffusion::uni_pc - Rust

Module uni_pc

Module uni_pc 

Source
Expand description

§UniPC Scheduler

-

UniPC is a training-free framework designed for the fast sampling of diffusion models, which consists of a -corrector (UniC) and a predictor (UniP) that share a unified analytical form and support arbitrary orders.

-

UniPC is by design model-agnostic, supporting pixel-space/latent-space DPMs on unconditional/conditional -sampling. It can also be applied to both noise prediction and data prediction models. Compared with prior -methods, UniPC converges faster thanks to the increased order of accuracy. Both quantitative and qualitative -results show UniPC can improve sampling quality, especially at very low step counts (5~10).

-

For more information, see the original publication: -UniPC: A Unified Predictor-Corrector Framework for Fast Sampling of Diffusion Models, W. Zhao et al, 2023. -https://arxiv.org/abs/2302.04867

-

This work is based largely on UniPC implementation from the diffusers python package: -https://raw.githubusercontent.com/huggingface/diffusers/e8aacda762e311505ba05ae340af23b149e37af3/src/diffusers/schedulers/scheduling_unipc_multistep.py

-

Structs§

EdmDpmMultistepScheduler
ExponentialSigmaSchedule
KarrasSigmaSchedule
UniPCSchedulerConfig

Enums§

AlgorithmType
CorrectorConfiguration
FinalSigmasType
SigmaSchedule
SolverType
TimestepSchedule
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/sidebar-items.js deleted file mode 100644 index 779c59b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["AlgorithmType","CorrectorConfiguration","FinalSigmasType","SigmaSchedule","SolverType","TimestepSchedule"],"struct":["EdmDpmMultistepScheduler","ExponentialSigmaSchedule","KarrasSigmaSchedule","UniPCSchedulerConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.EdmDpmMultistepScheduler.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.EdmDpmMultistepScheduler.html deleted file mode 100644 index cb6bf47..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.EdmDpmMultistepScheduler.html +++ /dev/null @@ -1,38 +0,0 @@ -EdmDpmMultistepScheduler in candle_transformers::models::stable_diffusion::uni_pc - Rust

EdmDpmMultistepScheduler

Struct EdmDpmMultistepScheduler 

Source
pub struct EdmDpmMultistepScheduler { /* private fields */ }

Implementations§

Source§

impl EdmDpmMultistepScheduler

Source

pub fn new( - config: UniPCSchedulerConfig, - num_inference_steps: usize, -) -> Result<Self>

Trait Implementations§

Source§

impl Scheduler for EdmDpmMultistepScheduler

Source§

fn step( - &mut self, - model_output: &Tensor, - timestep: usize, - sample: &Tensor, -) -> Result<Tensor>

Source§

fn scale_model_input(&self, sample: Tensor, _timestep: usize) -> Result<Tensor>

Source§

fn timesteps(&self) -> &[usize]

Source§

fn add_noise( - &self, - original: &Tensor, - noise: Tensor, - timestep: usize, -) -> Result<Tensor>

Source§

fn init_noise_sigma(&self) -> f64

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.ExponentialSigmaSchedule.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.ExponentialSigmaSchedule.html deleted file mode 100644 index dda3e8f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.ExponentialSigmaSchedule.html +++ /dev/null @@ -1,27 +0,0 @@ -ExponentialSigmaSchedule in candle_transformers::models::stable_diffusion::uni_pc - Rust

ExponentialSigmaSchedule

Struct ExponentialSigmaSchedule 

Source
pub struct ExponentialSigmaSchedule { /* private fields */ }

Trait Implementations§

Source§

impl Clone for ExponentialSigmaSchedule

Source§

fn clone(&self) -> ExponentialSigmaSchedule

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ExponentialSigmaSchedule

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ExponentialSigmaSchedule

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for ExponentialSigmaSchedule

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.KarrasSigmaSchedule.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.KarrasSigmaSchedule.html deleted file mode 100644 index 063c56c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.KarrasSigmaSchedule.html +++ /dev/null @@ -1,31 +0,0 @@ -KarrasSigmaSchedule in candle_transformers::models::stable_diffusion::uni_pc - Rust

KarrasSigmaSchedule

Struct KarrasSigmaSchedule 

Source
pub struct KarrasSigmaSchedule {
-    pub sigma_min: f64,
-    pub sigma_max: f64,
-    pub rho: f64,
-}

Fields§

§sigma_min: f64§sigma_max: f64§rho: f64

Trait Implementations§

Source§

impl Clone for KarrasSigmaSchedule

Source§

fn clone(&self) -> KarrasSigmaSchedule

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for KarrasSigmaSchedule

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for KarrasSigmaSchedule

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for KarrasSigmaSchedule

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.UniPCSchedulerConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.UniPCSchedulerConfig.html deleted file mode 100644 index fd801b2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/uni_pc/struct.UniPCSchedulerConfig.html +++ /dev/null @@ -1,50 +0,0 @@ -UniPCSchedulerConfig in candle_transformers::models::stable_diffusion::uni_pc - Rust

UniPCSchedulerConfig

Struct UniPCSchedulerConfig 

Source
pub struct UniPCSchedulerConfig {
-    pub corrector: CorrectorConfiguration,
-    pub sigma_schedule: SigmaSchedule,
-    pub timestep_schedule: TimestepSchedule,
-    pub solver_order: usize,
-    pub prediction_type: PredictionType,
-    pub num_training_timesteps: usize,
-    pub thresholding: bool,
-    pub dynamic_thresholding_ratio: f64,
-    pub sample_max_value: f64,
-    pub solver_type: SolverType,
-    pub lower_order_final: bool,
-}

Fields§

§corrector: CorrectorConfiguration

Configure the UNIC corrector. By default it is disabled

-
§sigma_schedule: SigmaSchedule

Determines how sigma relates to a given timestep

-
§timestep_schedule: TimestepSchedule

Determines the points

-
§solver_order: usize

The solver order which can be 1 or higher. It is recommended to use solver_order=2 for guided -sampling, and solver_order=3 for unconditional sampling.

-
§prediction_type: PredictionType

Prediction type of the scheduler function

-
§num_training_timesteps: usize§thresholding: bool

Whether to use the “dynamic thresholding” method. This is unsuitable for latent-space diffusion models such -as Stable Diffusion.

-
§dynamic_thresholding_ratio: f64

The ratio for the dynamic thresholding method. Valid only when thresholding=True.

-
§sample_max_value: f64

The threshold value for dynamic thresholding.

-
§solver_type: SolverType§lower_order_final: bool

Whether to use lower-order solvers in the final steps.

-

Trait Implementations§

Source§

impl Clone for UniPCSchedulerConfig

Source§

fn clone(&self) -> UniPCSchedulerConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for UniPCSchedulerConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for UniPCSchedulerConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl SchedulerConfig for UniPCSchedulerConfig

Source§

fn build(&self, inference_steps: usize) -> Result<Box<dyn Scheduler>>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/fn.interp.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/fn.interp.html deleted file mode 100644 index 1281310..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/fn.interp.html +++ /dev/null @@ -1 +0,0 @@ -interp in candle_transformers::models::stable_diffusion::utils - Rust

interp

Function interp 

Source
pub fn interp(x: &[f64], xp: &[f64], fp: &[f64]) -> Vec<f64>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/fn.linspace.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/fn.linspace.html deleted file mode 100644 index a017a36..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/fn.linspace.html +++ /dev/null @@ -1 +0,0 @@ -linspace in candle_transformers::models::stable_diffusion::utils - Rust

linspace

Function linspace 

Source
pub fn linspace(start: f64, stop: f64, steps: usize) -> Result<Tensor>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/index.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/index.html deleted file mode 100644 index 3d507b5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::stable_diffusion::utils - Rust

Module utils

Module utils 

Source

Functions§

interp
linspace
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/sidebar-items.js deleted file mode 100644 index 49cf7a1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/utils/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["interp","linspace"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/index.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/index.html deleted file mode 100644 index 19bb6c5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/index.html +++ /dev/null @@ -1,5 +0,0 @@ -candle_transformers::models::stable_diffusion::vae - Rust

Module vae

Expand description

§Variational Auto-Encoder (VAE) Models.

-

Auto-encoder models compress their input to a usually smaller latent space -before expanding it back to its original shape. This results in the latent values -compressing the original information.

-

Structs§

AutoEncoderKL
AutoEncoderKLConfig
DiagonalGaussianDistribution
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/sidebar-items.js deleted file mode 100644 index 81b2352..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["AutoEncoderKL","AutoEncoderKLConfig","DiagonalGaussianDistribution"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/struct.AutoEncoderKL.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/struct.AutoEncoderKL.html deleted file mode 100644 index 3dc4a3f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/struct.AutoEncoderKL.html +++ /dev/null @@ -1,35 +0,0 @@ -AutoEncoderKL in candle_transformers::models::stable_diffusion::vae - Rust

AutoEncoderKL

Struct AutoEncoderKL 

Source
pub struct AutoEncoderKL {
-    pub config: AutoEncoderKLConfig,
-    /* private fields */
-}

Fields§

§config: AutoEncoderKLConfig

Implementations§

Source§

impl AutoEncoderKL

Source

pub fn new( - vs: VarBuilder<'_>, - in_channels: usize, - out_channels: usize, - config: AutoEncoderKLConfig, -) -> Result<Self>

Source

pub fn encode(&self, xs: &Tensor) -> Result<DiagonalGaussianDistribution>

Returns the distribution in the latent space.

-
Source

pub fn decode(&self, xs: &Tensor) -> Result<Tensor>

Takes as input some sampled values.

-

Trait Implementations§

Source§

impl Debug for AutoEncoderKL

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/struct.AutoEncoderKLConfig.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/struct.AutoEncoderKLConfig.html deleted file mode 100644 index 620c5c9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/struct.AutoEncoderKLConfig.html +++ /dev/null @@ -1,34 +0,0 @@ -AutoEncoderKLConfig in candle_transformers::models::stable_diffusion::vae - Rust

AutoEncoderKLConfig

Struct AutoEncoderKLConfig 

Source
pub struct AutoEncoderKLConfig {
-    pub block_out_channels: Vec<usize>,
-    pub layers_per_block: usize,
-    pub latent_channels: usize,
-    pub norm_num_groups: usize,
-    pub use_quant_conv: bool,
-    pub use_post_quant_conv: bool,
-}

Fields§

§block_out_channels: Vec<usize>§layers_per_block: usize§latent_channels: usize§norm_num_groups: usize§use_quant_conv: bool§use_post_quant_conv: bool

Trait Implementations§

Source§

impl Clone for AutoEncoderKLConfig

Source§

fn clone(&self) -> AutoEncoderKLConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AutoEncoderKLConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for AutoEncoderKLConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/struct.DiagonalGaussianDistribution.html b/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/struct.DiagonalGaussianDistribution.html deleted file mode 100644 index 0426ebf..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_diffusion/vae/struct.DiagonalGaussianDistribution.html +++ /dev/null @@ -1,25 +0,0 @@ -DiagonalGaussianDistribution in candle_transformers::models::stable_diffusion::vae - Rust

DiagonalGaussianDistribution

Struct DiagonalGaussianDistribution 

Source
pub struct DiagonalGaussianDistribution { /* private fields */ }

Implementations§

Source§

impl DiagonalGaussianDistribution

Source

pub fn new(parameters: &Tensor) -> Result<Self>

Source

pub fn sample(&self) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_lm/index.html b/network-poc/target-native/doc/candle_transformers/models/stable_lm/index.html deleted file mode 100644 index 9d1217b..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_lm/index.html +++ /dev/null @@ -1,15 +0,0 @@ -candle_transformers::models::stable_lm - Rust

Module stable_lm

Module stable_lm 

Source
Expand description

StableLM model implementation.

-

StableLM is a family of language models trained by Stability AI. -This implementation supports the StableLM architecture.

-

Key characteristics:

-
    -
  • Grouped query attention (GQA)
  • -
  • Layer normalization
  • -
  • Rotary positional embeddings (RoPE)
  • -
  • Support for different model sizes (3B, 7B)
  • -
-

References:

- -

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_lm/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stable_lm/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_lm/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_lm/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/stable_lm/struct.Config.html deleted file mode 100644 index 74b903e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_lm/struct.Config.html +++ /dev/null @@ -1,30 +0,0 @@ -Config in candle_transformers::models::stable_lm - Rust

Config

Struct Config 

Source
pub struct Config { /* private fields */ }

Implementations§

Source§

impl Config

Source

pub fn stablelm_3b_4e1t(use_flash_attn: bool) -> Self

Source

pub fn head_dim(&self) -> usize

Source

pub fn rotary_ndims(&self) -> usize

Source

pub fn num_kv_groups(&self) -> usize

Source

pub fn set_use_flash_attn(&mut self, use_flash_attn: bool)

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stable_lm/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/stable_lm/struct.Model.html deleted file mode 100644 index 853646e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stable_lm/struct.Model.html +++ /dev/null @@ -1,29 +0,0 @@ -Model in candle_transformers::models::stable_lm - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/starcoder2/index.html b/network-poc/target-native/doc/candle_transformers/models/starcoder2/index.html deleted file mode 100644 index 2cb5053..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/starcoder2/index.html +++ /dev/null @@ -1,17 +0,0 @@ -candle_transformers::models::starcoder2 - Rust

Module starcoder2

Module starcoder2 

Source
Expand description

StarCoder model implementation with quantization support.

-

StarCoder is a large language model optimized for code generation. -This implementation provides quantization for reduced memory and compute.

-

Key characteristics:

-
    -
  • Causal self-attention mechanism
  • -
  • Multi-query attention (MQA)
  • -
  • LayerNorm for normalization
  • -
  • Absolute positional embeddings
  • -
  • Support for 8-bit quantization
  • -
-

References:

- -

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/starcoder2/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/starcoder2/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/starcoder2/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/starcoder2/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/starcoder2/struct.Config.html deleted file mode 100644 index e80c1dc..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/starcoder2/struct.Config.html +++ /dev/null @@ -1,29 +0,0 @@ -Config in candle_transformers::models::starcoder2 - Rust

Config

Struct Config 

Source
pub struct Config { /* private fields */ }

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/starcoder2/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/starcoder2/struct.Model.html deleted file mode 100644 index 1e67395..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/starcoder2/struct.Model.html +++ /dev/null @@ -1,31 +0,0 @@ -Model in candle_transformers::models::starcoder2 - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/enum.EmbedDim.html b/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/enum.EmbedDim.html deleted file mode 100644 index 31ba392..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/enum.EmbedDim.html +++ /dev/null @@ -1,37 +0,0 @@ -EmbedDim in candle_transformers::models::stella_en_v5 - Rust

EmbedDim

Enum EmbedDim 

Source
pub enum EmbedDim {
-    Dim256,
-    Dim768,
-    Dim1024,
-    Dim2048,
-    Dim4096,
-    Dim6144,
-    Dim8192,
-}
Expand description

An enum variant representing the Embedding head dimensions stella is trained on -As the model-card suggests, D1024 is good enough for most cases

-

Variants§

§

Dim256

§

Dim768

§

Dim1024

§

Dim2048

§

Dim4096

§

Dim6144

§

Dim8192

Implementations§

Source§

impl EmbedDim

Source

pub fn config(&self, in_features: usize) -> EmbedHead

Trait Implementations§

Source§

impl Clone for EmbedDim

Source§

fn clone(&self) -> EmbedDim

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EmbedDim

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for EmbedDim

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for EmbedDim

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/enum.ModelVariant.html b/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/enum.ModelVariant.html deleted file mode 100644 index 56e2ae5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/enum.ModelVariant.html +++ /dev/null @@ -1,35 +0,0 @@ -ModelVariant in candle_transformers::models::stella_en_v5 - Rust

ModelVariant

Enum ModelVariant 

Source
pub enum ModelVariant {
-    Large,
-    Small,
-}

Variants§

§

Large

§

Small

Trait Implementations§

Source§

impl Clone for ModelVariant

Source§

fn clone(&self) -> ModelVariant

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ModelVariant

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ModelVariant

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for ModelVariant

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for ModelVariant

Source§

fn eq(&self, other: &ModelVariant) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for ModelVariant

Source§

impl StructuralPartialEq for ModelVariant

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/index.html b/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/index.html deleted file mode 100644 index 51d96fc..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/index.html +++ /dev/null @@ -1,18 +0,0 @@ -candle_transformers::models::stella_en_v5 - Rust

Module stella_en_v5

Module stella_en_v5 

Source
Expand description

Stella v5 model implementation.

-

Stella is a dense text embedding model optimized for retrieval and similarity tasks. -This implementation provides support for multiple embedding dimensions.

-

Key characteristics:

-
    -
  • Dense text embeddings optimized for similarity search
  • -
  • Multiple output dimension support (256 to 8192)
  • -
  • Grouped query attention (GQA)
  • -
  • RMSNorm for layer normalization
  • -
  • Rotary positional embeddings (RoPE)
  • -
-

References:

- -

Structs§

Config
EmbedHead
EmbeddingModel
Embeddings
Model

Enums§

EmbedDim
An enum variant representing the Embedding head dimensions stella is trained on -As the model-card suggests, D1024 is good enough for most cases
ModelVariant
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/sidebar-items.js deleted file mode 100644 index 8cfa391..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["EmbedDim","ModelVariant"],"struct":["Config","EmbedHead","EmbeddingModel","Embeddings","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.Config.html deleted file mode 100644 index 899e58f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.Config.html +++ /dev/null @@ -1,47 +0,0 @@ -Config in candle_transformers::models::stella_en_v5 - Rust

Config

Struct Config 

Source
pub struct Config {
Show 14 fields - pub variant: ModelVariant, - pub vocab_size: usize, - pub hidden_size: usize, - pub intermediate_size: usize, - pub num_hidden_layers: usize, - pub num_attention_heads: usize, - pub max_position_embeddings: usize, - pub rope_theta: f64, - pub embed_head: EmbedHead, - pub norm_eps: f64, - pub activation_fn: Activation, - pub num_key_value_heads: usize, - pub type_vocab_size: usize, - pub scaling_factor: f64, -
}

Fields§

§variant: ModelVariant§vocab_size: usize§hidden_size: usize§intermediate_size: usize§num_hidden_layers: usize§num_attention_heads: usize§max_position_embeddings: usize§rope_theta: f64§embed_head: EmbedHead§norm_eps: f64§activation_fn: Activation§num_key_value_heads: usize§type_vocab_size: usize§scaling_factor: f64

Implementations§

Source§

impl Config

Source

pub fn new_1_5_b_v5(embed_dim: EmbedDim) -> Self

Initialize a new `stella_en_1.5B_v5`` model with given embedding dim

-
Source

pub fn new_400_m_v5(embed_dim: EmbedDim) -> Self

Initialize new stella_en_400M_v5

-

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Config

Source§

fn default() -> Config

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.EmbedHead.html b/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.EmbedHead.html deleted file mode 100644 index 428bfe5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.EmbedHead.html +++ /dev/null @@ -1,33 +0,0 @@ -EmbedHead in candle_transformers::models::stella_en_v5 - Rust

EmbedHead

Struct EmbedHead 

Source
pub struct EmbedHead {
-    pub in_features: usize,
-    pub out_features: usize,
-}

Fields§

§in_features: usize§out_features: usize

Trait Implementations§

Source§

impl Clone for EmbedHead

Source§

fn clone(&self) -> EmbedHead

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EmbedHead

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for EmbedHead

Source§

fn default() -> EmbedHead

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for EmbedHead

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for EmbedHead

Source§

fn eq(&self, other: &EmbedHead) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for EmbedHead

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.EmbeddingModel.html b/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.EmbeddingModel.html deleted file mode 100644 index 822382e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.EmbeddingModel.html +++ /dev/null @@ -1,34 +0,0 @@ -EmbeddingModel in candle_transformers::models::stella_en_v5 - Rust

EmbeddingModel

Struct EmbeddingModel 

Source
pub struct EmbeddingModel { /* private fields */ }

Implementations§

Source§

impl EmbeddingModel

Source

pub fn new( - cfg: &Config, - base_vb: VarBuilder<'_>, - embed_vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward(&mut self, input_ids: &Tensor, mask: &Tensor) -> Result<Tensor>

Source

pub fn forward_norm( - &mut self, - input_ids: &Tensor, - mask: &Tensor, -) -> Result<Tensor>

Same as forward pass but normalizes the output

-

Trait Implementations§

Source§

impl Debug for EmbeddingModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.Embeddings.html b/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.Embeddings.html deleted file mode 100644 index 70256ad..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.Embeddings.html +++ /dev/null @@ -1,28 +0,0 @@ -Embeddings in candle_transformers::models::stella_en_v5 - Rust

Embeddings

Struct Embeddings 

Source
pub struct Embeddings { /* private fields */ }

Implementations§

Source§

impl Embeddings

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Embeddings

Source§

fn clone(&self) -> Embeddings

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Embeddings

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Embeddings

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.Model.html deleted file mode 100644 index 48d3ea1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/stella_en_v5/struct.Model.html +++ /dev/null @@ -1,27 +0,0 @@ -Model in candle_transformers::models::stella_en_v5 - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward(&mut self, input_ids: &Tensor, mask: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/t5/fn.deserialize_feed_forward_proj_activation.html b/network-poc/target-native/doc/candle_transformers/models/t5/fn.deserialize_feed_forward_proj_activation.html deleted file mode 100644 index e8473e7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/t5/fn.deserialize_feed_forward_proj_activation.html +++ /dev/null @@ -1,4 +0,0 @@ -deserialize_feed_forward_proj_activation in candle_transformers::models::t5 - Rust

deserialize_feed_forward_proj_activation

Function deserialize_feed_forward_proj_activation 

Source
pub fn deserialize_feed_forward_proj_activation<'de, D>(
-    deserializer: D,
-) -> Result<ActivationWithOptionalGating, D::Error>
where - D: Deserializer<'de>,
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/t5/fn.linear_no_bias.html b/network-poc/target-native/doc/candle_transformers/models/t5/fn.linear_no_bias.html deleted file mode 100644 index d621d76..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/t5/fn.linear_no_bias.html +++ /dev/null @@ -1,5 +0,0 @@ -linear_no_bias in candle_transformers::models::t5 - Rust

linear_no_bias

Function linear_no_bias 

Source
pub fn linear_no_bias(
-    d1: usize,
-    d2: usize,
-    vb: VarBuilder<'_>,
-) -> Result<Linear>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/t5/index.html b/network-poc/target-native/doc/candle_transformers/models/t5/index.html deleted file mode 100644 index 404b4f5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/t5/index.html +++ /dev/null @@ -1,43 +0,0 @@ -candle_transformers::models::t5 - Rust

Module t5

Module t5 

Source
Expand description

T5 model implementation.

-

T5 (Text-to-Text Transfer Transformer) is a unified text-to-text transformer model. -This implementation follows the original model architecture.

-

Key characteristics:

-
    -
  • Text-to-text framework
  • -
  • Relative positional embeddings
  • -
  • T5-specific layer normalization
  • -
  • Encoder-decoder architecture
  • -
  • Support for sequence-to-sequence tasks
  • -
-

References:

- -

§Encoder-decoder example:

cargo run --example t5 --release -- \
-  --model-id "t5-small" \
-  --prompt "translate to German: A beautiful candle." \
-  --decode
-> ...
->  Eine schöne Kerze.
-> 9 tokens generated (2.42 token/s)
-

Variants such as flan-t5, flan-ul2 (with --revision "refs/pr/25"), and Co-EdIT are also supported.

-

§Translation with MADLAD

-

MADLAD-400 is a series of multilingual machine translation T5 models trained on 250 billion tokens covering over 450 languages using publicly available data. These models are competitive with significantly larger models.

-
cargo run --example t5 --release  -- \
-  --model-id "jbochi/madlad400-3b-mt" \
-  --prompt "<2de> How are you, my friend?" \
-  --decode --temperature 0
-...
- Wie geht es dir, mein Freund?

§Sentence embedding example

cargo run --example t5 --release -- \
-  --model-id "t5-small" --prompt "A beautiful candle."
-...
-[[[ 0.0515, -0.0541, -0.0761, ..., -0.0392,  0.1511, -0.0265],
-  [-0.0974,  0.0998, -0.1659, ..., -0.2450,  0.1738, -0.0164],
-  [ 0.0624, -0.1024,  0.0430, ..., -0.1388,  0.0564, -0.2962],
-  [-0.0389, -0.1173,  0.0026, ...,  0.1064, -0.1065,  0.0990],
-  [ 0.1300,  0.0027, -0.0326, ...,  0.0026, -0.0317,  0.0851]]]
-Tensor[[1, 5, 512], f32]
-Took 303.766583ms

Structs§

ActivationWithOptionalGating
Config
Linear
T5EncoderModel
T5ForConditionalGeneration

Functions§

deserialize_feed_forward_proj_activation
linear_no_bias
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/t5/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/t5/sidebar-items.js deleted file mode 100644 index f1c3aa7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/t5/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["deserialize_feed_forward_proj_activation","linear_no_bias"],"struct":["ActivationWithOptionalGating","Config","Linear","T5EncoderModel","T5ForConditionalGeneration"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/t5/struct.ActivationWithOptionalGating.html b/network-poc/target-native/doc/candle_transformers/models/t5/struct.ActivationWithOptionalGating.html deleted file mode 100644 index b724dae..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/t5/struct.ActivationWithOptionalGating.html +++ /dev/null @@ -1,33 +0,0 @@ -ActivationWithOptionalGating in candle_transformers::models::t5 - Rust

ActivationWithOptionalGating

Struct ActivationWithOptionalGating 

Source
pub struct ActivationWithOptionalGating {
-    pub gated: bool,
-    pub activation: Activation,
-}

Fields§

§gated: bool§activation: Activation

Trait Implementations§

Source§

impl Clone for ActivationWithOptionalGating

Source§

fn clone(&self) -> ActivationWithOptionalGating

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ActivationWithOptionalGating

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ActivationWithOptionalGating

Source§

fn default() -> ActivationWithOptionalGating

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for ActivationWithOptionalGating

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for ActivationWithOptionalGating

Source§

fn eq(&self, other: &ActivationWithOptionalGating) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for ActivationWithOptionalGating

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/t5/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/t5/struct.Config.html deleted file mode 100644 index a50755c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/t5/struct.Config.html +++ /dev/null @@ -1,51 +0,0 @@ -Config in candle_transformers::models::t5 - Rust

Config

Struct Config 

Source
pub struct Config {
Show 20 fields - pub vocab_size: usize, - pub d_model: usize, - pub d_kv: usize, - pub d_ff: usize, - pub num_layers: usize, - pub num_decoder_layers: Option<usize>, - pub num_heads: usize, - pub relative_attention_num_buckets: usize, - pub relative_attention_max_distance: usize, - pub dropout_rate: f64, - pub layer_norm_epsilon: f64, - pub initializer_factor: f64, - pub feed_forward_proj: ActivationWithOptionalGating, - pub tie_word_embeddings: bool, - pub is_decoder: bool, - pub is_encoder_decoder: bool, - pub use_cache: bool, - pub pad_token_id: usize, - pub eos_token_id: usize, - pub decoder_start_token_id: Option<usize>, -
}

Fields§

§vocab_size: usize§d_model: usize§d_kv: usize§d_ff: usize§num_layers: usize§num_decoder_layers: Option<usize>§num_heads: usize§relative_attention_num_buckets: usize§relative_attention_max_distance: usize§dropout_rate: f64§layer_norm_epsilon: f64§initializer_factor: f64§feed_forward_proj: ActivationWithOptionalGating§tie_word_embeddings: bool§is_decoder: bool§is_encoder_decoder: bool§use_cache: bool§pad_token_id: usize§eos_token_id: usize§decoder_start_token_id: Option<usize>

Implementations§

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Config

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/t5/struct.Linear.html b/network-poc/target-native/doc/candle_transformers/models/t5/struct.Linear.html deleted file mode 100644 index 9737160..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/t5/struct.Linear.html +++ /dev/null @@ -1,28 +0,0 @@ -Linear in candle_transformers::models::t5 - Rust

Linear

Struct Linear 

Source
pub struct Linear { /* private fields */ }

Trait Implementations§

Source§

impl Clone for Linear

Source§

fn clone(&self) -> Linear

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Linear

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Linear

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

§

impl Freeze for Linear

§

impl !RefUnwindSafe for Linear

§

impl Send for Linear

§

impl Sync for Linear

§

impl Unpin for Linear

§

impl !UnwindSafe for Linear

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/t5/struct.T5EncoderModel.html b/network-poc/target-native/doc/candle_transformers/models/t5/struct.T5EncoderModel.html deleted file mode 100644 index 21c2a16..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/t5/struct.T5EncoderModel.html +++ /dev/null @@ -1,31 +0,0 @@ -T5EncoderModel in candle_transformers::models::t5 - Rust

T5EncoderModel

Struct T5EncoderModel 

Source
pub struct T5EncoderModel { /* private fields */ }

Implementations§

Source§

impl T5EncoderModel

Source

pub fn load(vb: VarBuilder<'_>, cfg: &Config) -> Result<Self>

Source

pub fn forward(&mut self, input_ids: &Tensor) -> Result<Tensor>

Source

pub fn forward_dt( - &mut self, - input_ids: &Tensor, - dtype: Option<DType>, -) -> Result<Tensor>

Source

pub fn device(&self) -> &Device

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for T5EncoderModel

Source§

fn clone(&self) -> T5EncoderModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for T5EncoderModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/t5/struct.T5ForConditionalGeneration.html b/network-poc/target-native/doc/candle_transformers/models/t5/struct.T5ForConditionalGeneration.html deleted file mode 100644 index 8fb26f5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/t5/struct.T5ForConditionalGeneration.html +++ /dev/null @@ -1,35 +0,0 @@ -T5ForConditionalGeneration in candle_transformers::models::t5 - Rust

T5ForConditionalGeneration

Struct T5ForConditionalGeneration 

Source
pub struct T5ForConditionalGeneration { /* private fields */ }

Implementations§

Source§

impl T5ForConditionalGeneration

Source

pub fn load(vb: VarBuilder<'_>, cfg: &Config) -> Result<Self>

Source

pub fn encode(&mut self, input_ids: &Tensor) -> Result<Tensor>

Source

pub fn decode( - &mut self, - decoder_input_ids: &Tensor, - encoder_output: &Tensor, -) -> Result<Tensor>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - decoder_input_ids: &Tensor, -) -> Result<Tensor>

Source

pub fn device(&self) -> &Device

Source

pub fn clear_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for T5ForConditionalGeneration

Source§

fn clone(&self) -> T5ForConditionalGeneration

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for T5ForConditionalGeneration

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/trocr/index.html b/network-poc/target-native/doc/candle_transformers/models/trocr/index.html deleted file mode 100644 index 2221a7d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/trocr/index.html +++ /dev/null @@ -1,16 +0,0 @@ -candle_transformers::models::trocr - Rust

Module trocr

Module trocr 

Source
Expand description

TrOCR model implementation.

-

TrOCR is a Transformer-based OCR model that uses a Vision Transformer encoder -and a BART-like decoder for optical character recognition.

-

Key characteristics:

-
    -
  • Vision Transformer encoder for image processing
  • -
  • BART-style decoder for text generation
  • -
  • Learned positional embeddings
  • -
  • Layer normalization and self-attention
  • -
-

References:

- -

Structs§

TrOCRConfig
TrOCRDecoder
TrOCREncoder
TrOCRForCausalLM
TrOCRModel
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/trocr/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/trocr/sidebar-items.js deleted file mode 100644 index 58834ec..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/trocr/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["TrOCRConfig","TrOCRDecoder","TrOCREncoder","TrOCRForCausalLM","TrOCRModel"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRConfig.html b/network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRConfig.html deleted file mode 100644 index 4aadb83..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRConfig.html +++ /dev/null @@ -1,53 +0,0 @@ -TrOCRConfig in candle_transformers::models::trocr - Rust

TrOCRConfig

Struct TrOCRConfig 

Source
pub struct TrOCRConfig {
Show 22 fields - pub vocab_size: usize, - pub d_model: usize, - pub cross_attention_hidden_size: usize, - pub decoder_layers: usize, - pub decoder_attention_heads: usize, - pub decoder_ffn_dim: usize, - pub activation_function: Activation, - pub max_position_embeddings: usize, - pub dropout: f64, - pub attention_dropout: f64, - pub activation_dropout: f64, - pub decoder_start_token_id: u32, - pub init_std: f64, - pub decoder_layerdrop: f64, - pub use_cache: bool, - pub scale_embedding: bool, - pub pad_token_id: usize, - pub bos_token_id: usize, - pub eos_token_id: u32, - pub decoder_vocab_size: Option<usize>, - pub use_learned_position_embeddings: bool, - pub tie_word_embeddings: bool, -
}

Fields§

§vocab_size: usize§d_model: usize§cross_attention_hidden_size: usize§decoder_layers: usize§decoder_attention_heads: usize§decoder_ffn_dim: usize§activation_function: Activation§max_position_embeddings: usize§dropout: f64§attention_dropout: f64§activation_dropout: f64§decoder_start_token_id: u32§init_std: f64§decoder_layerdrop: f64§use_cache: bool§scale_embedding: bool§pad_token_id: usize§bos_token_id: usize§eos_token_id: u32§decoder_vocab_size: Option<usize>§use_learned_position_embeddings: bool§tie_word_embeddings: bool

Trait Implementations§

Source§

impl Clone for TrOCRConfig

Source§

fn clone(&self) -> TrOCRConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TrOCRConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for TrOCRConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for TrOCRConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for TrOCRConfig

Source§

fn eq(&self, other: &TrOCRConfig) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for TrOCRConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRDecoder.html b/network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRDecoder.html deleted file mode 100644 index 93d3b3e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRDecoder.html +++ /dev/null @@ -1,33 +0,0 @@ -TrOCRDecoder in candle_transformers::models::trocr - Rust

TrOCRDecoder

Struct TrOCRDecoder 

Source
pub struct TrOCRDecoder { /* private fields */ }

Implementations§

Source§

impl TrOCRDecoder

Source

pub fn forward( - &mut self, - xs: &Tensor, - encoder_xs: Option<&Tensor>, - past_kv_len: usize, - attn_mask: &Tensor, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for TrOCRDecoder

Source§

fn clone(&self) -> TrOCRDecoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TrOCRDecoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCREncoder.html b/network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCREncoder.html deleted file mode 100644 index 19bd461..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCREncoder.html +++ /dev/null @@ -1,27 +0,0 @@ -TrOCREncoder in candle_transformers::models::trocr - Rust

TrOCREncoder

Struct TrOCREncoder 

Source
pub struct TrOCREncoder { /* private fields */ }

Implementations§

Source§

impl TrOCREncoder

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for TrOCREncoder

Source§

fn clone(&self) -> TrOCREncoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TrOCREncoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRForCausalLM.html b/network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRForCausalLM.html deleted file mode 100644 index 4525329..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRForCausalLM.html +++ /dev/null @@ -1,33 +0,0 @@ -TrOCRForCausalLM in candle_transformers::models::trocr - Rust

TrOCRForCausalLM

Struct TrOCRForCausalLM 

Source
pub struct TrOCRForCausalLM { /* private fields */ }

Implementations§

Source§

impl TrOCRForCausalLM

Source

pub fn new(decoder_cfg: &TrOCRConfig, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - xs: &Tensor, - encoder_xs: Option<&Tensor>, - past_kv_len: usize, - attn_mask: &Tensor, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for TrOCRForCausalLM

Source§

fn clone(&self) -> TrOCRForCausalLM

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TrOCRForCausalLM

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRModel.html b/network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRModel.html deleted file mode 100644 index 02d9c95..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/trocr/struct.TrOCRModel.html +++ /dev/null @@ -1,36 +0,0 @@ -TrOCRModel in candle_transformers::models::trocr - Rust

TrOCRModel

Struct TrOCRModel 

Source
pub struct TrOCRModel { /* private fields */ }

Implementations§

Source§

impl TrOCRModel

Source

pub fn new( - encoder_cfg: &Config, - decoder_cfg: &TrOCRConfig, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn encoder(&mut self) -> &mut TrOCREncoder

Source

pub fn decoder(&mut self) -> &mut TrOCRForCausalLM

Source

pub fn decode( - &mut self, - xs: &Tensor, - encoder_xs: &Tensor, - past_kv_len: usize, -) -> Result<Tensor>

Source

pub fn reset_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for TrOCRModel

Source§

fn clone(&self) -> TrOCRModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TrOCRModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/vgg/enum.Models.html b/network-poc/target-native/doc/candle_transformers/models/vgg/enum.Models.html deleted file mode 100644 index 4c71451..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/vgg/enum.Models.html +++ /dev/null @@ -1,29 +0,0 @@ -Models in candle_transformers::models::vgg - Rust

Models

Enum Models 

Source
pub enum Models {
-    Vgg13,
-    Vgg16,
-    Vgg19,
-}

Variants§

§

Vgg13

§

Vgg16

§

Vgg19

Auto Trait Implementations§

§

impl Freeze for Models

§

impl RefUnwindSafe for Models

§

impl Send for Models

§

impl Sync for Models

§

impl Unpin for Models

§

impl UnwindSafe for Models

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/vgg/index.html b/network-poc/target-native/doc/candle_transformers/models/vgg/index.html deleted file mode 100644 index 16e1df9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/vgg/index.html +++ /dev/null @@ -1,15 +0,0 @@ -candle_transformers::models::vgg - Rust

Module vgg

Module vgg 

Source
Expand description

VGG-16 model implementation.

-

VGG-16 is a convolutional neural network architecture. It consists of 13 -convolutional layers followed by 3 fully connected layers.

-

Key characteristics:

-
    -
  • Conv layers with 3x3 filters
  • -
  • Max pooling after every 2-3 conv layers
  • -
  • Three fully connected layers of 4096, 4096, 1000 units
  • -
  • ReLU activation and dropout
  • -
-

References:

- -

Structs§

Vgg

Enums§

Models
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/vgg/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/vgg/sidebar-items.js deleted file mode 100644 index b15342d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/vgg/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["Models"],"struct":["Vgg"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/vgg/struct.Vgg.html b/network-poc/target-native/doc/candle_transformers/models/vgg/struct.Vgg.html deleted file mode 100644 index 9fe2987..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/vgg/struct.Vgg.html +++ /dev/null @@ -1,25 +0,0 @@ -Vgg in candle_transformers::models::vgg - Rust

Vgg

Struct Vgg 

Source
pub struct Vgg<'a> { /* private fields */ }

Implementations§

Source§

impl<'a> Vgg<'a>

Source

pub fn new(vb: VarBuilder<'a>, model: Models) -> Result<Self>

Trait Implementations§

Source§

impl<'a> Debug for Vgg<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl ModuleT for Vgg<'_>

Source§

fn forward_t(&self, xs: &Tensor, train: bool) -> Result<Tensor>

Auto Trait Implementations§

§

impl<'a> Freeze for Vgg<'a>

§

impl<'a> !RefUnwindSafe for Vgg<'a>

§

impl<'a> Send for Vgg<'a>

§

impl<'a> Sync for Vgg<'a>

§

impl<'a> Unpin for Vgg<'a>

§

impl<'a> !UnwindSafe for Vgg<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/vit/index.html b/network-poc/target-native/doc/candle_transformers/models/vit/index.html deleted file mode 100644 index d53c49c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/vit/index.html +++ /dev/null @@ -1,17 +0,0 @@ -candle_transformers::models::vit - Rust

Module vit

Module vit 

Source
Expand description

Vision Transformer (ViT) implementation.

-

Vision Transformer applies transformer architecture to image classification -by splitting images into patches and processing them as a sequence.

-

Key characteristics:

-
    -
  • Image patches as sequence tokens
  • -
  • Self-attention between patches
  • -
  • Position embeddings
  • -
  • CLS token for classification
  • -
  • Layer normalization
  • -
-

References:

- -

Structs§

Config
Embeddings
Encoder
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/vit/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/vit/sidebar-items.js deleted file mode 100644 index 450ac49..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/vit/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Embeddings","Encoder","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/vit/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/vit/struct.Config.html deleted file mode 100644 index b003560..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/vit/struct.Config.html +++ /dev/null @@ -1,40 +0,0 @@ -Config in candle_transformers::models::vit - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub hidden_size: usize,
-    pub num_hidden_layers: usize,
-    pub num_attention_heads: usize,
-    pub intermediate_size: usize,
-    pub hidden_act: Activation,
-    pub layer_norm_eps: f64,
-    pub image_size: usize,
-    pub patch_size: usize,
-    pub num_channels: usize,
-    pub qkv_bias: bool,
-}

Fields§

§hidden_size: usize§num_hidden_layers: usize§num_attention_heads: usize§intermediate_size: usize§hidden_act: Activation§layer_norm_eps: f64§image_size: usize§patch_size: usize§num_channels: usize§qkv_bias: bool

Implementations§

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/vit/struct.Embeddings.html b/network-poc/target-native/doc/candle_transformers/models/vit/struct.Embeddings.html deleted file mode 100644 index f63722e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/vit/struct.Embeddings.html +++ /dev/null @@ -1,36 +0,0 @@ -Embeddings in candle_transformers::models::vit - Rust

Embeddings

Struct Embeddings 

Source
pub struct Embeddings { /* private fields */ }

Implementations§

Source§

impl Embeddings

Source

pub fn new( - cfg: &Config, - use_mask_token: bool, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward( - &self, - pixel_values: &Tensor, - bool_masked_pos: Option<&Tensor>, - interpolate_pos_encoding: bool, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Embeddings

Source§

fn clone(&self) -> Embeddings

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Embeddings

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/vit/struct.Encoder.html b/network-poc/target-native/doc/candle_transformers/models/vit/struct.Encoder.html deleted file mode 100644 index 1ce74a7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/vit/struct.Encoder.html +++ /dev/null @@ -1,28 +0,0 @@ -Encoder in candle_transformers::models::vit - Rust

Encoder

Struct Encoder 

Source
pub struct Encoder { /* private fields */ }

Implementations§

Source§

impl Encoder

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for Encoder

Source§

fn clone(&self) -> Encoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Encoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Encoder

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/vit/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/vit/struct.Model.html deleted file mode 100644 index 9f85283..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/vit/struct.Model.html +++ /dev/null @@ -1,27 +0,0 @@ -Model in candle_transformers::models::vit - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, num_labels: usize, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/audio/fn.log_mel_spectrogram_.html b/network-poc/target-native/doc/candle_transformers/models/whisper/audio/fn.log_mel_spectrogram_.html deleted file mode 100644 index cc33328..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/audio/fn.log_mel_spectrogram_.html +++ /dev/null @@ -1,8 +0,0 @@ -log_mel_spectrogram_ in candle_transformers::models::whisper::audio - Rust

log_mel_spectrogram_

Function log_mel_spectrogram_ 

Source
pub fn log_mel_spectrogram_<T: Float>(
-    samples: &[T],
-    filters: &[T],
-    fft_size: usize,
-    fft_step: usize,
-    n_mel: usize,
-    speed_up: bool,
-) -> Vec<T>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/audio/fn.pcm_to_mel.html b/network-poc/target-native/doc/candle_transformers/models/whisper/audio/fn.pcm_to_mel.html deleted file mode 100644 index 5a540cb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/audio/fn.pcm_to_mel.html +++ /dev/null @@ -1,5 +0,0 @@ -pcm_to_mel in candle_transformers::models::whisper::audio - Rust

pcm_to_mel

Function pcm_to_mel 

Source
pub fn pcm_to_mel<T: Float>(
-    cfg: &Config,
-    samples: &[T],
-    filters: &[T],
-) -> Vec<T>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/audio/index.html b/network-poc/target-native/doc/candle_transformers/models/whisper/audio/index.html deleted file mode 100644 index 5b6c4b9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/audio/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::whisper::audio - Rust

Module audio

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/audio/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/whisper/audio/sidebar-items.js deleted file mode 100644 index 4e96f75..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/audio/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["log_mel_spectrogram_","pcm_to_mel"],"trait":["Float"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/audio/trait.Float.html b/network-poc/target-native/doc/candle_transformers/models/whisper/audio/trait.Float.html deleted file mode 100644 index 1440f24..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/audio/trait.Float.html +++ /dev/null @@ -1,6 +0,0 @@ -Float in candle_transformers::models::whisper::audio - Rust

Float

Trait Float 

Source
pub trait Float:
-    Float
-    + FloatConst
-    + NumAssign
-    + Send
-    + Sync { }

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Float for f32

Source§

impl Float for f64

Implementors§

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.CHUNK_LENGTH.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.CHUNK_LENGTH.html deleted file mode 100644 index 5bc8218..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.CHUNK_LENGTH.html +++ /dev/null @@ -1 +0,0 @@ -CHUNK_LENGTH in candle_transformers::models::whisper - Rust

CHUNK_LENGTH

Constant CHUNK_LENGTH 

Source
pub const CHUNK_LENGTH: usize = 30;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.COMPRESSION_RATIO_THRESHOLD.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.COMPRESSION_RATIO_THRESHOLD.html deleted file mode 100644 index 3298d1d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.COMPRESSION_RATIO_THRESHOLD.html +++ /dev/null @@ -1 +0,0 @@ -COMPRESSION_RATIO_THRESHOLD in candle_transformers::models::whisper - Rust

COMPRESSION_RATIO_THRESHOLD

Constant COMPRESSION_RATIO_THRESHOLD 

Source
pub const COMPRESSION_RATIO_THRESHOLD: f64 = 2.4;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.DTYPE.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.DTYPE.html deleted file mode 100644 index 1d06080..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.DTYPE.html +++ /dev/null @@ -1 +0,0 @@ -DTYPE in candle_transformers::models::whisper - Rust

DTYPE

Constant DTYPE 

Source
pub const DTYPE: DType;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.EOT_TOKEN.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.EOT_TOKEN.html deleted file mode 100644 index b65b181..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.EOT_TOKEN.html +++ /dev/null @@ -1 +0,0 @@ -EOT_TOKEN in candle_transformers::models::whisper - Rust

EOT_TOKEN

Constant EOT_TOKEN 

Source
pub const EOT_TOKEN: &str = "<|endoftext|>";
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.HOP_LENGTH.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.HOP_LENGTH.html deleted file mode 100644 index 11745a8..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.HOP_LENGTH.html +++ /dev/null @@ -1 +0,0 @@ -HOP_LENGTH in candle_transformers::models::whisper - Rust

HOP_LENGTH

Constant HOP_LENGTH 

Source
pub const HOP_LENGTH: usize = 160;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.LOGPROB_THRESHOLD.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.LOGPROB_THRESHOLD.html deleted file mode 100644 index 35bcef1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.LOGPROB_THRESHOLD.html +++ /dev/null @@ -1 +0,0 @@ -LOGPROB_THRESHOLD in candle_transformers::models::whisper - Rust

LOGPROB_THRESHOLD

Constant LOGPROB_THRESHOLD 

Source
pub const LOGPROB_THRESHOLD: f64 = -1.0;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.NO_SPEECH_THRESHOLD.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.NO_SPEECH_THRESHOLD.html deleted file mode 100644 index 0d6658e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.NO_SPEECH_THRESHOLD.html +++ /dev/null @@ -1 +0,0 @@ -NO_SPEECH_THRESHOLD in candle_transformers::models::whisper - Rust

NO_SPEECH_THRESHOLD

Constant NO_SPEECH_THRESHOLD 

Source
pub const NO_SPEECH_THRESHOLD: f64 = 0.6;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.NO_SPEECH_TOKENS.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.NO_SPEECH_TOKENS.html deleted file mode 100644 index 1efbb2c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.NO_SPEECH_TOKENS.html +++ /dev/null @@ -1 +0,0 @@ -NO_SPEECH_TOKENS in candle_transformers::models::whisper - Rust

NO_SPEECH_TOKENS

Constant NO_SPEECH_TOKENS 

Source
pub const NO_SPEECH_TOKENS: [&str; 2];
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.NO_TIMESTAMPS_TOKEN.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.NO_TIMESTAMPS_TOKEN.html deleted file mode 100644 index d6b5f58..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.NO_TIMESTAMPS_TOKEN.html +++ /dev/null @@ -1 +0,0 @@ -NO_TIMESTAMPS_TOKEN in candle_transformers::models::whisper - Rust

NO_TIMESTAMPS_TOKEN

Constant NO_TIMESTAMPS_TOKEN 

Source
pub const NO_TIMESTAMPS_TOKEN: &str = "<|notimestamps|>";
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.N_FFT.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.N_FFT.html deleted file mode 100644 index 660803f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.N_FFT.html +++ /dev/null @@ -1 +0,0 @@ -N_FFT in candle_transformers::models::whisper - Rust

N_FFT

Constant N_FFT 

Source
pub const N_FFT: usize = 400;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.N_FRAMES.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.N_FRAMES.html deleted file mode 100644 index a09e5ef..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.N_FRAMES.html +++ /dev/null @@ -1 +0,0 @@ -N_FRAMES in candle_transformers::models::whisper - Rust

N_FRAMES

Constant N_FRAMES 

Source
pub const N_FRAMES: usize = _; // 3_000usize
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.N_SAMPLES.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.N_SAMPLES.html deleted file mode 100644 index 44bbc4d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.N_SAMPLES.html +++ /dev/null @@ -1 +0,0 @@ -N_SAMPLES in candle_transformers::models::whisper - Rust

N_SAMPLES

Constant N_SAMPLES 

Source
pub const N_SAMPLES: usize = _; // 480_000usize
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.SAMPLE_RATE.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.SAMPLE_RATE.html deleted file mode 100644 index 20da0ed..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.SAMPLE_RATE.html +++ /dev/null @@ -1 +0,0 @@ -SAMPLE_RATE in candle_transformers::models::whisper - Rust

SAMPLE_RATE

Constant SAMPLE_RATE 

Source
pub const SAMPLE_RATE: usize = 16000;
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.SOT_TOKEN.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.SOT_TOKEN.html deleted file mode 100644 index ef5990a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.SOT_TOKEN.html +++ /dev/null @@ -1 +0,0 @@ -SOT_TOKEN in candle_transformers::models::whisper - Rust

SOT_TOKEN

Constant SOT_TOKEN 

Source
pub const SOT_TOKEN: &str = "<|startoftranscript|>";
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.TEMPERATURES.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.TEMPERATURES.html deleted file mode 100644 index 6eb237d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.TEMPERATURES.html +++ /dev/null @@ -1 +0,0 @@ -TEMPERATURES in candle_transformers::models::whisper - Rust

TEMPERATURES

Constant TEMPERATURES 

Source
pub const TEMPERATURES: [f64; 6];
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.TRANSCRIBE_TOKEN.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.TRANSCRIBE_TOKEN.html deleted file mode 100644 index a61dd56..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.TRANSCRIBE_TOKEN.html +++ /dev/null @@ -1 +0,0 @@ -TRANSCRIBE_TOKEN in candle_transformers::models::whisper - Rust

TRANSCRIBE_TOKEN

Constant TRANSCRIBE_TOKEN 

Source
pub const TRANSCRIBE_TOKEN: &str = "<|transcribe|>";
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.TRANSLATE_TOKEN.html b/network-poc/target-native/doc/candle_transformers/models/whisper/constant.TRANSLATE_TOKEN.html deleted file mode 100644 index 3df638f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/constant.TRANSLATE_TOKEN.html +++ /dev/null @@ -1 +0,0 @@ -TRANSLATE_TOKEN in candle_transformers::models::whisper - Rust

TRANSLATE_TOKEN

Constant TRANSLATE_TOKEN 

Source
pub const TRANSLATE_TOKEN: &str = "<|translate|>";
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/index.html b/network-poc/target-native/doc/candle_transformers/models/whisper/index.html deleted file mode 100644 index d155f9a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/index.html +++ /dev/null @@ -1,11 +0,0 @@ -candle_transformers::models::whisper - Rust

Module whisper

Module whisper 

Source
Expand description

Whisper Model Implementation

-

Whisper is an automatic speech recognition (ASR) system trained on large amounts -of multilingual and multitask supervised data collected from the web. It can be used to -convert audio files (in the .wav format) to text. Supported features include -language detection as well as multilingual speech recognition.

- -

Modules§

audio
model
quantized_model

Structs§

Config

Constants§

CHUNK_LENGTH
COMPRESSION_RATIO_THRESHOLD
DTYPE
EOT_TOKEN
HOP_LENGTH
LOGPROB_THRESHOLD
NO_SPEECH_THRESHOLD
NO_SPEECH_TOKENS
NO_TIMESTAMPS_TOKEN
N_FFT
N_FRAMES
N_SAMPLES
SAMPLE_RATE
SOT_TOKEN
TEMPERATURES
TRANSCRIBE_TOKEN
TRANSLATE_TOKEN
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/model/index.html b/network-poc/target-native/doc/candle_transformers/models/whisper/model/index.html deleted file mode 100644 index 478b616..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/model/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::whisper::model - Rust

Module model

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/model/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/whisper/model/sidebar-items.js deleted file mode 100644 index 0578b56..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/model/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["AudioEncoder","TextDecoder","Whisper"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/model/struct.AudioEncoder.html b/network-poc/target-native/doc/candle_transformers/models/whisper/model/struct.AudioEncoder.html deleted file mode 100644 index 2279a51..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/model/struct.AudioEncoder.html +++ /dev/null @@ -1,27 +0,0 @@ -AudioEncoder in candle_transformers::models::whisper::model - Rust

AudioEncoder

Struct AudioEncoder 

Source
pub struct AudioEncoder { /* private fields */ }

Implementations§

Source§

impl AudioEncoder

Source

pub fn forward(&mut self, x: &Tensor, flush_kv_cache: bool) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for AudioEncoder

Source§

fn clone(&self) -> AudioEncoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AudioEncoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/model/struct.TextDecoder.html b/network-poc/target-native/doc/candle_transformers/models/whisper/model/struct.TextDecoder.html deleted file mode 100644 index b285115..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/model/struct.TextDecoder.html +++ /dev/null @@ -1,32 +0,0 @@ -TextDecoder in candle_transformers::models::whisper::model - Rust

TextDecoder

Struct TextDecoder 

Source
pub struct TextDecoder { /* private fields */ }

Implementations§

Source§

impl TextDecoder

Source

pub fn forward( - &mut self, - x: &Tensor, - xa: &Tensor, - flush_kv_cache: bool, -) -> Result<Tensor>

Source

pub fn final_linear(&self, x: &Tensor) -> Result<Tensor>

Source

pub fn reset_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for TextDecoder

Source§

fn clone(&self) -> TextDecoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TextDecoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/model/struct.Whisper.html b/network-poc/target-native/doc/candle_transformers/models/whisper/model/struct.Whisper.html deleted file mode 100644 index 4f7ab4f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/model/struct.Whisper.html +++ /dev/null @@ -1,31 +0,0 @@ -Whisper in candle_transformers::models::whisper::model - Rust

Whisper

Struct Whisper 

Source
pub struct Whisper {
-    pub encoder: AudioEncoder,
-    pub decoder: TextDecoder,
-    pub config: Config,
-}

Fields§

§encoder: AudioEncoder§decoder: TextDecoder§config: Config

Implementations§

Source§

impl Whisper

Source

pub fn load(vb: &VarBuilder<'_>, config: Config) -> Result<Self>

Source

pub fn reset_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Whisper

Source§

fn clone(&self) -> Whisper

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Whisper

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/index.html b/network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/index.html deleted file mode 100644 index b9d33ac..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::whisper::quantized_model - Rust

Module quantized_model

Module quantized_model 

Source

Re-exports§

pub use crate::quantized_var_builder::VarBuilder;

Structs§

AudioEncoder
TextDecoder
Whisper
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/sidebar-items.js deleted file mode 100644 index 0578b56..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["AudioEncoder","TextDecoder","Whisper"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/struct.AudioEncoder.html b/network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/struct.AudioEncoder.html deleted file mode 100644 index 3f6ce90..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/struct.AudioEncoder.html +++ /dev/null @@ -1,27 +0,0 @@ -AudioEncoder in candle_transformers::models::whisper::quantized_model - Rust

AudioEncoder

Struct AudioEncoder 

Source
pub struct AudioEncoder { /* private fields */ }

Implementations§

Source§

impl AudioEncoder

Source

pub fn forward(&mut self, x: &Tensor, flush_kv_cache: bool) -> Result<Tensor>

Source

pub fn reset_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for AudioEncoder

Source§

fn clone(&self) -> AudioEncoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AudioEncoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/struct.TextDecoder.html b/network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/struct.TextDecoder.html deleted file mode 100644 index dc9a58c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/struct.TextDecoder.html +++ /dev/null @@ -1,32 +0,0 @@ -TextDecoder in candle_transformers::models::whisper::quantized_model - Rust

TextDecoder

Struct TextDecoder 

Source
pub struct TextDecoder { /* private fields */ }

Implementations§

Source§

impl TextDecoder

Source

pub fn forward( - &mut self, - x: &Tensor, - xa: &Tensor, - flush_kv_cache: bool, -) -> Result<Tensor>

Source

pub fn final_linear(&self, x: &Tensor) -> Result<Tensor>

Source

pub fn reset_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for TextDecoder

Source§

fn clone(&self) -> TextDecoder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TextDecoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/struct.Whisper.html b/network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/struct.Whisper.html deleted file mode 100644 index 113ef64..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/quantized_model/struct.Whisper.html +++ /dev/null @@ -1,31 +0,0 @@ -Whisper in candle_transformers::models::whisper::quantized_model - Rust

Whisper

Struct Whisper 

Source
pub struct Whisper {
-    pub encoder: AudioEncoder,
-    pub decoder: TextDecoder,
-    pub config: Config,
-}

Fields§

§encoder: AudioEncoder§decoder: TextDecoder§config: Config

Implementations§

Source§

impl Whisper

Source

pub fn load(vb: &VarBuilder, config: Config) -> Result<Self>

Source

pub fn reset_kv_cache(&mut self)

Trait Implementations§

Source§

impl Clone for Whisper

Source§

fn clone(&self) -> Whisper

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Whisper

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/whisper/sidebar-items.js deleted file mode 100644 index 6f451cc..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"constant":["CHUNK_LENGTH","COMPRESSION_RATIO_THRESHOLD","DTYPE","EOT_TOKEN","HOP_LENGTH","LOGPROB_THRESHOLD","NO_SPEECH_THRESHOLD","NO_SPEECH_TOKENS","NO_TIMESTAMPS_TOKEN","N_FFT","N_FRAMES","N_SAMPLES","SAMPLE_RATE","SOT_TOKEN","TEMPERATURES","TRANSCRIBE_TOKEN","TRANSLATE_TOKEN"],"mod":["audio","model","quantized_model"],"struct":["Config"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/whisper/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/whisper/struct.Config.html deleted file mode 100644 index 1561206..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/whisper/struct.Config.html +++ /dev/null @@ -1,41 +0,0 @@ -Config in candle_transformers::models::whisper - Rust

Config

Struct Config 

Source
pub struct Config {
-    pub num_mel_bins: usize,
-    pub max_source_positions: usize,
-    pub d_model: usize,
-    pub encoder_attention_heads: usize,
-    pub encoder_layers: usize,
-    pub vocab_size: usize,
-    pub max_target_positions: usize,
-    pub decoder_attention_heads: usize,
-    pub decoder_layers: usize,
-    pub suppress_tokens: Vec<u32>,
-}

Fields§

§num_mel_bins: usize§max_source_positions: usize§d_model: usize§encoder_attention_heads: usize§encoder_layers: usize§vocab_size: usize§max_target_positions: usize§decoder_attention_heads: usize§decoder_layers: usize§suppress_tokens: Vec<u32>

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.conv2d.html b/network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.conv2d.html deleted file mode 100644 index aaea3a1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.conv2d.html +++ /dev/null @@ -1,7 +0,0 @@ -conv2d in candle_transformers::models::with_tracing - Rust

conv2d

Function conv2d 

Source
pub fn conv2d(
-    in_channels: usize,
-    out_channels: usize,
-    kernel_size: usize,
-    cfg: Conv2dConfig,
-    vs: VarBuilder<'_>,
-) -> Result<Conv2d>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.layer_norm.html b/network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.layer_norm.html deleted file mode 100644 index dffb5c2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.layer_norm.html +++ /dev/null @@ -1,5 +0,0 @@ -layer_norm in candle_transformers::models::with_tracing - Rust

layer_norm

Function layer_norm 

Source
pub fn layer_norm<C: Into<LayerNormConfig>>(
-    size: usize,
-    c: C,
-    vb: VarBuilder<'_>,
-) -> Result<LayerNorm>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.linear.html b/network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.linear.html deleted file mode 100644 index ff90d12..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.linear.html +++ /dev/null @@ -1 +0,0 @@ -linear in candle_transformers::models::with_tracing - Rust

linear

Function linear 

Source
pub fn linear(d1: usize, d2: usize, vb: VarBuilder<'_>) -> Result<Linear>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.linear_b.html b/network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.linear_b.html deleted file mode 100644 index 38c1d1c..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.linear_b.html +++ /dev/null @@ -1,6 +0,0 @@ -linear_b in candle_transformers::models::with_tracing - Rust

linear_b

Function linear_b 

Source
pub fn linear_b(
-    d1: usize,
-    d2: usize,
-    b: bool,
-    vb: VarBuilder<'_>,
-) -> Result<Linear>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.linear_no_bias.html b/network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.linear_no_bias.html deleted file mode 100644 index ed4e2de..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/with_tracing/fn.linear_no_bias.html +++ /dev/null @@ -1,5 +0,0 @@ -linear_no_bias in candle_transformers::models::with_tracing - Rust

linear_no_bias

Function linear_no_bias 

Source
pub fn linear_no_bias(
-    d1: usize,
-    d2: usize,
-    vb: VarBuilder<'_>,
-) -> Result<Linear>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/with_tracing/index.html b/network-poc/target-native/doc/candle_transformers/models/with_tracing/index.html deleted file mode 100644 index b802653..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/with_tracing/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::with_tracing - Rust

Module with_tracing

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/with_tracing/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/with_tracing/sidebar-items.js deleted file mode 100644 index a6735c1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/with_tracing/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["conv2d","layer_norm","linear","linear_b","linear_no_bias"],"struct":["Conv2d","Embedding","LayerNorm","Linear","QMatMul","RmsNorm"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.Conv2d.html b/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.Conv2d.html deleted file mode 100644 index 04e6c16..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.Conv2d.html +++ /dev/null @@ -1,28 +0,0 @@ -Conv2d in candle_transformers::models::with_tracing - Rust

Conv2d

Struct Conv2d 

Source
pub struct Conv2d { /* private fields */ }

Trait Implementations§

Source§

impl Clone for Conv2d

Source§

fn clone(&self) -> Conv2d

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Conv2d

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Conv2d

Source§

fn forward(&self, x: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

§

impl Freeze for Conv2d

§

impl !RefUnwindSafe for Conv2d

§

impl Send for Conv2d

§

impl Sync for Conv2d

§

impl Unpin for Conv2d

§

impl !UnwindSafe for Conv2d

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.Embedding.html b/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.Embedding.html deleted file mode 100644 index 81ea93f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.Embedding.html +++ /dev/null @@ -1,28 +0,0 @@ -Embedding in candle_transformers::models::with_tracing - Rust

Embedding

Struct Embedding 

Source
pub struct Embedding { /* private fields */ }

Implementations§

Source§

impl Embedding

Source

pub fn new(d1: usize, d2: usize, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn from_weights(weights: Tensor) -> Result<Self>

Source

pub fn embeddings(&self) -> &Tensor

Trait Implementations§

Source§

impl Clone for Embedding

Source§

fn clone(&self) -> Embedding

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Embedding

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Embedding

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.LayerNorm.html b/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.LayerNorm.html deleted file mode 100644 index 1fd2a05..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.LayerNorm.html +++ /dev/null @@ -1,28 +0,0 @@ -LayerNorm in candle_transformers::models::with_tracing - Rust

LayerNorm

Struct LayerNorm 

Source
pub struct LayerNorm { /* private fields */ }

Implementations§

Source§

impl LayerNorm

Source

pub fn new(weight: Tensor, bias: Tensor, eps: f64) -> Self

Trait Implementations§

Source§

impl Clone for LayerNorm

Source§

fn clone(&self) -> LayerNorm

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LayerNorm

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for LayerNorm

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.Linear.html b/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.Linear.html deleted file mode 100644 index 5a341b7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.Linear.html +++ /dev/null @@ -1,28 +0,0 @@ -Linear in candle_transformers::models::with_tracing - Rust

Linear

Struct Linear 

Source
pub struct Linear { /* private fields */ }

Implementations§

Source§

impl Linear

Source

pub fn from_weights(weights: Tensor, bias: Option<Tensor>) -> Self

Trait Implementations§

Source§

impl Clone for Linear

Source§

fn clone(&self) -> Linear

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Linear

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Linear

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

§

impl Freeze for Linear

§

impl !RefUnwindSafe for Linear

§

impl Send for Linear

§

impl Sync for Linear

§

impl Unpin for Linear

§

impl !UnwindSafe for Linear

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.QMatMul.html b/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.QMatMul.html deleted file mode 100644 index 556d92a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.QMatMul.html +++ /dev/null @@ -1,28 +0,0 @@ -QMatMul in candle_transformers::models::with_tracing - Rust

QMatMul

Struct QMatMul 

Source
pub struct QMatMul { /* private fields */ }

Implementations§

Source§

impl QMatMul

Source

pub fn new(out_dim: usize, in_dim: usize, vb: VarBuilder) -> Result<Self>

Source

pub fn from_weights(ws: Arc<QTensor>) -> Result<Self>

Trait Implementations§

Source§

impl Clone for QMatMul

Source§

fn clone(&self) -> QMatMul

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for QMatMul

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for QMatMul

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.RmsNorm.html b/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.RmsNorm.html deleted file mode 100644 index ba2e74f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/with_tracing/struct.RmsNorm.html +++ /dev/null @@ -1,28 +0,0 @@ -RmsNorm in candle_transformers::models::with_tracing - Rust

RmsNorm

Struct RmsNorm 

Source
pub struct RmsNorm { /* private fields */ }

Implementations§

Source§

impl RmsNorm

Source

pub fn new(size: usize, eps: f64, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward_diff(&self, x: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for RmsNorm

Source§

fn clone(&self) -> RmsNorm

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RmsNorm

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for RmsNorm

Source§

fn forward(&self, x: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/attention_processor/index.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/attention_processor/index.html deleted file mode 100644 index 283c226..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/attention_processor/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::wuerstchen::attention_processor - Rust

Module attention_processor

Module attention_processor 

Source

Structs§

Attention
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/attention_processor/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/attention_processor/sidebar-items.js deleted file mode 100644 index 94fdfbc..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/attention_processor/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Attention"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/attention_processor/struct.Attention.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/attention_processor/struct.Attention.html deleted file mode 100644 index 32a2bd6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/attention_processor/struct.Attention.html +++ /dev/null @@ -1,35 +0,0 @@ -Attention in candle_transformers::models::wuerstchen::attention_processor - Rust

Attention

pub struct Attention { /* private fields */ }

Implementations§

Source§

impl Attention

Source

pub fn new( - query_dim: usize, - heads: usize, - dim_head: usize, - use_flash_attn: bool, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward( - &self, - xs: &Tensor, - encoder_hidden_states: &Tensor, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for Attention

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/index.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/index.html deleted file mode 100644 index c679e0a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::wuerstchen::common - Rust

Module common

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/sidebar-items.js deleted file mode 100644 index 4b5776f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["AttnBlock","GlobalResponseNorm","LayerNormNoWeights","ResBlock","TimestepBlock","WLayerNorm"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.AttnBlock.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.AttnBlock.html deleted file mode 100644 index 669ff86..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.AttnBlock.html +++ /dev/null @@ -1,32 +0,0 @@ -AttnBlock in candle_transformers::models::wuerstchen::common - Rust

AttnBlock

Struct AttnBlock 

Source
pub struct AttnBlock { /* private fields */ }

Implementations§

Source§

impl AttnBlock

Source

pub fn new( - c: usize, - c_cond: usize, - nhead: usize, - self_attn: bool, - use_flash_attn: bool, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, kv: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for AttnBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.GlobalResponseNorm.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.GlobalResponseNorm.html deleted file mode 100644 index 23f18b9..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.GlobalResponseNorm.html +++ /dev/null @@ -1,26 +0,0 @@ -GlobalResponseNorm in candle_transformers::models::wuerstchen::common - Rust

GlobalResponseNorm

Struct GlobalResponseNorm 

Source
pub struct GlobalResponseNorm { /* private fields */ }

Implementations§

Source§

impl GlobalResponseNorm

Source

pub fn new(dim: usize, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Debug for GlobalResponseNorm

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for GlobalResponseNorm

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.LayerNormNoWeights.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.LayerNormNoWeights.html deleted file mode 100644 index 7cc9278..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.LayerNormNoWeights.html +++ /dev/null @@ -1,26 +0,0 @@ -LayerNormNoWeights in candle_transformers::models::wuerstchen::common - Rust

LayerNormNoWeights

Struct LayerNormNoWeights 

Source
pub struct LayerNormNoWeights { /* private fields */ }

Implementations§

Source§

impl LayerNormNoWeights

Source

pub fn new(_size: usize) -> Result<Self>

Trait Implementations§

Source§

impl Debug for LayerNormNoWeights

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for LayerNormNoWeights

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.ResBlock.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.ResBlock.html deleted file mode 100644 index 6f732bb..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.ResBlock.html +++ /dev/null @@ -1,30 +0,0 @@ -ResBlock in candle_transformers::models::wuerstchen::common - Rust

ResBlock

Struct ResBlock 

Source
pub struct ResBlock { /* private fields */ }

Implementations§

Source§

impl ResBlock

Source

pub fn new( - c: usize, - c_skip: usize, - ksize: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, x_skip: Option<&Tensor>) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for ResBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.TimestepBlock.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.TimestepBlock.html deleted file mode 100644 index 17251c7..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.TimestepBlock.html +++ /dev/null @@ -1,25 +0,0 @@ -TimestepBlock in candle_transformers::models::wuerstchen::common - Rust

TimestepBlock

Struct TimestepBlock 

Source
pub struct TimestepBlock { /* private fields */ }

Implementations§

Source§

impl TimestepBlock

Source

pub fn new(c: usize, c_timestep: usize, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, t: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for TimestepBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.WLayerNorm.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.WLayerNorm.html deleted file mode 100644 index a283af5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/common/struct.WLayerNorm.html +++ /dev/null @@ -1,26 +0,0 @@ -WLayerNorm in candle_transformers::models::wuerstchen::common - Rust

WLayerNorm

Struct WLayerNorm 

Source
pub struct WLayerNorm { /* private fields */ }

Implementations§

Source§

impl WLayerNorm

Source

pub fn new(_size: usize) -> Result<Self>

Trait Implementations§

Source§

impl Debug for WLayerNorm

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for WLayerNorm

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/index.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/index.html deleted file mode 100644 index 7bf1dbd..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::wuerstchen::ddpm - Rust

Module ddpm

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/sidebar-items.js deleted file mode 100644 index e11c679..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["DDPMWScheduler","DDPMWSchedulerConfig"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/struct.DDPMWScheduler.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/struct.DDPMWScheduler.html deleted file mode 100644 index 4a022b6..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/struct.DDPMWScheduler.html +++ /dev/null @@ -1,35 +0,0 @@ -DDPMWScheduler in candle_transformers::models::wuerstchen::ddpm - Rust

DDPMWScheduler

Struct DDPMWScheduler 

Source
pub struct DDPMWScheduler {
-    pub config: DDPMWSchedulerConfig,
-    /* private fields */
-}

Fields§

§config: DDPMWSchedulerConfig

Implementations§

Source§

impl DDPMWScheduler

Source

pub fn new(inference_steps: usize, config: DDPMWSchedulerConfig) -> Result<Self>

Source

pub fn timesteps(&self) -> &[f64]

Source

pub fn scale_model_input(&self, sample: Tensor, _timestep: usize) -> Tensor

Ensures interchangeability with schedulers that need to scale the denoising model input -depending on the current timestep.

-
Source

pub fn step( - &self, - model_output: &Tensor, - ts: f64, - sample: &Tensor, -) -> Result<Tensor>

Source

pub fn init_noise_sigma(&self) -> f64

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/struct.DDPMWSchedulerConfig.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/struct.DDPMWSchedulerConfig.html deleted file mode 100644 index 4e37224..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/ddpm/struct.DDPMWSchedulerConfig.html +++ /dev/null @@ -1,27 +0,0 @@ -DDPMWSchedulerConfig in candle_transformers::models::wuerstchen::ddpm - Rust

DDPMWSchedulerConfig

Struct DDPMWSchedulerConfig 

Source
pub struct DDPMWSchedulerConfig { /* private fields */ }

Trait Implementations§

Source§

impl Clone for DDPMWSchedulerConfig

Source§

fn clone(&self) -> DDPMWSchedulerConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DDPMWSchedulerConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for DDPMWSchedulerConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/index.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/index.html deleted file mode 100644 index 45b4db5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::wuerstchen::diffnext - Rust

Module diffnext

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/sidebar-items.js deleted file mode 100644 index af35739..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["ResBlockStageB","WDiffNeXt"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/struct.ResBlockStageB.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/struct.ResBlockStageB.html deleted file mode 100644 index d9362de..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/struct.ResBlockStageB.html +++ /dev/null @@ -1,30 +0,0 @@ -ResBlockStageB in candle_transformers::models::wuerstchen::diffnext - Rust

ResBlockStageB

Struct ResBlockStageB 

Source
pub struct ResBlockStageB { /* private fields */ }

Implementations§

Source§

impl ResBlockStageB

Source

pub fn new( - c: usize, - c_skip: usize, - ksize: usize, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward(&self, xs: &Tensor, x_skip: Option<&Tensor>) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for ResBlockStageB

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/struct.WDiffNeXt.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/struct.WDiffNeXt.html deleted file mode 100644 index e0a6f15..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/diffnext/struct.WDiffNeXt.html +++ /dev/null @@ -1,40 +0,0 @@ -WDiffNeXt in candle_transformers::models::wuerstchen::diffnext - Rust

WDiffNeXt

Struct WDiffNeXt 

Source
pub struct WDiffNeXt { /* private fields */ }

Implementations§

Source§

impl WDiffNeXt

Source

pub fn new( - c_in: usize, - c_out: usize, - c_r: usize, - c_cond: usize, - clip_embd: usize, - patch_size: usize, - use_flash_attn: bool, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn forward( - &self, - xs: &Tensor, - r: &Tensor, - effnet: &Tensor, - clip: Option<&Tensor>, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for WDiffNeXt

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/index.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/index.html deleted file mode 100644 index 756231f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/index.html +++ /dev/null @@ -1,12 +0,0 @@ -candle_transformers::models::wuerstchen - Rust

Module wuerstchen

Module wuerstchen 

Source
Expand description

Würstchen Efficient Diffusion Model

-

Würstchen is an efficient diffusion model architecture for generating images using -a two-stage approach with a small decoder and prior network.

- -

§Example

- -

"Anthropomorphic cat dressed as a fire fighter"

-

Modules§

attention_processor
common
ddpm
diffnext
paella_vq
prior
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/index.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/index.html deleted file mode 100644 index d391987..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::wuerstchen::paella_vq - Rust

Module paella_vq

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/sidebar-items.js deleted file mode 100644 index 894d0ea..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["MixingResidualBlock","PaellaVQ"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/struct.MixingResidualBlock.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/struct.MixingResidualBlock.html deleted file mode 100644 index f56653a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/struct.MixingResidualBlock.html +++ /dev/null @@ -1,26 +0,0 @@ -MixingResidualBlock in candle_transformers::models::wuerstchen::paella_vq - Rust

MixingResidualBlock

Struct MixingResidualBlock 

Source
pub struct MixingResidualBlock { /* private fields */ }

Implementations§

Source§

impl MixingResidualBlock

Source

pub fn new(inp: usize, embed_dim: usize, vb: VarBuilder<'_>) -> Result<Self>

Trait Implementations§

Source§

impl Debug for MixingResidualBlock

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for MixingResidualBlock

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/struct.PaellaVQ.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/struct.PaellaVQ.html deleted file mode 100644 index 172b1f1..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/paella_vq/struct.PaellaVQ.html +++ /dev/null @@ -1,26 +0,0 @@ -PaellaVQ in candle_transformers::models::wuerstchen::paella_vq - Rust

PaellaVQ

Struct PaellaVQ 

Source
pub struct PaellaVQ { /* private fields */ }

Implementations§

Source§

impl PaellaVQ

Source

pub fn new(vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn encode(&self, xs: &Tensor) -> Result<Tensor>

Source

pub fn decode(&self, xs: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for PaellaVQ

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for PaellaVQ

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/prior/index.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/prior/index.html deleted file mode 100644 index 3d97ee3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/prior/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::wuerstchen::prior - Rust

Module prior

Module prior 

Source

Structs§

WPrior
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/prior/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/prior/sidebar-items.js deleted file mode 100644 index 740255d..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/prior/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["WPrior"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/prior/struct.WPrior.html b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/prior/struct.WPrior.html deleted file mode 100644 index d7eeb18..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/prior/struct.WPrior.html +++ /dev/null @@ -1,34 +0,0 @@ -WPrior in candle_transformers::models::wuerstchen::prior - Rust

WPrior

Struct WPrior 

Source
pub struct WPrior { /* private fields */ }

Implementations§

Source§

impl WPrior

Source

pub fn new( - c_in: usize, - c: usize, - c_cond: usize, - c_r: usize, - depth: usize, - nhead: usize, - use_flash_attn: bool, - vb: VarBuilder<'_>, -) -> Result<Self>

Source

pub fn gen_r_embedding(&self, r: &Tensor) -> Result<Tensor>

Source

pub fn forward(&self, xs: &Tensor, r: &Tensor, c: &Tensor) -> Result<Tensor>

Trait Implementations§

Source§

impl Debug for WPrior

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for WPrior

§

impl !RefUnwindSafe for WPrior

§

impl Send for WPrior

§

impl Sync for WPrior

§

impl Unpin for WPrior

§

impl !UnwindSafe for WPrior

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/wuerstchen/sidebar-items.js deleted file mode 100644 index 01e0a1e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/wuerstchen/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"mod":["attention_processor","common","ddpm","diffnext","paella_vq","prior"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/index.html b/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/index.html deleted file mode 100644 index dfc6779..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::models::xlm_roberta - Rust

Module xlm_roberta

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/sidebar-items.js deleted file mode 100644 index 45b77b2..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","XLMRobertaForMaskedLM","XLMRobertaForSequenceClassification","XLMRobertaModel"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.Config.html deleted file mode 100644 index a022306..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.Config.html +++ /dev/null @@ -1,43 +0,0 @@ -Config in candle_transformers::models::xlm_roberta - Rust

Config

Struct Config 

Source
pub struct Config {
Show 13 fields - pub hidden_size: usize, - pub layer_norm_eps: f64, - pub attention_probs_dropout_prob: f32, - pub hidden_dropout_prob: f32, - pub num_attention_heads: usize, - pub position_embedding_type: String, - pub intermediate_size: usize, - pub hidden_act: Activation, - pub num_hidden_layers: usize, - pub vocab_size: usize, - pub max_position_embeddings: usize, - pub type_vocab_size: usize, - pub pad_token_id: u32, -
}

Fields§

§hidden_size: usize§layer_norm_eps: f64§attention_probs_dropout_prob: f32§hidden_dropout_prob: f32§num_attention_heads: usize§position_embedding_type: String§intermediate_size: usize§hidden_act: Activation§num_hidden_layers: usize§vocab_size: usize§max_position_embeddings: usize§type_vocab_size: usize§pad_token_id: u32

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.XLMRobertaForMaskedLM.html b/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.XLMRobertaForMaskedLM.html deleted file mode 100644 index 9219603..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.XLMRobertaForMaskedLM.html +++ /dev/null @@ -1,33 +0,0 @@ -XLMRobertaForMaskedLM in candle_transformers::models::xlm_roberta - Rust

XLMRobertaForMaskedLM

Struct XLMRobertaForMaskedLM 

Source
pub struct XLMRobertaForMaskedLM { /* private fields */ }

Implementations§

Source§

impl XLMRobertaForMaskedLM

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &self, - input_ids: &Tensor, - attention_mask: &Tensor, - token_type_ids: &Tensor, - past_key_value: Option<(&Tensor, &Tensor)>, - encoder_hidden_states: Option<&Tensor>, - encoder_attention_mask: Option<&Tensor>, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.XLMRobertaForSequenceClassification.html b/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.XLMRobertaForSequenceClassification.html deleted file mode 100644 index e350b9f..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.XLMRobertaForSequenceClassification.html +++ /dev/null @@ -1,30 +0,0 @@ -XLMRobertaForSequenceClassification in candle_transformers::models::xlm_roberta - Rust

XLMRobertaForSequenceClassification

Struct XLMRobertaForSequenceClassification 

Source
pub struct XLMRobertaForSequenceClassification { /* private fields */ }

Implementations§

Source§

impl XLMRobertaForSequenceClassification

Source

pub fn new(num_labels: usize, cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &self, - input_ids: &Tensor, - attention_mask: &Tensor, - token_type_ids: &Tensor, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.XLMRobertaModel.html b/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.XLMRobertaModel.html deleted file mode 100644 index 4acbbc5..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/xlm_roberta/struct.XLMRobertaModel.html +++ /dev/null @@ -1,33 +0,0 @@ -XLMRobertaModel in candle_transformers::models::xlm_roberta - Rust

XLMRobertaModel

Struct XLMRobertaModel 

Source
pub struct XLMRobertaModel { /* private fields */ }

Implementations§

Source§

impl XLMRobertaModel

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &self, - input_ids: &Tensor, - attention_mask: &Tensor, - token_type_ids: &Tensor, - past_key_value: Option<(&Tensor, &Tensor)>, - encoder_hidden_states: Option<&Tensor>, - encoder_attention_mask: Option<&Tensor>, -) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/yi/index.html b/network-poc/target-native/doc/candle_transformers/models/yi/index.html deleted file mode 100644 index 1b5ce72..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/yi/index.html +++ /dev/null @@ -1,17 +0,0 @@ -candle_transformers::models::yi - Rust

Module yi

Module yi 

Source
Expand description

Yi model implementation.

-

This candle implementation uses a pre-trained Yi decoder-only large language model for inference. -The model was trained by 01.AI and follows a standard transformer architecture similar to LLaMA.

-

Original code:

- -

Key characteristics:

-
    -
  • Multi-head attention with rotary positional embeddings
  • -
  • RMS normalization
  • -
  • SwiGLU activation in feed-forward layers
  • -
  • Grouped-query attention for efficient inference
  • -
-

Structs§

Config
Model
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/yi/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/models/yi/sidebar-items.js deleted file mode 100644 index f98250a..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/yi/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["Config","Model"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/yi/struct.Config.html b/network-poc/target-native/doc/candle_transformers/models/yi/struct.Config.html deleted file mode 100644 index f10199e..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/yi/struct.Config.html +++ /dev/null @@ -1,28 +0,0 @@ -Config in candle_transformers::models::yi - Rust

Config

Struct Config 

Source
pub struct Config { /* private fields */ }

Implementations§

Source§

impl Config

Source

pub fn config_6b() -> Self

Source

pub fn config_34b() -> Self

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Config

Source§

fn eq(&self, other: &Config) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/models/yi/struct.Model.html b/network-poc/target-native/doc/candle_transformers/models/yi/struct.Model.html deleted file mode 100644 index 587ddd3..0000000 --- a/network-poc/target-native/doc/candle_transformers/models/yi/struct.Model.html +++ /dev/null @@ -1,31 +0,0 @@ -Model in candle_transformers::models::yi - Rust

Model

Struct Model 

Source
pub struct Model { /* private fields */ }

Implementations§

Source§

impl Model

Source

pub fn new(cfg: &Config, vb: VarBuilder<'_>) -> Result<Self>

Source

pub fn forward( - &mut self, - input_ids: &Tensor, - seqlen_offset: usize, -) -> Result<Tensor>

Trait Implementations§

Source§

impl Clone for Model

Source§

fn clone(&self) -> Model

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Model

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Model

§

impl !RefUnwindSafe for Model

§

impl Send for Model

§

impl Sync for Model

§

impl Unpin for Model

§

impl !UnwindSafe for Model

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/object_detection/fn.iou.html b/network-poc/target-native/doc/candle_transformers/object_detection/fn.iou.html deleted file mode 100644 index de71cc6..0000000 --- a/network-poc/target-native/doc/candle_transformers/object_detection/fn.iou.html +++ /dev/null @@ -1,2 +0,0 @@ -iou in candle_transformers::object_detection - Rust

iou

Function iou 

Source
pub fn iou<D>(b1: &Bbox<D>, b2: &Bbox<D>) -> f32
Expand description

Intersection over union of two bounding boxes.

-
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/object_detection/fn.non_maximum_suppression.html b/network-poc/target-native/doc/candle_transformers/object_detection/fn.non_maximum_suppression.html deleted file mode 100644 index 5eba649..0000000 --- a/network-poc/target-native/doc/candle_transformers/object_detection/fn.non_maximum_suppression.html +++ /dev/null @@ -1 +0,0 @@ -non_maximum_suppression in candle_transformers::object_detection - Rust

non_maximum_suppression

Function non_maximum_suppression 

Source
pub fn non_maximum_suppression<D>(bboxes: &mut [Vec<Bbox<D>>], threshold: f32)
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/object_detection/fn.soft_non_maximum_suppression.html b/network-poc/target-native/doc/candle_transformers/object_detection/fn.soft_non_maximum_suppression.html deleted file mode 100644 index ac86a12..0000000 --- a/network-poc/target-native/doc/candle_transformers/object_detection/fn.soft_non_maximum_suppression.html +++ /dev/null @@ -1,6 +0,0 @@ -soft_non_maximum_suppression in candle_transformers::object_detection - Rust

soft_non_maximum_suppression

Function soft_non_maximum_suppression 

Source
pub fn soft_non_maximum_suppression<D>(
-    bboxes: &mut [Vec<Bbox<D>>],
-    iou_threshold: Option<f32>,
-    confidence_threshold: Option<f32>,
-    sigma: Option<f32>,
-)
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/object_detection/index.html b/network-poc/target-native/doc/candle_transformers/object_detection/index.html deleted file mode 100644 index 056a5d0..0000000 --- a/network-poc/target-native/doc/candle_transformers/object_detection/index.html +++ /dev/null @@ -1,5 +0,0 @@ -candle_transformers::object_detection - Rust

Module object_detection

Module object_detection 

Source
Expand description

Bounding Boxes and Intersection

-

This module provides functionality for handling bounding boxes and their manipulation, -particularly in the context of object detection. It includes tools for calculating -intersection over union (IoU) and non-maximum suppression (NMS).

-

Structs§

Bbox
A bounding box around an object.
KeyPoint

Functions§

iou
Intersection over union of two bounding boxes.
non_maximum_suppression
soft_non_maximum_suppression
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/object_detection/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/object_detection/sidebar-items.js deleted file mode 100644 index 473f12d..0000000 --- a/network-poc/target-native/doc/candle_transformers/object_detection/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["iou","non_maximum_suppression","soft_non_maximum_suppression"],"struct":["Bbox","KeyPoint"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/object_detection/struct.Bbox.html b/network-poc/target-native/doc/candle_transformers/object_detection/struct.Bbox.html deleted file mode 100644 index 3f72a24..0000000 --- a/network-poc/target-native/doc/candle_transformers/object_detection/struct.Bbox.html +++ /dev/null @@ -1,41 +0,0 @@ -Bbox in candle_transformers::object_detection - Rust

Bbox

Struct Bbox 

Source
pub struct Bbox<D> {
-    pub xmin: f32,
-    pub ymin: f32,
-    pub xmax: f32,
-    pub ymax: f32,
-    pub confidence: f32,
-    pub data: D,
-}
Expand description

A bounding box around an object.

-

Fields§

§xmin: f32§ymin: f32§xmax: f32§ymax: f32§confidence: f32§data: D

Trait Implementations§

Source§

impl<D: Clone> Clone for Bbox<D>

Source§

fn clone(&self) -> Bbox<D>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<D: Debug> Debug for Bbox<D>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<D> Freeze for Bbox<D>
where - D: Freeze,

§

impl<D> RefUnwindSafe for Bbox<D>
where - D: RefUnwindSafe,

§

impl<D> Send for Bbox<D>
where - D: Send,

§

impl<D> Sync for Bbox<D>
where - D: Sync,

§

impl<D> Unpin for Bbox<D>
where - D: Unpin,

§

impl<D> UnwindSafe for Bbox<D>
where - D: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/object_detection/struct.KeyPoint.html b/network-poc/target-native/doc/candle_transformers/object_detection/struct.KeyPoint.html deleted file mode 100644 index c37b852..0000000 --- a/network-poc/target-native/doc/candle_transformers/object_detection/struct.KeyPoint.html +++ /dev/null @@ -1,34 +0,0 @@ -KeyPoint in candle_transformers::object_detection - Rust

KeyPoint

Struct KeyPoint 

Source
pub struct KeyPoint {
-    pub x: f32,
-    pub y: f32,
-    pub mask: f32,
-}

Fields§

§x: f32§y: f32§mask: f32

Trait Implementations§

Source§

impl Clone for KeyPoint

Source§

fn clone(&self) -> KeyPoint

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for KeyPoint

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for KeyPoint

Source§

fn eq(&self, other: &KeyPoint) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
Source§

impl Copy for KeyPoint

Source§

impl StructuralPartialEq for KeyPoint

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> Boilerplate for T
where - T: Copy + Send + Sync + Debug + PartialEq + 'static,

§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/pipelines/index.html b/network-poc/target-native/doc/candle_transformers/pipelines/index.html deleted file mode 100644 index 0418c77..0000000 --- a/network-poc/target-native/doc/candle_transformers/pipelines/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::pipelines - Rust

Module pipelines

Module pipelines 

Source

Modules§

text_generation
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/pipelines/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/pipelines/sidebar-items.js deleted file mode 100644 index e542d27..0000000 --- a/network-poc/target-native/doc/candle_transformers/pipelines/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"mod":["text_generation"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/pipelines/text_generation/index.html b/network-poc/target-native/doc/candle_transformers/pipelines/text_generation/index.html deleted file mode 100644 index 691345f..0000000 --- a/network-poc/target-native/doc/candle_transformers/pipelines/text_generation/index.html +++ /dev/null @@ -1 +0,0 @@ -candle_transformers::pipelines::text_generation - Rust

Module text_generation

Module text_generation 

Source
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/pipelines/text_generation/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/pipelines/text_generation/sidebar-items.js deleted file mode 100644 index 5244ce0..0000000 --- a/network-poc/target-native/doc/candle_transformers/pipelines/text_generation/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/quantized_nn/fn.layer_norm.html b/network-poc/target-native/doc/candle_transformers/quantized_nn/fn.layer_norm.html deleted file mode 100644 index 71c5681..0000000 --- a/network-poc/target-native/doc/candle_transformers/quantized_nn/fn.layer_norm.html +++ /dev/null @@ -1 +0,0 @@ -layer_norm in candle_transformers::quantized_nn - Rust

layer_norm

Function layer_norm 

Source
pub fn layer_norm(size: usize, eps: f64, vb: VarBuilder) -> Result<LayerNorm>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/quantized_nn/fn.layer_norm_no_bias.html b/network-poc/target-native/doc/candle_transformers/quantized_nn/fn.layer_norm_no_bias.html deleted file mode 100644 index bdab217..0000000 --- a/network-poc/target-native/doc/candle_transformers/quantized_nn/fn.layer_norm_no_bias.html +++ /dev/null @@ -1,5 +0,0 @@ -layer_norm_no_bias in candle_transformers::quantized_nn - Rust

layer_norm_no_bias

Function layer_norm_no_bias 

Source
pub fn layer_norm_no_bias(
-    size: usize,
-    eps: f64,
-    vb: VarBuilder,
-) -> Result<LayerNorm>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/quantized_nn/fn.linear.html b/network-poc/target-native/doc/candle_transformers/quantized_nn/fn.linear.html deleted file mode 100644 index 29d64b8..0000000 --- a/network-poc/target-native/doc/candle_transformers/quantized_nn/fn.linear.html +++ /dev/null @@ -1 +0,0 @@ -linear in candle_transformers::quantized_nn - Rust

linear

Function linear 

Source
pub fn linear(in_dim: usize, out_dim: usize, vb: VarBuilder) -> Result<Linear>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/quantized_nn/fn.linear_b.html b/network-poc/target-native/doc/candle_transformers/quantized_nn/fn.linear_b.html deleted file mode 100644 index 9db799e..0000000 --- a/network-poc/target-native/doc/candle_transformers/quantized_nn/fn.linear_b.html +++ /dev/null @@ -1,6 +0,0 @@ -linear_b in candle_transformers::quantized_nn - Rust

linear_b

Function linear_b 

Source
pub fn linear_b(
-    in_dim: usize,
-    out_dim: usize,
-    bias: bool,
-    vb: VarBuilder,
-) -> Result<Linear>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/quantized_nn/fn.linear_no_bias.html b/network-poc/target-native/doc/candle_transformers/quantized_nn/fn.linear_no_bias.html deleted file mode 100644 index 8d247fd..0000000 --- a/network-poc/target-native/doc/candle_transformers/quantized_nn/fn.linear_no_bias.html +++ /dev/null @@ -1,5 +0,0 @@ -linear_no_bias in candle_transformers::quantized_nn - Rust

linear_no_bias

Function linear_no_bias 

Source
pub fn linear_no_bias(
-    in_dim: usize,
-    out_dim: usize,
-    vb: VarBuilder,
-) -> Result<Linear>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/quantized_nn/index.html b/network-poc/target-native/doc/candle_transformers/quantized_nn/index.html deleted file mode 100644 index 59bb624..0000000 --- a/network-poc/target-native/doc/candle_transformers/quantized_nn/index.html +++ /dev/null @@ -1,5 +0,0 @@ -candle_transformers::quantized_nn - Rust

Module quantized_nn

Module quantized_nn 

Source
Expand description

Utilities for quanitized network layers

-

This module contains various implementations of standard neural network layers, modules and -utilities including embedding, linear layers, and various normalization techniques. -Most implementations provide quantized weights support.

-

Structs§

Embedding
Linear
RmsNorm

Functions§

layer_norm
layer_norm_no_bias
linear
linear_b
linear_no_bias
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/quantized_nn/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/quantized_nn/sidebar-items.js deleted file mode 100644 index 973479f..0000000 --- a/network-poc/target-native/doc/candle_transformers/quantized_nn/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["layer_norm","layer_norm_no_bias","linear","linear_b","linear_no_bias"],"struct":["Embedding","Linear","RmsNorm"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/quantized_nn/struct.Embedding.html b/network-poc/target-native/doc/candle_transformers/quantized_nn/struct.Embedding.html deleted file mode 100644 index ed140db..0000000 --- a/network-poc/target-native/doc/candle_transformers/quantized_nn/struct.Embedding.html +++ /dev/null @@ -1,28 +0,0 @@ -Embedding in candle_transformers::quantized_nn - Rust

Embedding

Struct Embedding 

Source
pub struct Embedding { /* private fields */ }

Implementations§

Source§

impl Embedding

Source

pub fn new(d1: usize, d2: usize, vb: VarBuilder) -> Result<Self>

Source

pub fn embeddings(&self) -> &Tensor

Trait Implementations§

Source§

impl Clone for Embedding

Source§

fn clone(&self) -> Embedding

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Embedding

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Embedding

Source§

fn forward(&self, xs: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/quantized_nn/struct.Linear.html b/network-poc/target-native/doc/candle_transformers/quantized_nn/struct.Linear.html deleted file mode 100644 index a5a6f85..0000000 --- a/network-poc/target-native/doc/candle_transformers/quantized_nn/struct.Linear.html +++ /dev/null @@ -1,28 +0,0 @@ -Linear in candle_transformers::quantized_nn - Rust

Linear

Struct Linear 

Source
pub struct Linear { /* private fields */ }

Implementations§

Source§

impl Linear

Source

pub fn from_arc(weight: Arc<QTensor>, bias: Option<Tensor>) -> Result<Self>

Source

pub fn from_weights(weight: QMatMul, bias: Option<Tensor>) -> Self

Trait Implementations§

Source§

impl Clone for Linear

Source§

fn clone(&self) -> Linear

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Linear

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for Linear

Source§

fn forward(&self, x: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

§

impl Freeze for Linear

§

impl !RefUnwindSafe for Linear

§

impl Send for Linear

§

impl Sync for Linear

§

impl Unpin for Linear

§

impl !UnwindSafe for Linear

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/quantized_nn/struct.RmsNorm.html b/network-poc/target-native/doc/candle_transformers/quantized_nn/struct.RmsNorm.html deleted file mode 100644 index 17dd8f4..0000000 --- a/network-poc/target-native/doc/candle_transformers/quantized_nn/struct.RmsNorm.html +++ /dev/null @@ -1,28 +0,0 @@ -RmsNorm in candle_transformers::quantized_nn - Rust

RmsNorm

Struct RmsNorm 

Source
pub struct RmsNorm { /* private fields */ }

Implementations§

Source§

impl RmsNorm

Source

pub fn new(size: usize, eps: f64, vb: VarBuilder) -> Result<Self>

Source

pub fn from_qtensor(weight: QTensor, eps: f64) -> Result<Self>

Trait Implementations§

Source§

impl Clone for RmsNorm

Source§

fn clone(&self) -> RmsNorm

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RmsNorm

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Module for RmsNorm

Source§

fn forward(&self, x: &Tensor) -> Result<Tensor>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<M> ModuleT for M
where - M: Module,

§

fn forward_t(&self, xs: &Tensor, _train: bool) -> Result<Tensor, Error>

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/quantized_var_builder/index.html b/network-poc/target-native/doc/candle_transformers/quantized_var_builder/index.html deleted file mode 100644 index da4f5b5..0000000 --- a/network-poc/target-native/doc/candle_transformers/quantized_var_builder/index.html +++ /dev/null @@ -1,5 +0,0 @@ -candle_transformers::quantized_var_builder - Rust

Module quantized_var_builder

Module quantized_var_builder 

Source
Expand description

Varbuilder for Loading gguf files

-

VarBuilder is a utility to store quantized tensors from a GGUF model file. -These tensors can be loaded from disk using from_gguf or from an in-memory -buffer using from_gguf_buffer.

-

Structs§

VarBuilder
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/quantized_var_builder/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/quantized_var_builder/sidebar-items.js deleted file mode 100644 index f426a33..0000000 --- a/network-poc/target-native/doc/candle_transformers/quantized_var_builder/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"struct":["VarBuilder"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/quantized_var_builder/struct.VarBuilder.html b/network-poc/target-native/doc/candle_transformers/quantized_var_builder/struct.VarBuilder.html deleted file mode 100644 index 8bfe975..0000000 --- a/network-poc/target-native/doc/candle_transformers/quantized_var_builder/struct.VarBuilder.html +++ /dev/null @@ -1,27 +0,0 @@ -VarBuilder in candle_transformers::quantized_var_builder - Rust

VarBuilder

Struct VarBuilder 

Source
pub struct VarBuilder { /* private fields */ }

Implementations§

Source§

impl VarBuilder

Source

pub fn from_gguf<P: AsRef<Path>>(p: P, device: &Device) -> Result<Self>

Source

pub fn from_gguf_buffer(buffer: &[u8], device: &Device) -> Result<Self>

Source

pub fn pp<S: ToString>(&self, s: S) -> Self

Source

pub fn get<S: Into<Shape>>(&self, s: S, name: &str) -> Result<Arc<QTensor>>

Source

pub fn get_no_shape(&self, name: &str) -> Result<Arc<QTensor>>

Source

pub fn device(&self) -> &Device

Source

pub fn contains_key(&self, key: &str) -> bool

Trait Implementations§

Source§

impl Clone for VarBuilder

Source§

fn clone(&self) -> VarBuilder

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where - T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where - T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where - T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where - U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where - T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where - T: 'static,

\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/sidebar-items.js deleted file mode 100644 index b4a2ecd..0000000 --- a/network-poc/target-native/doc/candle_transformers/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"mod":["generation","models","object_detection","pipelines","quantized_nn","quantized_var_builder","utils"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/utils/fn.apply_repeat_penalty.html b/network-poc/target-native/doc/candle_transformers/utils/fn.apply_repeat_penalty.html deleted file mode 100644 index b8ef246..0000000 --- a/network-poc/target-native/doc/candle_transformers/utils/fn.apply_repeat_penalty.html +++ /dev/null @@ -1,5 +0,0 @@ -apply_repeat_penalty in candle_transformers::utils - Rust

apply_repeat_penalty

Function apply_repeat_penalty 

Source
pub fn apply_repeat_penalty(
-    logits: &Tensor,
-    penalty: f32,
-    context: &[u32],
-) -> Result<Tensor>
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/utils/fn.repeat_kv.html b/network-poc/target-native/doc/candle_transformers/utils/fn.repeat_kv.html deleted file mode 100644 index a0e7d43..0000000 --- a/network-poc/target-native/doc/candle_transformers/utils/fn.repeat_kv.html +++ /dev/null @@ -1,3 +0,0 @@ -repeat_kv in candle_transformers::utils - Rust

repeat_kv

Function repeat_kv 

Source
pub fn repeat_kv(xs: Tensor, n_rep: usize) -> Result<Tensor>
Expand description

Repeats a key or value tensor for grouped query attention -The input tensor should have a shape (batch, num_kv_heads, seq_len, head_dim),

-
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/utils/index.html b/network-poc/target-native/doc/candle_transformers/utils/index.html deleted file mode 100644 index c233612..0000000 --- a/network-poc/target-native/doc/candle_transformers/utils/index.html +++ /dev/null @@ -1,3 +0,0 @@ -candle_transformers::utils - Rust

Module utils

Module utils 

Source
Expand description

Apply penalty and repeat_kv

-

Functions§

apply_repeat_penalty
repeat_kv
Repeats a key or value tensor for grouped query attention -The input tensor should have a shape (batch, num_kv_heads, seq_len, head_dim),
\ No newline at end of file diff --git a/network-poc/target-native/doc/candle_transformers/utils/sidebar-items.js b/network-poc/target-native/doc/candle_transformers/utils/sidebar-items.js deleted file mode 100644 index 9c9679d..0000000 --- a/network-poc/target-native/doc/candle_transformers/utils/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"fn":["apply_repeat_penalty","repeat_kv"]}; \ No newline at end of file diff --git a/network-poc/target-native/doc/crates.js b/network-poc/target-native/doc/crates.js deleted file mode 100644 index 9d882b2..0000000 --- a/network-poc/target-native/doc/crates.js +++ /dev/null @@ -1,2 +0,0 @@ -window.ALL_CRATES = ["candle_transformers"]; -//{"start":21,"fragment_lengths":[21]} \ No newline at end of file diff --git a/network-poc/target-native/doc/help.html b/network-poc/target-native/doc/help.html deleted file mode 100644 index c46c10b..0000000 --- a/network-poc/target-native/doc/help.html +++ /dev/null @@ -1 +0,0 @@ -Help

All

Rustdoc help

Back
\ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/003d09593f6a.js b/network-poc/target-native/doc/search.index/003d09593f6a.js deleted file mode 100644 index 52636e8..0000000 --- a/network-poc/target-native/doc/search.index/003d09593f6a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEAOzAAAAEAADEAAgDOIAEAbCQvAAUBwAAAFkIr4ivY9CpibwEFADswAAABAAAJAAQACicAAAkoAACmKwYAPiwAAAUBwAAAp+8pA3MnbXYFAcAAAAV0JgebJ2xy5wYAyaBQAAAn7bCALDsAAaCwAAAsFKAAAAAd0kBOXAD0RxQAAJEMjAPAAQ==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/0061c3727565.js b/network-poc/target-native/doc/search.index/0061c3727565.js deleted file mode 100644 index c45feb1..0000000 --- a/network-poc/target-native/doc/search.index/0061c3727565.js +++ /dev/null @@ -1 +0,0 @@ -rn_("YUMAAForWytcK10ruyy8LL0soUUAAEorMwIDoDAAACaeZnByOjAAAAEAAAAAAAkAEAAAAOsUhiVEJ9Un8SdpKmoqayoKKw0r") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/00763bda922b.js b/network-poc/target-native/doc/search.index/00763bda922b.js deleted file mode 100644 index f94e294..0000000 --- a/network-poc/target-native/doc/search.index/00763bda922b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("QUcAADUqNirALMEswiwFAcIAABDYICQmosUsZWnzAAJjcDswAAABAABHAA4APhQAAFIYAADiJAoAyCcCAM4nAQDaKQAAOyoAALcqAQC8KgAAvyoqACUrAAClKwAAUSwCAKksAAAFAsEAAAVhKgMkKwYFK2Fid2FDAACyKrMqtCogKyErIisjK/MCAWk7MAAAAQAAEAABANcnEADDAwSgEAAAJXCgUAAAKD0yY2VuOzAAAAEAAA4ABgDKHQQA8SAAAM0kAQDsJgAA3CkCAOEsAgBjAAOgMAAAKm5kbnM6MAAAAQAAAAAAHQAQAAAA/RX+Ff8Vuh2/HcgdyR2MINAgZyZFJ5EnlSdDKNUr5ysTLDUsPyxJLHwsfSx+LI4skSySLJgsqiywLLEsJQBFAAADjCxzRShGKJUsEwECoCAAACvSZXEBHioAAPsCbXI=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/00a2cce7b4b7.js b/network-poc/target-native/doc/search.index/00a2cce7b4b7.js deleted file mode 100644 index e17c639..0000000 --- a/network-poc/target-native/doc/search.index/00a2cce7b4b7.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABsTAsyAABZQFNKwAABQBEAACowCxzmCxjAISgUAAALIagYAAAKwcECBI6MAAAAQAAAAAAHgAQAAAAeCB5IJogmyBTJlQmVSZWJlcmWCZZJlomWyZOKGgqBisyKzMrsSuyK8srzSvpK+sr8SvyK/MrLSxELJ8styxhQwAAsiqzKrQqICshKyIrIyvzAQFpOzAAAAEAACUABABUGAMAPiYAAPMmDwDXJxAAAQIAOzAAAAEAACoAAwCJKigABCwAANAsAADzAAFp0vYrAADNoUUAAFEs8wQCbHMB7SsAAHuEoDAAACnbCIAD") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/00b2aef8d52a.js b/network-poc/target-native/doc/search.index/00b2aef8d52a.js deleted file mode 100644 index e70afc7..0000000 --- a/network-poc/target-native/doc/search.index/00b2aef8d52a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIAOzAAAAEAACoAAwCJKigABCwAANAsAAAFAEcAAAXgLGPNLPMAAmNpOjAAAAEAAAAAAAcAEAAAAJsmpybeK98r4CvhK/Yrwyw=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/00d8b529914f.js b/network-poc/target-native/doc/search.index/00d8b529914f.js deleted file mode 100644 index 5513937..0000000 --- a/network-poc/target-native/doc/search.index/00d8b529914f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBEAAAFpCxjzitxQwAA9yv4K/kr+it4LHkseix7LAEAADswAAABAAAlAAMAVCwhANEsAADULAIA84ICc3QjhQKgEAAAKhRlaQUBwAAACQ4sBUUqaXUFAsEAABhCK+IrOaIsoyy1LLYsCNksZWdydwGBhqDAAAAskIAr2QAQYxMRAgUBxQAApRsr5IIqZnL7AmFv") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/01cd84d2f2e3.js b/network-poc/target-native/doc/search.index/01cd84d2f2e3.js deleted file mode 100644 index 430a610..0000000 --- a/network-poc/target-native/doc/search.index/01cd84d2f2e3.js +++ /dev/null @@ -1 +0,0 @@ -rn_("IUAAAHAUQCpBKgUAQAAAkEAqOHIUBQHAAAAALRgAaRgwbQUAQAAAAHEUNkQqKwKgMAAAJs0wObcBAAmgIAAALKWwECaVAAGgAAAAJF6gIAAAKkywsCx9AC0wMjM0ODliZW46MAAAAQAAAAAAGAAQAAAAGABRAFsAhwAYA0kDSgNLA0QHRQdGB10LbxRyFGMY9R1gJGEkKCYpJiomICo+Kj8q6Cs=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/0294230d9fee.js b/network-poc/target-native/doc/search.index/0294230d9fee.js deleted file mode 100644 index d89f4e0..0000000 --- a/network-poc/target-native/doc/search.index/0294230d9fee.js +++ /dev/null @@ -1 +0,0 @@ -rn_("sUYAAL8mBQHAAAAGWycE0yBhaQUBwAAAJjwnAigDKABZJ2VzAQMBoQAAACysaeIyGAAA+wJydMUAQQAABSgqYmUgI4ECoBAAACBkbXWHpADMoCAAABg7oEAAACShoBAAACT8oDAAACBqsCAT2wABoGAAACa+sFAl6wABoNAAACwuQJXkEzswAAABAADaAwQAJAMAAFcF7AGeFAAA2RnrAQ==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/02dd62743463.js b/network-poc/target-native/doc/search.index/02dd62743463.js deleted file mode 100644 index 656c7ed..0000000 --- a/network-poc/target-native/doc/search.index/02dd62743463.js +++ /dev/null @@ -1 +0,0 @@ -rn_("MUAAACIDIwNVBVYFBQHAAACwBxgyBSUDLDgsQSxlaSUAQAAAE1sqzCtw7R1bKswrBQHAAAABgxQBcyZlaQEEADswAAABAAAVAAIAkCsUAN0sAAATAAOgEAAAFIKgAAAAFGJocnP1wA0AAIccKgDKAQEApwcAh7CgKDkAAaCQAAArLREwJjswAAABAAALAAQAJgMEADYDAgDhEQAA1B0CAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/03ea4f6e7c51.js b/network-poc/target-native/doc/search.index/03ea4f6e7c51.js deleted file mode 100644 index e8fcac9..0000000 --- a/network-poc/target-native/doc/search.index/03ea4f6e7c51.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABoMAAACzLZTswAAABAAANAAYAHCYAAHcmAADZJgAATicCAHYqAwAWKwMAgwCEoKAAACsCoEAAACvnoIAAACzOIBgC9kImAAABAAEAAQBIBgIAKwKgEAAAJSBiZQ==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/03ec11e31b4c.js b/network-poc/target-native/doc/search.index/03ec11e31b4c.js deleted file mode 100644 index dd62c85..0000000 --- a/network-poc/target-native/doc/search.index/03ec11e31b4c.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABsTAsyAABZQFNKwAABQBEAACowCxzmCxjAYSgUAAALIagYAAAKwcECBI6MAAAAQAAAAAAHgAQAAAAeCB5IJogmyBTJlQmVSZWJlcmWCZZJlomWyZOKGgqBisyKzMrsSuyK8srzSvpK+sr8SvyK/MrLSxELJ8styw=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/049ab7c95bde.js b/network-poc/target-native/doc/search.index/049ab7c95bde.js deleted file mode 100644 index 14f62bc..0000000 --- a/network-poc/target-native/doc/search.index/049ab7c95bde.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAAALhgRICroKzAyQwAGoBAAACCwoCAAABRysAAAhwKRoAAAABHFsAAV7wgIMDEyNDhiOjAAAAEAAAAAAA4AEAAAABoATAteC8INxBFxFAwWDRZCKvIq8yr/KwAsASylLA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/04c9f6fec5de.js b/network-poc/target-native/doc/search.index/04c9f6fec5de.js deleted file mode 100644 index e1ccd54..0000000 --- a/network-poc/target-native/doc/search.index/04c9f6fec5de.js +++ /dev/null @@ -1 +0,0 @@ -rn_("IUUAAE8oTSpOKiMAArBgKhsA4GNwOzAAAAEAAAoABADeHQAAqSAFAPopAgBALAAABQHFAAABGioCZyplaWOBA6BAAAAnSWJlcysCoIAAACtAYWVDAAOgIAAAKdugQAAALJAxaHTyGRgAACoS") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/053b677a656c.js b/network-poc/target-native/doc/search.index/053b677a656c.js deleted file mode 100644 index 641de18..0000000 --- a/network-poc/target-native/doc/search.index/053b677a656c.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAACiRCsHyilpbwUAQgAAAckgbywYAQMAOzAAAAEAABYACwB9JgMAgicJAAcqAAAEKwAAOisAAPQrAAD7KwAAGiwAAEMsAAC5LAAAxCwAAAUBwAAAkuclAuklbHQFAEQAAJDOJ3OxLAUAQQAABTErYy4nlQBGAAAJ1yxlHisFAEEAAAWCLGMAKxMEAqAAAAArJjJzAWomAACnDADKsNAsTQABsFAnNAABoFAAACnLsJArVgABsEAnnAABoCAAACg8wCsHCDswAAABAAAoABIAeRQHAO8UBABlJQEAaCUAAIIlAQBgJgEAeyYAABsnAQA8JwAAQCcAAEsnAQBRJwEAXScBAAIoAQAsKAMA8ykBAAsqAAB/LAAABQBEAAAAWidzqCYFAcMAAAEzJwojLDF0IwAEoIAAACzeoDAAACVroKAAACsBMmNscvV4FAAAdAABAAEAWBIFAcAAAJJcKgOnJm95dwMBx6CgAAArVaBwAAAqJIBBoAk7MAAAAQAAEQACABwUEAAhKgAA+wNkbnWVAEIAAA5ELHRYGFFGAAAYJhkmGiYbJusnVigFAEgAAAXgLGPNLPMMAXPihywAAEMAhLDQLNsAAaBAAAAn1LAwJ4ECiRQABvXHEQAAzQ7JA2wFBgP3AQCGoNAAACyMkEhEASUDAAA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/05affee7b8e8.js b/network-poc/target-native/doc/search.index/05affee7b8e8.js deleted file mode 100644 index 297c8d1..0000000 --- a/network-poc/target-native/doc/search.index/05affee7b8e8.js +++ /dev/null @@ -1 +0,0 @@ -rn_("sUYAAL8mBQHAAAAGWycE0yBhaQUBwQAAJjwnAigDKABZJ2VzxQBBAAAFKCpiZSAjgQKgEAAAIGRtdUcZAMmgIAAAGDugQAAAJKGgMAAAIGqgYAAAJr6wUCXrAAFAkeAROzAAAAEAANoDBAAkAwAAVwXsAZ4UAADZGesB") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/0730beffd097.js b/network-poc/target-native/doc/search.index/0730beffd097.js deleted file mode 100644 index 2b2e8c5..0000000 --- a/network-poc/target-native/doc/search.index/0730beffd097.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUAOzAAAAEAADEAAgDOIAEAbCQvAAEBADswAAABAAAPAAMA5CAMAFwmAAAPLAEAIwHFoOAAACwtoIAAAChXoDAAACLtoCAAAB3zAAUADeTKDQAAoUUAANQd2wSgkAAAJ9RjZGx2") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/07c3ffdefafd.js b/network-poc/target-native/doc/search.index/07c3ffdefafd.js deleted file mode 100644 index 56e4ca0..0000000 --- a/network-poc/target-native/doc/search.index/07c3ffdefafd.js +++ /dev/null @@ -1 +0,0 @@ -rn_("cUMAAPcr+Cv5K/oreCx5LHoseywBAAA7MAAAAQAAJgAEAFQsIQCtLAAA0SwAANQsAgDzggJzdCOCAqAQAAAqFGVp") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/092b4157f085.js b/network-poc/target-native/doc/search.index/092b4157f085.js deleted file mode 100644 index 5b3b271..0000000 --- a/network-poc/target-native/doc/search.index/092b4157f085.js +++ /dev/null @@ -1 +0,0 @@ -rn_("ZQFFAAAOuSwGQixhcB4oHyggKCEoIigvKzArJQBBAAAF8CtjNihvKnAqAQIAOzAAAAEAAAkAAwALJwEA9ysDAHgsAwAFAEkAAASYLGzNK2sDoHAAACxAaXJ5IUIAAM0n2yuMLPMAAWk7MAAAAQAAPQALAMwgAQBnJAQA7ikAADgrAAC4KwoANiwAAFQsIQCULAAArSwAANEsAADULAMABQBBAAAA/CpzpywjgQKAJ3oAEAFlaRsCoLAAACs8YWUFAccAAAiuLA3SLGFjBQHBAAABkycCSihldfsCb3WVAUAAAAVUK5pkKmJz3hErAqAwAAAsN2Flxx8AyaBQAAAoHKBgAAAoRwAIhxs6MAAAAQAAAAAAPAAQAAAAyBHJEeARNBSIFBoYGxghGCIYJBglGGYYZxjCHcMdxB30H/Uf9h/3HwMnBCcFJwYnBycIJx0nKycsJ1snRShGKE8o0CnvKfAp8SlIKkkqTSpOKlYqZyoOKxMrFCsVK0Ir0yviK+4r7ysnLCgsTyxQLJUstCzFLMYsxyw=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/09d8aff063a2.js b/network-poc/target-native/doc/search.index/09d8aff063a2.js deleted file mode 100644 index f472cb7..0000000 --- a/network-poc/target-native/doc/search.index/09d8aff063a2.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQFAAADCFSyrmSxpb/sgBQHCAACsuyyVSCtiYwEAAaAgAAArR2k7MAAAAQAAMwACAGArLgBKLAQAI4ICoCAAACsLZHMbArCAK/0AsmVpBQHAAAChTyulaSppcgUAQwAABcQrY4wn0UIAAKIn+wJpbFcxAIuwUCv0AMWg8AAALM6gwAAALN2goAAALM+gkAAALMqgkAAAK/6utBI6MAAAAQAAAAAAGgAQAAAAth23Hbgd6x3sHUEnQidnJ2gnaSdqJ2snjyfyJ/Mn9CfFKdIpNyr/KisrBiwHLAgsrizSLNos") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/0ab19a760b88.js b/network-poc/target-native/doc/search.index/0ab19a760b88.js deleted file mode 100644 index 21088a2..0000000 --- a/network-poc/target-native/doc/search.index/0ab19a760b88.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBKAAAEmCxszSsFAccAAAiuLA3SLGFjKwKgQAAAKEpvdfOCAm10MUQAAFgqWSpkKmUqBQHHAAABGCoKlywxdHMAhKBQAAAmdgMBBPR+IAAAAQA0CwEA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/0b0b22d9594d.js b/network-poc/target-native/doc/search.index/0b0b22d9594d.js deleted file mode 100644 index 092dea8..0000000 --- a/network-poc/target-native/doc/search.index/0b0b22d9594d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("pQBDAAAEVCpwYSXRSQAALyz7AmFjBQHAAAAHUytGNSo2KsAswSzCLGFlBQHAAAAB3CuTjSBkbQUBwgAAENggJCaixSxladcBAIWxMCzIAAEUgQQ7MAAAAQAAUAAUAD4UAAAmGAEAUhgAAIAgAADiJAoAHSUBADIlAQAuJgAAyCcCAM4nAQDaKQAAOyoAALcqAQC8KgAAvyoqACUrAABNKwAApSsAAFEsAgCpLAAA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/0b78d2564165.js b/network-poc/target-native/doc/search.index/0b78d2564165.js deleted file mode 100644 index a7d1c96..0000000 --- a/network-poc/target-native/doc/search.index/0b78d2564165.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHBAAAGyiy7KSxiaAEBADswAAABAAAdAA4ALxgBAGQlAAAYJgMAISYCAM8mBQDWJgIAficAAKgnAADrJwAAVigAANEpAAC+KgAADCsAACksAwClAEQAAKzhLHCJLDsDoAAAABX8Y2xy8wACZXXz9B0AAPsIAQA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/0c3480e39521.js b/network-poc/target-native/doc/search.index/0c3480e39521.js deleted file mode 100644 index f4be77a..0000000 --- a/network-poc/target-native/doc/search.index/0c3480e39521.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIBsGAsIAABdTowAAABAAAAAAANABAAAAB8JTInNCc1J0goBipsKjQrNSvHK8kr0CuGLOAsMVEAAKIsoyy1LLYs+wJkZgUDQgAAARInkCUlARMnARQnMTIzN6gg+wJkbgUARwAAoE4nc48soUQAAFAmawOgMAAAHeNhZGkFAcAAAApYKwjZK2RwMUYAABEqHCrILMks9wAAhaAgAAAny5FAAfJpAAAA0hc=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/0cd3046acd46.js b/network-poc/target-native/doc/search.index/0cd3046acd46.js deleted file mode 100644 index 98d7dab..0000000 --- a/network-poc/target-native/doc/search.index/0cd3046acd46.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBAAABh1yTYJNkk2iTbJI0nHypw0SsFAEkAAAWGLGMGK5UBRAAAqAYspwksYWcrJiUAQgAAAS0rbxcYGBh3LAUARAAAKD0rPisFLHDfLAUBwwAACK4sDdIsYWP/AMWgwAAALIMAIGQBBQHAAAAHRicRgCAuJmRytwIAhrCAKzYAAaAwAAAlIBARSTswAAABAAA3AAQA2hECAGwUAgCmFAAAuRQwAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/0d93f53d2d2f.js b/network-poc/target-native/doc/search.index/0d93f53d2d2f.js deleted file mode 100644 index f3e238f..0000000 --- a/network-poc/target-native/doc/search.index/0d93f53d2d2f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBAAAABzSZ2ryAFAEAAAABxFDZEKgUAQQAAAS0YMm8URQFAAAADvSALkSw4bncLliDuIu8ixCdnBQAIoDAAACbNoBAAABRwoAAAACCwoLAAACx+MDEyNDlrbW46MAAAAQAAAAAACAAQAAAADQAQABEATQBVAE8LLRguGGQY") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/0e60c3ef220d.js b/network-poc/target-native/doc/search.index/0e60c3ef220d.js deleted file mode 100644 index 5642767..0000000 --- a/network-poc/target-native/doc/search.index/0e60c3ef220d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("0UkAACwqBQHGAAClGyvkgipmcgUBwwAABV4qAzsoY3SDAISgUAAAJzigYAAAJ5SgAAAALCUUEAH0hBQAAAEAawEBAHMAxaAgAAAYSbBALDsAAQBECAk7MAAAAQAAXAMGAE0H6wF2CwAAcyYAAC8nAABYKGwBFioAAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/0e738af68123.js b/network-poc/target-native/doc/search.index/0e738af68123.js deleted file mode 100644 index e7dedfb..0000000 --- a/network-poc/target-native/doc/search.index/0e738af68123.js +++ /dev/null @@ -1 +0,0 @@ -rn_("FQBAAAAEDSdlaBhPJgUBwAAAAi4YALcrNmIFAEAAAAuSLG6XIAUAQAAAC34sbmQYdxAACaAAAAARxKAgAAAmzLCwJ5wAAbFwLKIAAaBAAAAmQDAyMzZiZWZsbTowAAABAAAAAAAQABAAAAAZAFIAXABdAHgLeQt6CwoWCxbMJs0m8SbyJhUnFifwKvEq") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/0e95b5e692bf.js b/network-poc/target-native/doc/search.index/0e95b5e692bf.js deleted file mode 100644 index 4d75acf..0000000 --- a/network-poc/target-native/doc/search.index/0e95b5e692bf.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBIAAAFgSxj/ioFAEkAAAWgLGPGKysCoBAAACfHaW9jAAOgUAAALMRjZHXz8B0AADYKIgQlAkUAAKJPKwmvLAzdLGRoa48nxSnSLDsDoDAAACbrZW50") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/0f7c027b00e9.js b/network-poc/target-native/doc/search.index/0f7c027b00e9.js deleted file mode 100644 index 2433b5a..0000000 --- a/network-poc/target-native/doc/search.index/0f7c027b00e9.js +++ /dev/null @@ -1 +0,0 @@ -rn_("MUAAACYYJxiAIC4mBQBAAAAEbiVvPRQFAcIAAAVeKgM7KGN0AQIAOzAAAAEAACoAAwCJKigABCwAANAsAADzAAFp0vYrAADNoUUAAFEs8wYCbHMB7SsAAAUBwAAAAskpAmsmbnQXOgCKoFAAACycoDAAACfLoKAAACtOoVAAACzeoAAAACxCB/kC8wQWAADBB+4O") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/0fbdedb51480.js b/network-poc/target-native/doc/search.index/0fbdedb51480.js deleted file mode 100644 index 59f6733..0000000 --- a/network-poc/target-native/doc/search.index/0fbdedb51480.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQFCAAAHtCwHNyxhadYRBQBAAAAKVCtpDBQlAEkAAAXwK2M2KG8qcCpTAAOgIAAAFGZhZXPjPA8AADUCQQAAFY4n6isJlCw6MiszK0QsnyxjZXTxHfIdrSuuKyFFAAA8JwIoAyhbA7AQGCYAAW5yeOMAhqBgAAAg1KCQAAAsLaAAAAAnWZIBA/YYAgAAAQAEAAEATyUBAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/1018798102b7.js b/network-poc/target-native/doc/search.index/1018798102b7.js deleted file mode 100644 index 759d2cd..0000000 --- a/network-poc/target-native/doc/search.index/1018798102b7.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBIAAAF4CxjzSzzBwFz4ocsAAAjAASgYAAAKkSgMAAALKagMAAAJnUxZGxuOzAAAAEAAAcAAwD2FQMAAhYBAO4qAQA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/10355ce5f808.js b/network-poc/target-native/doc/search.index/10355ce5f808.js deleted file mode 100644 index 78c586e..0000000 --- a/network-poc/target-native/doc/search.index/10355ce5f808.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAAFZicCpixlaQUASAAABeAsY80s8wcBc+KHLAAAwwDFoGAAACpEoIAAACpmoDAAACZ1gQIKADswAAABAAAHAAMA9hUDAAIWAQDuKgEA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/112fc09882e1.js b/network-poc/target-native/doc/search.index/112fc09882e1.js deleted file mode 100644 index f4e08e0..0000000 --- a/network-poc/target-native/doc/search.index/112fc09882e1.js +++ /dev/null @@ -1 +0,0 @@ -rn_("IUUAAE8oTSpOKhUARgAAAIMschsq+ypTAAOwUCcXAAFjb3A7MAAAAQAAEQAGAN4dAACpIAUA/yQFACQlAAD6KQIAQCwAAAUBxAAAARoqAmcqZWkbAqBQAAAnRW1ywwCEoIAAACohoEAAACdJEwACOzAAAAEAABIABQBkCw4AiyUAAOklAADWKQAAUysAAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/12b3baaf565d.js b/network-poc/target-native/doc/search.index/12b3baaf565d.js deleted file mode 100644 index 8fe8680..0000000 --- a/network-poc/target-native/doc/search.index/12b3baaf565d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBBAACRlSY59R0FAcEAAAXIK5buK2NzE4ECoMAAACyVcHQjAQKgUAAAKgxjcgHLIAAAI4QCsAAd/gABMnYBBAKhAAAALNegIAAAKDxkduJdJwAAKwKgQAAAKjJhY6UAQwAAAO4pc+8p8wMBZAHUJwAAIQACsAAd/gABBTJ2AToDAACVAEMAAAnkLGFyKvMHAXDyuCYAABADBQHCAAAHPysEEipob/8VyaBQAAAnlKAwAAAncwADPSg=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/1324a6002abc.js b/network-poc/target-native/doc/search.index/1324a6002abc.js deleted file mode 100644 index 7494e71..0000000 --- a/network-poc/target-native/doc/search.index/1324a6002abc.js +++ /dev/null @@ -1 +0,0 @@ -rn_("FQBBAAANrCxydiy/LAUCQQAAFQYqbCoGDSsWVioOK2NkcMorlQFFAAADJSwUhSzMLGlt2yzzgQJjZQUAQQAAC7gsZA0qu4SgoAAAKzthQAA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/13bc7cfafce1.js b/network-poc/target-native/doc/search.index/13bc7cfafce1.js deleted file mode 100644 index 2dac98c..0000000 --- a/network-poc/target-native/doc/search.index/13bc7cfafce1.js +++ /dev/null @@ -1 +0,0 @@ -rn_("FQFAAAClGyvkgipmct0gaCYjAQKhgAAALORmcjswAAABAABjAAcA3B0AAIQgAACcIAYAaSUAAIwlVwAzJgAAnSYAAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/141c7fecd42a.js b/network-poc/target-native/doc/search.index/141c7fecd42a.js deleted file mode 100644 index 14dfd48..0000000 --- a/network-poc/target-native/doc/search.index/141c7fecd42a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBAAAAFxCxjSCwjhgKgUAAALNJlbgECADowAAABAAAAAAAKABAAAABkJmUmUChaKkMrzyvsKyYsgSyCLKAsBQBKAAAFpCxjziv7AmRmKwOgEAAAJGWgUAAAKElkbnNBRgAAviopLCosKywsLK8BhaAAAAAknKDQAAAsLYFIAQ==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/14f2c39a505f.js b/network-poc/target-native/doc/search.index/14f2c39a505f.js deleted file mode 100644 index 19fca0e..0000000 --- a/network-poc/target-native/doc/search.index/14f2c39a505f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("MUAAADAmXSbGJi4r4UQAAIIqoUUAABsrRwIAh6AwAAAoCKAgAAAncaDQAAAsq6AQAAAncrAAJTIAASowAzowAAABAAAAAAALABAAAADfHeAd4R3iHZEg3SBoJlEoRSxGLEcsuiyHAQCFMge9VLLooYAAACzkoHAAACx3KBADOzAAAAEAADMBLQBhCwAANxEAAGYRAADcHQAA+x0AAO0fAABsIAIAhCAAAJwgBgDWIAAA/yABAL4kCgDyJAkANiUqAGklAACMJVcA7SUqAB8mAQAzJgAAnSYAAFYnAQDNJwAA7CcAAMwpAgD9KQUAIioBADMqAQCJKigAuyoAAOoqAgAPKwAAESsBACcrAQBHKwAAUisAAFUrAgDbKwAA5SsBAP0rAQAELAAAFSwEADksAQCMLAAArywAANAsAABBRAAA7SbuJggrCSuhLPsCYWU=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/172a9c98ced3.js b/network-poc/target-native/doc/search.index/172a9c98ced3.js deleted file mode 100644 index 1b269c9..0000000 --- a/network-poc/target-native/doc/search.index/172a9c98ced3.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHFAAAC7SoDJythc1FFAABIKDQrNSvHK9Ar4CwFAEgAAAXgLGPNLPMPAXPihywAABsCsBAleQDGbnSzAIagYAAAJ/GwACUdAAGwICTwAAGNAAY6MAAAAQAAAAAACQAQAAAA2x3gIOEgMCcxJ5AnVygiLIMszSw=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/17be5a40fc5d.js b/network-poc/target-native/doc/search.index/17be5a40fc5d.js deleted file mode 100644 index 2908534..0000000 --- a/network-poc/target-native/doc/search.index/17be5a40fc5d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("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") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/194613b5fa29.js b/network-poc/target-native/doc/search.index/194613b5fa29.js deleted file mode 100644 index 8fe4a22..0000000 --- a/network-poc/target-native/doc/search.index/194613b5fa29.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHCAACgeicC/CplafMCAXL1IRgAAAEARAABAPQOoUYAABMrBQHAAAAGRyoUmiftKWFlwwDGsBAqCAABoAAAABhlsDAleQDGoAAAAB3QAQikATowAAABAAAAAAAJABAAAADdEVcUWBRhGIUlhCaFJqAnoSdOK/sCZWk=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/1ad2c47089bc.js b/network-poc/target-native/doc/search.index/1ad2c47089bc.js deleted file mode 100644 index cdcdb53..0000000 --- a/network-poc/target-native/doc/search.index/1ad2c47089bc.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHBAACY1isEsixwcxsCsGAnRwABaW8FAcQAAJZIKgiWLG50BQBCAACRlSY59R0bAqAAAAANt2V4rwHGsAAkYAABsFAgmgABoAAAACzLCAyEQA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/1ba1761eb2cb.js b/network-poc/target-native/doc/search.index/1ba1761eb2cb.js deleted file mode 100644 index c252b5a..0000000 --- a/network-poc/target-native/doc/search.index/1ba1761eb2cb.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAACJCUDQCtlbyFFAABPKE0qTioFAcAAAJQXJwGkJGZ1BQLAAABygRSyKrMqtCogKyErIisjKwXPKQH7HWxuegUBwQAABcgrlu4rY3MTgQKgwAAALJVwdCMBAqBQAAAqDGNyAcsgAAAjggKwAB3+AAEydhUARgAAAIMschsq+yolAEAAAAEJKjGFJYQmhSYTgwKggAAAKvxlafMAhxXBBDswAAABAABGABEAgwABADkUAABUGAMA3h0AAKkgBQDgJAEA/yQFACQlAACIJQAAPiYAAPMmDwBkJwAAdCcFANcnEADYKQEA+ikCAEAsAAA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/1ccddca76ab2.js b/network-poc/target-native/doc/search.index/1ccddca76ab2.js deleted file mode 100644 index 298a7f6..0000000 --- a/network-poc/target-native/doc/search.index/1ccddca76ab2.js +++ /dev/null @@ -1 +0,0 @@ -rn_("MUIAAP8gACFWJ1cnIwADoJAAACw+oEAAACeZY2l0OjAAAAEAAAAAAA8AEAAAAFMR5xHoEekR6hFsJmInYyeUJ9Mn8CcjKCQoJitUK5ws") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/1d9624fef6ac.js b/network-poc/target-native/doc/search.index/1d9624fef6ac.js deleted file mode 100644 index 59a36c5..0000000 --- a/network-poc/target-native/doc/search.index/1d9624fef6ac.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBJAAAFxytjkCcFAEcAAAU1K2MxJxsCsMAqWwFxY28hQwAAvh1CKAUqZwEAxaEQAAAsg6CwAAAqCgAAFBnkYwMAAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/1d9873b8cd56.js b/network-poc/target-native/doc/search.index/1d9873b8cd56.js deleted file mode 100644 index 5f58aed..0000000 --- a/network-poc/target-native/doc/search.index/1d9873b8cd56.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQLAAAAJ+ioI2isJLiticHZDAAOgIAAAJzagkAAALKVscHQ6MAAAAQAAAAAACwAQAAAAgQ05EToROxFjFL8gwCDBINEgQCbHJjcs") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/1df0b46c6223.js b/network-poc/target-native/doc/search.index/1df0b46c6223.js deleted file mode 100644 index 603eec3..0000000 --- a/network-poc/target-native/doc/search.index/1df0b46c6223.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQwA67grAAAFAEMAAAizLHBfJ4cBAMegQAAAJsygUAAAJs2hIAAALI+gMAAAGFOwEBRLAAEJAhIKOzAAAAEAAOoAAgAgAukAgxQAAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/1f00276cb54c.js b/network-poc/target-native/doc/search.index/1f00276cb54c.js deleted file mode 100644 index 36e49a1..0000000 --- a/network-poc/target-native/doc/search.index/1f00276cb54c.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBDAAA06ynsKZ0snixn1x0BAAGgwAAALMtlOzAAAAEAAA0ABgAcJgAAdyYAANkmAABOJwIAdioDABYrAwCDAISgoAAAKwKgQAAAK+eggAAALM4gGAL2QiYAAAEAAQABAEgGAgCPAYWwQCwgAAGgEAAAJSCgoAAAK9kXAAE=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/1fd3b294247d.js b/network-poc/target-native/doc/search.index/1fd3b294247d.js deleted file mode 100644 index ff94eb9..0000000 --- a/network-poc/target-native/doc/search.index/1fd3b294247d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBIAAAFgSxj/ioxQQAA8iDzIBArviwFAEIAANQsKnNrICFJAAA1LEkssCy7haEgAAAsv6BAAAAmxCAhA7FOAAApLAUBwAAAIGkmnyagJgqpLHR2BQBJAAAFoCxjxisFAcAAAADHJwUXKm10+wJpb8eYAIygQAAAHbmgUAAALMSwkCeNApKw8CwnAAGhQAAALMOwoCgwA/SwUCwRAAEe/Ao6MAAAAQAAAAAACgAQAAAARwPjHfAdZicmKCcoKCgpKCooLCtILA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/1ffc927e969c.js b/network-poc/target-native/doc/search.index/1ffc927e969c.js deleted file mode 100644 index 393fc15..0000000 --- a/network-poc/target-native/doc/search.index/1ffc927e969c.js +++ /dev/null @@ -1 +0,0 @@ -rn_("QUoAAE4oMiszK0Qsnyw1AEAAAAZEKjH4FfkVAhYDFiOBAqCQAAAqcWNsBQHAAAAk4CDhICIsCC4sb3IBBAA7MAAAAQAACwACAN0dAAAnJQoABQHAAAABEhYDxidkbrFHAAB2KgUBwwAABJQsAw8rZHMbArBQJxsAAW1uBQHAAAA1eiV7JRknGicBhyVlaQEEADswAAABAAAMAAUA3yAAAEYmCACOJwAAXyoAAOorAAArAqEAAAAsJWxvAQDPoNAAACvaZI3fbbqyQFfXMBjUAubuyIAaXuST01k5oJAAACn3sJAsOQABHLrqHOszsKAoTAABXeaMh/lcoLAAACxJJdbf4vTKoQAAACyAWbK2rRh+GZ+zuldGQH/uAjowAAABAAAAAAAQABAAAAAWAzwDPQOrFDUYNhg3GDgYORjlHfEd8h3qJb0m9SmtK64r") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/20383d4e40d7.js b/network-poc/target-native/doc/search.index/20383d4e40d7.js deleted file mode 100644 index dfdf780..0000000 --- a/network-poc/target-native/doc/search.index/20383d4e40d7.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABoMAAACzLZTswAAABAAAKAAUAHCYAAHcmAADZJgAAdioDABYrAwCDAoSgoAAAKwKgQAAAK+eggAAALM4gGAL1QiYAAAEAAQABAEgG") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/2049c1d30254.js b/network-poc/target-native/doc/search.index/2049c1d30254.js deleted file mode 100644 index 654e1be..0000000 --- a/network-poc/target-native/doc/search.index/2049c1d30254.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQLBAAAFYSoDJCsGBSthYndhQwAAsiqzKrQqICshKyIrIyvzAgFpOzAAAAEAABAAAQDXJxAAwwIEoBAAACVwoFAAACg9MmNlbjswAAABAAAOAAYAyh0EAPEgAADNJAEA7CYAANwpAgDhLAIABQHBAABzHyYgJiIqIyozKjQq5SvmKxONJx8qc3QBggKgcAAAK/WhUAAALNttc0MDhqCQAAAryqBgAAAqYqAwAAAnl6BAAAAoQ6AgAAAnOqwYAPPaIAAAAgQBAHMABKAAAAAncmJlb3EBQiwAAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/209732a007c9.js b/network-poc/target-native/doc/search.index/209732a007c9.js deleted file mode 100644 index 6867d9a..0000000 --- a/network-poc/target-native/doc/search.index/209732a007c9.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEBoAAAACbGczswAAABAAA8AAsA7SUqAOwnAADMKQIAuyoAACcrAABSKwAAVisBAP0rAAAVLAQAOSwBAK8sAAArAqAQAAAf7G96") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/20fbf9868440.js b/network-poc/target-native/doc/search.index/20fbf9868440.js deleted file mode 100644 index ac4135d..0000000 --- a/network-poc/target-native/doc/search.index/20fbf9868440.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQLCAAABxCcAlyYAmCYwMTKDAAegEAAAHfagIAAAJF6gEAAAHfehAAAALKagUAAAJ8WwYCwgAAEyMzY3YWN1OzAAAAEAAL8ANwBwEVAA3RMZAMogAADfIAAA/SQAAGclAABvJQAAcSUAAHwlAAAdJgEARiYIAGQmAQBtJgAAfSYDADInAAA0JwEAOCcBAIInCQCOJwAAPSgAAEgoAABQKAAA+CkBAAYqAQAMKgAADioAABAqAABVKgAAWioAAF4qAQBsKgAABCsAADErAAA0KwEAOisAAEMrAADEKwAAxysCAM8rAQDqKwAA7CsAAPArAAD0KwAA+ysAABosAAAmLAAAQywAAIEsAQCGLAAAoCwAAKQsAAC5LAAAxCwAAM4sAADgLAAA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/21552ed08981.js b/network-poc/target-native/doc/search.index/21552ed08981.js deleted file mode 100644 index 0f545f2..0000000 --- a/network-poc/target-native/doc/search.index/21552ed08981.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHEAAAFuSoD1ilsc7FFAABvJvsCZWkBAAOwoCg5AAGgIAAAFIKgIAAAFINhZW47MAAAAQAACgADACYDBAA2AwIA1B0CAGFDAADXJNgk2STaJNskjScfKnFCAAAfJiAmIiojKjMqNCrlK+YrIwADoMAAACzfoJAAACvYZmlwOzAAAAEAACAAEADUEQAARRQBAC8YAQBkJQAAGCYDACEmAgDPJgUA1iYCAH4nAACoJwAA6ycAAFYoAADRKQAAvioAAAwrAAApLAMABQHAAAAH6ycHOypjdTUBQAAABUwqB6ssM2GmIKcgtSu2KwUBwAAAkxUnIR8YiCCJIGV28wABYeIOFgAA0UIAAPQqBQHAAADLGyyQjyBhc/sCZXAbArAQFDsAAW51BQHAAAAIESoEOStydQkCoHAAACoXoUAAACzDZG0hRQAAQSdCJ9os84ICZW77AmFvBQPBAAANQSwGjSwEPywHyyxiZmxzS4ShYAAALNGgEAAAJs6gsAAAK9sHEAAFAcEAAAHVJgRgJ250BQBCAACgUSxz5ysFAEIAAAQVKnF4JQUBSAAACs8sCcosbW4rKzOCA6CAAAAsPWFrcBsCoBAAACdmaXT7AnR5IUIAABMYShhLGAEA0XAZTU1E0gulmxPQBEbIdYUKLqBQAAAspGtb//UlES7qz9WYLqCQAAAqu2SHrysqZWLkzLG7Az+Hjud7TVOxKVQ4g6AQAAAnNgPvl662pxHFana4FUCoLGVuLaBgAAAmbhNqMYehEsJtHh87MAAAAQAAdgAdAIUNMAA4EQAARhEIAIoUAACsFAUAEBgBAEYYAgC7HQEAvh0AAN0dAADjIAAA/CQAACclCgB+JQIAIicHAJInAQCcJwEA1icAADcoAABCKAAATCgBAFIoAADlKQMABSoAAFcqAADOKwAAhSwAAJYsAADMLAAA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/21d3015bb91d.js b/network-poc/target-native/doc/search.index/21d3015bb91d.js deleted file mode 100644 index 727430c..0000000 --- a/network-poc/target-native/doc/search.index/21d3015bb91d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYOEoSAAACzZsCAqJgABsDAqdAABoMAAACyoAVEAAQABoCAAACa9ZTswAAABAABqAAEA+R9qAJUAQwAACeQsYXIqBQHAAAAE0icIWSttbgEFAaEAAAAs2Hfz0CcAAAEA5AIFAcAAAAK7JgCdJGl0Zy0BiqAQAAAknKDAAAAsNqAwAAAmvKEAAAAssTyhHDswAAABAAD6AAUA+BT2ANAkAACBJQAAuCYAAMgpAAAbA6DQAAAsuaCwAAAqaHJ0eQ==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/223142c88445.js b/network-poc/target-native/doc/search.index/223142c88445.js deleted file mode 100644 index 7fd7395..0000000 --- a/network-poc/target-native/doc/search.index/223142c88445.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQLBAAAFYSoDJCsGBSthYndhQwAAsiqzKrQqICshKyIrIyvzAgFpOzAAAAEAABAAAQDXJxAAwwEEoBAAACVwoFAAACg9MmNlbjswAAABAAAOAAYAyh0EAPEgAADNJAEA7CYAANwpAgDhLAIAoUMAAOgn+wJicgUBwAAAcx8mICYiKiMqMyo0KuUr5isTjScfKnN0AQABoRAAACzRcAGJFAAA+wJkbAGCAqBwAAAr9aFQAAAs221zQwOGoJAAACvKoGAAACpioDAAACeXoEAAAChDoCAAACc6rBgA89ogAAACBAEAcwAEoAAAACdyYmVvcfRDAwAAAQABAP0o") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/22aa8cf88846.js b/network-poc/target-native/doc/search.index/22aa8cf88846.js deleted file mode 100644 index f6255cc..0000000 --- a/network-poc/target-native/doc/search.index/22aa8cf88846.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQFAAADCFSyrmSxpb/sgBQHCAACsuyyVSCtiYwEAAaAgAAArR2k7MAAAAQAAMwACAGArLgBKLAQAI4ICoCAAACsLZHMbArCAK/0AsmVpBQHAAAChTyulaSppcgUAQwAABcQrY4wn0UIAAKIn+wJpbFcxAouwUCv0AMWg8AAALM6gwAAALN2goAAALM+gkAAALMqgkAAAK/6utBI6MAAAAQAAAAAAGgAQAAAAth23Hbgd6x3sHUEnQidnJ2gnaSdqJ2snjyfyJ/Mn9CfFKdIpNyr/KisrBiwHLAgsrizSLNosQwADoHAAACnRoCAAACTMY2Rp4mQUAAA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/22dbe1484c08.js b/network-poc/target-native/doc/search.index/22dbe1484c08.js deleted file mode 100644 index 509b3f4..0000000 --- a/network-poc/target-native/doc/search.index/22dbe1484c08.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHDAAAFDioDlidjdPMAAXIB0xEAADUAQQAAljgqd08YUBgpKyorMwEEsFAlcQSHoGAAACZsMjNjZTowAAABAAAAAAAHABAAAACCDYMNPBE9ET4R1xHjKeQp") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/231153c4125e.js b/network-poc/target-native/doc/search.index/231153c4125e.js deleted file mode 100644 index b53aa9c..0000000 --- a/network-poc/target-native/doc/search.index/231153c4125e.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBDAAACNyds0iAFAcAAAAiQLEFsIG0gbiAPK0crbnqHAQCHoHAAAChXoLAAACzaoDAAACyysGArtQABoQAAACzYlBEUOzAAAAEAAFQADADyFQAA+xUAABIWAACFIAIA3iQAAGEnAADQJwEAtSoAAGArLgCQKxQASiwEAN0sAAA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/238d8524cab7.js b/network-poc/target-native/doc/search.index/238d8524cab7.js deleted file mode 100644 index e7da9eb..0000000 --- a/network-poc/target-native/doc/search.index/238d8524cab7.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAACgCcDJShpbBOCAqBwAAAq/WJzBQHAAAAIrSwFfyxtbiOFA6BQAAAsQ6CgAAAst2NldAUCwwAABeorCZQsCp8sY2V0wwIEoFAAACpVoEAAACoFY210duKSJgAAAQIA67IgAAAbAqBwAAAqA2N1e4SgcAAAKCYBSAE=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/23b659872c70.js b/network-poc/target-native/doc/search.index/23b659872c70.js deleted file mode 100644 index fc299bf..0000000 --- a/network-poc/target-native/doc/search.index/23b659872c70.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAACcOSyofyplbwECADswAAABAAALAAIA1iAAAL4kCgAjAISgcAAAKiug0AAALDigEAAAIG8QgQTSWicAAHgFAEYAAAizLHBfJwUBwwAAmNYrBLIscHOxRwAAFiuVAEYAAAI8KHZdJwkDoNAAACw3oRAAACyFoMAAACwDYWxy5x0AiaCgAAArGqAwAAAkvXUwBgGoJgAA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/24af4ec98e1b.js b/network-poc/target-native/doc/search.index/24af4ec98e1b.js deleted file mode 100644 index 808b9f6..0000000 --- a/network-poc/target-native/doc/search.index/24af4ec98e1b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("RQFBAACY4ysDuipodHQlyyY9Kz4rBSwxQAAAMSYyJjAoJCwBAgDt9ScAAPMCAmRzOjAAAAEAAAAAAAgAEAAAABssHCwdLB4sHywuLJMsqCzYLGOCA6DAAAAry2VpbyMAAqCQAAAs5GFl08opAACoAQ==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/24cb0c70471d.js b/network-poc/target-native/doc/search.index/24cb0c70471d.js deleted file mode 100644 index 442ba8a..0000000 --- a/network-poc/target-native/doc/search.index/24cb0c70471d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIAOzAAAAEAAAkAAwALJwEA9ysDAHgsAwAFAEkAAASYLGzNKwEAAaAAAAAnqXM6MAAAAQAAAAAACQAQAAAA1SDRJNIkISUiJSMlYyYrKrkqqyzbhKBwAAAsQIABQQ==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/24f63b481cf4.js b/network-poc/target-native/doc/search.index/24f63b481cf4.js deleted file mode 100644 index edf35cb..0000000 --- a/network-poc/target-native/doc/search.index/24f63b481cf4.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHBAAAH/isPtCxudAUCwAAAMyonMyjXKW0qWekr6yvxK/Ir8yu3LEKYJ98p4CnhKeIpb3J5oUsAAJkswUIAABUsBQHEAAAGjSwEPyxmbPMAA2VpbzowAAABAAAAAAAHABAAAAD7IDEmMiYwKNkr2iskLD0sBQHBAACsuyyVSCtiY6FLAADhLPsCb3IBAwGgUAAALKRjOzAAAAEAAA4ABgB+JQIAIicHAM4rAACFLAAAliwAAMwsAAArAqCQAAAsz2FvBQLAAAALkCwGNywCJSxkbnQBAAGgIAAAK0dpOzAAAAEAADMAAgBgKy4ASiwEACMCAqAgAAArC2RzAcUrAAAbArCAK/0AsmVpoUYAAEQrBQLFAAAE5ysIziwNyyxsbXNbA6AAAAAnTWVudWFFAABLJ0wnLCgtKC4oLyh/LHFDAAD3K/gr+Sv6K3gseSx6LHssAQAAOzAAAAEAACYABABULCEArSwAANEsAADULAIA84ICc3QjhAKgEAAAKhRlafsCbW4xRQAAaSpqKmsqCisBAQA7MAAAAQAADwACAPUnDABPKwIA+wJpcgEFADswAAABAAAVAAoAfSYDAIInCQAHKgAABCsAADorAAD0KwAA+ysAABosAABDLAAAuSwAABUAQwAABcQrY4wnAivVAEIAAAYOLGWiJ2uEoCAAACdYoFAAACpFAQkIBQHAAAAEtCw4oiyjLLUstixhZSOBA7CAK0IAoKCAAAAs2WVncgEAkTysu13tVQ9j6Z9EW2dQRu4ixXWNDDA7wSjEOdnu7x+XDf1bb6CQAAAr1BVFOE87ZD/lGt4iwaDAAAAs3RdjDYKdOaCQAAAsyli9I90KOKDQAAAsrGqA/HEJOm0ef/D1gB6VY48Q+/+1FzowAAABAAAAAABdABAAAADWEeQR5RG2HbcduB3rHewd7B/FIMYgxyDIIPQg9SD2IPcg+CD5IPogoiSjJAUlfSXtJu4mQSdCJ2cnaCdpJ2onayePJ/In8yf0J8Up0in3KSUqNyo8Kj0qSipLKnsqfCp9Kn4q/yoIKwkrKytEK0UrRitKK0srTCsDLAYsBywILBssHCwdLB4sHywgLCEsLiw4LEEsdiyJLIosiyyTLKEsoiyjLKgsriy1LLYsuCy/LNIs2CzaLNss3CzkLA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/254184fccb92.js b/network-poc/target-native/doc/search.index/254184fccb92.js deleted file mode 100644 index 963ddae..0000000 --- a/network-poc/target-native/doc/search.index/254184fccb92.js +++ /dev/null @@ -1 +0,0 @@ -rn_("4UkAAKYrKwOgQAAAK06hIAAALN9hY2yxSwAA3iuHAQCFoCAAACTvoEAAACtZoFAAACwUuAACOjAAAAEAAAAAAAkAEAAAAOIgNSj0KvUq9ir3Kvgq+So5Kw4s") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/25f1e3695043.js b/network-poc/target-native/doc/search.index/25f1e3695043.js deleted file mode 100644 index e0b66ca..0000000 --- a/network-poc/target-native/doc/search.index/25f1e3695043.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQLAAACSPiqSQCoCQioyNDjzAAFi4jcUAAAjAAKwABQ1AAEyMzowAAABAAAAAAAHABAAAAAxETIRiiCLIOsp7CmdLJ4s") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/26f60a8ea4c7.js b/network-poc/target-native/doc/search.index/26f60a8ea4c7.js deleted file mode 100644 index 1f21240..0000000 --- a/network-poc/target-native/doc/search.index/26f60a8ea4c7.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBCAAAEFSpxeCUFAUgAAArPLAnKLG1uKys7A6CAAAAsPWFrcAUBwAAAAE0npkQrbnUjBAOgYAAAKwqhEAAALLRkZnc7MAAAAQAAEAAFAMUgAwD0IAYAJSoAAHsqAwDkLAAA+wJhZQ==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/270775f48e8c.js b/network-poc/target-native/doc/search.index/270775f48e8c.js deleted file mode 100644 index 620238b..0000000 --- a/network-poc/target-native/doc/search.index/270775f48e8c.js +++ /dev/null @@ -1 +0,0 @@ -rn_("NQFFAAAF7CsJvixjdzQoQSsjLJcsBQBEAACowCxzmCwjBYSgUAAALIagAAAAK02gYAAAKwcECBI6MAAAAQAAAAAAGAAQAAAAUyZUJlUmViZXJlgmWSZaJlsmTihoKgYrMiszK8srzSvpK+sr8SvyK/MrLSxELJ8styyrhKCQAAAqGaCAAAAoSySIAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/274e2666d1e6.js b/network-poc/target-native/doc/search.index/274e2666d1e6.js deleted file mode 100644 index 3f88cd7..0000000 --- a/network-poc/target-native/doc/search.index/274e2666d1e6.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYECoHAAACs5oTAAACzMbHEFAcEAAAXIK5buK2NzGwKgwAAALJVwdAUBwAAAkWAkr4ksZ3P7AmVvBQHAAAAJkiyh5CVmcisCoGAAACpXZW8FAcAAAAKSJ5CSIGRl8wABbwFpGAAABQHBAABCEBgRGEYYRxhIGAKRJ2J5BQHAAAAgExhKGEsYCu0rZG4FAcAAAAg4KwULKm1uBQBHAAAFxCxjSCwBAgA6MAAAAQAAAAAACAAQAAAAZSZQKFoqQyvPKyYsgSyCLKAsBQBKAAAFpCxjzivzgQJkZvsCb3IjAAOwUCgjAAGhcAAALNpiY2k6MAAAAQAAAAAADAAQAAAAwhH3E/8XABjkHWolcCU+J54nHSr+KgArxisFAcAAABIMKvArCSIsZnQrAqBQAAAs3mRuEwACsGAqOAABb3f0TxgAAAEA2RIBAAUBQAAAA0QqAgMYMmH2HVUBQAAAAUQqAS0YMDJdC28UICo+Kj8q6CsxQQAAICo+Kj8q6CuVAEAAAAFwFDQtGAEAFDdvDBqvNLAAC3sAAT8jXF8N5Uw/CfPimKAQAAARxKAgAAAgsKCAAAAq/wwW8r+gVBTRcJtMhS8XoxMK7DSn94DCuKAQAAADSjZQdOrTLjl8SD7opyGcoBEj0xeDmlmDrqBQAAAoNWfaTvR8nGpIP1GdIqEAAAAr8zAxMjQ1NmFiY2RlZ2lsbW5vcnN2OjAAAAEAAAAAADkAEAAAAA8AFAAVAE8AWABZAGEAYgBjAGwAcACGABADFQMXA1MFVAVRC1wLzg1REVIRVhFdERoUGxQ1FDYUSxRMFF4UcxT1Ffwd/R3+Hf8dlyDLIO0k7iQlJSYlmCZsJzYoSSjpKeopUCpRKlIqUypvKnAqmSyaLJss") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/27575a2cee93.js b/network-poc/target-native/doc/search.index/27575a2cee93.js deleted file mode 100644 index a3e1072..0000000 --- a/network-poc/target-native/doc/search.index/27575a2cee93.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAAOzAAAAEAAAsABQBvJgMAvyYDADgqAQAFKwAABysAAAUBwQAAkysnAk8qY3QxQwAA8iDzIBArviynAQCFoHAAACs/oEAAACoSgGADAToUAAA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/276eef4e1b81.js b/network-poc/target-native/doc/search.index/276eef4e1b81.js deleted file mode 100644 index c206af1..0000000 --- a/network-poc/target-native/doc/search.index/276eef4e1b81.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMBoAAAACYwc+ryJAAABQHBAAACfCYANCVpeQUAQAAABtwrcC8mKwKgYAAAJzttc7FBAABQKqUAQAAAEiAq6Csy/ysrAqAwAAAspTQ29wIAxqCAAAArXgVEBAEBmRQAAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/278b50aa0e99.js b/network-poc/target-native/doc/search.index/278b50aa0e99.js deleted file mode 100644 index 6357740..0000000 --- a/network-poc/target-native/doc/search.index/278b50aa0e99.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQ8AOzAAAAEAACQAAgBULCEA1CwCAAUARgAADIQsc2wl+wJucwUAQAAABY8rcC0mKwKg8AAALNBpcyOBAqAgAAAk02l0OwOgQAAAH/hlb3I=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/297e1c3d3b20.js b/network-poc/target-native/doc/search.index/297e1c3d3b20.js deleted file mode 100644 index 115b116..0000000 --- a/network-poc/target-native/doc/search.index/297e1c3d3b20.js +++ /dev/null @@ -1 +0,0 @@ -rn_("QUgAAE4oMiszK0QsnywbAqEQAAAs02FvFQBCAADRLyxpwB3aHfMAAWsBSAMAAAUASAAABYEsY/4qsU4AACksBQBJAAAFoCxjxisFAcAAAADHJwUXKm10+wJpb0dIAIugQAAAHbmgUAAALMSgsAAALKmwkCeNApKw8CwnAAGhQAAALMOwoCgwA/SwUCwRAAEevAo6MAAAAQAAAAAACgAQAAAARwPjHfAdZicmKCcoKCgpKCooLCtILLFJAAB2KgUBQAAAA8kpAEIsYW7FHQUBQAAAwhUsq5ksaW/7IAUBwgAArLsslUgrYmMBAAGgIAAAK0dpOzAAAAEAADMAAgBgKy4ASiwEACOCAqAgAAArC2RzGwKwgCv9ALJlaQUBwAAAoU8rpWkqaXIFAEMAAAXEK2OMJ9FCAACiJ/sCaWxXMQOLsFAr9ADFoPAAACzOoMAAACzdoKAAACzPoJAAACzKoJAAACv+rrQSOjAAAAEAAAAAABoAEAAAALYdtx24Hesd7B1BJ0InZydoJ2knaidrJ48n8ifzJ/QnxSnSKTcq/yorKwYsBywILK4s0izaLCMAAqHAAAAs3mV0AdMsAAD7A25yeC8HiqBwAAAr3aAgAAAr06AgAAAnfbAAJPAAAaAwAAAm66AgAAAm6xRlRw==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/29be22429ffd.js b/network-poc/target-native/doc/search.index/29be22429ffd.js deleted file mode 100644 index 1076901..0000000 --- a/network-poc/target-native/doc/search.index/29be22429ffd.js +++ /dev/null @@ -1 +0,0 @@ -rn_("NQBBAAAFTCozpiCnILUrtiuVAEcAAAX7K2NKKhMAAqBQAAAnRGly9HYUAAABAJcDJBIFAcMAAAEYKgqXLDF0cwCFoOAAACycsKAqWAABDCgCAdMdAAA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/29c690c97dbb.js b/network-poc/target-native/doc/search.index/29c690c97dbb.js deleted file mode 100644 index 56f886c..0000000 --- a/network-poc/target-native/doc/search.index/29c690c97dbb.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBHAAAC0itxHiqhXAAA4SwrAqCgAAAr0XBz+wJlb6FTAADFLA8DxqDgAAAsJKBwAAAoRKCQAAAsgKBgAAAoMkCCxAA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/2acf58b62fab.js b/network-poc/target-native/doc/search.index/2acf58b62fab.js deleted file mode 100644 index ef8f2b0..0000000 --- a/network-poc/target-native/doc/search.index/2acf58b62fab.js +++ /dev/null @@ -1 +0,0 @@ -rn_("MUMAAHYgdyCvK7ArNQJAAAAlbyU5J/kpCV8qCzorY3R2gA0/EUARQREBgQKgcAAAKzmhMAAALMxscQUBwAAACDgrBQsqbW6HIACKoIAAACr/oMAAACwioYAAACzaoLAAACvtoEAAACeRoEAAACeSoHAAACpXoFAAACg1HXkC4vwdAAA/AcahEAAALN6goAAAKzqAGB+GkAFCRFAA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/2aed659a605b.js b/network-poc/target-native/doc/search.index/2aed659a605b.js deleted file mode 100644 index c8beb11..0000000 --- a/network-poc/target-native/doc/search.index/2aed659a605b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQFCAAADxStDmCffKeAp4SniKWh0fSUrAqDwAAAsp2hpBQBAAAAD/SRuWwuhRAAA1B2lAEIAAAuwLG6hJiFCAABpJp8moCbzgwJudsFNAAAVLBMAAqAAAAAV82RzOzAAAAEAABIABQBYEQAAwxEAAA0UDAB2IAEArysBAJUBQgAAAyUsFIUszCxpbdssI4ECsAAd2AABZWm3EwCJoHAAACfuoZAAACzToQAAACyWUUUH83QUAADKEwEA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/2bb7f2aaa577.js b/network-poc/target-native/doc/search.index/2bb7f2aaa577.js deleted file mode 100644 index d53d31d..0000000 --- a/network-poc/target-native/doc/search.index/2bb7f2aaa577.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIAOzAAAAEAACoAAwCJKigABCwAANAsAADzAAFp1t4rAAABAQEVzQUBwQAAB9EpAswkY2ShRQAAUSyHCgCKoAAAABEwoBAAACzLsMAr9gDNoEAAACfToHAAACdFoEAAAChLoHAAACpfSLkmOzAAAAEAACIAEAC6DQUAPBgAALEdAADYHQEAXyQAAJ4kAQBuJQAAeSUAADQmCQA/JgAAniYAAGAnAAB6JwIAOSgBANQrAADtKwAA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/2bdebfdf543b.js b/network-poc/target-native/doc/search.index/2bdebfdf543b.js deleted file mode 100644 index ccd7481..0000000 --- a/network-poc/target-native/doc/search.index/2bdebfdf543b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("cUIAAB8mICYiKiMqMyo0KuUr5ivzAAFpOzAAAAEAAB0ADgAvGAEAZCUAABgmAwAhJgIAzyYFANYmAgB+JwAAqCcAAOsnAABWKAAA0SkAAL4qAAAMKwAAKSwDACsDsAAWDgABsDAnjQKSbHN0") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/2d527ffd29bb.js b/network-poc/target-native/doc/search.index/2d527ffd29bb.js deleted file mode 100644 index fdda4b4..0000000 --- a/network-poc/target-native/doc/search.index/2d527ffd29bb.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAAMtCwrkyyoLNgscHUFAcAAAJJ0KgMtJ2F0hwEAhqEgAAAs2aBgAAAlgbAgKiYAAbBgJysAASFRBONcGAAA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/2e66cd7ed693.js b/network-poc/target-native/doc/search.index/2e66cd7ed693.js deleted file mode 100644 index a68bfac..0000000 --- a/network-poc/target-native/doc/search.index/2e66cd7ed693.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIAOzAAAAEAACoAAwCJKigABCwAANAsAADzAAFp0vYrAADNoUUAAFEs8wECbHMB7SsAAKFFAABTKKFMAABKKycBAIWgMAAAHfCgYAAALA6gEAAAFKM5CAA7MAAAAQAAEgAIAFIDAQBRGAAAXxgBAIEmAgCAJwAAoicFAOgnAgAkKwAAJQJAAAAVgScKKgu4LCAEGL4gbiZjZHRCFEMUDSoFAEoAAAWGLGMGKxUBQAAApRsr5IIqZnLdIGgmIwICoYAAACzkZnI7MAAAAQAAYAAEANwdAACcIAYAaSUAAIwlVwBHBACHoBAAAB3SsKAsyAABoGAAACpDsLAsDAABoMAAACyEMCEH8twgAACQBAUATAAAC7gsZA0q+4VAKAY=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/2efb36095f25.js b/network-poc/target-native/doc/search.index/2efb36095f25.js deleted file mode 100644 index 0b02a3c..0000000 --- a/network-poc/target-native/doc/search.index/2efb36095f25.js +++ /dev/null @@ -1 +0,0 @@ -rn_("RQFBAACY4ysDuipodHQlyyY9Kz4rBSwxQAAAMSYyJjAoJCwBAgDt9ScAAPMCAmRzOjAAAAEAAAAAAAgAEAAAABssHCwdLB4sHywuLJMsqCzYLMuEsIAqPAABoMAAACvLGEEA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/306d1be86d85.js b/network-poc/target-native/doc/search.index/306d1be86d85.js deleted file mode 100644 index a175f19..0000000 --- a/network-poc/target-native/doc/search.index/306d1be86d85.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQUAOzAAAAEAAA8AAwDkIAwAXCYAAA8sAQAVAEEAABUmLIIsYx0qACsTAwKwACsmAXYyc/dmJgAABADLAwEAigIBAAEARwEAhaDQAAAs06AgAAAoCKAAAAAlIAFJCOJMGAAA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/30ebce22a15f.js b/network-poc/target-native/doc/search.index/30ebce22a15f.js deleted file mode 100644 index 52c5c78..0000000 --- a/network-poc/target-native/doc/search.index/30ebce22a15f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMAOzAAAAEAAB0ADgAvGAEAZCUAABgmAwAhJgIAzyYFANYmAgB+JwAAqCcAAOsnAABWKAAA0SkAAL4qAAAMKwAAKSwDAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/3123ac88cc46.js b/network-poc/target-native/doc/search.index/3123ac88cc46.js deleted file mode 100644 index d78d5e4..0000000 --- a/network-poc/target-native/doc/search.index/3123ac88cc46.js +++ /dev/null @@ -1 +0,0 @@ -rn_("JQBDAAAIqyxtnCedJ1cqAQIAOzAAAAEAACoAAwCJKigABCwAANAsAADzAAFp0vYrAADNoUUAAFEs8wQCbHMB7SsAABsCoDAAACnbZHP7AmVv") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/316053b60392.js b/network-poc/target-native/doc/search.index/316053b60392.js deleted file mode 100644 index 5970952..0000000 --- a/network-poc/target-native/doc/search.index/316053b60392.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAAATSemRCtudSMCA6BgAAArCqEQAAAstGRmdzswAAABAAAQAAUAxSADAPQgBgAlKgAAeyoDAOQsAAArAqCAAAAqX2Vp") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/317084c7e6dc.js b/network-poc/target-native/doc/search.index/317084c7e6dc.js deleted file mode 100644 index 621f3a1..0000000 --- a/network-poc/target-native/doc/search.index/317084c7e6dc.js +++ /dev/null @@ -1 +0,0 @@ -rn_("CQKgQAAAK06hIAAALN9hbCMBAqBAAAArWWVzOzAAAAEAAAYAAgD0KgUADiwAAAUCwAAArLsslUgrFzAoJCxiY2pLA6BwAAAnHqAgAAAqVGVpbwUBwAAAk9YrquEsaXMFAcQAAAJ8JgA0JWl5KwKgEAAAFGFjdN8BhaAwAAAnbIFACQ==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/3207bd54b2e8.js b/network-poc/target-native/doc/search.index/3207bd54b2e8.js deleted file mode 100644 index 2087435..0000000 --- a/network-poc/target-native/doc/search.index/3207bd54b2e8.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHDAACQ8CqQ8io1NisCsMAsnQABZXeVAEIAAJAGKDNvJwUBwAAAsuUplrMrZG8FAcAAAJTuKpaxK3N4a4SwcCuvAAGwECdtAAEQwQCVAEQAAJEpKzLjKZUAQwAAk60rdAQofwXKsBAm7wABsEAp6QABsHArtQABsBAm8QABsJAsDwABgADuCw==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/329e3ff2a85e.js b/network-poc/target-native/doc/search.index/329e3ff2a85e.js deleted file mode 100644 index 26a2d56..0000000 --- a/network-poc/target-native/doc/search.index/329e3ff2a85e.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBHAAAFxCxjSCxxRAAAUChaKkMrzysmLIEsgiygLPsCb3LzAQFjOjAAAAEAAAAAAAcAEAAAAOQdaiU+J54nHSr+KgArxis=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/3324e6697d41.js b/network-poc/target-native/doc/search.index/3324e6697d41.js deleted file mode 100644 index be0cdb3..0000000 --- a/network-poc/target-native/doc/search.index/3324e6697d41.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAAC/isC1ilpdAECADswAAABAADsAQIAvR0AAAEh6wEFAcAAAJS3KgS5KmFlNQBAAAAJtipvKiczKNcpbSorAqBAAAArBWlyBQHAAAANuSwLaCp0ebcJAImwkCnUAAFpj3/2abKgYAAALEKgUAAAK9QxuAY7MAAAAQAA9wEHAG8RAADrEesB7x0AAOclAQAeKAQAJCoAAC8rAQA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/333c7cf9bfa0.js b/network-poc/target-native/doc/search.index/333c7cf9bfa0.js deleted file mode 100644 index ab04e71..0000000 --- a/network-poc/target-native/doc/search.index/333c7cf9bfa0.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBKAAAFhixjBisFAcMAAKUbK+SCKmZyRwQBh6AQAAAd0rCgLMgAAaBgAAAqQ7CwLAwAAaDAAAAshDAhB/LcIAAAkAQ=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/33a27a42c896.js b/network-poc/target-native/doc/search.index/33a27a42c896.js deleted file mode 100644 index 4193070..0000000 --- a/network-poc/target-native/doc/search.index/33a27a42c896.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHBAAAHRicRgCAuJmRy0UAAAGcRcUEAAIEUsiqzKrQqICshKyIrIyulAEIAAAuOLG57IKUAQwAAC6osbigmKwKgkAAALLFjZZUBQwAABRAqBEIoY23VJPsDY25vAQEAOzAAAAEAAA8AAwDkIAwAXCYAAA8sAQAjAMWg4AAALC2ggAAAKFegMAAAIu2gIAAAHfMABQAN5MoNAACVAEMAAAQ3KG1iJAUBxAAAA1gnCdQrYmf/DoigIAAAGCUbQQY=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/33b3d56f97b3.js b/network-poc/target-native/doc/search.index/33b3d56f97b3.js deleted file mode 100644 index ccd90c3..0000000 --- a/network-poc/target-native/doc/search.index/33b3d56f97b3.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHCAAAF8CcKpStiaQUARgAABtwrcC8mAQQAOzAAAAEAAAsAAgDiJAoAOyoAABsCoIAAACnaYXMBCwA7MAAAAQAAFAABAJArFAAbAqBgAAAnZGV2AQoAOzAAAAEAACoAAQC/KioABQHCAABHviopLCosKywsLKCFIGNz+wJlaTFFAADgJOEk2CnZKQUARQAABY8rcC0mKwKgsAAAKyZueNFGAADPJhsDsHAnYgABoZAAACzdaG9yAQ0AOzAAAAEAAC4AAQBgKy4AAQCQOTN9fz1HoGAAACzKRVC6xaUboMAAACslOp7+CxTJoGAAACYuEZpqhqp0Uo/MXGMQW5NoWn3qZntmrz5CoGAAACbVJCTSwyaHBh3yst87sKAsdgBJoQAAACxAoIAAACst/5wPOjAAAAEAAAAAAAgAEAAAADsUPBREFB8lDSdcJwksCiwLLA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/33e72e98225b.js b/network-poc/target-native/doc/search.index/33e72e98225b.js deleted file mode 100644 index 58751ea..0000000 --- a/network-poc/target-native/doc/search.index/33e72e98225b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYICoHAAACv8oVAAACzcbXMTBQKgQAAAKFJmbeJeJgAABQHAAAAF8CcKpStiaUsDsDAl6wABoDAAACbOYWxzWwOggAAAKk9laW8=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/34857f43a5d8.js b/network-poc/target-native/doc/search.index/34857f43a5d8.js deleted file mode 100644 index c9b8b7d..0000000 --- a/network-poc/target-native/doc/search.index/34857f43a5d8.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQ0A67grAAClAEAAAAvVK24zERMAhLBQKgYAZqBgAAArDbBgKlYAuA2AAPJ8JgAATgWlAEIAAAuwLG6hJiFCAABpJp8moCbzgQJudvsDbnJ3") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/3608b2fd20ee.js b/network-poc/target-native/doc/search.index/3608b2fd20ee.js deleted file mode 100644 index 92ed58e..0000000 --- a/network-poc/target-native/doc/search.index/3608b2fd20ee.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBAAAAG3CtwLyalAEAAAARUKnBhJYcBAIVDTgNxCOegYAAAKjKgYAAAJzsYMAI7MAAAAQAAPwAHAHENAgCyIAoADicBAB8nAgCqJxkACigRAEcoAAA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/365ab838adf8.js b/network-poc/target-native/doc/search.index/365ab838adf8.js deleted file mode 100644 index af654db..0000000 --- a/network-poc/target-native/doc/search.index/365ab838adf8.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAAOzAAAAEAADEAAgDOIAEAbCQvAAECAaAAAAAnqXM6MAAAAQAAAAAACQAQAAAA1SDRJNIkISUiJSMlYyYrKrkqqyylAEMAAAuqLG4oJmcCAIagkAAALLGgAAAAHfSg0AAALJxUYAT3EBYAAGIPAQCzAAEADwUBAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/3682e5b04ba7.js b/network-poc/target-native/doc/search.index/3682e5b04ba7.js deleted file mode 100644 index 0a047d8..0000000 --- a/network-poc/target-native/doc/search.index/3682e5b04ba7.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHHAAAIriwN0ixhYwUBwQAAAZMnAkooZXUFAcIAAJZIKgiWLG50KwKgsAAAK9hsbgUBQAAANkMnHSg7K4QsAzgoY3TTIAUBwAAAAaMgESMYpCBhaTMAA6AAAAARbm1zeOYsKgAAvwGFoAAAACBkEUgI") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/376d31d2e492.js b/network-poc/target-native/doc/search.index/376d31d2e492.js deleted file mode 100644 index a46c50a..0000000 --- a/network-poc/target-native/doc/search.index/376d31d2e492.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHMAAAEoSwxRSxGLEcsuixhZaUARgAArOEscIksE4ICoEAAACoWbnYnBILHsEAnPQP/sJAr5QABsFAqvADpoAAAACzZoDAAACZzgAEDDQ==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/377023998328.js b/network-poc/target-native/doc/search.index/377023998328.js deleted file mode 100644 index 5b6ab13..0000000 --- a/network-poc/target-native/doc/search.index/377023998328.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIAOzAAAAEAAOwBAgC9HQAAASHrAfMAAW07MAAAAQAA7AECAG8RAADrEesBKwKgAAAADX1ydwUAQQAANOsp7CmdLJ4sZ9cdBQBDAACcICxj+h37AmNuBQBAAAAMOytzyxHhQgAAgio7hKAwAAAgpaAAAAANxQAgRvsDYWVv") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/3788c5bf57d2.js b/network-poc/target-native/doc/search.index/3788c5bf57d2.js deleted file mode 100644 index 7f375cd..0000000 --- a/network-poc/target-native/doc/search.index/3788c5bf57d2.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHMAAAEoSwxRSxGLEcsuixhZaUARgAArOEscIksE4ICoEAAACoWbnYnBILHsEAnPQP/sJAr5QABsFAqvADpoAAAACzZoDAAACZzgAEDDSsCoAAAACvcZXU=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/382df4b549c7.js b/network-poc/target-native/doc/search.index/382df4b549c7.js deleted file mode 100644 index 63c2229..0000000 --- a/network-poc/target-native/doc/search.index/382df4b549c7.js +++ /dev/null @@ -1 +0,0 @@ -rn_("oUIAANoRBQHAAAA2WCpZKmQqZSoHQSxhcwUASAAABeAsY80s8wkBc+KHLAAA+wJhZSFFAABPKE0qTiojAAKwYCobAOBjcDswAAABAAAKAAQA3h0AAKkgBQD6KQIAQCwAAAUBxQAAARoqAmcqZWljAQOgQAAAJ0liZXPziyUAAF4AagXLhKCAAAArQKAAAAAgbxkAASUAQQAABckrY0AoSCtJKxUAQgAADawscnYsvywzAAOgUAAAKfZpb3T0MhgAAAEAywwgAgUCwAAABdwrDDgsBwMrZWxvMUYAAAUlAyw4LEEs0UUAAHQn0UIAAP8kBQBBAAAFQytjPifzBAEy0mMqAACeBQBBAAALfixuZBgFAEEAAAt9LG5jGAUAQAAAC3wsbmIYBQBBAAALkixulyAFAEEAAAuRLG6WIPsDMDU49wMCx6AAAAAWBpUUAAHkUxQAAAUBwAAAmi8rkeclaW8BAQA7MAAAAQAANwAGAO0fAADWIAAAviQKAIkqKAAELAAA0CwAANFCAAAsKgUBzAAABKEsMUUsRixHLLosYWWlAEYAAKzhLHCJLBOCAqBAAAAqFm52JwSDx7BAJz0D/7CQK+UAAbBQKrwA6aAAAAAs2aAwAAAmc4ABAw27hKDAAAAsskgQgAUAQgAABKcsch0n8wIBafNgKgAA3wBtASsCoDAAACyQZ28BBADqNCYAAAEGADswAAABAAARAAEACigRAPsCa3MBBgKhgAAALOSgAAAAJmhmcjswAAABAABYAAIAaSUAAIwlVwAFAcAAAAitLAV/LG1uI4UDoFAAACxDoKAAACy3Y2V0BQLDAAAF6isJlCwKnyxjZXTDAwSgUAAAKlWgQAAAKgVjbXR24pImAACfAcWgsAAALMugYAAAKisAAcICBQBGAAAF4CxjzSxxQgAAAycEJwUnBicHJwgn7ivvKwUCQAAABHMnBQkoCxQsZWZvZCTzgQJlafsCYWgFAEAAAASZJ3TwJ/MEAXMBIBgAAAUARAAAFZon7SltYRgBANCgIAAAKdtxTMy5EesN+hnjvGsmlUlXz+6gIAAAGChaaqnNdCY8m6rbT+dw9FNhcXSgIAAAILEHAIRHxUkInEc9wCpBJz+3CSo+9vlmsHUirPBLsy9KvhUnaa0Z2hXsaJzBZzsHOjAAAAEAAAAAACgAEAAAAGIU8xX6FREWGRjQHY8gkCChJIQlHCYvJjAmXSZ3JpsmnCanJsYm2SZOJ08nUCdaJ9InQyp2KncqeCp5KhYrFysYKxkrLiveK98r4CvhK/Yrwyw=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/387b9550e397.js b/network-poc/target-native/doc/search.index/387b9550e397.js deleted file mode 100644 index d8160da..0000000 --- a/network-poc/target-native/doc/search.index/387b9550e397.js +++ /dev/null @@ -1 +0,0 @@ -rn_("ZQFFAAAOuSwGQixhcB4oHyggKCEoIigvKzArJQBBAAAF8CtjNihvKnAqAQIAOzAAAAEAAAkAAwALJwEA9ysDAHgsAwAFAEkAAASYLGzNKwEAAaAAAAAnqXM6MAAAAQAAAAAACQAQAAAA1SDRJNIkISUiJSMlYyYrKrkqqyzbhKBwAAAsQIABQSFCAADNJ9srjCzzAAFpOzAAAAEAAD0ACwDMIAEAZyQEAO4pAAA4KwAAuCsKADYsAABULCEAlCwAAK0sAADRLAAA1CwDAAUAQQAAAPwqc6csI4ECgCd6ABABZWkbA6CwAAArPKBwAAAr1GFlbwUBxwAACK4sDdIsYWMFAcEAAAGTJwJKKGV1+wJvdZUCQAAABVQrDdosmmQqYmRz3hErAqAwAAAsN2Fl4UAAAIIql28Ay6BQAAAoHKBgAAAoR6CAAAAn1gAMhx86MAAAAQAAAAAAPAAQAAAAyBHJEeARNBSIFBoYGxghGCIYJBglGGYYZxjCHcMdxB30H/Uf9h/3HwMnBCcFJwYnBycIJx0nKycsJ1snRShGKE8o0CnvKfAp8SlIKkkqTSpOKlYqZyoOKxMrFCsVK0Ir0yviK+4r7ysnLCgsTyxQLJUstCzFLMYsxyw=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/396221db8836.js b/network-poc/target-native/doc/search.index/396221db8836.js deleted file mode 100644 index 8949d2d..0000000 --- a/network-poc/target-native/doc/search.index/396221db8836.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQFCAAAlRShGKJUsAtIrZXEeKhOBA7BQLAwAAaBAAAAnCWVmbhsCoKAAAChHcnQbhKBwAAAsrKDQAAArQLBAHcAAGoEBBA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/3c46588b5040.js b/network-poc/target-native/doc/search.index/3c46588b5040.js deleted file mode 100644 index e2c4c5e..0000000 --- a/network-poc/target-native/doc/search.index/3c46588b5040.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBFAAA06ynsKZ0snixn1x0FAEIAAKBOJ3OPLAUAQgAABtMrcxorKwKgQAAAJnVsdBsCoEAAACvYYW8FAcYAACQIKwkroSxBUShFLEYsRyy6LGFlgwHFsMAsIAABoHAAACefsIAr4wABoDAAACq6ACVAAvb6HQAAegdXAXIEAQDHADFAAAAxJjImMCgkLKFMAADhLAECAO31JwAA8wIDZHBzOjAAAAEAAAAAAA0AEAAAADwqPSobLBwsHSweLB8sLiyJLIosiyyTLKgs2CwHLQCKoNAAACxBsIAqPAABoMAAACvLoGAAACyNoEAAACw/oHAAACzLOkkL4pIUAAAFAcAAAAoDLAUmKHBzKwKgkAAAKwFlbwUBwAAAAoAnAyUoaWwrBKAQAAAqGKBwAAAq/aCgAAAslzFic3QxQgAAOCcOKl4qyCv7AmZ2BQBAAAACiyV0nCYFAcAAAAhTK9ovLHB0BQFEAAADbiowyCfJJ8onJStkc2cmBQBBAAAFJixjHSrzBAEyAWYmAAAFAcAAAAqPLKxKLHJ0NwwAyaBQAAAnMqCQAAAs17BQKcYAAaCQAAArUrCAKxEAAcAtAgk7MAAAAQAAGgALAGcUBACyFAYAySQCAHUlAAB6JQEAeiYAAMkmAQAZJwEAPycAAGIqAAAeKwEABQBDAAAAnCZziiXjAYSgQAAAJpsGAAM7MAAAAQAAFAACAPgTEwCKJQAA+wJkbgUBwAAACK0sBX8sbW4jhQOgUAAALEOgoAAALLdjZXQFAsMAAAXqKwmULAqfLGNldMMBBLBQKhAARbBAKEIBw2NtdHb01SQAAAEAvAEBAJUASwAABIUsbdssOwOgIAAAJWthaXMFAcEAAAc/KwQSKmhvBQHDAAABMycKIywxdAECAOuyIAAAGwOgwAAALDegcAAAKgNjcHXndgDLoIAAACzeoEAAACU1oDAAACnKQmGyBvd3AAAApAJdEXQAAQABAFgS") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/3cbe383ed573.js b/network-poc/target-native/doc/search.index/3cbe383ed573.js deleted file mode 100644 index b1ae4e3..0000000 --- a/network-poc/target-native/doc/search.index/3cbe383ed573.js +++ /dev/null @@ -1 +0,0 @@ -rn_("pQBDAAAEVCpwYSXRSQAALyzzAAJhYwHfJAAABQHAAAAHUytGNSo2KsAswSzCLGFlBQHAAAAB3CuTjSBkbQUBwwAAn9ssnsgsY3QbAqAwAAArU3FzBQHCAAAQ2CAkJqLFLGVp8wCFFIEEOzAAAAEAAFAAFAA+FAAAJhgBAFIYAACAIAAA4iQKAB0lAQAyJQEALiYAAMgnAgDOJwEA2ikAADsqAAC3KgEAvCoAAL8qKgAlKwAATSsAAKUrAABRLAIAqSwAAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/3d8c16c6cf6f.js b/network-poc/target-native/doc/search.index/3d8c16c6cf6f.js deleted file mode 100644 index 8970296..0000000 --- a/network-poc/target-native/doc/search.index/3d8c16c6cf6f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAACq/ysOpSxibAUBwAAAEzMobSoZ6yu3LG9yBQHAAAAIrSwFfyxtbiFFAAAHKhosQyzzgwNjZXTzgQJzdDUCQgAAFY4n6isJlCw6MiszK0QsnyxjZXTxHfIdrSuuKxsCoJAAACwtZXIFAsAAAASFJQbPKQMkJWFpdCFEAAC+HUIoBSolAEEAAAEtK28XGBgYdywFAcAAAJSPIAVoJWxulQFAAAAkyiAQKlUqDtArb3NfFGc7AMqgAAAADc6xcCy1AAGgIAAAGDECDUYLOzAAAAEAAP4BCgBCAwAAVAMBAFcDBAB9C+sBXBQBAFgYAQCxIAAA1SQBAJImAQAEKAEA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/3da1e2de7263.js b/network-poc/target-native/doc/search.index/3da1e2de7263.js deleted file mode 100644 index 248053d..0000000 --- a/network-poc/target-native/doc/search.index/3da1e2de7263.js +++ /dev/null @@ -1 +0,0 @@ -rn_("lQBAAAAJPixjIygFAEcAAAXELGNILCsCoEAAACvPb3LzAQFjAZ4nAADzggIyc5UAQQAAk60rdAQo+wJpb6FIAABTKPsCaWw=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/3e212209b944.js b/network-poc/target-native/doc/search.index/3e212209b944.js deleted file mode 100644 index dedd934..0000000 --- a/network-poc/target-native/doc/search.index/3e212209b944.js +++ /dev/null @@ -1 +0,0 @@ -rn_("pQBBAAALqixuKCYBBgA7MAAAAQAAbQECAC8nAABYKGwBBQBHAAAFxCxjSCwrAqBAAAArz29y8wkBYwGeJwAA0UUAAHQnBQHAAAAFQCfR/yRucAUAQQAABUMrYz4n8wQBMtJjKgAAngUAQQAAC34sbmQYBQBBAAALfSxuYxgFAE0AAAWkLGPOKyMBArBQKCMAAWJj4v8XAAAFAEAAAAt8LG5iGAUAQQAAC5IsbpcgBQBBAAALkSxuliD7AzA1OAEAzVTEbVP3IDgBuOknlWHL87eVlXpa0qEDFyPRpq2xfKBgAAAnP1g58rLgQlboU1KptmOYXD5hrR9jaTq196CgAAAqY6AAAAAWBjBw1tfp45cWlAk7MAAAAQAACgAFAFMUAwBZFAIA7SIAAGkmAACfJgEA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/3e9ae6307edd.js b/network-poc/target-native/doc/search.index/3e9ae6307edd.js deleted file mode 100644 index e844c36..0000000 --- a/network-poc/target-native/doc/search.index/3e9ae6307edd.js +++ /dev/null @@ -1 +0,0 @@ -rn_("sUEAAFAqpQBAAAASICroKzL/KysCoDAAACylNDbzggIxMwkCoFAAACyzoZAAACzfYWWhRAAAEyvbhKBwAAAqIQgBBQ==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/4028f84ee77a.js b/network-poc/target-native/doc/search.index/4028f84ee77a.js deleted file mode 100644 index dd7c62b..0000000 --- a/network-poc/target-native/doc/search.index/4028f84ee77a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIA6jQmAAAbA6AAAAAYSaBQAAAsy2FkcgUBwAAABI8rB0AoZXIxSQAAJywoLE8sUCyhQwAAwiAFAcIAAOWmK5g7LGZpGwKgUAAAJsVhaKcLAIigQAAAK06hIAAALN+gYAAAKdMF2AY6MAAAAQAAAAAAFAAQAAAABhbwJPEkLSZvJnAmcSZyJr8mwCbBJsImWSc4KjkqRSoFKwcr1ivXK8os") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/40639a3101db.js b/network-poc/target-native/doc/search.index/40639a3101db.js deleted file mode 100644 index d2932a2..0000000 --- a/network-poc/target-native/doc/search.index/40639a3101db.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBEAAAIsyxwXyelAEIAAAuqLG4oJmUAQgAABQQrY6IkoyT3KaIsoyy1LLYsBQBAAAAE0ydtPBjzggJlaeuEobAAACzeCAAV") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/406631b9a140.js b/network-poc/target-native/doc/search.index/406631b9a140.js deleted file mode 100644 index 194e97b..0000000 --- a/network-poc/target-native/doc/search.index/406631b9a140.js +++ /dev/null @@ -1 +0,0 @@ -rn_("MUMAAHYgdyCvK7ArAYECoHAAACs5oTAAACzMbHEFAcAAAAg4KwULKm1uhyAAiqCAAAAq/6DAAAAsIqGAAAAs2qCwAAAr7aBAAAAnkaBAAAAnkqBwAAAqV6BQAAAoNR15AuL8HQAA+wIybw==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/40d38a76b871.js b/network-poc/target-native/doc/search.index/40d38a76b871.js deleted file mode 100644 index 076082a..0000000 --- a/network-poc/target-native/doc/search.index/40d38a76b871.js +++ /dev/null @@ -1 +0,0 @@ -rn_("NQBDAAAGRCox+BX5FQIWAxYBBQGxQCzIAAFz9HggAAABADgLAQAFAEQAAAI3J2zSIAUARAAAAjYnbNEg+wJscxsCsAAd+AABZHK7hKDwAAArPDABBA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/410ff111108b.js b/network-poc/target-native/doc/search.index/410ff111108b.js deleted file mode 100644 index 8e29e0f..0000000 --- a/network-poc/target-native/doc/search.index/410ff111108b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABoCAAACSkbzswAAABAAAMAAYAORQAAOAkAQCIJQAAZCcAAHQnBQDYKQEABQHAAACSRyehCSxvdfsCbnMbAqAAAAAkz3B0") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/413a653533f9.js b/network-poc/target-native/doc/search.index/413a653533f9.js deleted file mode 100644 index 2276dc2..0000000 --- a/network-poc/target-native/doc/search.index/413a653533f9.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAACq/ysOpSxibAUBwAAAEzMobSoZ6yu3LG9yBQHAAAAIrSwFfyxtbiFFAAAHKhosQyzzgwNjZXTzgQJzdDUCQgAAFY4n6isJlCw6MiszK0QsnyxjZXTxHfIdrSuuKxsCoJAAACwtZXIFAcAAAASFJQbPKWFpIUQAAL4dQigFKiFFAADKIBAqVSonHQDJoAAAAA3OoGAAACVosXAstQABoCAAABgxAg1ECzswAAABAAAQAAcAVAMBAFcDBABcFAEAWBgBANUkAQCSJgEABCgBAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/41b6f0375656.js b/network-poc/target-native/doc/search.index/41b6f0375656.js deleted file mode 100644 index 7f467d7..0000000 --- a/network-poc/target-native/doc/search.index/41b6f0375656.js +++ /dev/null @@ -1 +0,0 @@ -rn_("oUUAAKQmAQACoCAAACsPoQAAACzYaXfz0CcAAAEA5AJxQwAA9yv4K/kr+it4LHkseix7LCFCAADNJ9srjCzzAAFpOzAAAAEAAD0ACwDMIAEAZyQEAO4pAAA4KwAAuCsKADYsAABULCEAlCwAAK0sAADRLAAA1CwDAGMBA6BAAAAnk21zdDowAAABAAAAAAAQABAAAADCHcMdxB30H/Uf9h/3H0UoRijQKe8p8CnxKWcqQiviK5UsUUAAAA8Y7x/wH/Ef8h/zH/sCbW5RQQAAdiV3JTsnnycUKhoq+wJlaScMAMqgMAAAJGWwMB3BBqWgYAAAKyigEAAAFHWgYAAAJ1mggAAAKcmwECTtAAEAIywP9C4RAACmFoUDqQA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/434e037108e7.js b/network-poc/target-native/doc/search.index/434e037108e7.js deleted file mode 100644 index 7e60d98..0000000 --- a/network-poc/target-native/doc/search.index/434e037108e7.js +++ /dev/null @@ -1 +0,0 @@ -rn_("ZQFAAABVSCg0KzUrxyvQK+AskB0lY3PbHTAnMSeQJ1cogyzNLPMDAXI6MAAAAQAAAAAACgAQAAAAYibFJkMnUydUJ1UnHSgbKvsqOyuELA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/437311e3ea93.js b/network-poc/target-native/doc/search.index/437311e3ea93.js deleted file mode 100644 index 45bdb2f..0000000 --- a/network-poc/target-native/doc/search.index/437311e3ea93.js +++ /dev/null @@ -1 +0,0 @@ -rn_("oUUAAOQlBQBCAAAEFSpxeCUFAUgAAArPLAnKLG1uKys7A6CAAAAsPWFrcAUBwAAAAE0npkQrbnUjAwOgYAAAKwqhEAAALLRkZnc7MAAAAQAAEAAFAMUgAwD0IAYAJSoAAHsqAwDkLAAAAQMAOzAAAAEAADEAAgDOIAEAbCQvAPsCbHTrBKAAAAAnbDJhZWw=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/43cbc5f05b91.js b/network-poc/target-native/doc/search.index/43cbc5f05b91.js deleted file mode 100644 index 1af02cd..0000000 --- a/network-poc/target-native/doc/search.index/43cbc5f05b91.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBIAAAF4CxjzSzzBQFz4ocsAAAFAEEAAASnLHIdJ2sDoAAAACftbW5zAQEAOzAAAAEAAA8AAwDkIAwAXCYAAA8sAQBjAMag4AAALC2ggAAAKFegMAAAIu2gIAAAHfMARQAN98oNAAABAAEAAQCTHN8AbQE=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/43d09e8849bb.js b/network-poc/target-native/doc/search.index/43d09e8849bb.js deleted file mode 100644 index 5dca905..0000000 --- a/network-poc/target-native/doc/search.index/43d09e8849bb.js +++ /dev/null @@ -1 +0,0 @@ -rn_("cUMAAPcr+Cv5K/oreCx5LHoseyxDAQOgQAAAJ5N6kM7WuQptc3Q6MAAAAQAAAAAAEwAQAAAAwh3DHcQd9B/1H/Yf9x9FKEYo0CnvKfAp8SlnKhMrFCsVK0Ir4iuVLA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/449547cb4fff.js b/network-poc/target-native/doc/search.index/449547cb4fff.js deleted file mode 100644 index d20c784..0000000 --- a/network-poc/target-native/doc/search.index/449547cb4fff.js +++ /dev/null @@ -1 +0,0 @@ -rn_("IUUAAE8oTSpOKiMAArBgKhsA4GNwOzAAAAEAAAoABADeHQAAqSAFAPopAgBALAAABQHFAAABGioCZyplaWOBA6BAAAAnSWJlcyOBAqCAAAArQGFlSwOwgCdHAAGgQAAAH+xnbnM=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/4518efb00318.js b/network-poc/target-native/doc/search.index/4518efb00318.js deleted file mode 100644 index c91b8c5..0000000 --- a/network-poc/target-native/doc/search.index/4518efb00318.js +++ /dev/null @@ -1 +0,0 @@ -rn_("QUIAAJgn3yngKeEp4imlAEIAAAuwLG6hJlFJAADpK+sr8SvyK/MrtywxQgAAKiczKNcpbSoFAEAAAJB4JnDJIAUBwQAAkx0mAM8pbnPTAISgcAAAJmsEgRA7MAAAAQAARgUFAC0DAAA5CesBnxQAAMUb6wHwImwBIUIAAGkmnyagJlUCQAAAAwgoAnEnAXInYmRukSBRKEUsRixHLLosIwACMge9VLLoZHIBVSsAAEFEAADtJu4mCCsJK6Es+wJhZQUAQQAAAm0lbS0UBQFAAADCFSyrmSxpb/sgBQHCAACsuyyVSCtiYwEAAaAgAAArR2k7MAAAAQAAMwACAGArLgBKLAQAI4ICoCAAACsLZHMbArCAK/0AsmVpBQHAAAChTyulaSppcgUAQwAABcQrY4wn0UIAAKIn+wJpbFcxAYuwUCv0AMWg8AAALM6gwAAALN2goAAALM+gkAAALMqgkAAAK/6utBI6MAAAAQAAAAAAGgAQAAAAth23Hbgd6x3sHUEnQidnJ2gnaSdqJ2snjyfyJ/Mn9CfFKdIpNyr/KisrBiwHLAgsrizSLNosoUYAAPopFQFBAACayCwMhCxmc9wgbCWfB4ehEAAALJagwAAALLEFWIQxRAAA6ynsKZ0sniwBAcWgIAAAJYeggAAAKw+gQAAAJ8agUAAALCKhAAAALIAARmAA8qsUAABKFQUAQAAABG4lbz0UAQIAOzAAAAEAACoAAwCJKigABCwAANAsAADzAAFp0vYrAADNoUUAAFEs8wYCbHMB7SsAAIcBAIWgMAAAJ8ugoAAAK06hUAAALN4EmQABBBYAAGsDsBAUZAABbnJ4BQHAAAAG0SkSKyjDK2hvMUQAANcgQSgPKoAsCQKhAAAALNqwUCpIAAFneUuEoCAAAB3ToFAAACaZoIAAACyWAiEEAQDNJTgEaBxVXVeK0LPYTul7y2+XoCAAACTMGUZAYGrBPojbtZGxMCS6hYMkDrmL7JbsR17uAXY2Yt6HuRETsAAr1gABNo28+Kg5WBgxAL3WwFeYSTswAAABAAA7AAoAZBQBAAQYAAALGAEAEhgAACwYAADXHQAAviAAAM4gAQBsJC8AbiYAAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/456d2c09c8bb.js b/network-poc/target-native/doc/search.index/456d2c09c8bb.js deleted file mode 100644 index 297ed74..0000000 --- a/network-poc/target-native/doc/search.index/456d2c09c8bb.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMAOzAAAAEAABsAAwCGJgsAqSYOAFgrAAATgQKwACZsAShlc1FIAADcKd0p3inhLOIs4yyhSAAA8id7xaCAAAArw6AwAAAYJEAA0gAFAEgAAAWBLGP+KgUASQAABaAsY8YrKwKgEAAAJ8dpb2MAA6BQAAAsxGNkdfImKAAAIgQlAkUAAKJPKwmvLAzdLGRoa48nxSnSLPODAmVuBQHFAAAHPysEEipob3FDAAD3K/gr+Sv6K3gseSx6LHssAQAAOzAAAAEAACUAAwBULCEA0SwAANQsAgDzggJzdCOFAqAQAAAqFGVpBQHAAAAJDiwFRSppdWOEhbCgK0IAoKDAAAAskIAr2QAQYxMBAgUAQwAABigrbQIsNQFBAAAF7CsJvixjdzQoQSsjLJcsOwOgQAAAK9MxbXRHHQCJoGAAACbroEAAAChJoDAAACbEoWAAACzTlcEGOjAAAAEAAAAAAAgAEAAAAHsADAMNAw4DTxSlINQkzyn8Kg==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/45990a08d019.js b/network-poc/target-native/doc/search.index/45990a08d019.js deleted file mode 100644 index 05cffb8..0000000 --- a/network-poc/target-native/doc/search.index/45990a08d019.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQEBoFAAACykYzswAAABAAAOAAYAfiUCACInBwDOKwAAhSwAAJYsAADMLAAAE4ECoRAAACzDZXUFAcEAAAfPLB52LL8sZGmbhKBgAAAskKCQAAAsphFBAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/45e3ab4cf4cf.js b/network-poc/target-native/doc/search.index/45e3ab4cf4cf.js deleted file mode 100644 index c67ec32..0000000 --- a/network-poc/target-native/doc/search.index/45e3ab4cf4cf.js +++ /dev/null @@ -1 +0,0 @@ -rn_("wUkAABssBQHAAACXPigBzyRydaFFAADoJwUBwAAAAHQgFRMqvSpudAUBSAAABfQrD84sY2Y3KkcPAcigAAAAFfSgAAAAFfWwABhMAAHDQDgAOzAAAAEAAA8ABQDMEQYAPxQCAHQmAAC5JgEAUygCAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/4762ba6526c8.js b/network-poc/target-native/doc/search.index/4762ba6526c8.js deleted file mode 100644 index 65a133a..0000000 --- a/network-poc/target-native/doc/search.index/4762ba6526c8.js +++ /dev/null @@ -1 +0,0 @@ -rn_("IUYAAD0rPisFLAUAQwAAANQkc3og+wJhbwUBwAAAAlEYAxYYaWyjAISwIBSpAAGwcCV2AAETAAH0cQAAAAEAAQDHJg==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/4762eae11686.js b/network-poc/target-native/doc/search.index/4762eae11686.js deleted file mode 100644 index acbf638..0000000 --- a/network-poc/target-native/doc/search.index/4762eae11686.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBAAAACsSBrYhQlA0AAAKgGLKcJLK7FLJwRLGFna3ArJiwmFSqlAEUAAARUKnBhJWsDoAAAABSCZnN5BQBDAACayCxm3CAFAcAAAJ7bLA2MLGV5+wJjdAEEADswAAABAAAVAAIAkCsUAN0sAADzAISAIAP1wA0AAIccKgDKAQEA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/47b66201c534.js b/network-poc/target-native/doc/search.index/47b66201c534.js deleted file mode 100644 index dc2319f..0000000 --- a/network-poc/target-native/doc/search.index/47b66201c534.js +++ /dev/null @@ -1 +0,0 @@ -rn_("sUEAAFAqpQBBAAASICroKzL/K/ODAjEzGwKgIAAAHe1hbJUAQAAABA4sacgNowAEoBAAABSioKAAACzTOGRocDowAAABAAAAAAAHABAAAABMA00DAxiyHbMdtB21HVgn") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/47de24f6ff68.js b/network-poc/target-native/doc/search.index/47de24f6ff68.js deleted file mode 100644 index e5bc641..0000000 --- a/network-poc/target-native/doc/search.index/47de24f6ff68.js +++ /dev/null @@ -1 +0,0 @@ -rn_("VQJAAAADCCgCcScBcidiZG6RIFEoRSxGLEcsuiwjAAIyB71UsuhkcgFVKwAAQUQAAO0m7iYIKwkroSzzgQJhZSOBArAwKCsDmGNpBQHMAAAEoSwxRSxGLEcsuixhZaUARgAArOEscIksE4ICoEAAACoWbnYvBMewQCc9A/+wkCvlAAGwUCq8AOmgAAAALNmgMAAAJnOAAQMNbwCFoGAAACfWsJAoOQABoKAAAChJQKgB") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/48081f5eced8.js b/network-poc/target-native/doc/search.index/48081f5eced8.js deleted file mode 100644 index 11e4d7d..0000000 --- a/network-poc/target-native/doc/search.index/48081f5eced8.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYOEoSAAACzZsCAqJgABsDAqdAABoMAAACyoAVEAAQABoCAAACa9ZTswAAABAABqAAEA+R9qAAUAQgAAEvEnDStvbiqVAEMAAAnkLGFyKgUAQAAAA9InYXEnGwKggAAAK1ltbgUAQAAABLYqZhEnAQABoQAAACzYd/PQJwAAAQDkAgEEAOu4KwAA84MCZHMlAEQAAAnXLGV6Jh4rHyv7A2NtcgUBwAAAArsmAJ0kaXRnXQCMoBAAACScoMAAACw2oDAAACa8oQAAACyxsFAoPgABPKFdOzAAAAEAAPsABgBpDQAA+BT2ANAkAACBJQAAuCYAAMgpAAA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/490fbcb5cbd6.js b/network-poc/target-native/doc/search.index/490fbcb5cbd6.js deleted file mode 100644 index 4c60b1d..0000000 --- a/network-poc/target-native/doc/search.index/490fbcb5cbd6.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYECoHAAACs5oTAAACzMbHEFAcAAAAg4KwULKm1uhyABiqCAAAAq/6DAAAAsIqGAAAAs2qCwAAAr7aBAAAAnkaBAAAAnkqBwAAAqV6BQAAAoNR15AuL8HQAAAYICoHAAACv8oVAAACzcbXNTAAOgQAAAKFJmbXbiXiYAAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/49153af6987a.js b/network-poc/target-native/doc/search.index/49153af6987a.js deleted file mode 100644 index 8f62fa4..0000000 --- a/network-poc/target-native/doc/search.index/49153af6987a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAAIrSwFfyxtbiOFA6BQAAAsQ6CgAAAst2NldAUCwwAABeorCZQsCp8sY2V0wwQEoFAAACpVoEAAACoFY210duKSJgAA8wABZeKPIAAA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/491790d15ccb.js b/network-poc/target-native/doc/search.index/491790d15ccb.js deleted file mode 100644 index 9bc2af9..0000000 --- a/network-poc/target-native/doc/search.index/491790d15ccb.js +++ /dev/null @@ -1 +0,0 @@ -rn_("VQJAAAADCCgCcScBcidiZG6RIFEoRSxGLEcsuiwjAAIyB71UsuhkcgFVKwAAQUQAAO0m7iYIKwkroSz7AmFlKwKhEAAALJZjeiMAArAwKCsDmGNp9QQYAAAHAAEAsgiwBQ==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/4931248d5f3f.js b/network-poc/target-native/doc/search.index/4931248d5f3f.js deleted file mode 100644 index e0fb29d..0000000 --- a/network-poc/target-native/doc/search.index/4931248d5f3f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("cUMAAPcr+Cv5K/oreCx5LHoseywBAAA7MAAAAQAAJQADAFQsIQDRLAAA1CwCAPOCAnN0I4UCoBAAACoUZWkFAcAAAAkOLAVFKml1a4WwoCtCAKCgwAAALJCAK9kAEGMTAQI=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/4a3b81c64edf.js b/network-poc/target-native/doc/search.index/4a3b81c64edf.js deleted file mode 100644 index 46d2dec..0000000 --- a/network-poc/target-native/doc/search.index/4a3b81c64edf.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHBAAAAlCCT8yllbwUBwQAAAvIpBtcsZGUBAgA7MAAAAQAA6wEBAAAe6wHzAAFtOzAAAAEAAOsBAQA/D+sB+wNmbW4=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/4b9d57a648ea.js b/network-poc/target-native/doc/search.index/4b9d57a648ea.js deleted file mode 100644 index dba1fac..0000000 --- a/network-poc/target-native/doc/search.index/4b9d57a648ea.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAAzKiczKNcpbSpZ6SvrK/Er8ivzK7csb3IFAcUAAAaNLAQ/LGZsAQQAOzAAAAEAAAoAAgB+JQIAIicHAAUBxgAABOcrDcssbHMFAcAAAAitLGVLJ0wnLCgtKC4oLyh/LG1uAQUAOzAAAAEAABIABwB9JgMAgicJAAcqAAA6KwAA+ysAABosAABDLAAA5w0AiKBAAAArAqDQAAAsrDYQBzowAAABAAAAAAAJABAAAADkEeUR7B9KKksqSitLK0wrdiy/LA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/4c3f6bc47e96.js b/network-poc/target-native/doc/search.index/4c3f6bc47e96.js deleted file mode 100644 index 2530d5a..0000000 --- a/network-poc/target-native/doc/search.index/4c3f6bc47e96.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBDAAAAhCVzZioBAAOgkAAALD6wICD/AAGgQAAAJ5ljaXQ6MAAAAQAAAAAACQAQAAAA5xHoEekR6hHwJyMoJCgmK1QrnCwFAEcAAAXELGNILHFEAABQKFoqQyvPKyYsgSyCLKAs+wJvcvMBAWM6MAAAAQAAAAAABwAQAAAA5B1qJT4nnicdKv4qACvGK5cBAMWwUCVnBl2goAAAKwwCARADOjAAAAEAAAAAACAAEAAAAAEYAhgNGBYYIBi5He4f1yDZIGYmaiY9J0knjCclKEEoRCgPKhcqNSo2KlgqWSpjKmQqZSoBKwIrPCuALMAswSzCLA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/4c7ad6c10c33.js b/network-poc/target-native/doc/search.index/4c7ad6c10c33.js deleted file mode 100644 index 96f09b7..0000000 --- a/network-poc/target-native/doc/search.index/4c7ad6c10c33.js +++ /dev/null @@ -1 +0,0 @@ -rn_("QUcAADUqNirALMEswiwFAcIAABDYICQmosUsZWnzAAJjcDswAAABAABHAA4APhQAAFIYAADiJAoAyCcCAM4nAQDaKQAAOyoAALcqAQC8KgAAvyoqACUrAAClKwAAUSwCAKksAAAFAsEAAAVhKgMkKwYFK2Fid2FDAACyKrMqtCogKyErIisjK/MCAWk7MAAAAQAAEAABANcnEADDAwSgEAAAJXCgUAAAKD0yY2VuOzAAAAEAAA4ABgDKHQQA8SAAAM0kAQDsJgAA3CkCAOEsAgBjAQOgMAAAKm5kbnM6MAAAAQAAAAAAHQAQAAAA/RX+Ff8Vuh2/HcgdyR2MINAgZyZFJ5EnlSdDKNUr5ysTLDUsPyxJLHwsfSx+LI4skSySLJgsqiywLLEsEwADoCAAACWJoKAAACpoZW90AcUNAAA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/4c8aa4a52059.js b/network-poc/target-native/doc/search.index/4c8aa4a52059.js deleted file mode 100644 index c24e67a..0000000 --- a/network-poc/target-native/doc/search.index/4c8aa4a52059.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQCoYAAACzksAAg3QWLZnI7MAAAAQAAYAAEANwdAACcIAYAaSUAAIwlVwAbhKCQAAArTqAQAAAk06AgAAAUjAFgBA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/4e2b0ab46977.js b/network-poc/target-native/doc/search.index/4e2b0ab46977.js deleted file mode 100644 index 3bc155c..0000000 --- a/network-poc/target-native/doc/search.index/4e2b0ab46977.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBCAACgTidzjywFAEIAAAbTK3MaKysCoEAAACZ1bHQbAqBAAAAr2GFvBQHGAAAkCCsJK6EsQVEoRSxGLEcsuixhZYMAxbDALCAAAaBwAAAnn7CAK+MAAaAwAAAqugAlQAI6MAAAAQAAAAAAHwAQAAAALhQvFDAUMRT6HXQlyyYKJxAnCSgcKNQp1SkpKioqGyscKx0rPSs+K6YrpyuoK6krqiurK6wrBSwMLA0sFCw+LCsCoGAAACnKZHIFAcAAAABNJ6ZEK251IwUDoGAAACsKoRAAACy0ZGZ3OzAAAAEAABAABQDFIAMA9CAGACUqAAB7KgMA5CwAAEFDAACYJ98p4CnhKeIpMUAAADEmMiYwKCQsoUwAAOEsAQIA7fUnAADXAQGFoDAAACvFiIAGOjAAAAEAAAAAABEAEAAAAH0lPCo9KkQrRStGKxssHCwdLB4sHywuLIksiiyLLJMsqCzYLPsCb3YHsgCMoNAAACxBsIAqPAABoMAAACvLoGAAACyNoPAAACynoHAAACpxsEAnlQSqoHAAACzLuk0LOzAAAAEAAB8ABwCSFAEANBgAAMYdAQClJBYAJSYAAO0qAADjKwEA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/509cf8343e6d.js b/network-poc/target-native/doc/search.index/509cf8343e6d.js deleted file mode 100644 index 82627c5..0000000 --- a/network-poc/target-native/doc/search.index/509cf8343e6d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("IUIAAN4gQSa6KgUBwAAA1S8skPAkb3MFAEAAAAWPK3AtJgUBwAAAAI8rCTIoa24FAcAAAAE6JyO7HbwdNyhsbwUBwAAAE7odQygOxSthbQUCwQAAAdIdBkMqmwwsZW5yGwKg4AAALNBhbgGCArBwKDEDxKFQAAAs221zBQHAAAAEZiUAXytjZCsCoAAAACd/ZG4FAcAAAAjKKxEEKv0qbHUBgQKgcAAAKzmhMAAALMxscQUBwAAACDgrBQsqbW6HIAGKoIAAACr/oMAAACwioYAAACzaoLAAACvtoEAAACeRoEAAACeSoHAAACpXoFAAACg1HXkC4vwdAAABggKgcAAAK/yhUAAALNxtc1MAA6BAAAAoUmZtduJeJgAAAQCOSQ+8tcvWBPzF1bvToGAAACpiNmPhFco5ThSlpBT0oDAAACeXaEBODDoBRS7d8VA/SU4+HqBnAPiaCV2+oCAAACfMFrvCPzwucl62JEX6JiA/mvfKvVlHOjAAAAEAAAAAAAwAEAAAAFADUQNhEXEgciDaIPwg/SD+IGIkYyTcJN0k") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/51b8d9062d5b.js b/network-poc/target-native/doc/search.index/51b8d9062d5b.js deleted file mode 100644 index ace62f2..0000000 --- a/network-poc/target-native/doc/search.index/51b8d9062d5b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("MUEAAEQUHyUNJ1wnCQKgIAAALA6hgAAALN5wdJUARgAABfsrY0oqBQFEAAADxStDmCffKeAp4SniKWh0fSUBAgA7MAAAAQAAKgADAIkqKAAELAAA0CwAAPMAAWnS9isAAM2hRQAAUSzzAgJscwHtKwAA+4UlIAg=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/526c6ebc3313.js b/network-poc/target-native/doc/search.index/526c6ebc3313.js deleted file mode 100644 index abe60b8..0000000 --- a/network-poc/target-native/doc/search.index/526c6ebc3313.js +++ /dev/null @@ -1 +0,0 @@ -rn_("NQBAAAAF0ytlTxSlINQk/CoFAcEAAAf+Kw+0LG50QUMAAJgn3yngKeEp4il1AUAAAMIVLKuZLGlv+yAxJjImMCjZK9orJCw9LAUBwQAArLsslUgrYmOhSwAA4Sz7Am9yNQBDAAAFpCxjziuFLJYszCwrAqCQAAAsz2FvBQLAAAALkCwGNywCJSxkbnQBAAGgIAAAK0dpOzAAAAEAADMAAgBgKy4ASiwEACMCAqAgAAArC2RzAcUrAAAbArCAK/0AsmVpBQLAAAAOziwATSemRCtlbnVxQwAA9yv4K/kr+it4LHkseix7LAEAADswAAABAAAlAAMAVCwhANEsAADULAIA84ICc3QjhQKgEAAAKhRlaTFFAABpKmoqayoKKwEBADswAAABAAAPAAIA9ScMAE8rAgD7AmlyIUUAAAQr9Cu5LAUAQwAABcQrY4wn1QBCAAAGDixloidrhKAgAAAnWKBQAAAqRQEJCAUBwAAABLQsOKIsoyy1LLYsYWUjgQOwgCtCAKCggAAALNllZ3IBAJA8rLtd7VU2tcicmZtYFGQkFQB1jQwwO8F+kSIrxbBu3UI//8ugkAAAK9QVRThPO2Q/5RreIsGgwAAALN0Eev3kCDqgkAAALMpYvSPdCjgxtq2ztfV5gGZvinwelWOPEPv/tRY7MAAAAQAAUwApANYRAAC2HQIA6x0BAMUgAwD0IAYAoiQBAAUlAAB9JQAA7SYBAEEnAQBnJwQAjycAAPInAgDFKQAA0ikAAPcpAAAlKgAANyoAADwqAQB7KgMA/yoAAAgrAQArKwAARCsCAAMsAAAGLAIAGywGAC4sAAA4LAAAQSwAAIksAgCTLAAAoSwCAKgsAACuLAAAtSwBALgsAADSLAAA2CwAANosAgDkLAAAMQADABuggAAALKxuc3T3+B8AAIIAjAQBAEgFywCNAQ==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/527442dceceb.js b/network-poc/target-native/doc/search.index/527442dceceb.js deleted file mode 100644 index 5c2a95a..0000000 --- a/network-poc/target-native/doc/search.index/527442dceceb.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAABPCiXEStpbwUBwAAACFMr2i8scHQVAUQAAANuKlDIJ8knyifOJ88nJStkc2cmsSwFAEEAAAUxK2MuJyFJAABSK1YrVyshRQAAxinHKcsplQBGAAAJ1yxlHishRQAAMic0JzUnFQBBAAAVJiyCLGMdKgArEwQCoAAAACsmMnPSZiYAAAQFAcAAAAqPLMxKLHJ0AQAQoBAAACcSsAAlJQABoBAAACcToBAAACcUfyESzsHUU62WgxyLCx6bTjJfOdHMw63eoJAAACzXbdUH5pd5TFEoJJNYKjcyR1kKYlBch/H2sEAnnAABcNEtIawUWHqgSReYMTIzN2FiY2RlZmhrbG1zdjswAAABAABEABsAZxQEAHkUBwCyFAYA7xQEAKggAADJJAIAZSUBAGglAAB1JQAAeiUBAIIlAQBgJgEAeiYBAMkmAQAZJwMAPCcAAD8nAQBLJwEAUScBAF0nAQACKAEALCgDAPMpAQALKgAAYioAAB4rAQB/LAAA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/52d2391c3cae.js b/network-poc/target-native/doc/search.index/52d2391c3cae.js deleted file mode 100644 index e9efff0..0000000 --- a/network-poc/target-native/doc/search.index/52d2391c3cae.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAAB7SIOsSxldGUBQAAAVUgoNCs1K8cr0CvgLJAdJWNz2x0wJzEnkCdXKIMszSwTAAOgAAAAFfqgAAAAFItyc3Q6MAAAAQAAAAAADAAQAAAA1RFiJsUmQydTJ1QnVScdKEooGyr7KjsrhCwrArDwK/YAzWFlBQHMAAAEoSwxRSxGLEcsuixhZaUARgAArOEscIksE4ICoEAAACoWbnYnBIHHsEAnPQP/sJAr5QABsFAqvADpoAAAACzZoDAAACZzgAEDDXuFsGAmhAABoHAAACnJAagE") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/533615f72076.js b/network-poc/target-native/doc/search.index/533615f72076.js deleted file mode 100644 index 9b99f7d..0000000 --- a/network-poc/target-native/doc/search.index/533615f72076.js +++ /dev/null @@ -1 +0,0 @@ -rn_("tQBCAAAAdyZzQibBSwAASixlAEAAAAUEK2OiJKMk9ymiLKMstSy2LPMBAW7iBiUAAEUAQAAABNMnbTwYniSfJHklPya/AYWgEAAAJmsQQQwFAEgAAAXgLGPNLPMMAXPihywAAPMBAXMBySkAABsCoKAAACvVY29TAAOgoAAALI9ucnTjMxEAAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/5355d4d4d3f5.js b/network-poc/target-native/doc/search.index/5355d4d4d3f5.js deleted file mode 100644 index fd44895..0000000 --- a/network-poc/target-native/doc/search.index/5355d4d4d3f5.js +++ /dev/null @@ -1 +0,0 @@ -rn_("lQBAAACSVidpYicjAgKgIAAAJpRkc/NcKgAAAQCBAgGBAqBwAAArOaEwAAAszGxxBQHAAAAIOCsFCyptbocgBYqggAAAKv+gwAAALCKhgAAALNqgsAAAK+2gQAAAJ5GgQAAAJ5KgcAAAKlegUAAAKDUdeQLi/B0AAKMAhqAAAAAmzqBAAAArVKAQAAANfLAwJpsADBhISAGZJwAA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/549fe3550675.js b/network-poc/target-native/doc/search.index/549fe3550675.js deleted file mode 100644 index a5934ad..0000000 --- a/network-poc/target-native/doc/search.index/549fe3550675.js +++ /dev/null @@ -1 +0,0 @@ -rn_("YUMAAForWytcK10ruyy8LL0soUUAAEorMwEDoDAAACaeZnByOjAAAAEAAAAAAAkAEAAAAOsUhiVEJ9Un8SdpKmoqayoKKw0r") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/54b02e88aa16.js b/network-poc/target-native/doc/search.index/54b02e88aa16.js deleted file mode 100644 index e939f4d..0000000 --- a/network-poc/target-native/doc/search.index/54b02e88aa16.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAAG7ydCHBgdGB4YgiCDIG95BQLAAAAFYSoDJCsGBSthYncbArBwKdgAAW91AQABsTAsyAABZQFNKwAABQBEAACowCxzmCxjAISgUAAALIagYAAAKwcECBI6MAAAAQAAAAAAHgAQAAAAeCB5IJogmyBTJlQmVSZWJlcmWCZZJlomWyZOKGgqBisyKzMrsSuyK8srzSvpK+sr8SvyK/MrLSxELJ8styxhQwAAsiqzKrQqICshKyIrIyvzAQFpOzAAAAEAACUABABUGAMAPiYAAPMmDwDXJxAA+wJwcgUBwAAAAdsgCkErMXQjggKgIAAAKD1mdgUCwAAAI4QgMyadJiUxKPUr/CsDxR1sc3TnEgDKoBAAACVwoEAAACTfoKAAACycoFAAACbOoIAAACzfQg2YBjswAAABAAApABMAMgMBAFULAQDYEQEAkRQAAJQUBAAHFgIAyh0EAPEgAgDNJAEA5CUCAHUmAAC8JgAA7CYAAEcnAQDcKQIAAysAABArAAC+LAAA4SwCAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/573692dc3ca6.js b/network-poc/target-native/doc/search.index/573692dc3ca6.js deleted file mode 100644 index 272a17f..0000000 --- a/network-poc/target-native/doc/search.index/573692dc3ca6.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBBAAAFQytjPifzAwEyOjAAAAEAAAAAAAgAEAAAAA0Y1yBBKEQoDyoXKmMqASuALLFBAABQKqUAQQAAAugrMv8r84QCMTPzAQFw5LIdAAArAqBwAAAq+m5zm4SgwAAALEGgUAAAINQRCQA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/589ffc464450.js b/network-poc/target-native/doc/search.index/589ffc464450.js deleted file mode 100644 index c01450a..0000000 --- a/network-poc/target-native/doc/search.index/589ffc464450.js +++ /dev/null @@ -1 +0,0 @@ -rn_("JQBCAAABTyY1nBRqGGsYJQBBAAAF8CtjNihvKnAq8wQBduJIKgAABQHAAAACryABaBgxNRcDAMagMAAAILCgIAAAGGmhAAAALLILAIAK9GgAAAALCwEA3ww=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/59220caa0e5f.js b/network-poc/target-native/doc/search.index/59220caa0e5f.js deleted file mode 100644 index 04fad9f..0000000 --- a/network-poc/target-native/doc/search.index/59220caa0e5f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBIAAAFgSxj/ioFAEkAAAWgLGPGKysCoBAAACfHaW9jAAOgUAAALMRjZHXyJigAACIEJQJFAACiTysJrywM3SxkaGuPJ8Up0iz7AmVu") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/59527e38c910.js b/network-poc/target-native/doc/search.index/59527e38c910.js deleted file mode 100644 index f4d410c..0000000 --- a/network-poc/target-native/doc/search.index/59527e38c910.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABoQAAACvpduJOAwAAAQAAOzAAAAEAAGwBAQDwImwBFQBJAAACBCxp9ivDLPsCZW8PAYWgIAAAJsiwYCw7AAGhYAAALN+gcAAAKgQIgQYFAUIAAA+zLABaJ25zqCYbAqBwAAArX2FzAQAAOzAAAAEAAAsABQBvJgMAvyYDADgqAQAFKwAABysAADFDAADyIPMgECu+LPMCAm5zAToUAAABAAA7MAAAAQAA7AECAOMRAAATFusB+4VIMAQ=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/59647c6601c9.js b/network-poc/target-native/doc/search.index/59647c6601c9.js deleted file mode 100644 index b40b532..0000000 --- a/network-poc/target-native/doc/search.index/59647c6601c9.js +++ /dev/null @@ -1 +0,0 @@ -rn_("NQFFAAAF7CsJvixjdzQoQSsjLJcsCQAfAQWgkAAAKhl7KKa3rTuggAAAKEsAY2ZscA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/59d858393af0.js b/network-poc/target-native/doc/search.index/59d858393af0.js deleted file mode 100644 index bba88a4..0000000 --- a/network-poc/target-native/doc/search.index/59d858393af0.js +++ /dev/null @@ -1 +0,0 @@ -rn_("oVQAANQsAQMAOjAAAAEAAAAAAAwAEAAAANAg1SsTLDUsSSx8LH0sfiyOLJEskiyqLLAsGwOwQCa5AAGw4CxPAAFhaW9jAISgkAAAKiWgkAAAKDgBGAIBtioAACsCsDAgcQABYmw=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/5a49c1538a88.js b/network-poc/target-native/doc/search.index/5a49c1538a88.js deleted file mode 100644 index 47fcaed..0000000 --- a/network-poc/target-native/doc/search.index/5a49c1538a88.js +++ /dev/null @@ -1 +0,0 @@ -rn_("NQBBAAAFTCozpiCnILUrtiuVAEcAAAX7K2NKKhMAAqBQAAAnRGly9HYUAAABAJcDJBIFAcMAAAEYKgqXLDF0cwCEoOAAACycDCgAAdMdAAAbAqAgAAAg2WVv") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/5ac9088baf65.js b/network-poc/target-native/doc/search.index/5ac9088baf65.js deleted file mode 100644 index 9de8e90..0000000 --- a/network-poc/target-native/doc/search.index/5ac9088baf65.js +++ /dev/null @@ -1 +0,0 @@ -rn_("oVQAANQsAQMAOjAAAAEAAAAAAAwAEAAAANAg1SsTLDUsSSx8LH0sfiyOLJEskiyqLLAsGwOwQCa5AAGw4CxPAAFhaW8xSAAAoiyjLLUstiwFAEUAAAu4LGQNKisCoDAAACy0dHX7AmFlxwEAiKCQAAAqJbCAK0IAoKCAAAAs2aCQAAAoOKAQAAAr0VEYBwG2KgAA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/5b13df19345a.js b/network-poc/target-native/doc/search.index/5b13df19345a.js deleted file mode 100644 index 1f25e31..0000000 --- a/network-poc/target-native/doc/search.index/5b13df19345a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQQAOzAAAAEAABUAAgCQKxQA3SwAAPMEAWgBcSoAAKFLAADFLJMABKBAAAAYEqBAAAAqFWxwcXbzeCUAACEB5AA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/5d5ac8534025.js b/network-poc/target-native/doc/search.index/5d5ac8534025.js deleted file mode 100644 index 00afd35..0000000 --- a/network-poc/target-native/doc/search.index/5d5ac8534025.js +++ /dev/null @@ -1 +0,0 @@ -rn_("oUQAAB8nBQHBAAAFyCuW7itjcxOBAqDAAAAslXB0IwACoFAAACoMY3IByyAAAPsCMmMFAEEAAAQVKnF4JWMAA7AAHf4AATJldgE6AwAA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/5d6fa22ee47d.js b/network-poc/target-native/doc/search.index/5d6fa22ee47d.js deleted file mode 100644 index 49bea29..0000000 --- a/network-poc/target-native/doc/search.index/5d6fa22ee47d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("0UUAAHQn0UIAAP8kBQBBAAAFQytjPifzBAEy0mMqAACeBQBBAAALfixuZBgFAEEAAAt9LG5jGAUAQAAAC3wsbmIYBQBBAAALkixulyAFAEEAAAuRLG6WIPsDMDU49wMAx6AAAAAWBpUUAAHkUxQAAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/5d7da26fa217.js b/network-poc/target-native/doc/search.index/5d7da26fa217.js deleted file mode 100644 index 1d89928..0000000 --- a/network-poc/target-native/doc/search.index/5d7da26fa217.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMAOzAAAAEAAA8ABQCKFAAAux0BAN0dAAAnJQoANygAAAUBQAAABNopADonYXDFJwUARwAABcQsY0gsKwKgQAAAK89vcvMIAWMBnicAAAUBwQAApZkslTYraXP3AACFoBAAABSPAUkI8ksLAAAgGg==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/5e37b7179ebb.js b/network-poc/target-native/doc/search.index/5e37b7179ebb.js deleted file mode 100644 index 8781a52..0000000 --- a/network-poc/target-native/doc/search.index/5e37b7179ebb.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQLAAACSPiqSQCoCQioyNDjzAAFi4jcUAAAjAQKwABQ1AAEyMzowAAABAAAAAAAHABAAAAAxETIRiiCLIOsp7CmdLJ4s") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/5f58eeef92de.js b/network-poc/target-native/doc/search.index/5f58eeef92de.js deleted file mode 100644 index f26998c..0000000 --- a/network-poc/target-native/doc/search.index/5f58eeef92de.js +++ /dev/null @@ -1 +0,0 @@ -rn_("cUMAAPcr+Cv5K/oreCx5LHoseyxDAQOgQAAAJ5N6kM7WuQptc3Q6MAAAAQAAAAAAEAAQAAAAwh3DHcQd9B/1H/Yf9x9FKEYo0CnvKfAp8SlnKkIr4iuVLFFAAAAPGO8f8B/xH/If8x/7Am1uUUEAAHYldyU7J58nFCoaKvsCZWk=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/61127d3c2ee5.js b/network-poc/target-native/doc/search.index/61127d3c2ee5.js deleted file mode 100644 index 7b3dc83..0000000 --- a/network-poc/target-native/doc/search.index/61127d3c2ee5.js +++ /dev/null @@ -1 +0,0 @@ -rn_("lQVAAAAO0ywFfCUGeiYGeyYKHCoE4yBiY2RlZm1jEQUBwAAAkh0mBswnZnYbAqAAAAApz25zBQBDAAAAhCVzZioBAAOgkAAALD6wICD/AAGgQAAAJ5ljaXQ6MAAAAQAAAAAACQAQAAAA5xHoEekR6hHwJyMoJCgmK1QrnCwFAEcAAAXELGNILHFEAABQKFoqQyvPKyYsgSyCLKAs+wJvcvMBAWM6MAAAAQAAAAAABwAQAAAA5B1qJT4nnicdKv4qACvGK5cBAMWwUCVnBl2goAAAKwwCARADOjAAAAEAAAAAACAAEAAAAAEYAhgNGBYYIBi5He4f1yDZIGYmaiY9J0knjCclKEEoRCgPKhcqNSo2KlgqWSpjKmQqZSoBKwIrPCuALMAswSzCLCUAQQAABckrY0AoSCtJK/MBAW/y/iQAACACKwKgcAAAJ8tucwUCwAAACNIpBGEnCDoqYWhyAQQCoHAAACx3sAAmXQTRbXM7MAAAAQAANQAEADYlKgD9KQUA6ioCABErAQD7AmJsvwaHoGAAACeooOAAACwakUwB") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/61629ba95236.js b/network-poc/target-native/doc/search.index/61629ba95236.js deleted file mode 100644 index e3b7acb..0000000 --- a/network-poc/target-native/doc/search.index/61629ba95236.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBHAAAFxCxjSCxxRAAAUChaKkMrzysmLIEsgiygLPsCb3LzAAFjOjAAAAEAAAAAAAcAEAAAAOQdaiU+J54nHSr+KgArxivzAAFk4v4dAAA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/61c05892cebc.js b/network-poc/target-native/doc/search.index/61c05892cebc.js deleted file mode 100644 index ad8502c..0000000 --- a/network-poc/target-native/doc/search.index/61c05892cebc.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABsTAsyAABZQFNKwAABQBEAACowCxzmCyHAQCGsCAkngABoFAAACyGoFAAACteoGAAACsHRQgSOjAAAAEAAAAAAB4AEAAAAHggeSCaIJsgUyZUJlUmViZXJlgmWSZaJlsmTihoKgYrMiszK7ErsivLK80r6SvrK/Er8ivzKy0sRCyfLLcs") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/624a8171324d.js b/network-poc/target-native/doc/search.index/624a8171324d.js deleted file mode 100644 index 88a25d6..0000000 --- a/network-poc/target-native/doc/search.index/624a8171324d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBLAAALuCxkDSoFAcAAAJw5LKh/KmVvAQIAOzAAAAEAAAsAAgDWIAAAviQKACMAhKBwAAAqK6DQAAAsOKAQAAAgbxCBBNJaJwAAeAUARgAACLMscF8nBQHAAAACvSQD1idlbwUBwwAAmNYrBLIscHOxRwAAFiuVAEYAAAI8KHZdJwkDoNAAACw3oRAAACyFoMAAACwDYWxyxz8AiqCgAAArGqAAAAAnmXcwBgGoJgAA+wJlbw==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/625586c467fb.js b/network-poc/target-native/doc/search.index/625586c467fb.js deleted file mode 100644 index bbc063c..0000000 --- a/network-poc/target-native/doc/search.index/625586c467fb.js +++ /dev/null @@ -1 +0,0 @@ -rn_("FQBBAAAVWiqgLGNqJcYrEwMCoFAAACvEMmP0uR0AADUCngd2A9UAQgAABg4sZaInAYICoHAAACv1oVAAACzbbXNDAoagkAAAK8qgYAAAKmKgMAAAJ5egQAAAKEOgIAAAJzqsGADz2iAAAAIEAQDrhaAgAAAnWKBQAAAqRREJCA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/626daa1be4c2.js b/network-poc/target-native/doc/search.index/626daa1be4c2.js deleted file mode 100644 index 0de0de7..0000000 --- a/network-poc/target-native/doc/search.index/626daa1be4c2.js +++ /dev/null @@ -1 +0,0 @@ -rn_("JQNBAAAC7yQFFCy73ivqpitkZmhz4iA1KDkrBQHBAABgWitbK1wrXSu7LLwsvSw2LiyTLKgs2CxiagUBwAAAI+Ag4SAiLAbaK29z64SgUAAAK9EQQAk=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/630b743c04ca.js b/network-poc/target-native/doc/search.index/630b743c04ca.js deleted file mode 100644 index c0b3031..0000000 --- a/network-poc/target-native/doc/search.index/630b743c04ca.js +++ /dev/null @@ -1 +0,0 @@ -rn_("CQKhMAAALN6wMCTwAAFhclUAQAAAp8AscMgnySfKJ84nzyclKyMCAqAwAAAqbmRz9YwgAADbBd4AUwUZACsCoAAAABYBcHn7AmFl") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/654dbeebbfe6.js b/network-poc/target-native/doc/search.index/654dbeebbfe6.js deleted file mode 100644 index 0b7504f..0000000 --- a/network-poc/target-native/doc/search.index/654dbeebbfe6.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBIAAAFgSxj/ioFAEkAAAWgLGPGKysCoBAAACfHaW9jAAOgUAAALMRjZHXyJigAACIEJQJFAACiTysJrywM3SxkaGuPJ8Up0izzgwJlbisCoWAAACzTb3M=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/65825bc6a4c1.js b/network-poc/target-native/doc/search.index/65825bc6a4c1.js deleted file mode 100644 index 124a05d..0000000 --- a/network-poc/target-native/doc/search.index/65825bc6a4c1.js +++ /dev/null @@ -1 +0,0 @@ -rn_("oUsAALssAYICoHAAACv8oVAAACzcbXMTAwKgQAAAKFJmbeJeJgAAMwADoIAAACpgZXN0OzAAAAEAAAcAAwDvJwAAWisDALssAgA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/65bb79da5bec.js b/network-poc/target-native/doc/search.index/65bb79da5bec.js deleted file mode 100644 index ce7a921..0000000 --- a/network-poc/target-native/doc/search.index/65bb79da5bec.js +++ /dev/null @@ -1 +0,0 @@ -rn_("sUQAAN4rAQIBoAAAACbGczswAAABAAA3AAoA7SUqAOwnAADMKQIAuyoAACcrAABSKwAAVisBAP0rAAA5LAEArywAAGsDoCAAACbDZWl0") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/65cb2be7c063.js b/network-poc/target-native/doc/search.index/65cb2be7c063.js deleted file mode 100644 index debbb89..0000000 --- a/network-poc/target-native/doc/search.index/65cb2be7c063.js +++ /dev/null @@ -1 +0,0 @@ -rn_("sUQAAN4rAQIBoAAAACbGczswAAABAAA3AAoA7SUqAOwnAADMKQIAuyoAACcrAABSKwAAVisBAP0rAAA5LAEArywAAPsCaXQBBQA7MAAAAQAAKgABAL8qKgAFAEUAALNaK3DVJysCoBAAACS8aXKxRgAAeyoTAgKgQAAAJ5VpbDswAAABAAAbAAQAxh0BAKUkFgDtKgAA4ysBAPuECQgC") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/65ce0b321fad.js b/network-poc/target-native/doc/search.index/65ce0b321fad.js deleted file mode 100644 index a64a796..0000000 --- a/network-poc/target-native/doc/search.index/65ce0b321fad.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHDAAAFDioDlidjdAUBwAAAkUAqAkwqNGUjAAOwICo+AAGgIAAAKkIyNDjzEycAAMgC3AElAUAAAAEuGADvFTJiTAteC6UsBQHAAAAEQCYFDSdsbQUBQAAAAF4kC30sYm5jGKFRAACJLPMAAXI7MAAAAQAACAAEAIYAAAAXAwAAUCoDAJksAgDXEwDJoBAAACyloBAAAANLoFAAACUfvhCEADowAAABAAAAAAALABAAAAAWABcAUABaAFkLWgvBDdMRNxQ4FAYoByg=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/66d2cde033cf.js b/network-poc/target-native/doc/search.index/66d2cde033cf.js deleted file mode 100644 index efb5c4e..0000000 --- a/network-poc/target-native/doc/search.index/66d2cde033cf.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBDAAAAhCVzZioBAAOgkAAALD6wICD/AAGgQAAAJ5ljaXQ6MAAAAQAAAAAACQAQAAAA5xHoEekR6hHwJyMoJCgmK1QrnCyhQwAA1B0FAEcAAAXELGNILHFEAABQKFoqQyvPKyYsgSyCLKAs+wJvcvMBAWM6MAAAAQAAAAAABwAQAAAA5B1qJT4nnicdKv4qACvGK5cGAMewUCVnBl2wICpFAoWgoAAAKwwCFRADOjAAAAEAAAAAACEAEAAAAGEUARgCGA0YFhggGLkd7h/XINkgZiZqJj0nSSeMJyUoQShEKA8qFyo1KjYqWCpZKmMqZCplKgErAis8K4AswCzBLMIs") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/66d74e010088.js b/network-poc/target-native/doc/search.index/66d74e010088.js deleted file mode 100644 index 38747f1..0000000 --- a/network-poc/target-native/doc/search.index/66d74e010088.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQMAOzAAAAEAAG0BAgCdFAAAbBhsATFFAAB+IH8gsyu0KwUBxQAAAu0qAycrYXMjAQKgYAAAJ/FkaPPgIAAAAQBBCxMAArAgKlYAuGVpAVYDAACVAEAAAJJWJ2liJyMAAqAgAAAmlGRz81wqAAABAIECfwGFoAAAAB3RAKwQ") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/66fb8d247675.js b/network-poc/target-native/doc/search.index/66fb8d247675.js deleted file mode 100644 index 9638051..0000000 --- a/network-poc/target-native/doc/search.index/66fb8d247675.js +++ /dev/null @@ -1 +0,0 @@ -rn_("sUQAAN4rMUEAAOIRkBR2Jr4mAQEBoAAAACbGczswAAABAAA3AAoA7SUqAOwnAADMKQIAuyoAACcrAABSKwAAVisBAP0rAAA5LAEArywAACsCoBAAAB/sb3qnAQCFoCAAACbDoDAAACfuEFEE9aQmAAABAAEAUAMcAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/67496f5d1117.js b/network-poc/target-native/doc/search.index/67496f5d1117.js deleted file mode 100644 index b81d8e6..0000000 --- a/network-poc/target-native/doc/search.index/67496f5d1117.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQcAOzAAAAEAAG0BAgAvJwAAWChsAQEDADswAAABAABsAQEA8CJsAfMAAml0OzAAAAEAAG0BAgB0DQAAzw1sAfMAAWU7MAAAAQAABwADAIEUAACyKgIAICsDAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/677357205927.js b/network-poc/target-native/doc/search.index/677357205927.js deleted file mode 100644 index 2065c3b..0000000 --- a/network-poc/target-native/doc/search.index/677357205927.js +++ /dev/null @@ -1 +0,0 @@ -rn_("VQBAAACnwCxwyCfJJ8onzifPJyUrIwICoDAAACpuZHP1jCAAANsF3gBTBRkAKwKgAAAAFgFweRsCoUAAACzeYWU=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/67efd5f73529.js b/network-poc/target-native/doc/search.index/67efd5f73529.js deleted file mode 100644 index 506cb2a..0000000 --- a/network-poc/target-native/doc/search.index/67efd5f73529.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHCAACgeicC/CplaSMAA6BQAAAoHLAwJwsAAWZydDswAAABAAASAAkAIRgBACUYAABmGAEAAycFAFsnAABWKgAADisAAO4rAQDFLAIA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/692ebfd32aa0.js b/network-poc/target-native/doc/search.index/692ebfd32aa0.js deleted file mode 100644 index 7ea2c1f..0000000 --- a/network-poc/target-native/doc/search.index/692ebfd32aa0.js +++ /dev/null @@ -1 +0,0 @@ -rn_("ZQFAAABVSCg0KzUrxyvQK+AskB0lY3PbHTAnMSeQJ1cogyzNLPMBAXI6MAAAAQAAAAAACgAQAAAAYibFJkMnUydUJ1UnHSgbKvsqOyuELBsCoHAAACnJbHQ=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/698f7ff669b2.js b/network-poc/target-native/doc/search.index/698f7ff669b2.js deleted file mode 100644 index 36e2664..0000000 --- a/network-poc/target-native/doc/search.index/698f7ff669b2.js +++ /dev/null @@ -1 +0,0 @@ -rn_("lQFFAAABCCqmEysxcKAnBQBMAAAFgixjACsBAAA7MAAAAQAAbQECAJ0UAABsGGwB+wJkbhUAQQAAFVoqoCxjaiXGK/MEATIB7h8AAPsDYmVz") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/69c0ac84e1ca.js b/network-poc/target-native/doc/search.index/69c0ac84e1ca.js deleted file mode 100644 index 02cc913..0000000 --- a/network-poc/target-native/doc/search.index/69c0ac84e1ca.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQICoFAAACgcsDAnCwABZnQ7MAAAAQAACgADAAMnBQDuKwEAxSwCANFJAAD0KgEFADswAAABAAAJAAQACicAAAkoAACmKwYAPiwAAAUBwAAAp+8pA3MnbXYFAcAAAAV0JgebJ2xy5wIAh6BQAAAn7bCALDsAAaCwAAAsFDlRAPRHFAAAkQyMA8ABBQHAAACQESwH0ilydLuFoEAAACdhoIAAACo6kQEB") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/6af24fbf6dff.js b/network-poc/target-native/doc/search.index/6af24fbf6dff.js deleted file mode 100644 index 5e59578..0000000 --- a/network-poc/target-native/doc/search.index/6af24fbf6dff.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBAAAAFECdmoCQVAkEAABUGKmwqBg0rFlYqDitjZHB8JsorlQFFAAADJSwUhSzMLGlt2yz7AmNllQBEAAAF+ytjSiohQwAAOBg5GOUd8wACbnUBuyYAAHuEoAAAACU0IAFE") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/6b1ea7870354.js b/network-poc/target-native/doc/search.index/6b1ea7870354.js deleted file mode 100644 index 3a78767..0000000 --- a/network-poc/target-native/doc/search.index/6b1ea7870354.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAAzKiczKNcpbSpZ6SvrK/Er8ivzK7csb3IFAcUAAAaNLAQ/LGZsAQQAOzAAAAEAAAoAAgB+JQIAIicHAAUBxgAABOcrDcssbHMFAcAAAAitLGVLJ0wnLCgtKC4oLyh/LG1uAQUAOzAAAAEAABEABgB9JgMAgicJAAcqAAA6KwAAGiwAAEMsAADzAIY0EAbi5BEAAA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/6b5c8ad8f0ec.js b/network-poc/target-native/doc/search.index/6b5c8ad8f0ec.js deleted file mode 100644 index 1b7274d..0000000 --- a/network-poc/target-native/doc/search.index/6b5c8ad8f0ec.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAACNSVAKycsJ08oTSpOKmRnpQBCAAALsCxuoSYhQgAAaSafJqAm84ICbnaPAQWgAAAAC0+gAAAAC1CgAAAAC1EwMTJlbg==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/6c023216f882.js b/network-poc/target-native/doc/search.index/6c023216f882.js deleted file mode 100644 index c16564e..0000000 --- a/network-poc/target-native/doc/search.index/6c023216f882.js +++ /dev/null @@ -1 +0,0 @@ -rn_("oUUAAKQmAQACoCAAACsPoQAAACzYaXfz0CcAAAEA5AIJABcYAAugMAAAJGVfWO7vkt6wMB3BBqWgYAAAKyigEAAAFHWgYAAAJ1mggAAAKcmwECTtAAEAY2RobW5wc3R1dvQuEQAAphaFA6kA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/6c49458364a2.js b/network-poc/target-native/doc/search.index/6c49458364a2.js deleted file mode 100644 index f30116b..0000000 --- a/network-poc/target-native/doc/search.index/6c49458364a2.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAACq/ysOpSxibAUBwAAAEzMobSoZ6yu3LG9yBQHAAAAIrSwFfyxtbiFFAAAHKhosQyzzgwNjZXT7AnN0pQBBAAALEyxuUBRrA6AAAAAoSTJnaQ==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/6d03d2ab67a3.js b/network-poc/target-native/doc/search.index/6d03d2ab67a3.js deleted file mode 100644 index 45cdf85..0000000 --- a/network-poc/target-native/doc/search.index/6d03d2ab67a3.js +++ /dev/null @@ -1 +0,0 @@ -rn_("lQFEAACoBiynCSxhZysmJQBCAAABLStvFxgYGHcsBQBEAAAoPSs+KwUscN8sBQHDAAAIriwN0ixhY/8AxaDAAAAsgwAgZAETAAKwgCs2AAFpbTswAAABAAA3AAQA2hECAGwUAgCmFAAAuRQwAFFFAABIKDQrNSvHK9Ar4CwFAEgAAAXgLGPNLPMQAXPihywAADMAA7AAJR0AAWFjc/fbHQAAVQkBAF8AxwAsBEoAEwADoAAAABX6oAAAABSLcnN0OjAAAAEAAAAAAAwAEAAAANURYibFJkMnUydUJ1UnHShKKBsq+yo7K4QsYwADsPAr9gDNYWV0AY8UAAA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/6d9eec2ba2da.js b/network-poc/target-native/doc/search.index/6d9eec2ba2da.js deleted file mode 100644 index aa6fb4f..0000000 --- a/network-poc/target-native/doc/search.index/6d9eec2ba2da.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQIAOzAAAAEAAAwABQDfIAAARiYIAI4nAABfKgAA6isAABsCsAAoKwOYZnYrA6BgAAArt6AQAAAdz2RucgUBxgAACSUsAcorY2UBAwGgAAAAJjBz6vIkAAAFAcEAAAJ8JgA0JWl5BQBAAAAG3CtwLyalAEAAAARUKnBhJWsDoGAAACc7bW5zQUUAANYm1ybYJtEpDCuxQQAAUCqlAEAAABIgKugrMv8rKwKgMAAALKU0NvcFAMeggAAAK15FRAQB0k4UAABLBQBBAAAzJywoLE8sUCxw0ynfAYegYAAAK92g0AAALAKwECoEAPmDSAk=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/6da659281962.js b/network-poc/target-native/doc/search.index/6da659281962.js deleted file mode 100644 index 57d874f..0000000 --- a/network-poc/target-native/doc/search.index/6da659281962.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQPAAAAJ+ioI2isJLisCXiticHZ5QwADoCAAACc2oJAAACylbHB0OjAAAAEAAAAAAAsAEAAAAIENORE6ETsRYxS/IMAgwSDRIEAmxyY3LCsDoAAAACfMoCAAABFuYmVt") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/6f2d8426fc82.js b/network-poc/target-native/doc/search.index/6f2d8426fc82.js deleted file mode 100644 index 7f01598..0000000 --- a/network-poc/target-native/doc/search.index/6f2d8426fc82.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAADCScFqSxkbKFOAADFLAEDADswAAABAADsAQIAnxQAAMUb6wGhRwAACSwBAgA7MAAAAQAA7AECAJ4UAADZGesBKwKwQCwMAAFhcgUBQgAAJUUoRiiVLALSK2VxHiqhSAAABiz3BwCJsMAsEQABoDAAACokcaUC9CsmAAABAEcBogI=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/6f997431b3b6.js b/network-poc/target-native/doc/search.index/6f997431b3b6.js deleted file mode 100644 index 444c76f..0000000 --- a/network-poc/target-native/doc/search.index/6f997431b3b6.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBEAACowCxzmCwjAYSgUAAALIagAAAAK02gYAAAKwcECBI6MAAAAQAAAAAAGAAQAAAAUyZUJlUmViZXJlgmWSZaJlsmTihoKgYrMiszK8srzSvpK+sr8SvyK/MrLSxELJ8stywTggKggAAALN9ldSsCoAAAABSjZm8=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/6fb80132df86.js b/network-poc/target-native/doc/search.index/6fb80132df86.js deleted file mode 100644 index f994ab1..0000000 --- a/network-poc/target-native/doc/search.index/6fb80132df86.js +++ /dev/null @@ -1 +0,0 @@ -rn_("CQIZRhO1+imgUAAAK0BscwUASgAABJgsbM0rBQHHAAAIriwN0ixhYysCoEAAAChKb3X7Am108wABZ/IjGAAAgQgBAAGhAAAALKd083QUAADKEwEA+wJjbgUCwAAAk54kEBkYQyoCsyxyc3QxQwAAWCpZKmQqZSqVAEAAAATZIGJCEfsCYWwFAcYAAAEYKgqXLDF0BQHDAAAFDioDlidjdPMAAXIB0xEAADUAQQAAljgqd08YUBgpKyorcwDHsFAlcQSHoGAAACZsoAAAACCjoNAAACymhgUAoDowAAABAAAAAAAHABAAAACCDYMNPBE9ET4R1xHjKeQp9wIAh6AwAAAoUqBQAAAmdhPBBDowAAABAAAAAAAHABAAAAB1ABEDEgN+IH8gsyu0K9gr") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/724b0ae7a9e9.js b/network-poc/target-native/doc/search.index/724b0ae7a9e9.js deleted file mode 100644 index bd7b1eb..0000000 --- a/network-poc/target-native/doc/search.index/724b0ae7a9e9.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAAYECu+LAOaJmVpIwACsFAmZAWIY3c6MAAAAQAAAAAACgAQAAAAwRGaFNsgMyc0KAgqCSoYKkErIyyXLCUBQAAAAF4Uku4iMnZfEWAREicFAEAAAABzFDLDDQUBQAAAC3wsAr0gbnhiGDUAQAAAEiAq6Csywg3/KwAsASwFAcAAAAIuGAC3KzZiBQBAAAALkixulyAzAASgIAAAJsygAAAAGGgyM2Jt43gLAAAFAcAAAAKlLAByFDM0BQBAAAAA2yliwQ0lAEAAAAREKmIQAxUDXAsFAEEAAAEtGDJvFAUAQAAAC5EsbpYgOwOgAAAAIK8xMm0BAA4tiJljG/WgIAAAIK8zQ5qQKwoqdXm21v0NLPjUzakQDUTMUvU1PatO9zh0U807+8FrrQjIgDsWCCd2TUIeljV8Q/WgEAAAA0mgsAAALJGgAAAAKkwwMTIzNDU2ODliZGdudDowAAABAAAAAAASABAAAAAOABIAEwBOAFYAVwBgAGsAUAt3C3sLfAtcEfQVliDuIu8ilybEJw==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/734dbb06f35b.js b/network-poc/target-native/doc/search.index/734dbb06f35b.js deleted file mode 100644 index d5448cb..0000000 --- a/network-poc/target-native/doc/search.index/734dbb06f35b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBHAAAC0itxHiqhXAAA4SwrAqCgAAAr0XBz+wJlb6FTAADFLPsCcXIlAEEAABNbKswrcO0dWyrMKwGCAqEwAAAsuqBgAAAsOGlvQwADoIAAACu3oBAAABSbY29yAV4RAAAFAcIAAKB6JwL8KmVp8wEBcvUhGAAAAQBEAAEA9A5rA7AwHdgAAWNudKFGAAATKwUBwAAABkcqFJon7SlhZUcCAMiwECoIAAGgAAAAGGWgMAAAINWgEAAAKy2wMCV5AMagAAAAHdABCLwBOjAAAAEAAAAAAA0AEAAAAGUR3RFXFFgUFxgYGGEYhSWEJoUmoCehJ04rdyz7hBABSA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/747f70bf39d2.js b/network-poc/target-native/doc/search.index/747f70bf39d2.js deleted file mode 100644 index 47b1d51..0000000 --- a/network-poc/target-native/doc/search.index/747f70bf39d2.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQABoMAAACzLZTswAAABAAAJAAQAHCYAANkmAAB2KgMAFisDAIMChKCgAAArAqBAAAAr56CAAAAsziAYAgGNLAAAVQFFAAAKzywJyixtbmcnaCdpJ2onaycrKxsDoCAAACd9sGAsEQABZWtuwwCEoBAAACCVoGAAACvRAIQMAXMgAADBSQAAGywFAcAAAJc+KAHPJHJ1oUQAAOgnAQEBoRAAACzRcAGJFAAA+wJlbwEGADswAAABAAAZAAEAqicZAAUBwAAAAHQgFRMqvSpudAUBSAAABfQrD84sY2Y3KkcfAMmgAAAAFfSgAAAAFfWwABhMAAHDQDkAOzAAAAEAAA8ABQDMEQYAPxQCAHQmAAC5JgEAUygCAKUCQQAABj8nBkAnCmMqZGVyWRQjAAKwcCpcAAFjZfIvAwAAjiEFAcMAAATyKZXzKW1uMUIAAGwgbSBuIEcr8wABaTswAAABAABPAAgA+xUAAIUgAgDeJAAAYScAAGArLgCQKxQASiwEAN0sAAABAgA7MAAAAQAACgADAD0YCABGKgAACysAAAUBwAAARr4qKSwqLCssLCwM0ixocmcIAIiggAAALK6wECXrAAGgIAAAFIigEAAAIIGwQChMAAEdFQI6MAAAAQAAAAAACQAQAAAANQNKB0kUShRmFMEdZiSXJzIoxStvFsqgEAAAJiWgQAAAJ+0KsZp2C4igkAAAKxqhIAAALN4AA48L") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/7582f9ef2362.js b/network-poc/target-native/doc/search.index/7582f9ef2362.js deleted file mode 100644 index 61a760f..0000000 --- a/network-poc/target-native/doc/search.index/7582f9ef2362.js +++ /dev/null @@ -1 +0,0 @@ -rn_("0UgAAP0pAQEAOzAAAAEAAOwBAgDjEQAAExbrAVMAA6AAAAAlhGlzdjowAAABAAAAAAA4ABAAAAB1DXYNdw14DXkNeg17DSsRLBEtERwYHRgeGIIggyCYIJkg3iDXJNgk2STaJNskQSZQJlEmUibrJgsnDCctJ4EnjSeWJ5gnmyc4KDso3yngKeEp4ikKKhMqHypmKroqvSpeK/cr+Cv5K/oreCx5LHoseywbA6AwAAAYErCwLBEAAWVvcg==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/763a52e41447.js b/network-poc/target-native/doc/search.index/763a52e41447.js deleted file mode 100644 index 2fc407a..0000000 --- a/network-poc/target-native/doc/search.index/763a52e41447.js +++ /dev/null @@ -1 +0,0 @@ -rn_("FQFAAAAA+hUAixRzdNURSigjgQKw8Cv2AM1hZQUBwAAAA7crBiQqMWUVAUAAAJLnJRKLJeklbHShJJwmBQHAAAABPCiXEStpbwUBwAAACFMr2i8scHQBggKgcAAAK/WhUAAALNttc0MEhqCQAAAryqBgAAAqYqAwAAAnl6BAAAAoQ6AgAAAnOqwYAPPaIAAAAgQBABUBRAAAA24qUMgnySfKJ84nzyclK2RzZyaxLAUAQQAABTErYy4nIUkAAFIrVitXKyFFAADGKccpyymVAEYAAAnXLGUeKyFFAAAyJzQnNScVAEEAABUmLIIsYx0qACsTBAKgAAAAKyYyc9JmJgAABAUBwAAACo8szEoscnQBABGgEAAAJxKwACUlAAGgEAAAJxOgEAAAJxR/IRLOwdRTrZaDHIsLHptOMl850czDrd6gkAAALNdt1Qfml3lMUSgkk1gqNzJHWQpiUFyH8fawQCecAAFIGtECX/9w0S0hrBRYeqBJF5gxMjM3YWJjZGVmaGtsbW5zdjswAAABAABEABsAZxQEAHkUBwCyFAYA7xQEAKggAADJJAIAZSUBAGglAAB1JQAAeiUBAIIlAQBgJgEAeiYBAMkmAQAZJwMAPCcAAD8nAQBLJwEAUScBAF0nAQACKAEALCgDAPMpAQALKgAAYioAAB4rAQB/LAAAsUYAAG8mwUMAANck0UQAAPQqB6IAzKBgAAAnYKBQAAAspKDAAAAr26CgAAAqEaCQAAAqu6CAAAAsq6CAAAAqO4AR1CcQAaBgAAAmboBtDBs7MAAAAQAAbwAZAIUNMABGEQgAihQAAKwUBQC7HQEAvh0AAN0dAADjIAAAJyUKAH4lAgAiJwcAkicBAJwnAQDWJwAANygAAEIoAABMKAEAUigAAOUpAwAFKgAAVyoAAM4rAACFLAAAliwAAMwsAAAFAEQAAABaJ3OoJgUARAAAkZUmOfUdBQBCAAAAnCZziiUFAcMAAAEzJwojLDF0owDGoIAAACzeoDAAACVroDAAACnKoKAAACsBAgGyAPV4FAAAdAABAAEAWBKVAEAAAJJWJ2liJyMCAqAgAAAmlGRz81wqAAABAIECGwKwMCabAAxvefUdAMkAAwYHCKCgAAArVQwaG4BRogk7MAAAAQAALgAJAPgTEwAcFBAAjRQBAKQUAQBaGAEA1CAAAGUkAACKJQAAISoAAAUAQQAAKD0rPisFLHDfLPEAAwABHmFldfPTJAAAxwJTAg==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/7675e889d35e.js b/network-poc/target-native/doc/search.index/7675e889d35e.js deleted file mode 100644 index 9292928..0000000 --- a/network-poc/target-native/doc/search.index/7675e889d35e.js +++ /dev/null @@ -1 +0,0 @@ -rn_("sUYAAG8mwUMAANck0UQAAPQqB6IAzKBgAAAnYKBQAAAspKDAAAAr26CgAAAqEaCQAAAqu6CAAAAsq6CAAAAqO4AR1CcQAaBgAAAmboBtDBs7MAAAAQAAbwAZAIUNMABGEQgAihQAAKwUBQC7HQEAvh0AAN0dAADjIAAAJyUKAH4lAgAiJwcAkicBAJwnAQDWJwAANygAAEIoAABMKAEAUigAAOUpAwAFKgAAVyoAAM4rAACFLAAAliwAAMwsAAA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/76ce112e7bfe.js b/network-poc/target-native/doc/search.index/76ce112e7bfe.js deleted file mode 100644 index 5a82507..0000000 --- a/network-poc/target-native/doc/search.index/76ce112e7bfe.js +++ /dev/null @@ -1 +0,0 @@ -rn_("ZQBBAADULCpz6hTmHecd6B3pHeodayAFA0EAAAPTHTTXIEEoDyqALAEEFpDWK2FiZXMSGDFBAAB2IHcgryuwK3uEoGAAACZrBCAG") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/76e927cfdbad.js b/network-poc/target-native/doc/search.index/76e927cfdbad.js deleted file mode 100644 index 033e4b3..0000000 --- a/network-poc/target-native/doc/search.index/76e927cfdbad.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQPAAAABjBQFLScC0ywUEyq9KmVodHkFAcAAAADTJDBPEVAR5hFUKmRyBQFAAAAQ4BEkGAhOK2dwdCChWAAA1CwrAqBgAAAqT2hpBQRAAAABERYExyYFXCeY1isEsixlbG1wc5AsBQHAAAAFGSoEuCxldZUBQAAAFYEnCioQBBhuJmN0QhQBAwKhgAAALOSwACDdBYtmcjswAAABAABgAAQA3B0AAJwgBgBpJQAAjCVXAPsCbG7/DoigoAAAKk9LcAQ=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/772250ab033f.js b/network-poc/target-native/doc/search.index/772250ab033f.js deleted file mode 100644 index d9feefb..0000000 --- a/network-poc/target-native/doc/search.index/772250ab033f.js +++ /dev/null @@ -1 +0,0 @@ -rn_("NQBAAACSVidpbCZiJ2MnlCdBQAAApCalJqYm9ikSKrUBQgAADasskDIlbXPfHaFDAAB/KgEAADswAAABAAAyAAUAhiYLAKkmDgDaJhAAWCsAAC8sBQD7A2RuevMBAmlz9cAdAAAaAHEKzgEnAWMAA6AgAAAmlGRlc/RcKgAAAQAyAU8B") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/77cd7efc9862.js b/network-poc/target-native/doc/search.index/77cd7efc9862.js deleted file mode 100644 index b6871a7..0000000 --- a/network-poc/target-native/doc/search.index/77cd7efc9862.js +++ /dev/null @@ -1 +0,0 @@ -rn_("JQBBAAAF8CtjNihvKnAq8wABduJIKgAABQHAAAAIrSwFfyxtbiOFA6BQAAAsQ6CgAAAst2NldAUCwwAABeorCZQsCp8sY2V0wwYEoFAAACpVoEAAACoFY210duKSJgAA+wJlZw==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/79c7334fa59b.js b/network-poc/target-native/doc/search.index/79c7334fa59b.js deleted file mode 100644 index 54d28d5..0000000 --- a/network-poc/target-native/doc/search.index/79c7334fa59b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBAAAAFjytwLSYFAcAAAACPKwkyKGtuBQHAAAABOicjux28HTcobG8FAcAAABO6HUMoDsUrYW0BggKwcCgxA8ShUAAALNttcwGBAqBwAAArOaEwAAAszGxxBQHAAAAIOCsFCyptbocgAYqggAAAKv+gwAAALCKhgAAALNqgsAAAK+2gQAAAJ5GgQAAAJ5KgcAAAKlegUAAAKDUdeQLi/B0AAAGCAqBwAAAr/KFQAAAs3G1zUwADoEAAAChSZm124l4mAAABAI5JD7y1y9agkAAAK8qgYAAAKmKgYAAAJWZOFKWkFPSgMAAAJ5eg8AAALNBFLt3xUD9JTj4eoGcA+JoJXb6gIAAAJ8wWu8I/PC6wECTwAAGwICDeBWO9WUc6MAAAAQAAAAAACAAQAAAAUANRA3EgciDaIGIkYyTcJN0k") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/7a605c9071a4.js b/network-poc/target-native/doc/search.index/7a605c9071a4.js deleted file mode 100644 index 12655e6..0000000 --- a/network-poc/target-native/doc/search.index/7a605c9071a4.js +++ /dev/null @@ -1 +0,0 @@ -rn_("CQOhMAAALLqgcAAAKmOwYCw4AAlpbm8FAEoAAASYLGzNKwUBxwAACK4sDdIsYWMrAqBAAAAoSm9184ICbXQxRAAAWCpZKmQqZSoFAccAAAEYKgqXLDF0c4GEoFAAACZ2AwEE+wJhcw==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/7a90ced6b90a.js b/network-poc/target-native/doc/search.index/7a90ced6b90a.js deleted file mode 100644 index ddc8b44..0000000 --- a/network-poc/target-native/doc/search.index/7a90ced6b90a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("IUIAAM0n2yuMLPMAAWk7MAAAAQAAPQALAMwgAQBnJAQA7ikAADgrAAC4KwoANiwAAFQsIQCULAAArSwAANEsAADULAMA") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/7b28a6b7ad3b.js b/network-poc/target-native/doc/search.index/7b28a6b7ad3b.js deleted file mode 100644 index 11ef533..0000000 --- a/network-poc/target-native/doc/search.index/7b28a6b7ad3b.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBEAACowCxzmCwjBYSgUAAALIagAAAAK02gYAAAKwcECBI6MAAAAQAAAAAAGAAQAAAAUyZUJlUmViZXJlgmWSZaJlsmTihoKgYrMiszK8srzSvpK+sr8SvyK/MrLSxELJ8styw=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/7c60059e91cb.js b/network-poc/target-native/doc/search.index/7c60059e91cb.js deleted file mode 100644 index 705b2a2..0000000 --- a/network-poc/target-native/doc/search.index/7c60059e91cb.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQHAAAAE+ioF0yxpckUARAAAs1orcNUnaSpqKmsqCisxQgAAfiB/ILMrtCv7AmVvBQHAAAAC/isC1ilpdAUARwAABaAsY8YrBQHAAACUtyoEuSphZWcBAIWg4AAALLmgYAAALEIBqAI7MAAAAQAABgACAB4oBAAvKwEAKwKgQAAAJepmdwUBQQAAAfQdC00rbnTXEwUARAAABaQsY84rMUsAAKIsoyy1LLYs84ICYW0rAqBAAAAqF2JpAQABoAAAACcJczswAAABAAAXAAgA9xQAALwkAAA1JQAAxicBAPUnDADGKQEAyykAAE8rAgCrhKAgAAAV86CQAAAsuAQQBkFBAAA2EcgmfyqAKoEq8wCGEEkR94IAAACpAkoRtAMBAAEANBM=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/7c667988149a.js b/network-poc/target-native/doc/search.index/7c667988149a.js deleted file mode 100644 index cd84ebc..0000000 --- a/network-poc/target-native/doc/search.index/7c667988149a.js +++ /dev/null @@ -1 +0,0 @@ -rn_("QUAAAKQmpSamJvYpEiq1AUIAAA2rLJAyJW1z3x2hQwAAfyoBAAA7MAAAAQAAMgAFAIYmCwCpJg4A2iYQAFgrAAAvLAUA+wNkbnrzAAJpc/XAHQAAGgBxCs4BJwE=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/7db221802359.js b/network-poc/target-native/doc/search.index/7db221802359.js deleted file mode 100644 index 5cc82e8..0000000 --- a/network-poc/target-native/doc/search.index/7db221802359.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQAAOzAAAAEAAAsABQBvJgMAvyYDADgqAQAFKwAABysAADFDAADyIPMgECu+LFMAA6BAAAAqT25ycwE6FAAAKwKwkCopAAFmdA==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/7e5616080d42.js b/network-poc/target-native/doc/search.index/7e5616080d42.js deleted file mode 100644 index 30fe988..0000000 --- a/network-poc/target-native/doc/search.index/7e5616080d42.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AQGEoSAAACzZsCAqJgABsDAqdAABoMAAACyoAVEA41wYAAAFAEIAAAD6KnOaJvsCZHQrA7CAKxABrqBQAAAs02Vpcg==") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/7eb4b53d3b0d.js b/network-poc/target-native/doc/search.index/7eb4b53d3b0d.js deleted file mode 100644 index ab82851..0000000 --- a/network-poc/target-native/doc/search.index/7eb4b53d3b0d.js +++ /dev/null @@ -1 +0,0 @@ -rn_("BQBCAAAEFSpxeCUFAUgAAArPLAnKLG1uKyszgQOggAAALD1ha3A1AEAAAAXTK2VPFKUg1CT8KiFEAACFLJYszCwFAcAAAABNJ6ZEK251hwQAiKAwAAAnWKBQAAArBKBgAAArCqCQAAAr1KAwAAAsJaEQAAAstG4REDswAAABAAAgAA0AxSADAPQgBgCiJAEA7SYBAPcpAAAlKgAAeyoDAAgrAQAgLAEAoSwCALUsAQDbLAEA5CwAADMAA6CAAAAsrG5zdPf4HwAAggCMBAEASAXLAI0BVQBBAAAGRyhryBHJETQUGhgbGLQsBQBMAAAFhixjBiv7BGFub3Y=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/7fddf759d90c.js b/network-poc/target-native/doc/search.index/7fddf759d90c.js deleted file mode 100644 index 356e1a9..0000000 --- a/network-poc/target-native/doc/search.index/7fddf759d90c.js +++ /dev/null @@ -1 +0,0 @@ -rn_("AYOEoSAAACzZsCAqJgABsDAqdAABoMAAACyoAVEAAQABoCAAACa9ZTswAAABAABqAAEA+R9qAJUAQwAACeQsYXIqBQHAAAAE0icIWSttbgEFAaEAAAAs2Hfz0CcAAAEA5AIFAcAAAAK7JgCdJGl0Zy0AiqAQAAAknKDAAAAsNqAwAAAmvKEAAAAssTyhHDswAAABAAD6AAUA+BT2ANAkAACBJQAAuCYAAMgpAAA=") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/7ff3c9c0ece2.js b/network-poc/target-native/doc/search.index/7ff3c9c0ece2.js deleted file mode 100644 index a1b7d64..0000000 --- a/network-poc/target-native/doc/search.index/7ff3c9c0ece2.js +++ /dev/null @@ -1 +0,0 @@ -rn_("ZQFFAAAOuSwGQixhcB4oHyggKCEoIigvKzArcUMAAPcr+Cv5K/oreCx5LHoseyyHAQCFoEAAACeToEAAACynepDO1rkKABAXOjAAAAEAAAAAABUAEAAAAIgUwh3DHcQd9B/1H/Yf9x8dJ0UoRijQKe8p8CnxKWcqEysUKxUrQiviK5Us") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/alias/a762150c532c.js b/network-poc/target-native/doc/search.index/alias/a762150c532c.js deleted file mode 100644 index f829e46..0000000 --- a/network-poc/target-native/doc/search.index/alias/a762150c532c.js +++ /dev/null @@ -1 +0,0 @@ -rd_("") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/crateNames/d1aefd4adb86.js b/network-poc/target-native/doc/search.index/crateNames/d1aefd4adb86.js deleted file mode 100644 index 0497c56..0000000 --- a/network-poc/target-native/doc/search.index/crateNames/d1aefd4adb86.js +++ /dev/null @@ -1 +0,0 @@ -rd_("Accandle_transformers") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/desc/17136882dd08.js b/network-poc/target-native/doc/search.index/desc/17136882dd08.js deleted file mode 100644 index 0433651..0000000 --- a/network-poc/target-native/doc/search.index/desc/17136882dd08.js +++ /dev/null @@ -1 +0,0 @@ -rd_("AhT5 model implementation.AhYi model implementation.CfImplementation of the Descript Audio Codec (DAC) modelCeThe epsilon to be used in the group normalization \xe2\x80\xa6BmThe amount of noise to be added at each step.BnIntersection over union of two bounding boxes.CkModule implementing the MPT (Multi-Purpose Transformer) \xe2\x80\xa6CmCreates a new EulerAncestral Discrete scheduler given the \xe2\x80\xa6BbMicrosoft Phi model implementationBfVariational Auto-Encoder (VAE) Models.AlVGG-16 model implementation.BhVision Transformer (ViT) implementation.B`A bounding box around an object.BhBased on the BEIT vision-language model.CdBERT (Bidirectional Encoder Representations from \xe2\x80\xa6CaBased on the BLIP paper from Salesforce Research.BgContrastive Language-Image Pre-Training0BcDenoising Diffusion Implicit ModelsAoEVA-2 inference implementation.kFlux ModelAoReturns the argument unchanged.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AoGLM-4 inference implementation.BaCalls U::from(self).00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000jmimi modelBiOLMo (Open Language Model) implementationBdMicrosoft Phi-3 model implementationBjPerforms a backward step during inference.0EhTopk in the last dim. values retains a gradient but indices\xe2\x80\xa6BlBased from the Stanford Hazy Research group.AoGemma inference implementation.BmHiera inference implementation based on timm.AoLlama inference implementation.CfThe LLaVA (Large Language and Vision Assistant) model.AoMamba inference implementation.CgMix of Multi-scale Dilated and Traditional ConvolutionsCeQwen2 model implementation with quantization support.AkTrOCR model implementation.AkApply penalty and repeat_kvc\xe2\x80\xa6AeLinear interpolation.BcTakes as input some sampled values.CgImplementation of the DINOv2 models from Meta Research.BmReturns the distribution in the latent space.BnFalcon language model inference implementationCiGemma LLM architecture (Google) inference implementation.0CcThe number of groups to use in group normalization.B`Helium inference implementation.BaMarian Neural Machine TranslationCgCandle implementations for various deep learning modelsAoRepVGG inference implementationAeResNet ImplementationAfResNet Building BlocksAlSiglip model implementation.oUniPC SchedulerCkBigCode implementation in Rust based on the GPT-BigCode \xe2\x80\xa6CcImplementation of the ChatGLM2/3 models from THUDM.C`Colpali Model for text/image similarity scoring.CcEnCodec neural audio codec based on the Encodec \xe2\x80\xa6BnFastViT inference implementation based on timmCeGranite is a Long Context Transformer Language Model.C`Mixtral Model, based on the Mistral architectureClMixtral Model, a sparse mixture of expert model based on \xe2\x80\xa6BcPixtral Language-Image Pre-TrainingAmRWKV v5 model implementation.AmRWKV v6 model implementation.Ah2D UNet Denoising ModelsAlWhisper Model ImplementationCnAn enum variant representing the Embedding head dimensions \xe2\x80\xa6C`Timesteps will be separated by regular intervalsBiThe value of beta at the end of training.00AhConvNeXt implementation.CbNote that the returned tensor uses the CPU device.B`Llama2 inference implementation.BlOpen Contrastive Language-Image Pre-TrainingAjCreates a ResNet-18 model.AjCreates a ResNet-34 model.CgThis trait represents a scheduler for the diffusion \xe2\x80\xa6AoAttention Based Building BlocksBlImplementation of BLIP text encoder/decoder.AiConvMixer implementation.CgConfigure the UNIC corrector. By default it is disabledBaJinaBERT inference implementationAjMetaVoice Studio ML ModelsBjMixFormer (Microsoft\xe2\x80\x99s Phi Architecture)iMobileOneAnMoonDream Model vision-to-textChMultimodal multi-purpose model combining Gemma-based \xe2\x80\xa6oPersimmon ModelCkQwen2 model implementation with Mixture of Experts support.CmRepeats a key or value tensor for grouped query attention \xe2\x80\xa6ClSegformer model implementation for semantic segmentation \xe2\x80\xa6AnStableLM model implementation.c\xe2\x80\xa6CgTimesteps will be determined by interpolation of sigmasBoThe value of beta at the beginning of training.0C`The value of beta at the beginning of training.nChImplementation of the DINOv2 revision (4 regularization)CjImplementation of DistilBert, a distilled version of BERT.AmLogit Processing and SamplingCmMobile CLIP model, combining a lightweight vision encoder \xe2\x80\xa6jModernBERTkNV-Embed-v2CmParler Model implementation for parler_tts text-to-speech \xe2\x80\xa6AnDiffusion pipelines and modelsCiStarCoder model implementation with quantization support.BoChinese contrastive Language-Image Pre-TrainingBgContrastive Language-Image Pre-TrainingCkText encoder as used in most OpenCLIP pretrained models \xe2\x80\xa6BdW\xc3\xbcrstchen Efficient Diffusion ModelCmOption to predicted sample between -1 and 1 for numerical \xe2\x80\xa6lMobileNet-v4CmThis represents how beta ranges from its minimum value to \xe2\x80\xa6C`Linear interpolation of the square root of beta.7CbCodeGeeX4 - A multi-language code generation modelClImplementation of EfficientBert, an efficient variant of \xe2\x80\xa6CkEfficientViT (MSRA) inference implementation based on timm.BnSame as forward pass but normalizes the outputEcshift is a triple (image_seq_len, base_shift, max_shift).CjInitialize a new `stella_en_1.5B_v5`` model with given \xe2\x80\xa6BmInitialize new stella_en_400M_v5ClThe number of output channels, defaults to the number of \xe2\x80\xa6BgUtilities for quanitized network layersCbT5 model implementation with quantization support.DaThe solver order which can be 1 or higher. It is \xe2\x80\xa6AoStella v5 model implementation.CkAdjust the indexes of the inference schedule by this value.0CnWhether to use the \xe2\x80\x9cdynamic thresholding\xe2\x80\x9d method. This \xe2\x80\xa6BoChinese contrastive Language-Image Pre-TrainingBgContrastive Language-Image Pre-TrainingAcThe DDIM scheduler.BaHow beta evolved during training.00BcQuantized MPT model implementation.CdPhi2 model implementation with quantization support.EhTopk in the last dim. values retains a gradient but indices\xe2\x80\xa6CmOption to clip the variance used when adding noise to the \xe2\x80\xa6CdBLIP model implementation with quantization support.CdPhi3 model implementation with quantization support.C`Determines how sigma relates to a given timestepAg2D UNet Building BlocksE`When None no cross-attn is used, when Some(d) then \xe2\x80\xa6AeGlide cosine scheduleBlTime step spacing for the diffusion process.Djprediction type of the scheduler function, one of epsilon \xe2\x80\xa6Biprediction type of the scheduler function1BiPrediction type of the scheduler functionBeQuantized llama model implementation.CeQwen2 model implementation with quantization support.BdRecurrent Gemma model implementationCanumber of diffusion steps used to train the modelCbnumber of diffusion steps used to train the model.1CkWhether to use a 2D convolution in the skip connection. \xe2\x80\xa6B`Llama2 inference implementation.AoBounding Boxes and IntersectionBmThe threshold value for dynamic thresholding.AlSegment Anything Model (SAM)A`Stable DiffusionBktime step spacing for the diffusion process0CeImplementation of the Depth Anything model from FAIR.CfWhether to use lower-order solvers in the final steps.CgMistral model implementation with quantization support.CgRWKV v5 model implementation with quantization support.CgRWKV v6 model implementation with quantization support.CkEnsures interchangeability with schedulers that need to \xe2\x80\xa6000AeDetermines the pointsBfQuantized Llama2 model implementation.AoA CLIP transformer based model.0BiThe configuration for the DDIM scheduler.BaConfiguration for a ResNet block.CeThe final output is scaled by dividing by this value.BjQuantized BLIP text module implementation.BiQuantized MetaVoice model implementation.CkModule containing quantized MixFormer model implementation.CkImplementation of a quantized Moondream vision language \xe2\x80\xa6BmModule for quantized StableLM implementation.BeConfiguration for an attention block.E`Type of position embedding. Choose one of "absolute", \xe2\x80\xa6lreferer: \xe2\x80\xa6greferer0BaVarbuilder for Loading gguf filesCiGenerate the mask and IOU predictions from some image \xe2\x80\xa6BlA text transformer as used in CLIP variants.BkAncestral sampling with Euler method steps.CjRecurrent Gemma model implementation with quantization \xe2\x80\xa6CmThe ratio for the dynamic thresholding method. Valid only \xe2\x80\xa6BfThe EulerAncestral Discrete scheduler.CeThe configuration for the EulerAncestral Discrete \xe2\x80\xa6") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/entry/66a1183eb08f.js b/network-poc/target-native/doc/search.index/entry/66a1183eb08f.js deleted file mode 100644 index 2d5ba7c..0000000 --- a/network-poc/target-native/doc/search.index/entry/66a1183eb08f.js +++ /dev/null @@ -1 +0,0 @@ -rd_("Ai[11085,14,6178,0,831,0,0]Aj[11085,14,6178,0,9849,0,0]Al[11085,14,9778,9778,117,0,0]Ai[11085,14,6178,0,833,0,0]211Ao[11085,14,10813,10813,6163,0,0]0An[11085,15,7679,7679,10140,0,0]Am[11085,13,5201,5201,4533,0,0]00Am[11085,13,9888,9888,9838,0,0]10101010000Am[11085,14,9603,9603,4490,0,0]B`[11085,13,9379,9379,6179,7635,0]An[11085,13,849,849,7623,7635,0]Ao[11085,13,849,849,11256,7635,0]An[11085,13,849,849,4475,7635,0]B`[11085,13,7677,7677,7624,7635,0]B`[11085,13,7677,7677,4483,7635,0]B`[11085,13,9315,9315,4484,7635,0]B`[11085,13,5357,5357,6173,7635,0]B`[11085,13,5357,5357,5262,7635,0]B`[11085,13,5357,5357,4486,7635,0]Ba[11085,13,8306,8306,11258,7635,0]B`[11085,13,8306,8306,4498,7635,0]An[11085,13,537,537,6174,7635,0]Ao[11085,13,537,537,10126,7635,0]Ao[11085,13,537,537,10772,7635,0]B`[11085,13,2899,2899,6175,7635,0]Ba[11085,13,5359,5359,10139,7635,0]Am[11085,13,861,861,819,7635,0]An[11085,13,861,861,5263,7635,0]Ba[11085,13,9813,9813,11075,7635,0]B`[11085,13,5623,5623,4509,7635,0]B`[11085,13,8313,8313,4510,7635,0]B`[11085,13,5625,5625,4511,7635,0]B`[11085,13,9437,9437,4515,7635,0]Ba[11085,13,9437,9437,10839,7635,0]Ba[11085,13,9437,9437,10759,7635,0]B`[11085,13,8319,8319,9855,7635,0]An[11085,13,542,542,4517,7635,0]Ba[11085,13,8334,8334,11259,7635,0]B`[11085,13,8334,8334,4522,7635,0]An[11085,13,779,779,4523,7635,0]B`[11085,13,9970,9970,4529,7635,0]B`[11085,13,4434,4434,4530,7635,0]B`[11085,13,8339,8339,4531,7635,0]B`[11085,13,8347,8347,4535,7635,0]Ao[11085,13,868,868,10763,7635,0]B`[11085,13,8359,8359,4538,7635,0]Bb[11085,13,10006,10006,9839,7635,0]Bb[11085,13,10006,10006,4540,7635,0]Bb[11085,13,10006,10006,7618,7635,0]Am[11085,13,93,93,11445,7635,0]Al[11085,13,93,93,4541,7635,0]B`[11085,13,4452,4452,9597,7635,0]B`[11085,13,6150,6150,4543,7635,0]An[11085,13,101,101,4545,7635,0]Bb[11085,13,10813,10813,6163,7635,0]Am[11085,14,5086,5086,9584,0,0]Am[11085,14,4419,4419,3519,0,0]Am[11085,13,9890,9890,4485,0,0]00000Ao[11085,13,11280,11280,8433,0,0]Al[11085,14,9523,9523,107,0,0]Am[11085,13,8316,8316,4514,0,0]An[11085,13,9430,9430,10769,0,0]10111Af[11085,2,5190,0,0,0,0]Am[11085,13,5365,5365,4488,0,0]Am[11085,13,8313,8313,4510,0,0]0Am[11085,13,8319,8319,4516,0,0]Am[11085,13,8319,8319,9855,0,0]4Am[11085,15,9379,9379,6179,0,0]Af[11085,5,9523,0,0,0,0]Am[11085,15,5216,5216,8415,0,0]0An[11085,15,9437,9437,10839,0,0]Al[11085,15,537,537,10126,0,0]Af[11085,6,9813,0,0,0,0]Af[11085,5,9778,0,0,0,0]0Ae[11085,5,786,0,0,0,0]An[11085,15,9813,9813,11075,0,0]Ae[11085,5,797,0,0,0,0]Ao[11085,13,10740,10740,4504,0,0]Am[11085,14,8182,8182,3483,0,0]Am[11085,14,6224,6224,3444,0,0]Af[11085,2,5190,0,0,0,0]Am[11085,13,4423,4423,4489,0,0]Am[11085,13,9603,9603,4490,0,0]Am[11085,14,6224,6224,4500,0,0]Am[11085,14,9812,9812,4503,0,0]Am[11085,14,7677,7677,5261,0,0]An[11085,14,5205,5205,11076,0,0]An[11085,14,7660,7660,11205,0,0]Al[11085,14,866,866,11061,0,0]B`[11085,13,9379,9379,6179,3453,0]Ba[11085,13,3529,3529,11471,3453,0]Ba[11085,13,3529,3529,11253,3453,0]Ba[11085,13,3529,3529,11450,3453,0]B`[11085,13,3529,3529,4474,3453,0]B`[11085,13,3529,3529,3464,3453,0]Ao[11085,13,847,847,11242,3453,0]An[11085,13,849,849,7623,3453,0]Ao[11085,13,849,849,11256,3453,0]An[11085,13,849,849,4475,3453,0]B`[11085,13,5285,5285,4476,3453,0]An[11085,13,853,853,9854,3453,0]An[11085,13,853,853,4477,3453,0]An[11085,13,853,853,9599,3453,0]Ao[11085,13,853,853,11446,3453,0]B`[11085,13,7666,7666,4478,3453,0]B`[11085,13,7666,7666,8417,3453,0]Ba[11085,13,7666,7666,10317,3453,0]B`[11085,13,5288,5288,4479,3453,0]B`[11085,13,5288,5288,3465,3453,0]B`[11085,13,9875,9875,8391,3453,0]Ba[11085,13,9875,9875,10838,3453,0]Ba[11085,13,9875,9875,10037,3453,0]Ba[11085,13,9875,9875,10758,3453,0]Bc[11085,13,10019,10019,11332,3453,0]Bc[11085,13,10019,10019,11438,3453,0]Bc[11085,13,10019,10019,11392,3453,0]Bc[11085,13,10019,10019,11448,3453,0]Ba[11085,13,9512,9512,11257,3453,0]Ba[11085,13,9512,9512,11243,3453,0]Ba[11085,13,9512,9512,11413,3453,0]Ba[11085,13,9512,9512,11424,3453,0]An[11085,13,856,856,7615,3453,0]Ao[11085,13,856,856,10038,3453,0]An[11085,13,856,856,8395,3453,0]Bc[11085,13,10020,10020,10760,3453,0]Bc[11085,13,10020,10020,11244,3453,0]B`[11085,13,9513,9513,8392,3453,0]Ba[11085,13,9513,9513,10127,3453,0]B`[11085,13,9513,9513,9577,3453,0]Ba[11085,13,9513,9513,11059,3453,0]B`[11085,13,9878,9878,4480,3453,0]B`[11085,13,9878,9878,3466,3453,0]An[11085,13,125,125,4482,3453,0]An[11085,13,125,125,5275,3453,0]An[11085,13,125,125,9844,3453,0]An[11085,13,125,125,9835,3453,0]An[11085,13,125,125,5242,3453,0]An[11085,13,125,125,9831,3453,0]An[11085,13,125,125,5224,3453,0]Ao[11085,13,125,125,10322,3453,0]Ao[11085,13,125,125,11334,3453,0]An[11085,13,125,125,3468,3453,0]B`[11085,13,7677,7677,7624,3453,0]B`[11085,13,7677,7677,4483,3453,0]B`[11085,13,7677,7677,5261,3453,0]Ba[11085,13,7677,7677,11302,3453,0]Ba[11085,13,7679,7679,10765,3453,0]Ba[11085,13,7679,7679,10140,3453,0]Ba[11085,13,7679,7679,11414,3453,0]Ba[11085,13,7679,7679,11248,3453,0]Ba[11085,13,5147,5147,11250,3453,0]Ba[11085,13,9313,9313,11251,3453,0]B`[11085,13,9315,9315,4484,3453,0]B`[11085,13,9888,9888,9838,3453,0]B`[11085,13,9888,9888,9834,3453,0]B`[11085,13,5357,5357,6173,3453,0]B`[11085,13,5357,5357,5262,3453,0]B`[11085,13,5357,5357,4486,3453,0]Ba[11085,13,5357,5357,10845,3453,0]Ba[11085,13,5357,5357,11017,3453,0]Ba[11085,13,5357,5357,11335,3453,0]B`[11085,13,5357,5357,9580,3453,0]Ba[11085,13,5357,5357,11300,3453,0]Ba[11085,13,5357,5357,10036,3453,0]Ba[11085,13,5357,5357,11010,3453,0]B`[11085,13,5357,5357,5243,3453,0]B`[11085,13,5357,5357,5225,3453,0]B`[11085,13,5357,5357,3469,3453,0]Ba[11085,13,1364,1364,11252,3453,0]B`[11085,13,5171,5171,4487,3453,0]B`[11085,13,5171,5171,4551,3453,0]B`[11085,13,5365,5365,4488,3453,0]B`[11085,13,6247,6247,3518,3453,0]B`[11085,13,4423,4423,4489,3453,0]B`[11085,13,4423,4423,5238,3453,0]B`[11085,13,4423,4423,9591,3453,0]B`[11085,13,4423,4423,4569,3453,0]Ba[11085,13,4423,4423,10050,3453,0]Ba[11085,13,4423,4423,10841,3453,0]Ba[11085,13,4423,4423,10853,3453,0]B`[11085,13,4423,4423,7625,3453,0]Ao[11085,13,4423,4423,803,3453,0]B`[11085,13,9603,9603,4490,3453,0]B`[11085,13,9603,9603,5244,3453,0]B`[11085,13,9603,9603,5226,3453,0]Ba[11085,13,9603,9603,10766,3453,0]B`[11085,13,9603,9603,9574,3453,0]Bb[11085,13,10726,10726,9592,3453,0]Bb[11085,13,10726,10726,4570,3453,0]Bc[11085,13,10726,10726,10051,3453,0]Bc[11085,13,10726,10726,10842,3453,0]Bc[11085,13,10726,10726,10854,3453,0]Bb[11085,13,10726,10726,7626,3453,0]Ba[11085,13,10726,10726,804,3453,0]B`[11085,13,4402,4402,4491,3453,0]B`[11085,13,4402,4402,3470,3453,0]B`[11085,13,5174,5174,4492,3453,0]B`[11085,13,5174,5174,3471,3453,0]B`[11085,13,5176,5176,4493,3453,0]B`[11085,13,5176,5176,3472,3453,0]B`[11085,13,1861,1861,4494,3453,0]B`[11085,13,1861,1861,3473,3453,0]Ba[11085,13,5617,5617,10300,3453,0]Ba[11085,13,5617,5617,10847,3453,0]Ba[11085,13,5617,5617,10133,3453,0]Ba[11085,13,5617,5617,10041,3453,0]B`[11085,13,5617,5617,4495,3453,0]B`[11085,13,5617,5617,3442,3453,0]B`[11085,13,5617,5617,5254,3453,0]B`[11085,13,5180,5180,4496,3453,0]B`[11085,13,5180,5180,3474,3453,0]B`[11085,13,4404,4404,4497,3453,0]Ba[11085,13,8306,8306,11258,3453,0]B`[11085,13,8306,8306,4498,3453,0]B`[11085,13,8306,8306,7613,3453,0]Ba[11085,13,4413,4413,10135,3453,0]Ba[11085,13,4413,4413,10767,3453,0]B`[11085,13,4413,4413,9837,3453,0]B`[11085,13,4413,4413,9586,3453,0]B`[11085,13,4413,4413,4499,3453,0]B`[11085,13,4413,4413,3443,3453,0]B`[11085,13,4413,4413,3459,3453,0]B`[11085,13,6224,6224,4500,3453,0]B`[11085,13,6224,6224,3444,3453,0]B`[11085,13,6224,6224,3460,3453,0]B`[11085,13,5086,5086,9584,3453,0]Ba[11085,13,5086,5086,10848,3453,0]Ba[11085,13,5086,5086,11067,3453,0]Ba[11085,13,5086,5086,10042,3453,0]Ba[11085,13,5086,5086,11013,3453,0]Ba[11085,13,5086,5086,11210,3453,0]B`[11085,13,4419,4419,4501,3453,0]B`[11085,13,4419,4419,8410,3453,0]Ba[11085,13,4419,4419,10046,3453,0]B`[11085,13,4419,4419,3475,3453,0]B`[11085,13,5187,5187,4502,3453,0]B`[11085,13,5187,5187,5245,3453,0]B`[11085,13,5187,5187,5227,3453,0]B`[11085,13,5187,5187,5259,3453,0]B`[11085,13,9812,9812,4503,3453,0]B`[11085,13,9812,9812,3476,3453,0]Bb[11085,13,10740,10740,4504,3453,0]An[11085,13,537,537,6174,3453,0]Ao[11085,13,537,537,10126,3453,0]Ao[11085,13,537,537,10772,3453,0]An[11085,13,537,537,4505,3453,0]B`[11085,13,2899,2899,6175,3453,0]Ba[11085,13,5359,5359,10139,3453,0]B`[11085,13,5359,5359,4506,3453,0]B`[11085,13,5359,5359,5241,3453,0]Am[11085,13,861,861,819,3453,0]An[11085,13,861,861,5263,3453,0]An[11085,13,861,861,8412,3453,0]Ao[11085,13,861,861,11074,3453,0]Ao[11085,13,861,861,10777,3453,0]Ao[11085,13,861,861,11416,3453,0]Ao[11085,13,861,861,10761,3453,0]Ao[11085,13,861,861,10762,3453,0]Ba[11085,13,9813,9813,11075,3453,0]B`[11085,13,9813,9813,4507,3453,0]Ba[11085,13,9813,9813,10310,3453,0]B`[11085,13,9813,9813,8409,3453,0]Ba[11085,13,9813,9813,11439,3453,0]Ba[11085,13,9813,9813,11475,3453,0]Ao[11085,13,9813,9813,115,3453,0]B`[11085,13,9813,9813,5271,3453,0]Ao[11085,13,9813,9813,820,3453,0]Ba[11085,13,9813,9813,11417,3453,0]Ba[11085,13,9813,9813,11214,3453,0]Ba[11085,13,9813,9813,11212,3453,0]Ba[11085,13,9966,9966,10846,3453,0]Ba[11085,13,9966,9966,11018,3453,0]Ba[11085,13,9966,9966,11426,3453,0]Ba[11085,13,9966,9966,11336,3453,0]Ba[11085,13,9966,9966,11451,3453,0]B`[11085,13,5210,5210,4508,3453,0]Ba[11085,13,5210,5210,10852,3453,0]Ba[11085,13,5210,5210,10049,3453,0]Ba[11085,13,5210,5210,10048,3453,0]B`[11085,13,5623,5623,4509,3453,0]B`[11085,13,5623,5623,3479,3453,0]B`[11085,13,8313,8313,4510,3453,0]Ba[11085,13,8313,8313,11465,3453,0]B`[11085,13,5625,5625,4511,3453,0]B`[11085,13,5625,5625,3480,3453,0]B`[11085,13,4424,4424,4512,3453,0]Ba[11085,13,9430,9430,10307,3453,0]Ba[11085,13,9430,9430,10769,3453,0]B`[11085,13,9769,9769,4513,3453,0]B`[11085,13,9437,9437,4515,3453,0]Ba[11085,13,9437,9437,10839,3453,0]Ba[11085,13,9437,9437,10759,3453,0]B`[11085,13,8319,8319,4516,3453,0]B`[11085,13,8319,8319,9855,3453,0]B`[11085,13,8319,8319,5246,3453,0]Ba[11085,13,8319,8319,10060,3453,0]B`[11085,13,8319,8319,3481,3453,0]An[11085,13,542,542,4517,3453,0]An[11085,13,542,542,3482,3453,0]B`[11085,13,8182,8182,3483,3453,0]B`[11085,13,4425,4425,3484,3453,0]B`[11085,13,2904,2904,4518,3453,0]B`[11085,13,2904,2904,3485,3453,0]B`[11085,13,9514,9514,4519,3453,0]B`[11085,13,9514,9514,5247,3453,0]Ba[11085,13,9514,9514,11333,3453,0]B`[11085,13,8331,8331,4520,3453,0]Ba[11085,13,8331,8331,11070,3453,0]B`[11085,13,8331,8331,3486,3453,0]Ba[11085,13,9457,9457,10035,3453,0]B`[11085,13,9457,9457,4521,3453,0]B`[11085,13,9457,9457,7608,3453,0]B`[11085,13,9457,9457,9832,3453,0]B`[11085,13,9457,9457,5228,3453,0]B`[11085,13,9457,9457,3487,3453,0]Ba[11085,13,8334,8334,11259,3453,0]B`[11085,13,8334,8334,4522,3453,0]An[11085,13,779,779,4523,3453,0]B`[11085,13,2906,2906,4524,3453,0]Ba[11085,13,2906,2906,10311,3453,0]B`[11085,13,2906,2906,3489,3453,0]B`[11085,13,4418,4418,4525,3453,0]Ba[11085,13,4418,4418,11071,3453,0]B`[11085,13,4418,4418,3490,3453,0]Bb[11085,13,10021,10021,4526,3453,0]Bb[11085,13,10021,10021,3491,3453,0]Bb[11085,13,10245,10245,9600,3453,0]Bc[11085,13,10245,10245,11447,3453,0]Bb[11085,13,11182,11182,8418,3453,0]Bc[11085,13,11182,11182,10318,3453,0]Bb[11085,13,10724,10724,9840,3453,0]Bb[11085,13,11050,11050,4568,3453,0]B`[11085,13,9814,9814,3492,3453,0]Bb[11085,13,10991,10991,3493,3453,0]Bc[11085,13,11186,11186,11466,3453,0]Bb[11085,13,11188,11188,5248,3453,0]Bc[11085,13,11188,11188,10061,3453,0]Bb[11085,13,10094,10094,3495,3453,0]Bb[11085,13,10096,10096,9841,3453,0]Bb[11085,13,10247,10247,9842,3453,0]Bb[11085,13,11422,11422,3496,3453,0]Bb[11085,13,10993,10993,3497,3453,0]Bb[11085,13,10995,10995,3498,3453,0]Bb[11085,13,11190,11190,3499,3453,0]B`[11085,13,9970,9970,4529,3453,0]Ba[11085,13,9970,9970,10141,3453,0]Ba[11085,13,9970,9970,11427,3453,0]B`[11085,13,4434,4434,4530,3453,0]B`[11085,13,4434,4434,3500,3453,0]Ba[11085,13,4434,4434,10770,3453,0]B`[11085,13,8339,8339,4531,3453,0]B`[11085,13,8339,8339,3501,3453,0]Bc[11085,13,10732,10732,10855,3453,0]Bb[11085,13,10732,10732,4532,3453,0]Bb[11085,13,10732,10732,3502,3453,0]B`[11085,13,5643,5643,4534,3453,0]B`[11085,13,5643,5643,3503,3453,0]B`[11085,13,5645,5645,3504,3453,0]B`[11085,13,8347,8347,4535,3453,0]Ba[11085,13,8347,8347,11415,3453,0]Ba[11085,13,8347,8347,11398,3453,0]Bb[11085,13,10825,10825,9585,3453,0]Bb[11085,13,10825,10825,6167,3453,0]Ba[11085,13,9815,9815,10857,3453,0]Bc[11085,13,10078,10078,10301,3453,0]B`[11085,13,9930,9930,9590,3453,0]Bc[11085,13,10243,10243,10045,3453,0]Am[11085,13,786,786,118,3453,0]B`[11085,13,6251,6251,5277,3453,0]B`[11085,13,5213,5213,8416,3453,0]B`[11085,13,5213,5213,9857,3453,0]B`[11085,13,5213,5213,4536,3453,0]B`[11085,13,5213,5213,9601,3453,0]Ba[11085,13,5213,5213,10319,3453,0]B`[11085,13,5213,5213,7646,3453,0]B`[11085,13,5213,5213,3505,3453,0]Bc[11085,13,10827,10827,11260,3453,0]An[11085,13,857,857,8393,3453,0]An[11085,13,857,857,4537,3453,0]Ao[11085,13,857,857,11060,3453,0]Ba[11085,13,5205,5205,11076,3453,0]Ba[11085,13,5205,5205,10047,3453,0]Ba[11085,13,9320,9320,10856,3453,0]B`[11085,13,9320,9320,7647,3453,0]Ba[11085,13,7660,7660,10128,3453,0]Ba[11085,13,7660,7660,11399,3453,0]Ba[11085,13,7660,7660,11015,3453,0]Ba[11085,13,7660,7660,11205,3453,0]Ba[11085,13,7660,7660,10125,3453,0]Ao[11085,13,866,866,11061,3453,0]Ao[11085,13,866,866,10033,3453,0]Ao[11085,13,868,868,10763,3453,0]Ao[11085,13,868,868,11062,3453,0]Bc[11085,13,11400,11400,11489,3453,0]Bc[11085,13,11400,11400,11470,3453,0]B`[11085,13,9502,9502,9827,3453,0]Ba[11085,13,9502,9502,10137,3453,0]Ba[11085,13,9502,9502,10320,3453,0]B`[11085,13,6144,6144,9576,3453,0]Ba[11085,13,6144,6144,11429,3453,0]Ba[11085,13,6144,6144,11215,3453,0]Bc[11085,13,10276,10276,11395,3453,0]Bc[11085,13,10276,10276,11009,3453,0]Bc[11085,13,10276,10276,11303,3453,0]Bc[11085,13,10276,10276,10782,3453,0]Bc[11085,13,10276,10276,11216,3453,0]Bc[11085,13,10276,10276,10143,3453,0]Bc[11085,13,10276,10276,11461,3453,0]Bc[11085,13,10276,10276,11337,3453,0]Bc[11085,13,10276,10276,10843,3453,0]Bb[11085,13,10276,10276,9579,3453,0]Bc[11085,13,10276,10276,11425,3453,0]Bc[11085,13,10276,10276,11207,3453,0]Bc[11085,13,10276,10276,10321,3453,0]Bb[11085,13,10276,10276,7653,3453,0]Bc[11085,13,10276,10276,11394,3453,0]Bc[11085,13,10276,10276,11007,3453,0]Ba[11085,13,5216,5216,10052,3453,0]Ba[11085,13,5216,5216,11068,3453,0]Ba[11085,13,5216,5216,11397,3453,0]B`[11085,13,5216,5216,8415,3453,0]Ba[11085,13,5216,5216,10030,3453,0]Ba[11085,13,5216,5216,10297,3453,0]Ba[11085,13,5216,5216,10780,3453,0]Ba[11085,13,5216,5216,11298,3453,0]Ba[11085,13,5216,5216,11217,3453,0]Ao[11085,13,794,794,11058,3453,0]Ao[11085,13,794,794,10031,3453,0]B`[11085,13,8359,8359,4538,3453,0]B`[11085,13,8359,8359,3506,3453,0]B`[11085,13,9510,9510,4539,3453,0]B`[11085,13,9510,9510,3507,3453,0]Bb[11085,13,10006,10006,9839,3453,0]Bb[11085,13,10006,10006,4540,3453,0]Bb[11085,13,10006,10006,7618,3453,0]Bb[11085,13,10006,10006,6160,3453,0]Bb[11085,13,10006,10006,8397,3453,0]Bb[11085,13,10006,10006,3508,3453,0]Bc[11085,13,10006,10006,10132,3453,0]Al[11085,13,93,93,4561,3453,0]Am[11085,13,93,93,11445,3453,0]Al[11085,13,93,93,4541,3453,0]Am[11085,13,93,93,10142,3453,0]Am[11085,13,93,93,11428,3453,0]B`[11085,13,4452,4452,9597,3453,0]B`[11085,13,4452,4452,9851,3453,0]B`[11085,13,4452,4452,9852,3453,0]Ba[11085,13,4452,4452,10781,3453,0]B`[11085,13,4452,4452,8420,3453,0]Am[11085,13,797,797,121,3453,0]An[11085,13,799,799,4542,3453,0]An[11085,13,799,799,8398,3453,0]An[11085,13,799,799,5249,3453,0]An[11085,13,799,799,3509,3453,0]B`[11085,13,6150,6150,4543,3453,0]B`[11085,13,4426,4426,9825,3453,0]B`[11085,13,4426,4426,9595,3453,0]B`[11085,13,4426,4426,5281,3453,0]Bb[11085,13,10727,10727,9826,3453,0]Bb[11085,13,10727,10727,9596,3453,0]Bb[11085,13,10727,10727,5282,3453,0]Bb[11085,13,10028,10028,7620,3453,0]Bb[11085,13,10028,10028,4562,3453,0]Bb[11085,13,10028,10028,4547,3453,0]Bb[11085,13,10028,10028,5264,3453,0]Bb[11085,13,10028,10028,7631,3453,0]Bb[11085,13,10028,10028,5272,3453,0]B`[11085,13,5084,5084,8434,3453,0]Ba[11085,13,5084,5084,11014,3453,0]Ba[11085,13,5084,5084,10058,3453,0]Ba[11085,13,5084,5084,11012,3453,0]B`[11085,13,5084,5084,6177,3453,0]B`[11085,13,5084,5084,7610,3453,0]Ao[11085,13,869,869,11208,3453,0]Bb[11085,13,11081,11081,7609,3453,0]Ba[11085,13,6201,6201,10138,3453,0]B`[11085,13,6201,6201,7654,3453,0]Ba[11085,13,8329,8329,11069,3453,0]B`[11085,13,8329,8329,6176,3453,0]B`[11085,13,4432,4432,4583,3453,0]B`[11085,13,9823,9823,4544,3453,0]An[11085,13,101,101,4545,3453,0]An[11085,13,101,101,3510,3453,0]Ba[11085,13,10813,10813,801,3453,0]Bb[11085,13,10813,10813,6163,3453,0]B`[11085,13,9968,9968,7621,3453,0]B`[11085,13,9968,9968,4563,3453,0]B`[11085,13,9968,9968,5273,3453,0]Ao[11085,13,11280,11280,8433,0,0]Af[11085,2,8311,0,0,0,0]Am[11085,14,6247,6247,3518,0,0]Ag[11085,7,10813,0,0,0,0]Am[11085,14,6224,6224,3444,0,0]Af[11085,2,5190,0,0,0,0]An[11085,13,9379,9379,10305,0,0]Am[11085,13,3529,3529,3464,0,0]Al[11085,13,847,847,11242,0,0]Al[11085,13,853,853,11446,0,0]Am[11085,13,7666,7666,8417,0,0]An[11085,13,7666,7666,10317,0,0]Am[11085,13,5288,5288,3465,0,0]An[11085,13,9875,9875,10758,0,0]B`[11085,13,10019,10019,11438,0,0]B`[11085,13,10019,10019,11392,0,0]B`[11085,13,10019,10019,11448,0,0]An[11085,13,9512,9512,11413,0,0]An[11085,13,9512,9512,11424,0,0]Ak[11085,13,856,856,7615,0,0]B`[11085,13,10020,10020,11244,0,0]Am[11085,13,9513,9513,9577,0,0]An[11085,13,9513,9513,11059,0,0]Am[11085,13,9878,9878,3466,0,0]Am[11085,13,5290,5290,3467,0,0]Ak[11085,13,125,125,5275,0,0]Ak[11085,13,125,125,9844,0,0]Ak[11085,13,125,125,9835,0,0]Ak[11085,13,125,125,5242,0,0]Ak[11085,13,125,125,9831,0,0]Ak[11085,13,125,125,5224,0,0]Al[11085,13,125,125,10322,0,0]Al[11085,13,125,125,11334,0,0]Ak[11085,13,125,125,3468,0,0]An[11085,13,7677,7677,10053,0,0]Am[11085,13,7679,7679,8396,0,0]An[11085,13,7679,7679,11414,0,0]B`[11085,13,10864,10864,11249,0,0]B`[11085,13,10864,10864,10775,0,0]B`[11085,13,10864,10864,11011,0,0]Ao[11085,13,10864,10864,5274,0,0]Ao[11085,13,10864,10864,5223,0,0]B`[11085,13,10864,10864,10295,0,0]An[11085,13,5147,5147,11250,0,0]An[11085,13,9313,9313,11251,0,0]Am[11085,13,9888,9888,9834,0,0]An[11085,13,5357,5357,10845,0,0]An[11085,13,5357,5357,11017,0,0]An[11085,13,5357,5357,11335,0,0]Am[11085,13,5357,5357,9580,0,0]An[11085,13,5357,5357,10036,0,0]An[11085,13,5357,5357,11010,0,0]Am[11085,13,5357,5357,5243,0,0]Am[11085,13,5357,5357,5225,0,0]Am[11085,13,5357,5357,3469,0,0]An[11085,13,1364,1364,11252,0,0]Am[11085,13,6247,6247,3518,0,0]Am[11085,13,4423,4423,5238,0,0]Al[11085,13,4423,4423,803,0,0]Am[11085,13,9603,9603,5244,0,0]Am[11085,13,9603,9603,5226,0,0]An[11085,13,9603,9603,10766,0,0]Am[11085,13,9603,9603,9574,0,0]An[11085,13,10726,10726,804,0,0]Am[11085,13,4402,4402,3470,0,0]Am[11085,13,5174,5174,3471,0,0]Am[11085,13,5176,5176,3472,0,0]Am[11085,13,1861,1861,3473,0,0]Am[11085,13,5617,5617,3442,0,0]Am[11085,13,5180,5180,3474,0,0]Am[11085,13,8306,8306,4498,0,0]Am[11085,13,8306,8306,7613,0,0]Am[11085,13,4413,4413,3443,0,0]Am[11085,13,6224,6224,3444,0,0]An[11085,13,4416,4416,10292,0,0]Am[11085,13,4419,4419,3519,0,0]Am[11085,13,4419,4419,8410,0,0]An[11085,13,4419,4419,10046,0,0]Am[11085,13,4419,4419,3475,0,0]Am[11085,13,5187,5187,5259,0,0]Am[11085,13,9812,9812,3476,0,0]Ao[11085,13,10740,10740,3477,0,0]Ak[11085,13,537,537,3478,0,0]An[11085,13,6183,6183,10055,0,0]An[11085,13,6183,6183,11487,0,0]Am[11085,13,5359,5359,5241,0,0]Ak[11085,13,861,861,8412,0,0]Al[11085,13,861,861,11074,0,0]Al[11085,13,861,861,10777,0,0]Al[11085,13,861,861,11416,0,0]Al[11085,13,861,861,10761,0,0]Al[11085,13,861,861,10762,0,0]An[11085,13,9813,9813,10310,0,0]Am[11085,13,9813,9813,8409,0,0]An[11085,13,9813,9813,11439,0,0]An[11085,13,9813,9813,11475,0,0]Al[11085,13,9813,9813,115,0,0]Am[11085,13,9813,9813,5271,0,0]Al[11085,13,9813,9813,820,0,0]An[11085,13,9813,9813,11417,0,0]An[11085,13,9813,9813,11214,0,0]An[11085,13,9813,9813,11212,0,0]An[11085,13,9966,9966,10846,0,0]An[11085,13,9966,9966,11018,0,0]An[11085,13,9966,9966,11426,0,0]An[11085,13,9966,9966,11336,0,0]An[11085,13,9966,9966,11451,0,0]An[11085,13,5210,5210,10852,0,0]An[11085,13,5210,5210,10049,0,0]An[11085,13,5210,5210,10048,0,0]Am[11085,13,5623,5623,3479,0,0]An[11085,13,8313,8313,11465,0,0]Am[11085,13,5625,5625,3480,0,0]Am[11085,13,4584,4584,6158,0,0]An[11085,13,4584,4584,10850,0,0]An[11085,13,4584,4584,10776,0,0]An[11085,13,4584,4584,10309,0,0]Am[11085,13,4584,4584,8401,0,0]An[11085,13,4584,4584,10306,0,0]An[11085,13,4584,4584,10768,0,0]An[11085,13,4584,4584,11393,0,0]An[11085,13,8181,8181,10044,0,0]Am[11085,13,8181,8181,9853,0,0]An[11085,13,8181,8181,10773,0,0]An[11085,13,8181,8181,10779,0,0]An[11085,13,8181,8181,10144,0,0]Am[11085,13,4424,4424,3461,0,0]Am[11085,13,4424,4424,7632,0,0]Al[11085,13,9778,9778,116,0,0]An[11085,13,9778,9778,11301,0,0]An[11085,13,9778,9778,10289,0,0]An[11085,13,9430,9430,10307,0,0]An[11085,13,8319,8319,10060,0,0]Am[11085,13,8319,8319,3481,0,0]Ak[11085,13,542,542,3482,0,0]Am[11085,13,8182,8182,3483,0,0]Am[11085,13,4425,4425,3484,0,0]Am[11085,13,2904,2904,3485,0,0]Am[11085,13,9514,9514,5247,0,0]An[11085,13,9514,9514,11333,0,0]Am[11085,13,8331,8331,3486,0,0]Am[11085,13,9457,9457,5228,0,0]Am[11085,13,9457,9457,3487,0,0]Ak[11085,13,779,779,3488,0,0]An[11085,13,2906,2906,10311,0,0]Am[11085,13,2906,2906,3489,0,0]An[11085,13,4418,4418,11071,0,0]Am[11085,13,4418,4418,3490,0,0]Ao[11085,13,10021,10021,3491,0,0]B`[11085,13,10245,10245,11447,0,0]Ao[11085,13,11182,11182,8418,0,0]B`[11085,13,11182,11182,10318,0,0]Am[11085,13,9814,9814,3492,0,0]Ao[11085,13,10991,10991,3493,0,0]B`[11085,13,11186,11186,11466,0,0]Ao[11085,13,11188,11188,3494,0,0]B`[11085,13,11188,11188,10061,0,0]Ao[11085,13,10094,10094,3495,0,0]Ao[11085,13,11422,11422,3496,0,0]Ao[11085,13,10993,10993,3497,0,0]Ao[11085,13,10995,10995,3498,0,0]Ao[11085,13,11190,11190,3499,0,0]Am[11085,13,4434,4434,3500,0,0]An[11085,13,4434,4434,10770,0,0]Am[11085,13,8339,8339,3501,0,0]Ao[11085,13,10732,10732,3502,0,0]Am[11085,13,5643,5643,3520,0,0]Am[11085,13,5643,5643,7651,0,0]Am[11085,13,5643,5643,3503,0,0]Am[11085,13,5645,5645,3504,0,0]An[11085,13,8347,8347,11415,0,0]An[11085,13,8347,8347,11398,0,0]Ao[11085,13,10825,10825,9585,0,0]Ao[11085,13,10825,10825,6167,0,0]An[11085,13,9815,9815,10857,0,0]B`[11085,13,10078,10078,10301,0,0]Am[11085,13,9930,9930,9590,0,0]B`[11085,13,10243,10243,10045,0,0]Aj[11085,13,786,786,118,0,0]Am[11085,13,6251,6251,5277,0,0]Am[11085,13,5213,5213,9601,0,0]Am[11085,13,5213,5213,7646,0,0]Am[11085,13,5213,5213,3505,0,0]Al[11085,13,857,857,11060,0,0]An[11085,13,5205,5205,10047,0,0]An[11085,13,9320,9320,10856,0,0]Am[11085,13,9320,9320,7647,0,0]An[11085,13,7660,7660,10128,0,0]An[11085,13,7660,7660,11015,0,0]An[11085,13,7660,7660,10125,0,0]Al[11085,13,868,868,10034,0,0]B`[11085,13,11400,11400,11470,0,0]An[11085,13,6144,6144,11215,0,0]B`[11085,13,10276,10276,11009,0,0]B`[11085,13,10276,10276,10782,0,0]B`[11085,13,10276,10276,10143,0,0]B`[11085,13,10276,10276,11337,0,0]Ao[11085,13,10276,10276,9579,0,0]B`[11085,13,10276,10276,11207,0,0]Ao[11085,13,10276,10276,7653,0,0]B`[11085,13,10276,10276,11007,0,0]An[11085,13,5216,5216,11396,0,0]An[11085,13,5216,5216,11298,0,0]Al[11085,13,794,794,11449,0,0]Al[11085,13,794,794,10031,0,0]Am[11085,13,8359,8359,3506,0,0]Am[11085,13,9510,9510,3507,0,0]Ao[11085,13,10006,10006,8397,0,0]Ao[11085,13,10006,10006,3508,0,0]B`[11085,13,10006,10006,10132,0,0]Am[11085,13,4452,4452,9852,0,0]An[11085,13,4452,4452,10781,0,0]Am[11085,13,4452,4452,8420,0,0]Aj[11085,13,797,797,121,0,0]Ak[11085,13,799,799,8398,0,0]Ak[11085,13,799,799,5249,0,0]Ak[11085,13,799,799,3509,0,0]Ao[11085,13,10028,10028,7620,0,0]Ao[11085,13,10028,10028,5264,0,0]Ao[11085,13,10028,10028,7631,0,0]Ao[11085,13,10028,10028,5272,0,0]Am[11085,13,5084,5084,8434,0,0]An[11085,13,5084,5084,11014,0,0]An[11085,13,5084,5084,10058,0,0]An[11085,13,5084,5084,11012,0,0]Am[11085,13,5084,5084,6177,0,0]Am[11085,13,5084,5084,7610,0,0]Al[11085,13,869,869,10129,0,0]Ao[11085,13,11081,11081,7609,0,0]An[11085,13,6201,6201,10138,0,0]Am[11085,13,6201,6201,7654,0,0]An[11085,13,8329,8329,11069,0,0]Am[11085,13,8329,8329,6176,0,0]Am[11085,13,4432,4432,4583,0,0]An[11085,13,9823,9823,10323,0,0]An[11085,13,9823,9823,11261,0,0]An[11085,13,9823,9823,11485,0,0]Ak[11085,13,101,101,3510,0,0]Am[11085,13,9968,9968,7621,0,0]Am[11085,13,9968,9968,5273,0,0]Af[11085,2,5190,0,0,0,0]Am[11085,14,4419,4419,3519,0,0]Am[11085,14,4418,4418,3490,0,0]Am[11085,14,5643,5643,3520,0,0]An[11085,14,5216,5216,11068,0,0]Am[11085,13,5365,5365,4488,0,0]Ag[11085,2,10825,0,0,0,0]Am[11085,14,6224,6224,3444,0,0]2Am[11085,14,6247,6247,3518,0,0]Ag[11085,2,10827,0,0,0,0]199Ag[11085,5,10813,0,0,0,0]An[11085,15,5359,5359,10139,0,0]Af[11085,5,4423,0,0,0,0]Ag[11085,5,10726,0,0,0,0]Ak[11085,15,849,849,7623,0,0]Am[11085,15,9875,9875,8391,0,0]Am[11085,15,7677,7677,7624,0,0]Al[11085,15,537,537,10772,0,0]Ak[11085,15,857,857,8393,0,0]Al[11085,15,537,537,10126,0,0]An[11085,15,9437,9437,10839,0,0]Am[11085,15,5357,5357,6173,0,0]An[11085,15,9813,9813,11075,0,0]Ae[11085,6,861,0,0,0,0]Af[11085,6,9813,0,0,0,0]:982An[11085,15,9875,9875,10037,0,0]Al[11085,15,856,856,10038,0,0]Am[11085,15,9379,9379,6179,0,0]0An[11085,15,7679,7679,10140,0,0]An[11085,15,7679,7679,11248,0,0]An[11085,15,5216,5216,10297,0,0]Am[11085,14,5365,5365,4488,0,0]Am[11085,13,6198,6198,4481,0,0]Am[11085,13,5201,5201,4533,0,0]001Am[11085,13,4404,4404,4497,0,0]Af[11085,2,5190,0,0,0,0]0Am[11085,14,5171,5171,4487,0,0]Ak[11085,14,537,537,4505,0,0]22Ag[11085,2,10827,0,0,0,0]B`[11085,14,10827,10827,11260,0,0]Af[11085,2,2899,0,0,0,0]Ai[11085,14,93,93,4541,0,0]0An[11085,14,10813,10813,801,0,0]44Af[11085,2,9570,0,0,0,0]Ba[11085,13,9379,9379,10305,7636,0]B`[11085,13,9379,9379,6179,7636,0]Ba[11085,13,3529,3529,11471,7636,0]Ba[11085,13,3529,3529,11253,7636,0]Ba[11085,13,3529,3529,11450,7636,0]B`[11085,13,3529,3529,4474,7636,0]B`[11085,13,3529,3529,3464,7636,0]Ao[11085,13,847,847,11242,7636,0]An[11085,13,849,849,7612,7636,0]Ao[11085,13,849,849,11206,7636,0]Ao[11085,13,849,849,10291,7636,0]Ao[11085,13,849,849,10290,7636,0]An[11085,13,849,849,7623,7636,0]Ao[11085,13,849,849,11256,7636,0]An[11085,13,849,849,4475,7636,0]An[11085,13,849,849,7611,7636,0]An[11085,13,849,849,9575,7636,0]B`[11085,13,5285,5285,8405,7636,0]B`[11085,13,5285,5285,4476,7636,0]An[11085,13,853,853,9854,7636,0]An[11085,13,853,853,4477,7636,0]An[11085,13,853,853,9599,7636,0]Ao[11085,13,853,853,11446,7636,0]B`[11085,13,7666,7666,4478,7636,0]B`[11085,13,7666,7666,8417,7636,0]Ba[11085,13,7666,7666,10317,7636,0]B`[11085,13,5288,5288,4479,7636,0]B`[11085,13,5288,5288,3465,7636,0]B`[11085,13,9875,9875,8391,7636,0]Ba[11085,13,9875,9875,10838,7636,0]Ba[11085,13,9875,9875,10037,7636,0]Ba[11085,13,9875,9875,10758,7636,0]Bc[11085,13,10019,10019,11332,7636,0]Bc[11085,13,10019,10019,11438,7636,0]Bc[11085,13,10019,10019,11392,7636,0]Bc[11085,13,10019,10019,11448,7636,0]Ba[11085,13,9512,9512,11257,7636,0]Ba[11085,13,9512,9512,11243,7636,0]Ba[11085,13,9512,9512,11413,7636,0]Ba[11085,13,9512,9512,11424,7636,0]An[11085,13,856,856,7615,7636,0]Ao[11085,13,856,856,10038,7636,0]An[11085,13,856,856,8395,7636,0]Bc[11085,13,10020,10020,10760,7636,0]Bc[11085,13,10020,10020,11244,7636,0]B`[11085,13,9513,9513,8392,7636,0]Ba[11085,13,9513,9513,10127,7636,0]B`[11085,13,9513,9513,9577,7636,0]Ba[11085,13,9513,9513,11059,7636,0]B`[11085,13,9878,9878,4480,7636,0]B`[11085,13,9878,9878,3466,7636,0]B`[11085,13,5290,5290,3467,7636,0]B`[11085,13,6198,6198,4481,7636,0]An[11085,13,125,125,4482,7636,0]An[11085,13,125,125,5275,7636,0]An[11085,13,125,125,9844,7636,0]An[11085,13,125,125,9835,7636,0]An[11085,13,125,125,5242,7636,0]An[11085,13,125,125,9831,7636,0]An[11085,13,125,125,5224,7636,0]Ao[11085,13,125,125,10322,7636,0]Ao[11085,13,125,125,11334,7636,0]An[11085,13,125,125,3468,7636,0]Ba[11085,13,7677,7677,10134,7636,0]Ba[11085,13,7677,7677,10053,7636,0]Ba[11085,13,7677,7677,11065,7636,0]Ba[11085,13,7677,7677,11483,7636,0]Ba[11085,13,7677,7677,11008,7636,0]Ba[11085,13,7677,7677,11066,7636,0]Ba[11085,13,7677,7677,11246,7636,0]Ba[11085,13,7677,7677,10294,7636,0]Ba[11085,13,7677,7677,10130,7636,0]B`[11085,13,7677,7677,7616,7636,0]Ba[11085,13,7677,7677,10764,7636,0]Ba[11085,13,7677,7677,10131,7636,0]Ba[11085,13,7677,7677,10840,7636,0]Ba[11085,13,7677,7677,11469,7636,0]Ba[11085,13,7677,7677,11299,7636,0]B`[11085,13,7677,7677,7624,7636,0]B`[11085,13,7677,7677,4483,7636,0]B`[11085,13,7677,7677,5261,7636,0]Ba[11085,13,7677,7677,11302,7636,0]B`[11085,13,7679,7679,8419,7636,0]Ba[11085,13,7679,7679,11209,7636,0]B`[11085,13,7679,7679,8396,7636,0]Ba[11085,13,7679,7679,10765,7636,0]Ba[11085,13,7679,7679,10140,7636,0]Ba[11085,13,7679,7679,11414,7636,0]Ba[11085,13,7679,7679,11248,7636,0]Bc[11085,13,10864,10864,11249,7636,0]Bc[11085,13,10864,10864,10775,7636,0]Bc[11085,13,10864,10864,11011,7636,0]Bb[11085,13,10864,10864,5274,7636,0]Bb[11085,13,10864,10864,5223,7636,0]Bc[11085,13,10864,10864,10295,7636,0]Ba[11085,13,5147,5147,11250,7636,0]Ba[11085,13,9313,9313,11251,7636,0]Ba[11085,13,9315,9315,10296,7636,0]B`[11085,13,9315,9315,4484,7636,0]B`[11085,13,9888,9888,9838,7636,0]B`[11085,13,9888,9888,9834,7636,0]B`[11085,13,9890,9890,4485,7636,0]B`[11085,13,5357,5357,6173,7636,0]B`[11085,13,5357,5357,5262,7636,0]B`[11085,13,5357,5357,4486,7636,0]Ba[11085,13,5357,5357,10845,7636,0]Ba[11085,13,5357,5357,11017,7636,0]Ba[11085,13,5357,5357,11335,7636,0]B`[11085,13,5357,5357,9580,7636,0]Ba[11085,13,5357,5357,11300,7636,0]Ba[11085,13,5357,5357,10036,7636,0]Ba[11085,13,5357,5357,11010,7636,0]B`[11085,13,5357,5357,5243,7636,0]B`[11085,13,5357,5357,5225,7636,0]B`[11085,13,5357,5357,3469,7636,0]Ba[11085,13,1364,1364,11252,7636,0]B`[11085,13,5171,5171,4487,7636,0]B`[11085,13,5171,5171,4551,7636,0]B`[11085,13,5365,5365,4488,7636,0]B`[11085,13,6247,6247,3518,7636,0]B`[11085,13,4423,4423,4489,7636,0]B`[11085,13,4423,4423,5238,7636,0]B`[11085,13,4423,4423,9591,7636,0]B`[11085,13,4423,4423,4569,7636,0]Ba[11085,13,4423,4423,10050,7636,0]Ba[11085,13,4423,4423,10841,7636,0]Ba[11085,13,4423,4423,10853,7636,0]B`[11085,13,4423,4423,7625,7636,0]Ao[11085,13,4423,4423,803,7636,0]B`[11085,13,9603,9603,4490,7636,0]B`[11085,13,9603,9603,5244,7636,0]B`[11085,13,9603,9603,5226,7636,0]Ba[11085,13,9603,9603,10766,7636,0]B`[11085,13,9603,9603,9574,7636,0]Bb[11085,13,10726,10726,9592,7636,0]Bb[11085,13,10726,10726,4570,7636,0]Bc[11085,13,10726,10726,10051,7636,0]Bc[11085,13,10726,10726,10842,7636,0]Bc[11085,13,10726,10726,10854,7636,0]Bb[11085,13,10726,10726,7626,7636,0]Ba[11085,13,10726,10726,804,7636,0]B`[11085,13,4402,4402,4491,7636,0]B`[11085,13,4402,4402,3470,7636,0]B`[11085,13,5174,5174,4492,7636,0]B`[11085,13,5174,5174,3471,7636,0]B`[11085,13,5176,5176,4493,7636,0]B`[11085,13,5176,5176,3472,7636,0]B`[11085,13,1861,1861,4494,7636,0]B`[11085,13,1861,1861,3473,7636,0]Ba[11085,13,5617,5617,10300,7636,0]Ba[11085,13,5617,5617,10847,7636,0]Ba[11085,13,5617,5617,10133,7636,0]Ba[11085,13,5617,5617,10041,7636,0]B`[11085,13,5617,5617,4495,7636,0]B`[11085,13,5617,5617,3442,7636,0]B`[11085,13,5617,5617,5254,7636,0]B`[11085,13,5180,5180,4496,7636,0]B`[11085,13,5180,5180,3474,7636,0]B`[11085,13,4404,4404,4497,7636,0]Ba[11085,13,8306,8306,11258,7636,0]B`[11085,13,8306,8306,4498,7636,0]B`[11085,13,8306,8306,7613,7636,0]Ba[11085,13,4413,4413,10135,7636,0]Ba[11085,13,4413,4413,10767,7636,0]B`[11085,13,4413,4413,9837,7636,0]B`[11085,13,4413,4413,9586,7636,0]B`[11085,13,4413,4413,4499,7636,0]B`[11085,13,4413,4413,3443,7636,0]B`[11085,13,4413,4413,3459,7636,0]B`[11085,13,6224,6224,4500,7636,0]B`[11085,13,6224,6224,3444,7636,0]B`[11085,13,6224,6224,3460,7636,0]Bc[11085,13,10809,10809,11016,7636,0]B`[11085,13,4416,4416,9582,7636,0]B`[11085,13,4416,4416,9589,7636,0]Ba[11085,13,4416,4416,10292,7636,0]B`[11085,13,4416,4416,3457,7636,0]B`[11085,13,5086,5086,9584,7636,0]Ba[11085,13,5086,5086,10848,7636,0]Ba[11085,13,5086,5086,11067,7636,0]Ba[11085,13,5086,5086,10042,7636,0]Ba[11085,13,5086,5086,11013,7636,0]Ba[11085,13,5086,5086,11210,7636,0]B`[11085,13,4419,4419,3519,7636,0]B`[11085,13,4419,4419,4501,7636,0]B`[11085,13,4419,4419,8410,7636,0]Ba[11085,13,4419,4419,10046,7636,0]B`[11085,13,4419,4419,3475,7636,0]B`[11085,13,5187,5187,4502,7636,0]B`[11085,13,5187,5187,5245,7636,0]B`[11085,13,5187,5187,5227,7636,0]B`[11085,13,5187,5187,5259,7636,0]B`[11085,13,9812,9812,4503,7636,0]B`[11085,13,9812,9812,3476,7636,0]Bb[11085,13,10740,10740,3477,7636,0]Bb[11085,13,10740,10740,4504,7636,0]Ao[11085,13,9523,9523,107,7636,0]An[11085,13,537,537,3478,7636,0]An[11085,13,537,537,6174,7636,0]Ao[11085,13,537,537,10126,7636,0]Ao[11085,13,537,537,10772,7636,0]An[11085,13,537,537,4505,7636,0]Ba[11085,13,6183,6183,10055,7636,0]Ba[11085,13,6183,6183,11487,7636,0]B`[11085,13,2899,2899,6175,7636,0]Ba[11085,13,5359,5359,10139,7636,0]B`[11085,13,5359,5359,4506,7636,0]B`[11085,13,5359,5359,5241,7636,0]Am[11085,13,861,861,819,7636,0]An[11085,13,861,861,5263,7636,0]An[11085,13,861,861,8412,7636,0]Ao[11085,13,861,861,11074,7636,0]Ao[11085,13,861,861,10777,7636,0]Ao[11085,13,861,861,11416,7636,0]Ao[11085,13,861,861,10761,7636,0]Ao[11085,13,861,861,10762,7636,0]Ba[11085,13,9813,9813,11075,7636,0]B`[11085,13,9813,9813,4507,7636,0]Ba[11085,13,9813,9813,10310,7636,0]B`[11085,13,9813,9813,8409,7636,0]Ba[11085,13,9813,9813,11439,7636,0]Ba[11085,13,9813,9813,11475,7636,0]Ao[11085,13,9813,9813,115,7636,0]B`[11085,13,9813,9813,5271,7636,0]Ao[11085,13,9813,9813,820,7636,0]Ba[11085,13,9813,9813,11417,7636,0]Ba[11085,13,9813,9813,11214,7636,0]Ba[11085,13,9813,9813,11212,7636,0]Ba[11085,13,9966,9966,10846,7636,0]Ba[11085,13,9966,9966,11018,7636,0]Ba[11085,13,9966,9966,11426,7636,0]Ba[11085,13,9966,9966,11336,7636,0]Ba[11085,13,9966,9966,11451,7636,0]B`[11085,13,5210,5210,4508,7636,0]Ba[11085,13,5210,5210,10852,7636,0]Ba[11085,13,5210,5210,10049,7636,0]Ba[11085,13,5210,5210,10048,7636,0]B`[11085,13,5623,5623,4509,7636,0]B`[11085,13,5623,5623,3479,7636,0]B`[11085,13,8313,8313,4510,7636,0]Ba[11085,13,8313,8313,11465,7636,0]B`[11085,13,5625,5625,4511,7636,0]B`[11085,13,5625,5625,3480,7636,0]Ba[11085,13,4584,4584,11255,7636,0]B`[11085,13,4584,4584,6158,7636,0]Ba[11085,13,4584,4584,10850,7636,0]Ba[11085,13,4584,4584,11460,7636,0]Ba[11085,13,4584,4584,10776,7636,0]Ba[11085,13,4584,4584,10309,7636,0]B`[11085,13,4584,4584,8401,7636,0]Ba[11085,13,4584,4584,10306,7636,0]Ba[11085,13,4584,4584,10768,7636,0]Ba[11085,13,4584,4584,11393,7636,0]Ba[11085,13,8181,8181,10044,7636,0]B`[11085,13,8181,8181,9853,7636,0]Ba[11085,13,8181,8181,10773,7636,0]Ba[11085,13,8181,8181,10779,7636,0]Ba[11085,13,8181,8181,10144,7636,0]B`[11085,13,4424,4424,3461,7636,0]B`[11085,13,4424,4424,7632,7636,0]B`[11085,13,4424,4424,4512,7636,0]Ao[11085,13,9778,9778,117,7636,0]Ao[11085,13,9778,9778,116,7636,0]Ba[11085,13,9778,9778,11301,7636,0]Ba[11085,13,9778,9778,10289,7636,0]Ba[11085,13,9430,9430,10307,7636,0]Ba[11085,13,9430,9430,10769,7636,0]B`[11085,13,9769,9769,4513,7636,0]B`[11085,13,8316,8316,4514,7636,0]B`[11085,13,9437,9437,4515,7636,0]Ba[11085,13,9437,9437,10839,7636,0]Ba[11085,13,9437,9437,10759,7636,0]Ba[11085,13,9437,9437,10043,7636,0]Ba[11085,13,9437,9437,10308,7636,0]Ba[11085,13,9437,9437,10136,7636,0]Ba[11085,13,9437,9437,10851,7636,0]B`[11085,13,9437,9437,8411,7636,0]Ba[11085,13,9437,9437,11254,7636,0]Ba[11085,13,9437,9437,11211,7636,0]Ba[11085,13,9437,9437,11484,7636,0]B`[11085,13,8319,8319,4516,7636,0]B`[11085,13,8319,8319,9855,7636,0]B`[11085,13,8319,8319,5246,7636,0]Ba[11085,13,8319,8319,10060,7636,0]B`[11085,13,8319,8319,3481,7636,0]An[11085,13,542,542,4517,7636,0]An[11085,13,542,542,3482,7636,0]B`[11085,13,8182,8182,3483,7636,0]B`[11085,13,4425,4425,3484,7636,0]B`[11085,13,2904,2904,4518,7636,0]B`[11085,13,2904,2904,3485,7636,0]B`[11085,13,9514,9514,4519,7636,0]B`[11085,13,9514,9514,5247,7636,0]Ba[11085,13,9514,9514,11333,7636,0]B`[11085,13,8331,8331,4520,7636,0]Ba[11085,13,8331,8331,11070,7636,0]B`[11085,13,8331,8331,3486,7636,0]Ba[11085,13,9457,9457,10035,7636,0]B`[11085,13,9457,9457,4521,7636,0]B`[11085,13,9457,9457,7608,7636,0]B`[11085,13,9457,9457,9832,7636,0]B`[11085,13,9457,9457,5228,7636,0]B`[11085,13,9457,9457,3487,7636,0]Ba[11085,13,8334,8334,11259,7636,0]B`[11085,13,8334,8334,4522,7636,0]An[11085,13,779,779,4523,7636,0]An[11085,13,779,779,3488,7636,0]B`[11085,13,2906,2906,4524,7636,0]Ba[11085,13,2906,2906,10311,7636,0]B`[11085,13,2906,2906,3489,7636,0]B`[11085,13,4418,4418,4525,7636,0]Ba[11085,13,4418,4418,11071,7636,0]B`[11085,13,4418,4418,3490,7636,0]Bb[11085,13,10021,10021,4526,7636,0]Bb[11085,13,10021,10021,3491,7636,0]Bb[11085,13,10245,10245,9600,7636,0]Bc[11085,13,10245,10245,11447,7636,0]Bb[11085,13,11182,11182,8418,7636,0]Bc[11085,13,11182,11182,10318,7636,0]Bb[11085,13,10724,10724,9840,7636,0]Bb[11085,13,11050,11050,4568,7636,0]B`[11085,13,9814,9814,3492,7636,0]Bb[11085,13,10991,10991,3493,7636,0]Bc[11085,13,11186,11186,11466,7636,0]Bb[11085,13,11188,11188,3494,7636,0]Bb[11085,13,11188,11188,5248,7636,0]Bc[11085,13,11188,11188,10061,7636,0]Bb[11085,13,10094,10094,3495,7636,0]Bb[11085,13,10096,10096,9841,7636,0]Bb[11085,13,10247,10247,9842,7636,0]Bb[11085,13,10730,10730,9843,7636,0]Bb[11085,13,11422,11422,3496,7636,0]Bb[11085,13,10993,10993,3497,7636,0]Bb[11085,13,10995,10995,3498,7636,0]Bb[11085,13,11190,11190,3499,7636,0]B`[11085,13,9970,9970,4529,7636,0]Ba[11085,13,9970,9970,10141,7636,0]Ba[11085,13,9970,9970,11427,7636,0]B`[11085,13,4434,4434,4530,7636,0]B`[11085,13,4434,4434,3500,7636,0]Ba[11085,13,4434,4434,10770,7636,0]B`[11085,13,8339,8339,4531,7636,0]B`[11085,13,8339,8339,3501,7636,0]Bc[11085,13,10732,10732,10855,7636,0]Bb[11085,13,10732,10732,4532,7636,0]Bb[11085,13,10732,10732,3502,7636,0]B`[11085,13,5201,5201,4533,7636,0]Ba[11085,13,5643,5643,10054,7636,0]B`[11085,13,5643,5643,3520,7636,0]B`[11085,13,5643,5643,7651,7636,0]B`[11085,13,5643,5643,4534,7636,0]B`[11085,13,5643,5643,3503,7636,0]B`[11085,13,5645,5645,3504,7636,0]B`[11085,13,8347,8347,4535,7636,0]Ba[11085,13,8347,8347,11415,7636,0]Ba[11085,13,8347,8347,11398,7636,0]Bb[11085,13,10825,10825,9585,7636,0]Bb[11085,13,10825,10825,6167,7636,0]Ba[11085,13,9815,9815,10857,7636,0]Bc[11085,13,10078,10078,10301,7636,0]B`[11085,13,9930,9930,9590,7636,0]Bc[11085,13,10243,10243,10045,7636,0]Am[11085,13,786,786,118,7636,0]B`[11085,13,6251,6251,5277,7636,0]B`[11085,13,5213,5213,8416,7636,0]B`[11085,13,5213,5213,9857,7636,0]B`[11085,13,5213,5213,4536,7636,0]B`[11085,13,5213,5213,9601,7636,0]Ba[11085,13,5213,5213,10319,7636,0]B`[11085,13,5213,5213,7646,7636,0]B`[11085,13,5213,5213,3505,7636,0]Bc[11085,13,10827,10827,11260,7636,0]An[11085,13,857,857,8393,7636,0]An[11085,13,857,857,4537,7636,0]Ao[11085,13,857,857,11060,7636,0]Ba[11085,13,5205,5205,11076,7636,0]Ba[11085,13,5205,5205,10047,7636,0]Ba[11085,13,9320,9320,10856,7636,0]B`[11085,13,9320,9320,7647,7636,0]Ba[11085,13,7660,7660,10128,7636,0]Ba[11085,13,7660,7660,11399,7636,0]Ba[11085,13,7660,7660,11015,7636,0]Ba[11085,13,7660,7660,11205,7636,0]Ba[11085,13,7660,7660,10125,7636,0]Ao[11085,13,866,866,11061,7636,0]Ao[11085,13,866,866,10033,7636,0]Ao[11085,13,868,868,10034,7636,0]Ao[11085,13,868,868,10763,7636,0]Ao[11085,13,868,868,11062,7636,0]Bc[11085,13,11400,11400,11489,7636,0]Bc[11085,13,11400,11400,11470,7636,0]B`[11085,13,9502,9502,9827,7636,0]Ba[11085,13,9502,9502,10137,7636,0]Ba[11085,13,9502,9502,10320,7636,0]B`[11085,13,6144,6144,9576,7636,0]Ba[11085,13,6144,6144,11429,7636,0]Ba[11085,13,6144,6144,11215,7636,0]Bc[11085,13,10276,10276,11395,7636,0]Bc[11085,13,10276,10276,11009,7636,0]Bc[11085,13,10276,10276,11303,7636,0]Bc[11085,13,10276,10276,10782,7636,0]Bc[11085,13,10276,10276,11216,7636,0]Bc[11085,13,10276,10276,10143,7636,0]Bc[11085,13,10276,10276,11461,7636,0]Bc[11085,13,10276,10276,11337,7636,0]Bc[11085,13,10276,10276,10843,7636,0]Bb[11085,13,10276,10276,9579,7636,0]Bc[11085,13,10276,10276,11425,7636,0]Bc[11085,13,10276,10276,11207,7636,0]Bc[11085,13,10276,10276,10321,7636,0]Bb[11085,13,10276,10276,7653,7636,0]Bc[11085,13,10276,10276,11394,7636,0]Bc[11085,13,10276,10276,11007,7636,0]Ba[11085,13,5216,5216,11396,7636,0]Ba[11085,13,5216,5216,10052,7636,0]Ba[11085,13,5216,5216,11068,7636,0]Ba[11085,13,5216,5216,11397,7636,0]B`[11085,13,5216,5216,8415,7636,0]Ba[11085,13,5216,5216,10030,7636,0]Ba[11085,13,5216,5216,10297,7636,0]Ba[11085,13,5216,5216,10780,7636,0]Ba[11085,13,5216,5216,11298,7636,0]Ba[11085,13,5216,5216,11217,7636,0]Ao[11085,13,794,794,11449,7636,0]Ao[11085,13,794,794,11058,7636,0]Ao[11085,13,794,794,10031,7636,0]B`[11085,13,8359,8359,4538,7636,0]B`[11085,13,8359,8359,3506,7636,0]B`[11085,13,9510,9510,4539,7636,0]B`[11085,13,9510,9510,3507,7636,0]Bb[11085,13,10006,10006,9839,7636,0]Bb[11085,13,10006,10006,4540,7636,0]Bb[11085,13,10006,10006,7618,7636,0]Bb[11085,13,10006,10006,6160,7636,0]Bb[11085,13,10006,10006,8397,7636,0]Bb[11085,13,10006,10006,3508,7636,0]Bc[11085,13,10006,10006,10132,7636,0]Al[11085,13,93,93,4561,7636,0]Am[11085,13,93,93,11445,7636,0]Al[11085,13,93,93,4541,7636,0]Am[11085,13,93,93,10142,7636,0]Am[11085,13,93,93,11428,7636,0]B`[11085,13,4452,4452,9597,7636,0]B`[11085,13,4452,4452,9851,7636,0]B`[11085,13,4452,4452,9852,7636,0]Ba[11085,13,4452,4452,10781,7636,0]B`[11085,13,4452,4452,8420,7636,0]An[11085,13,797,797,4565,7636,0]Am[11085,13,797,797,121,7636,0]An[11085,13,799,799,4542,7636,0]An[11085,13,799,799,8398,7636,0]An[11085,13,799,799,5249,7636,0]An[11085,13,799,799,3509,7636,0]B`[11085,13,6150,6150,4543,7636,0]B`[11085,13,4426,4426,9825,7636,0]B`[11085,13,4426,4426,9595,7636,0]B`[11085,13,4426,4426,5281,7636,0]Bb[11085,13,10727,10727,9826,7636,0]Bb[11085,13,10727,10727,9596,7636,0]Bb[11085,13,10727,10727,5282,7636,0]Bb[11085,13,10028,10028,7620,7636,0]Bb[11085,13,10028,10028,4562,7636,0]Bb[11085,13,10028,10028,4547,7636,0]Bb[11085,13,10028,10028,5264,7636,0]Bb[11085,13,10028,10028,7631,7636,0]Bb[11085,13,10028,10028,5272,7636,0]B`[11085,13,5084,5084,8434,7636,0]Ba[11085,13,5084,5084,11014,7636,0]Ba[11085,13,5084,5084,10058,7636,0]Ba[11085,13,5084,5084,11012,7636,0]B`[11085,13,5084,5084,6177,7636,0]B`[11085,13,5084,5084,7610,7636,0]Ao[11085,13,869,869,10129,7636,0]Ao[11085,13,869,869,11208,7636,0]Bb[11085,13,11081,11081,7609,7636,0]Ba[11085,13,6201,6201,10138,7636,0]B`[11085,13,6201,6201,7654,7636,0]Ba[11085,13,8329,8329,11069,7636,0]B`[11085,13,8329,8329,6176,7636,0]B`[11085,13,4432,4432,4583,7636,0]Ba[11085,13,9823,9823,10323,7636,0]Ba[11085,13,9823,9823,11261,7636,0]Ba[11085,13,9823,9823,11485,7636,0]B`[11085,13,9823,9823,4544,7636,0]An[11085,13,101,101,4545,7636,0]An[11085,13,101,101,3510,7636,0]Ba[11085,13,10813,10813,801,7636,0]Bb[11085,13,10813,10813,6163,7636,0]B`[11085,13,9968,9968,7621,7636,0]B`[11085,13,9968,9968,4563,7636,0]B`[11085,13,9968,9968,5273,7636,0]Bb[11085,13,11280,11280,8433,7636,0]Af[11085,2,5190,0,0,0,0]0B`[11085,13,9379,9379,10305,805,0]Ao[11085,13,9379,9379,6179,805,0]B`[11085,13,3529,3529,11471,805,0]B`[11085,13,3529,3529,11253,805,0]B`[11085,13,3529,3529,11450,805,0]Ao[11085,13,3529,3529,4474,805,0]Ao[11085,13,3529,3529,3464,805,0]An[11085,13,847,847,11242,805,0]Am[11085,13,849,849,7612,805,0]An[11085,13,849,849,11206,805,0]An[11085,13,849,849,10291,805,0]An[11085,13,849,849,10290,805,0]Am[11085,13,849,849,7623,805,0]An[11085,13,849,849,11256,805,0]Am[11085,13,849,849,4475,805,0]Am[11085,13,849,849,7611,805,0]Am[11085,13,849,849,9575,805,0]Ao[11085,13,5285,5285,8405,805,0]Ao[11085,13,5285,5285,4476,805,0]Am[11085,13,853,853,9854,805,0]Am[11085,13,853,853,4477,805,0]Am[11085,13,853,853,9599,805,0]An[11085,13,853,853,11446,805,0]Ao[11085,13,7666,7666,4478,805,0]Ao[11085,13,7666,7666,8417,805,0]B`[11085,13,7666,7666,10317,805,0]Ao[11085,13,5288,5288,4479,805,0]Ao[11085,13,5288,5288,3465,805,0]Ao[11085,13,9875,9875,8391,805,0]0B`[11085,13,9875,9875,10838,805,0]B`[11085,13,9875,9875,10037,805,0]B`[11085,13,9875,9875,10758,805,0]Bb[11085,13,10019,10019,11332,805,0]Bb[11085,13,10019,10019,11438,805,0]Bb[11085,13,10019,10019,11392,805,0]Bb[11085,13,10019,10019,11448,805,0]B`[11085,13,9512,9512,11257,805,0]B`[11085,13,9512,9512,11243,805,0]B`[11085,13,9512,9512,11413,805,0]B`[11085,13,9512,9512,11424,805,0]Am[11085,13,856,856,7615,805,0]An[11085,13,856,856,10038,805,0]Am[11085,13,856,856,8395,805,0]Bb[11085,13,10020,10020,10760,805,0]Bb[11085,13,10020,10020,11244,805,0]Ao[11085,13,9513,9513,8392,805,0]B`[11085,13,9513,9513,10127,805,0]Ao[11085,13,9513,9513,9577,805,0]B`[11085,13,9513,9513,11059,805,0]Ao[11085,13,9878,9878,4480,805,0]Ao[11085,13,9878,9878,3466,805,0]Ao[11085,13,5290,5290,3467,805,0]Ao[11085,13,6198,6198,4481,805,0]Am[11085,13,125,125,4482,805,0]Am[11085,13,125,125,5275,805,0]Am[11085,13,125,125,9844,805,0]Am[11085,13,125,125,9835,805,0]Am[11085,13,125,125,5242,805,0]Am[11085,13,125,125,9831,805,0]Am[11085,13,125,125,5224,805,0]An[11085,13,125,125,10322,805,0]An[11085,13,125,125,11334,805,0]Am[11085,13,125,125,3468,805,0]B`[11085,13,7677,7677,10134,805,0]B`[11085,13,7677,7677,10053,805,0]B`[11085,13,7677,7677,11065,805,0]B`[11085,13,7677,7677,11483,805,0]B`[11085,13,7677,7677,11008,805,0]B`[11085,13,7677,7677,11066,805,0]B`[11085,13,7677,7677,11246,805,0]B`[11085,13,7677,7677,10294,805,0]B`[11085,13,7677,7677,10130,805,0]Ao[11085,13,7677,7677,7616,805,0]B`[11085,13,7677,7677,10764,805,0]B`[11085,13,7677,7677,10131,805,0]B`[11085,13,7677,7677,10840,805,0]B`[11085,13,7677,7677,11469,805,0]B`[11085,13,7677,7677,11299,805,0]Ao[11085,13,7677,7677,7624,805,0]Ao[11085,13,7677,7677,4483,805,0]Ao[11085,13,7677,7677,5261,805,0]B`[11085,13,7677,7677,11302,805,0]Ao[11085,13,7679,7679,8419,805,0]B`[11085,13,7679,7679,11209,805,0]Ao[11085,13,7679,7679,8396,805,0]B`[11085,13,7679,7679,10765,805,0]B`[11085,13,7679,7679,10140,805,0]B`[11085,13,7679,7679,11414,805,0]B`[11085,13,7679,7679,11248,805,0]Bb[11085,13,10864,10864,11249,805,0]Bb[11085,13,10864,10864,10775,805,0]Bb[11085,13,10864,10864,11011,805,0]Ba[11085,13,10864,10864,5274,805,0]Ba[11085,13,10864,10864,5223,805,0]Bb[11085,13,10864,10864,10295,805,0]B`[11085,13,5147,5147,11250,805,0]B`[11085,13,9313,9313,11251,805,0]B`[11085,13,9315,9315,10296,805,0]Ao[11085,13,9315,9315,4484,805,0]Ao[11085,13,9888,9888,9838,805,0]Ao[11085,13,9888,9888,9834,805,0]Ao[11085,13,9890,9890,4485,805,0]Ao[11085,13,5357,5357,6173,805,0]Ao[11085,13,5357,5357,5262,805,0]Ao[11085,13,5357,5357,4486,805,0]B`[11085,13,5357,5357,10845,805,0]B`[11085,13,5357,5357,11017,805,0]B`[11085,13,5357,5357,11335,805,0]Ao[11085,13,5357,5357,9580,805,0]B`[11085,13,5357,5357,11300,805,0]B`[11085,13,5357,5357,10036,805,0]B`[11085,13,5357,5357,11010,805,0]Ao[11085,13,5357,5357,5243,805,0]Ao[11085,13,5357,5357,5225,805,0]Ao[11085,13,5357,5357,3469,805,0]B`[11085,13,1364,1364,11252,805,0]Ao[11085,13,5171,5171,4487,805,0]Ao[11085,13,5171,5171,4551,805,0]Ao[11085,13,5365,5365,4488,805,0]Ao[11085,13,6247,6247,3518,805,0]Ao[11085,13,4423,4423,4489,805,0]Ao[11085,13,4423,4423,5238,805,0]Ao[11085,13,4423,4423,9591,805,0]Ao[11085,13,4423,4423,4569,805,0]B`[11085,13,4423,4423,10050,805,0]B`[11085,13,4423,4423,10841,805,0]B`[11085,13,4423,4423,10853,805,0]Ao[11085,13,4423,4423,7625,805,0]An[11085,13,4423,4423,803,805,0]Ao[11085,13,9603,9603,4490,805,0]Ao[11085,13,9603,9603,5244,805,0]Ao[11085,13,9603,9603,5226,805,0]B`[11085,13,9603,9603,10766,805,0]Ao[11085,13,9603,9603,9574,805,0]Ba[11085,13,10726,10726,9592,805,0]Ba[11085,13,10726,10726,4570,805,0]Bb[11085,13,10726,10726,10051,805,0]Bb[11085,13,10726,10726,10842,805,0]Bb[11085,13,10726,10726,10854,805,0]Ba[11085,13,10726,10726,7626,805,0]B`[11085,13,10726,10726,804,805,0]Ao[11085,13,4402,4402,4491,805,0]Ao[11085,13,4402,4402,3470,805,0]Ao[11085,13,5174,5174,4492,805,0]Ao[11085,13,5174,5174,3471,805,0]Ao[11085,13,5176,5176,4493,805,0]Ao[11085,13,5176,5176,3472,805,0]Ao[11085,13,1861,1861,4494,805,0]Ao[11085,13,1861,1861,3473,805,0]B`[11085,13,5617,5617,10300,805,0]B`[11085,13,5617,5617,10847,805,0]B`[11085,13,5617,5617,10133,805,0]B`[11085,13,5617,5617,10041,805,0]Ao[11085,13,5617,5617,4495,805,0]Ao[11085,13,5617,5617,3442,805,0]Ao[11085,13,5617,5617,5254,805,0]Ao[11085,13,5180,5180,4496,805,0]Ao[11085,13,5180,5180,3474,805,0]Ao[11085,13,4404,4404,4497,805,0]B`[11085,13,8306,8306,11258,805,0]Ao[11085,13,8306,8306,4498,805,0]Ao[11085,13,8306,8306,7613,805,0]B`[11085,13,4413,4413,10135,805,0]B`[11085,13,4413,4413,10767,805,0]Ao[11085,13,4413,4413,9837,805,0]Ao[11085,13,4413,4413,9586,805,0]Ao[11085,13,4413,4413,4499,805,0]Ao[11085,13,4413,4413,3443,805,0]Ao[11085,13,4413,4413,3459,805,0]Ao[11085,13,6224,6224,4500,805,0]Ao[11085,13,6224,6224,3444,805,0]Ao[11085,13,6224,6224,3460,805,0]Bb[11085,13,10809,10809,11016,805,0]Ao[11085,13,4416,4416,9582,805,0]Ao[11085,13,4416,4416,9589,805,0]B`[11085,13,4416,4416,10292,805,0]Ao[11085,13,4416,4416,3457,805,0]Ao[11085,13,5086,5086,9584,805,0]B`[11085,13,5086,5086,10848,805,0]B`[11085,13,5086,5086,11067,805,0]B`[11085,13,5086,5086,10042,805,0]B`[11085,13,5086,5086,11013,805,0]B`[11085,13,5086,5086,11210,805,0]Ao[11085,13,4419,4419,3519,805,0]Ao[11085,13,4419,4419,4501,805,0]Ao[11085,13,4419,4419,8410,805,0]B`[11085,13,4419,4419,10046,805,0]Ao[11085,13,4419,4419,3475,805,0]Ao[11085,13,5187,5187,4502,805,0]Ao[11085,13,5187,5187,5245,805,0]Ao[11085,13,5187,5187,5227,805,0]Ao[11085,13,5187,5187,5259,805,0]Ao[11085,13,9812,9812,4503,805,0]Ao[11085,13,9812,9812,3476,805,0]Ba[11085,13,10740,10740,3477,805,0]Ba[11085,13,10740,10740,4504,805,0]An[11085,13,9523,9523,107,805,0]Am[11085,13,537,537,3478,805,0]Am[11085,13,537,537,6174,805,0]An[11085,13,537,537,10126,805,0]An[11085,13,537,537,10772,805,0]Am[11085,13,537,537,4505,805,0]B`[11085,13,6183,6183,10055,805,0]B`[11085,13,6183,6183,11487,805,0]Ao[11085,13,2899,2899,6175,805,0]B`[11085,13,5359,5359,10139,805,0]Ao[11085,13,5359,5359,4506,805,0]Ao[11085,13,5359,5359,5241,805,0]Al[11085,13,861,861,819,805,0]Am[11085,13,861,861,5263,805,0]Am[11085,13,861,861,8412,805,0]An[11085,13,861,861,11074,805,0]An[11085,13,861,861,10777,805,0]An[11085,13,861,861,11416,805,0]An[11085,13,861,861,10761,805,0]An[11085,13,861,861,10762,805,0]B`[11085,13,9813,9813,11075,805,0]Ao[11085,13,9813,9813,4507,805,0]B`[11085,13,9813,9813,10310,805,0]Ao[11085,13,9813,9813,8409,805,0]B`[11085,13,9813,9813,11439,805,0]B`[11085,13,9813,9813,11475,805,0]An[11085,13,9813,9813,115,805,0]Ao[11085,13,9813,9813,5271,805,0]An[11085,13,9813,9813,820,805,0]B`[11085,13,9813,9813,11417,805,0]B`[11085,13,9813,9813,11214,805,0]B`[11085,13,9813,9813,11212,805,0]B`[11085,13,9966,9966,10846,805,0]B`[11085,13,9966,9966,11018,805,0]B`[11085,13,9966,9966,11426,805,0]B`[11085,13,9966,9966,11336,805,0]B`[11085,13,9966,9966,11451,805,0]Ao[11085,13,5210,5210,4508,805,0]B`[11085,13,5210,5210,10852,805,0]B`[11085,13,5210,5210,10049,805,0]B`[11085,13,5210,5210,10048,805,0]Ao[11085,13,5623,5623,4509,805,0]Ao[11085,13,5623,5623,3479,805,0]Ao[11085,13,8313,8313,4510,805,0]B`[11085,13,8313,8313,11465,805,0]Ao[11085,13,5625,5625,4511,805,0]Ao[11085,13,5625,5625,3480,805,0]B`[11085,13,4584,4584,11255,805,0]Ao[11085,13,4584,4584,6158,805,0]B`[11085,13,4584,4584,10850,805,0]B`[11085,13,4584,4584,11460,805,0]B`[11085,13,4584,4584,10776,805,0]B`[11085,13,4584,4584,10309,805,0]Ao[11085,13,4584,4584,8401,805,0]B`[11085,13,4584,4584,10306,805,0]B`[11085,13,4584,4584,10768,805,0]B`[11085,13,4584,4584,11393,805,0]B`[11085,13,8181,8181,10044,805,0]Ao[11085,13,8181,8181,9853,805,0]B`[11085,13,8181,8181,10773,805,0]B`[11085,13,8181,8181,10779,805,0]B`[11085,13,8181,8181,10144,805,0]Ao[11085,13,4424,4424,3461,805,0]Ao[11085,13,4424,4424,7632,805,0]Ao[11085,13,4424,4424,4512,805,0]An[11085,13,9778,9778,117,805,0]An[11085,13,9778,9778,116,805,0]B`[11085,13,9778,9778,11301,805,0]B`[11085,13,9778,9778,10289,805,0]B`[11085,13,9430,9430,10307,805,0]B`[11085,13,9430,9430,10769,805,0]Ao[11085,13,9769,9769,4513,805,0]Ao[11085,13,8316,8316,4514,805,0]Ao[11085,13,9437,9437,4515,805,0]B`[11085,13,9437,9437,10839,805,0]B`[11085,13,9437,9437,10759,805,0]B`[11085,13,9437,9437,10043,805,0]B`[11085,13,9437,9437,10308,805,0]B`[11085,13,9437,9437,10136,805,0]B`[11085,13,9437,9437,10851,805,0]Ao[11085,13,9437,9437,8411,805,0]B`[11085,13,9437,9437,11254,805,0]B`[11085,13,9437,9437,11211,805,0]B`[11085,13,9437,9437,11484,805,0]Ao[11085,13,8319,8319,4516,805,0]Ao[11085,13,8319,8319,9855,805,0]Ao[11085,13,8319,8319,5246,805,0]B`[11085,13,8319,8319,10060,805,0]Ao[11085,13,8319,8319,3481,805,0]Am[11085,13,542,542,4517,805,0]Am[11085,13,542,542,3482,805,0]Ao[11085,13,8182,8182,3483,805,0]Ao[11085,13,4425,4425,3484,805,0]Ao[11085,13,2904,2904,4518,805,0]Ao[11085,13,2904,2904,3485,805,0]Ao[11085,13,9514,9514,4519,805,0]Ao[11085,13,9514,9514,5247,805,0]B`[11085,13,9514,9514,11333,805,0]Ao[11085,13,8331,8331,4520,805,0]B`[11085,13,8331,8331,11070,805,0]Ao[11085,13,8331,8331,3486,805,0]B`[11085,13,9457,9457,10035,805,0]Ao[11085,13,9457,9457,4521,805,0]Ao[11085,13,9457,9457,7608,805,0]Ao[11085,13,9457,9457,9832,805,0]Ao[11085,13,9457,9457,5228,805,0]Ao[11085,13,9457,9457,3487,805,0]B`[11085,13,8334,8334,11259,805,0]Ao[11085,13,8334,8334,4522,805,0]Am[11085,13,779,779,4523,805,0]Am[11085,13,779,779,3488,805,0]Ao[11085,13,2906,2906,4524,805,0]B`[11085,13,2906,2906,10311,805,0]Ao[11085,13,2906,2906,3489,805,0]Ao[11085,13,4418,4418,4525,805,0]B`[11085,13,4418,4418,11071,805,0]Ao[11085,13,4418,4418,3490,805,0]Ba[11085,13,10021,10021,4526,805,0]Ba[11085,13,10021,10021,3491,805,0]Ba[11085,13,10245,10245,9600,805,0]Bb[11085,13,10245,10245,11447,805,0]Ba[11085,13,11182,11182,8418,805,0]Bb[11085,13,11182,11182,10318,805,0]Ba[11085,13,10724,10724,9840,805,0]Ba[11085,13,11050,11050,4568,805,0]Ao[11085,13,9814,9814,3492,805,0]Ba[11085,13,10991,10991,3493,805,0]Bb[11085,13,11186,11186,11466,805,0]Ba[11085,13,11188,11188,3494,805,0]Ba[11085,13,11188,11188,5248,805,0]Bb[11085,13,11188,11188,10061,805,0]Ba[11085,13,10094,10094,3495,805,0]Ba[11085,13,10096,10096,9841,805,0]Ba[11085,13,10247,10247,9842,805,0]Ba[11085,13,10730,10730,9843,805,0]Ba[11085,13,11422,11422,3496,805,0]Ba[11085,13,10993,10993,3497,805,0]Ba[11085,13,10995,10995,3498,805,0]Ba[11085,13,11190,11190,3499,805,0]Ao[11085,13,9970,9970,4529,805,0]B`[11085,13,9970,9970,10141,805,0]B`[11085,13,9970,9970,11427,805,0]Ao[11085,13,4434,4434,4530,805,0]Ao[11085,13,4434,4434,3500,805,0]B`[11085,13,4434,4434,10770,805,0]Ao[11085,13,8339,8339,4531,805,0]Ao[11085,13,8339,8339,3501,805,0]Bb[11085,13,10732,10732,10855,805,0]Ba[11085,13,10732,10732,4532,805,0]Ba[11085,13,10732,10732,3502,805,0]Ao[11085,13,5201,5201,4533,805,0]B`[11085,13,5643,5643,10054,805,0]Ao[11085,13,5643,5643,3520,805,0]Ao[11085,13,5643,5643,7651,805,0]Ao[11085,13,5643,5643,4534,805,0]Ao[11085,13,5643,5643,3503,805,0]Ao[11085,13,5645,5645,3504,805,0]Ao[11085,13,8347,8347,4535,805,0]B`[11085,13,8347,8347,11415,805,0]B`[11085,13,8347,8347,11398,805,0]Ba[11085,13,10825,10825,9585,805,0]Ba[11085,13,10825,10825,6167,805,0]B`[11085,13,9815,9815,10857,805,0]Bb[11085,13,10078,10078,10301,805,0]Ao[11085,13,9930,9930,9590,805,0]Bb[11085,13,10243,10243,10045,805,0]Al[11085,13,786,786,118,805,0]Ao[11085,13,6251,6251,5277,805,0]Ao[11085,13,5213,5213,8416,805,0]Ao[11085,13,5213,5213,9857,805,0]Ao[11085,13,5213,5213,4536,805,0]Ao[11085,13,5213,5213,9601,805,0]B`[11085,13,5213,5213,10319,805,0]Ao[11085,13,5213,5213,7646,805,0]Ao[11085,13,5213,5213,3505,805,0]Bb[11085,13,10827,10827,11260,805,0]Am[11085,13,857,857,8393,805,0]Am[11085,13,857,857,4537,805,0]An[11085,13,857,857,11060,805,0]B`[11085,13,5205,5205,11076,805,0]B`[11085,13,5205,5205,10047,805,0]B`[11085,13,9320,9320,10856,805,0]Ao[11085,13,9320,9320,7647,805,0]B`[11085,13,7660,7660,10128,805,0]B`[11085,13,7660,7660,11399,805,0]B`[11085,13,7660,7660,11015,805,0]B`[11085,13,7660,7660,11205,805,0]B`[11085,13,7660,7660,10125,805,0]An[11085,13,866,866,11061,805,0]An[11085,13,866,866,10033,805,0]An[11085,13,868,868,10034,805,0]An[11085,13,868,868,10763,805,0]An[11085,13,868,868,11062,805,0]Bb[11085,13,11400,11400,11489,805,0]Bb[11085,13,11400,11400,11470,805,0]Ao[11085,13,9502,9502,9827,805,0]B`[11085,13,9502,9502,10137,805,0]B`[11085,13,9502,9502,10320,805,0]Ao[11085,13,6144,6144,9576,805,0]B`[11085,13,6144,6144,11429,805,0]B`[11085,13,6144,6144,11215,805,0]Bb[11085,13,10276,10276,11395,805,0]Bb[11085,13,10276,10276,11009,805,0]Bb[11085,13,10276,10276,11303,805,0]Bb[11085,13,10276,10276,10782,805,0]Bb[11085,13,10276,10276,11216,805,0]Bb[11085,13,10276,10276,10143,805,0]Bb[11085,13,10276,10276,11461,805,0]Bb[11085,13,10276,10276,11337,805,0]Bb[11085,13,10276,10276,10843,805,0]Ba[11085,13,10276,10276,9579,805,0]Bb[11085,13,10276,10276,11425,805,0]Bb[11085,13,10276,10276,11207,805,0]Bb[11085,13,10276,10276,10321,805,0]Ba[11085,13,10276,10276,7653,805,0]Bb[11085,13,10276,10276,11394,805,0]Bb[11085,13,10276,10276,11007,805,0]B`[11085,13,5216,5216,11396,805,0]B`[11085,13,5216,5216,10052,805,0]B`[11085,13,5216,5216,11068,805,0]B`[11085,13,5216,5216,11397,805,0]Ao[11085,13,5216,5216,8415,805,0]B`[11085,13,5216,5216,10030,805,0]B`[11085,13,5216,5216,10297,805,0]B`[11085,13,5216,5216,10780,805,0]B`[11085,13,5216,5216,11298,805,0]B`[11085,13,5216,5216,11217,805,0]An[11085,13,794,794,11449,805,0]An[11085,13,794,794,11058,805,0]An[11085,13,794,794,10031,805,0]Ao[11085,13,8359,8359,4538,805,0]Ao[11085,13,8359,8359,3506,805,0]Ao[11085,13,9510,9510,4539,805,0]Ao[11085,13,9510,9510,3507,805,0]Ba[11085,13,10006,10006,9839,805,0]Ba[11085,13,10006,10006,4540,805,0]Ba[11085,13,10006,10006,7618,805,0]Ba[11085,13,10006,10006,6160,805,0]Ba[11085,13,10006,10006,8397,805,0]Ba[11085,13,10006,10006,3508,805,0]Bb[11085,13,10006,10006,10132,805,0]Ak[11085,13,93,93,4561,805,0]Al[11085,13,93,93,11445,805,0]Ak[11085,13,93,93,4541,805,0]Al[11085,13,93,93,10142,805,0]Al[11085,13,93,93,11428,805,0]Ao[11085,13,4452,4452,9597,805,0]Ao[11085,13,4452,4452,9851,805,0]Ao[11085,13,4452,4452,9852,805,0]B`[11085,13,4452,4452,10781,805,0]Ao[11085,13,4452,4452,8420,805,0]Am[11085,13,797,797,4565,805,0]Al[11085,13,797,797,121,805,0]Am[11085,13,799,799,4542,805,0]Am[11085,13,799,799,8398,805,0]Am[11085,13,799,799,5249,805,0]Am[11085,13,799,799,3509,805,0]Ao[11085,13,6150,6150,4543,805,0]Ao[11085,13,4426,4426,9825,805,0]Ao[11085,13,4426,4426,9595,805,0]Ao[11085,13,4426,4426,5281,805,0]Ba[11085,13,10727,10727,9826,805,0]Ba[11085,13,10727,10727,9596,805,0]Ba[11085,13,10727,10727,5282,805,0]Ba[11085,13,10028,10028,7620,805,0]Ba[11085,13,10028,10028,4562,805,0]Ba[11085,13,10028,10028,4547,805,0]Ba[11085,13,10028,10028,5264,805,0]Ba[11085,13,10028,10028,7631,805,0]Ba[11085,13,10028,10028,5272,805,0]Ao[11085,13,5084,5084,8434,805,0]B`[11085,13,5084,5084,11014,805,0]B`[11085,13,5084,5084,10058,805,0]B`[11085,13,5084,5084,11012,805,0]Ao[11085,13,5084,5084,6177,805,0]Ao[11085,13,5084,5084,7610,805,0]An[11085,13,869,869,10129,805,0]An[11085,13,869,869,11208,805,0]Ba[11085,13,11081,11081,7609,805,0]B`[11085,13,6201,6201,10138,805,0]Ao[11085,13,6201,6201,7654,805,0]B`[11085,13,8329,8329,11069,805,0]Ao[11085,13,8329,8329,6176,805,0]Ao[11085,13,4432,4432,4583,805,0]B`[11085,13,9823,9823,10323,805,0]B`[11085,13,9823,9823,11261,805,0]B`[11085,13,9823,9823,11485,805,0]Ao[11085,13,9823,9823,4544,805,0]Am[11085,13,101,101,4545,805,0]Am[11085,13,101,101,3510,805,0]B`[11085,13,10813,10813,801,805,0]Ba[11085,13,10813,10813,6163,805,0]Ao[11085,13,9968,9968,7621,805,0]Ao[11085,13,9968,9968,4563,805,0]Ao[11085,13,9968,9968,5273,805,0]Ba[11085,13,11280,11280,8433,805,0]Af[11085,2,5190,0,0,0,0]Am[11085,13,1861,1861,4494,0,0]Am[11085,13,537,537,6174,813,0]An[11085,13,537,537,10126,813,0]An[11085,13,537,537,10772,813,0]An[11085,14,5213,5213,10319,0,0]Am[11085,13,6198,6198,4481,0,0]Am[11085,13,4404,4404,4497,0,0]Ba[11085,13,9379,9379,10305,7636,0]B`[11085,13,9379,9379,6179,7636,0]Ba[11085,13,3529,3529,11471,7636,0]Ba[11085,13,3529,3529,11253,7636,0]Ba[11085,13,3529,3529,11450,7636,0]B`[11085,13,3529,3529,4474,7636,0]B`[11085,13,3529,3529,3464,7636,0]Ao[11085,13,847,847,11242,7636,0]An[11085,13,849,849,7612,7636,0]Ao[11085,13,849,849,11206,7636,0]Ao[11085,13,849,849,10291,7636,0]Ao[11085,13,849,849,10290,7636,0]An[11085,13,849,849,7623,7636,0]Ao[11085,13,849,849,11256,7636,0]An[11085,13,849,849,4475,7636,0]An[11085,13,849,849,7611,7636,0]An[11085,13,849,849,9575,7636,0]B`[11085,13,5285,5285,8405,7636,0]B`[11085,13,5285,5285,4476,7636,0]An[11085,13,853,853,9854,7636,0]An[11085,13,853,853,4477,7636,0]An[11085,13,853,853,9599,7636,0]Ao[11085,13,853,853,11446,7636,0]B`[11085,13,7666,7666,4478,7636,0]B`[11085,13,7666,7666,8417,7636,0]Ba[11085,13,7666,7666,10317,7636,0]B`[11085,13,5288,5288,4479,7636,0]B`[11085,13,5288,5288,3465,7636,0]B`[11085,13,9875,9875,8391,7636,0]Ba[11085,13,9875,9875,10838,7636,0]Ba[11085,13,9875,9875,10037,7636,0]Ba[11085,13,9875,9875,10758,7636,0]Bc[11085,13,10019,10019,11332,7636,0]Bc[11085,13,10019,10019,11438,7636,0]Bc[11085,13,10019,10019,11392,7636,0]Bc[11085,13,10019,10019,11448,7636,0]Ba[11085,13,9512,9512,11257,7636,0]Ba[11085,13,9512,9512,11243,7636,0]Ba[11085,13,9512,9512,11413,7636,0]Ba[11085,13,9512,9512,11424,7636,0]An[11085,13,856,856,7615,7636,0]Ao[11085,13,856,856,10038,7636,0]An[11085,13,856,856,8395,7636,0]Bc[11085,13,10020,10020,10760,7636,0]Bc[11085,13,10020,10020,11244,7636,0]B`[11085,13,9513,9513,8392,7636,0]Ba[11085,13,9513,9513,10127,7636,0]B`[11085,13,9513,9513,9577,7636,0]Ba[11085,13,9513,9513,11059,7636,0]B`[11085,13,9878,9878,4480,7636,0]B`[11085,13,9878,9878,3466,7636,0]B`[11085,13,5290,5290,3467,7636,0]B`[11085,13,6198,6198,4481,7636,0]An[11085,13,125,125,4482,7636,0]An[11085,13,125,125,5275,7636,0]An[11085,13,125,125,9844,7636,0]An[11085,13,125,125,9835,7636,0]An[11085,13,125,125,5242,7636,0]An[11085,13,125,125,9831,7636,0]An[11085,13,125,125,5224,7636,0]Ao[11085,13,125,125,10322,7636,0]Ao[11085,13,125,125,11334,7636,0]An[11085,13,125,125,3468,7636,0]Ba[11085,13,7677,7677,10134,7636,0]Ba[11085,13,7677,7677,10053,7636,0]Ba[11085,13,7677,7677,11065,7636,0]Ba[11085,13,7677,7677,11483,7636,0]Ba[11085,13,7677,7677,11008,7636,0]Ba[11085,13,7677,7677,11066,7636,0]Ba[11085,13,7677,7677,11246,7636,0]Ba[11085,13,7677,7677,10294,7636,0]Ba[11085,13,7677,7677,10130,7636,0]B`[11085,13,7677,7677,7616,7636,0]Ba[11085,13,7677,7677,10764,7636,0]Ba[11085,13,7677,7677,10131,7636,0]Ba[11085,13,7677,7677,10840,7636,0]Ba[11085,13,7677,7677,11469,7636,0]Ba[11085,13,7677,7677,11299,7636,0]B`[11085,13,7677,7677,7624,7636,0]B`[11085,13,7677,7677,4483,7636,0]B`[11085,13,7677,7677,5261,7636,0]Ba[11085,13,7677,7677,11302,7636,0]B`[11085,13,7679,7679,8419,7636,0]Ba[11085,13,7679,7679,11209,7636,0]B`[11085,13,7679,7679,8396,7636,0]Ba[11085,13,7679,7679,10765,7636,0]Ba[11085,13,7679,7679,10140,7636,0]Ba[11085,13,7679,7679,11414,7636,0]Ba[11085,13,7679,7679,11248,7636,0]Bc[11085,13,10864,10864,11249,7636,0]Bc[11085,13,10864,10864,10775,7636,0]Bc[11085,13,10864,10864,11011,7636,0]Bb[11085,13,10864,10864,5274,7636,0]Bb[11085,13,10864,10864,5223,7636,0]Bc[11085,13,10864,10864,10295,7636,0]Ba[11085,13,5147,5147,11250,7636,0]Ba[11085,13,9313,9313,11251,7636,0]Ba[11085,13,9315,9315,10296,7636,0]B`[11085,13,9315,9315,4484,7636,0]B`[11085,13,9888,9888,9838,7636,0]B`[11085,13,9888,9888,9834,7636,0]B`[11085,13,9890,9890,4485,7636,0]B`[11085,13,5357,5357,6173,7636,0]B`[11085,13,5357,5357,5262,7636,0]B`[11085,13,5357,5357,4486,7636,0]Ba[11085,13,5357,5357,10845,7636,0]Ba[11085,13,5357,5357,11017,7636,0]Ba[11085,13,5357,5357,11335,7636,0]B`[11085,13,5357,5357,9580,7636,0]Ba[11085,13,5357,5357,11300,7636,0]Ba[11085,13,5357,5357,10036,7636,0]Ba[11085,13,5357,5357,11010,7636,0]B`[11085,13,5357,5357,5243,7636,0]B`[11085,13,5357,5357,5225,7636,0]B`[11085,13,5357,5357,3469,7636,0]Ba[11085,13,1364,1364,11252,7636,0]B`[11085,13,5171,5171,4487,7636,0]B`[11085,13,5171,5171,4551,7636,0]B`[11085,13,5365,5365,4488,7636,0]B`[11085,13,6247,6247,3518,7636,0]B`[11085,13,4423,4423,4489,7636,0]B`[11085,13,4423,4423,5238,7636,0]B`[11085,13,4423,4423,9591,7636,0]B`[11085,13,4423,4423,4569,7636,0]Ba[11085,13,4423,4423,10050,7636,0]Ba[11085,13,4423,4423,10841,7636,0]Ba[11085,13,4423,4423,10853,7636,0]B`[11085,13,4423,4423,7625,7636,0]Ao[11085,13,4423,4423,803,7636,0]B`[11085,13,9603,9603,4490,7636,0]B`[11085,13,9603,9603,5244,7636,0]B`[11085,13,9603,9603,5226,7636,0]Ba[11085,13,9603,9603,10766,7636,0]B`[11085,13,9603,9603,9574,7636,0]Bb[11085,13,10726,10726,9592,7636,0]Bb[11085,13,10726,10726,4570,7636,0]Bc[11085,13,10726,10726,10051,7636,0]Bc[11085,13,10726,10726,10842,7636,0]Bc[11085,13,10726,10726,10854,7636,0]Bb[11085,13,10726,10726,7626,7636,0]Ba[11085,13,10726,10726,804,7636,0]B`[11085,13,4402,4402,4491,7636,0]B`[11085,13,4402,4402,3470,7636,0]B`[11085,13,5174,5174,4492,7636,0]B`[11085,13,5174,5174,3471,7636,0]B`[11085,13,5176,5176,4493,7636,0]B`[11085,13,5176,5176,3472,7636,0]B`[11085,13,1861,1861,4494,7636,0]B`[11085,13,1861,1861,3473,7636,0]Ba[11085,13,5617,5617,10300,7636,0]Ba[11085,13,5617,5617,10847,7636,0]Ba[11085,13,5617,5617,10133,7636,0]Ba[11085,13,5617,5617,10041,7636,0]B`[11085,13,5617,5617,4495,7636,0]B`[11085,13,5617,5617,3442,7636,0]B`[11085,13,5617,5617,5254,7636,0]B`[11085,13,5180,5180,4496,7636,0]B`[11085,13,5180,5180,3474,7636,0]B`[11085,13,4404,4404,4497,7636,0]Ba[11085,13,8306,8306,11258,7636,0]B`[11085,13,8306,8306,4498,7636,0]B`[11085,13,8306,8306,7613,7636,0]Ba[11085,13,4413,4413,10135,7636,0]Ba[11085,13,4413,4413,10767,7636,0]B`[11085,13,4413,4413,9837,7636,0]B`[11085,13,4413,4413,9586,7636,0]B`[11085,13,4413,4413,4499,7636,0]B`[11085,13,4413,4413,3443,7636,0]B`[11085,13,4413,4413,3459,7636,0]B`[11085,13,6224,6224,4500,7636,0]B`[11085,13,6224,6224,3444,7636,0]B`[11085,13,6224,6224,3460,7636,0]Bc[11085,13,10809,10809,11016,7636,0]B`[11085,13,4416,4416,9582,7636,0]B`[11085,13,4416,4416,9589,7636,0]Ba[11085,13,4416,4416,10292,7636,0]B`[11085,13,4416,4416,3457,7636,0]B`[11085,13,5086,5086,9584,7636,0]Ba[11085,13,5086,5086,10848,7636,0]Ba[11085,13,5086,5086,11067,7636,0]Ba[11085,13,5086,5086,10042,7636,0]Ba[11085,13,5086,5086,11013,7636,0]Ba[11085,13,5086,5086,11210,7636,0]B`[11085,13,4419,4419,3519,7636,0]B`[11085,13,4419,4419,4501,7636,0]B`[11085,13,4419,4419,8410,7636,0]Ba[11085,13,4419,4419,10046,7636,0]B`[11085,13,4419,4419,3475,7636,0]B`[11085,13,5187,5187,4502,7636,0]B`[11085,13,5187,5187,5245,7636,0]B`[11085,13,5187,5187,5227,7636,0]B`[11085,13,5187,5187,5259,7636,0]B`[11085,13,9812,9812,4503,7636,0]B`[11085,13,9812,9812,3476,7636,0]Bb[11085,13,10740,10740,3477,7636,0]Bb[11085,13,10740,10740,4504,7636,0]Ao[11085,13,9523,9523,107,7636,0]An[11085,13,537,537,3478,7636,0]An[11085,13,537,537,6174,7636,0]Ao[11085,13,537,537,10126,7636,0]Ao[11085,13,537,537,10772,7636,0]An[11085,13,537,537,4505,7636,0]Ba[11085,13,6183,6183,10055,7636,0]Ba[11085,13,6183,6183,11487,7636,0]B`[11085,13,2899,2899,6175,7636,0]Ba[11085,13,5359,5359,10139,7636,0]B`[11085,13,5359,5359,4506,7636,0]B`[11085,13,5359,5359,5241,7636,0]Am[11085,13,861,861,819,7636,0]An[11085,13,861,861,5263,7636,0]An[11085,13,861,861,8412,7636,0]Ao[11085,13,861,861,11074,7636,0]Ao[11085,13,861,861,10777,7636,0]Ao[11085,13,861,861,11416,7636,0]Ao[11085,13,861,861,10761,7636,0]Ao[11085,13,861,861,10762,7636,0]Ba[11085,13,9813,9813,11075,7636,0]B`[11085,13,9813,9813,4507,7636,0]Ba[11085,13,9813,9813,10310,7636,0]B`[11085,13,9813,9813,8409,7636,0]Ba[11085,13,9813,9813,11439,7636,0]Ba[11085,13,9813,9813,11475,7636,0]Ao[11085,13,9813,9813,115,7636,0]B`[11085,13,9813,9813,5271,7636,0]Ao[11085,13,9813,9813,820,7636,0]Ba[11085,13,9813,9813,11417,7636,0]Ba[11085,13,9813,9813,11214,7636,0]Ba[11085,13,9813,9813,11212,7636,0]Ba[11085,13,9966,9966,10846,7636,0]Ba[11085,13,9966,9966,11018,7636,0]Ba[11085,13,9966,9966,11426,7636,0]Ba[11085,13,9966,9966,11336,7636,0]Ba[11085,13,9966,9966,11451,7636,0]B`[11085,13,5210,5210,4508,7636,0]Ba[11085,13,5210,5210,10852,7636,0]Ba[11085,13,5210,5210,10049,7636,0]Ba[11085,13,5210,5210,10048,7636,0]B`[11085,13,5623,5623,4509,7636,0]B`[11085,13,5623,5623,3479,7636,0]B`[11085,13,8313,8313,4510,7636,0]Ba[11085,13,8313,8313,11465,7636,0]B`[11085,13,5625,5625,4511,7636,0]B`[11085,13,5625,5625,3480,7636,0]Ba[11085,13,4584,4584,11255,7636,0]B`[11085,13,4584,4584,6158,7636,0]Ba[11085,13,4584,4584,10850,7636,0]Ba[11085,13,4584,4584,11460,7636,0]Ba[11085,13,4584,4584,10776,7636,0]Ba[11085,13,4584,4584,10309,7636,0]B`[11085,13,4584,4584,8401,7636,0]Ba[11085,13,4584,4584,10306,7636,0]Ba[11085,13,4584,4584,10768,7636,0]Ba[11085,13,4584,4584,11393,7636,0]Ba[11085,13,8181,8181,10044,7636,0]B`[11085,13,8181,8181,9853,7636,0]Ba[11085,13,8181,8181,10773,7636,0]Ba[11085,13,8181,8181,10779,7636,0]Ba[11085,13,8181,8181,10144,7636,0]B`[11085,13,4424,4424,3461,7636,0]B`[11085,13,4424,4424,7632,7636,0]B`[11085,13,4424,4424,4512,7636,0]Ao[11085,13,9778,9778,117,7636,0]Ao[11085,13,9778,9778,116,7636,0]Ba[11085,13,9778,9778,11301,7636,0]Ba[11085,13,9778,9778,10289,7636,0]Ba[11085,13,9430,9430,10307,7636,0]Ba[11085,13,9430,9430,10769,7636,0]B`[11085,13,9769,9769,4513,7636,0]B`[11085,13,8316,8316,4514,7636,0]B`[11085,13,9437,9437,4515,7636,0]Ba[11085,13,9437,9437,10839,7636,0]Ba[11085,13,9437,9437,10759,7636,0]Ba[11085,13,9437,9437,10043,7636,0]Ba[11085,13,9437,9437,10308,7636,0]Ba[11085,13,9437,9437,10136,7636,0]Ba[11085,13,9437,9437,10851,7636,0]B`[11085,13,9437,9437,8411,7636,0]Ba[11085,13,9437,9437,11254,7636,0]Ba[11085,13,9437,9437,11211,7636,0]Ba[11085,13,9437,9437,11484,7636,0]B`[11085,13,8319,8319,4516,7636,0]B`[11085,13,8319,8319,9855,7636,0]B`[11085,13,8319,8319,5246,7636,0]Ba[11085,13,8319,8319,10060,7636,0]B`[11085,13,8319,8319,3481,7636,0]An[11085,13,542,542,4517,7636,0]An[11085,13,542,542,3482,7636,0]B`[11085,13,8182,8182,3483,7636,0]B`[11085,13,4425,4425,3484,7636,0]B`[11085,13,2904,2904,4518,7636,0]B`[11085,13,2904,2904,3485,7636,0]B`[11085,13,9514,9514,4519,7636,0]B`[11085,13,9514,9514,5247,7636,0]Ba[11085,13,9514,9514,11333,7636,0]B`[11085,13,8331,8331,4520,7636,0]Ba[11085,13,8331,8331,11070,7636,0]B`[11085,13,8331,8331,3486,7636,0]Ba[11085,13,9457,9457,10035,7636,0]B`[11085,13,9457,9457,4521,7636,0]B`[11085,13,9457,9457,7608,7636,0]B`[11085,13,9457,9457,9832,7636,0]B`[11085,13,9457,9457,5228,7636,0]B`[11085,13,9457,9457,3487,7636,0]Ba[11085,13,8334,8334,11259,7636,0]B`[11085,13,8334,8334,4522,7636,0]An[11085,13,779,779,4523,7636,0]An[11085,13,779,779,3488,7636,0]B`[11085,13,2906,2906,4524,7636,0]Ba[11085,13,2906,2906,10311,7636,0]B`[11085,13,2906,2906,3489,7636,0]B`[11085,13,4418,4418,4525,7636,0]Ba[11085,13,4418,4418,11071,7636,0]B`[11085,13,4418,4418,3490,7636,0]Bb[11085,13,10021,10021,4526,7636,0]Bb[11085,13,10021,10021,3491,7636,0]Bb[11085,13,10245,10245,9600,7636,0]Bc[11085,13,10245,10245,11447,7636,0]Bb[11085,13,11182,11182,8418,7636,0]Bc[11085,13,11182,11182,10318,7636,0]Bb[11085,13,10724,10724,9840,7636,0]Bb[11085,13,11050,11050,4568,7636,0]B`[11085,13,9814,9814,3492,7636,0]Bb[11085,13,10991,10991,3493,7636,0]Bc[11085,13,11186,11186,11466,7636,0]Bb[11085,13,11188,11188,3494,7636,0]Bb[11085,13,11188,11188,5248,7636,0]Bc[11085,13,11188,11188,10061,7636,0]Bb[11085,13,10094,10094,3495,7636,0]Bb[11085,13,10096,10096,9841,7636,0]Bb[11085,13,10247,10247,9842,7636,0]Bb[11085,13,10730,10730,9843,7636,0]Bb[11085,13,11422,11422,3496,7636,0]Bb[11085,13,10993,10993,3497,7636,0]Bb[11085,13,10995,10995,3498,7636,0]Bb[11085,13,11190,11190,3499,7636,0]B`[11085,13,9970,9970,4529,7636,0]Ba[11085,13,9970,9970,10141,7636,0]Ba[11085,13,9970,9970,11427,7636,0]B`[11085,13,4434,4434,4530,7636,0]B`[11085,13,4434,4434,3500,7636,0]Ba[11085,13,4434,4434,10770,7636,0]B`[11085,13,8339,8339,4531,7636,0]B`[11085,13,8339,8339,3501,7636,0]Bc[11085,13,10732,10732,10855,7636,0]Bb[11085,13,10732,10732,4532,7636,0]Bb[11085,13,10732,10732,3502,7636,0]B`[11085,13,5201,5201,4533,7636,0]Ba[11085,13,5643,5643,10054,7636,0]B`[11085,13,5643,5643,3520,7636,0]B`[11085,13,5643,5643,7651,7636,0]B`[11085,13,5643,5643,4534,7636,0]B`[11085,13,5643,5643,3503,7636,0]B`[11085,13,5645,5645,3504,7636,0]B`[11085,13,8347,8347,4535,7636,0]Ba[11085,13,8347,8347,11415,7636,0]Ba[11085,13,8347,8347,11398,7636,0]Bb[11085,13,10825,10825,9585,7636,0]Bb[11085,13,10825,10825,6167,7636,0]Ba[11085,13,9815,9815,10857,7636,0]Bc[11085,13,10078,10078,10301,7636,0]B`[11085,13,9930,9930,9590,7636,0]Bc[11085,13,10243,10243,10045,7636,0]Am[11085,13,786,786,118,7636,0]B`[11085,13,6251,6251,5277,7636,0]B`[11085,13,5213,5213,8416,7636,0]B`[11085,13,5213,5213,9857,7636,0]B`[11085,13,5213,5213,4536,7636,0]B`[11085,13,5213,5213,9601,7636,0]Ba[11085,13,5213,5213,10319,7636,0]B`[11085,13,5213,5213,7646,7636,0]B`[11085,13,5213,5213,3505,7636,0]Bc[11085,13,10827,10827,11260,7636,0]An[11085,13,857,857,8393,7636,0]An[11085,13,857,857,4537,7636,0]Ao[11085,13,857,857,11060,7636,0]Ba[11085,13,5205,5205,11076,7636,0]Ba[11085,13,5205,5205,10047,7636,0]Ba[11085,13,9320,9320,10856,7636,0]B`[11085,13,9320,9320,7647,7636,0]Ba[11085,13,7660,7660,10128,7636,0]Ba[11085,13,7660,7660,11399,7636,0]Ba[11085,13,7660,7660,11015,7636,0]Ba[11085,13,7660,7660,11205,7636,0]Ba[11085,13,7660,7660,10125,7636,0]Ao[11085,13,866,866,11061,7636,0]Ao[11085,13,866,866,10033,7636,0]Ao[11085,13,868,868,10034,7636,0]Ao[11085,13,868,868,10763,7636,0]Ao[11085,13,868,868,11062,7636,0]Bc[11085,13,11400,11400,11489,7636,0]Bc[11085,13,11400,11400,11470,7636,0]B`[11085,13,9502,9502,9827,7636,0]Ba[11085,13,9502,9502,10137,7636,0]Ba[11085,13,9502,9502,10320,7636,0]B`[11085,13,6144,6144,9576,7636,0]Ba[11085,13,6144,6144,11429,7636,0]Ba[11085,13,6144,6144,11215,7636,0]Bc[11085,13,10276,10276,11395,7636,0]Bc[11085,13,10276,10276,11009,7636,0]Bc[11085,13,10276,10276,11303,7636,0]Bc[11085,13,10276,10276,10782,7636,0]Bc[11085,13,10276,10276,11216,7636,0]Bc[11085,13,10276,10276,10143,7636,0]Bc[11085,13,10276,10276,11461,7636,0]Bc[11085,13,10276,10276,11337,7636,0]Bc[11085,13,10276,10276,10843,7636,0]Bb[11085,13,10276,10276,9579,7636,0]Bc[11085,13,10276,10276,11425,7636,0]Bc[11085,13,10276,10276,11207,7636,0]Bc[11085,13,10276,10276,10321,7636,0]Bb[11085,13,10276,10276,7653,7636,0]Bc[11085,13,10276,10276,11394,7636,0]Bc[11085,13,10276,10276,11007,7636,0]Ba[11085,13,5216,5216,11396,7636,0]Ba[11085,13,5216,5216,10052,7636,0]Ba[11085,13,5216,5216,11068,7636,0]Ba[11085,13,5216,5216,11397,7636,0]B`[11085,13,5216,5216,8415,7636,0]Ba[11085,13,5216,5216,10030,7636,0]Ba[11085,13,5216,5216,10297,7636,0]Ba[11085,13,5216,5216,10780,7636,0]Ba[11085,13,5216,5216,11298,7636,0]Ba[11085,13,5216,5216,11217,7636,0]Ao[11085,13,794,794,11449,7636,0]Ao[11085,13,794,794,11058,7636,0]Ao[11085,13,794,794,10031,7636,0]B`[11085,13,8359,8359,4538,7636,0]B`[11085,13,8359,8359,3506,7636,0]B`[11085,13,9510,9510,4539,7636,0]B`[11085,13,9510,9510,3507,7636,0]Bb[11085,13,10006,10006,9839,7636,0]Bb[11085,13,10006,10006,4540,7636,0]Bb[11085,13,10006,10006,7618,7636,0]Bb[11085,13,10006,10006,6160,7636,0]Bb[11085,13,10006,10006,8397,7636,0]Bb[11085,13,10006,10006,3508,7636,0]Bc[11085,13,10006,10006,10132,7636,0]Al[11085,13,93,93,4561,7636,0]Am[11085,13,93,93,11445,7636,0]Al[11085,13,93,93,4541,7636,0]Am[11085,13,93,93,10142,7636,0]Am[11085,13,93,93,11428,7636,0]B`[11085,13,4452,4452,9597,7636,0]B`[11085,13,4452,4452,9851,7636,0]B`[11085,13,4452,4452,9852,7636,0]Ba[11085,13,4452,4452,10781,7636,0]B`[11085,13,4452,4452,8420,7636,0]An[11085,13,797,797,4565,7636,0]Am[11085,13,797,797,121,7636,0]An[11085,13,799,799,4542,7636,0]An[11085,13,799,799,8398,7636,0]An[11085,13,799,799,5249,7636,0]An[11085,13,799,799,3509,7636,0]B`[11085,13,6150,6150,4543,7636,0]B`[11085,13,4426,4426,9825,7636,0]B`[11085,13,4426,4426,9595,7636,0]B`[11085,13,4426,4426,5281,7636,0]Bb[11085,13,10727,10727,9826,7636,0]Bb[11085,13,10727,10727,9596,7636,0]Bb[11085,13,10727,10727,5282,7636,0]Bb[11085,13,10028,10028,7620,7636,0]Bb[11085,13,10028,10028,4562,7636,0]Bb[11085,13,10028,10028,4547,7636,0]Bb[11085,13,10028,10028,5264,7636,0]Bb[11085,13,10028,10028,7631,7636,0]Bb[11085,13,10028,10028,5272,7636,0]B`[11085,13,5084,5084,8434,7636,0]Ba[11085,13,5084,5084,11014,7636,0]Ba[11085,13,5084,5084,10058,7636,0]Ba[11085,13,5084,5084,11012,7636,0]B`[11085,13,5084,5084,6177,7636,0]B`[11085,13,5084,5084,7610,7636,0]Ao[11085,13,869,869,10129,7636,0]Ao[11085,13,869,869,11208,7636,0]Bb[11085,13,11081,11081,7609,7636,0]Ba[11085,13,6201,6201,10138,7636,0]B`[11085,13,6201,6201,7654,7636,0]Ba[11085,13,8329,8329,11069,7636,0]B`[11085,13,8329,8329,6176,7636,0]B`[11085,13,4432,4432,4583,7636,0]Ba[11085,13,9823,9823,10323,7636,0]Ba[11085,13,9823,9823,11261,7636,0]Ba[11085,13,9823,9823,11485,7636,0]B`[11085,13,9823,9823,4544,7636,0]An[11085,13,101,101,4545,7636,0]An[11085,13,101,101,3510,7636,0]Ba[11085,13,10813,10813,801,7636,0]Bb[11085,13,10813,10813,6163,7636,0]B`[11085,13,9968,9968,7621,7636,0]B`[11085,13,9968,9968,4563,7636,0]B`[11085,13,9968,9968,5273,7636,0]Bb[11085,13,11280,11280,8433,7636,0]B`[11085,13,9379,9379,10305,814,0]Ao[11085,13,9379,9379,6179,814,0]B`[11085,13,3529,3529,11471,814,0]B`[11085,13,3529,3529,11253,814,0]B`[11085,13,3529,3529,11450,814,0]Ao[11085,13,3529,3529,4474,814,0]Ao[11085,13,3529,3529,3464,814,0]An[11085,13,847,847,11242,814,0]Am[11085,13,849,849,7612,814,0]An[11085,13,849,849,11206,814,0]An[11085,13,849,849,10291,814,0]An[11085,13,849,849,10290,814,0]Am[11085,13,849,849,7623,814,0]An[11085,13,849,849,11256,814,0]Am[11085,13,849,849,4475,814,0]Am[11085,13,849,849,7611,814,0]Am[11085,13,849,849,9575,814,0]Ao[11085,13,5285,5285,8405,814,0]Ao[11085,13,5285,5285,4476,814,0]Am[11085,13,853,853,9854,814,0]Am[11085,13,853,853,4477,814,0]Am[11085,13,853,853,9599,814,0]An[11085,13,853,853,11446,814,0]Ao[11085,13,7666,7666,4478,814,0]Ao[11085,13,7666,7666,8417,814,0]B`[11085,13,7666,7666,10317,814,0]Ao[11085,13,5288,5288,4479,814,0]Ao[11085,13,5288,5288,3465,814,0]Ao[11085,13,9875,9875,8391,814,0]B`[11085,13,9875,9875,10838,814,0]B`[11085,13,9875,9875,10037,814,0]B`[11085,13,9875,9875,10758,814,0]Bb[11085,13,10019,10019,11332,814,0]Bb[11085,13,10019,10019,11438,814,0]Bb[11085,13,10019,10019,11392,814,0]Bb[11085,13,10019,10019,11448,814,0]B`[11085,13,9512,9512,11257,814,0]B`[11085,13,9512,9512,11243,814,0]B`[11085,13,9512,9512,11413,814,0]B`[11085,13,9512,9512,11424,814,0]Am[11085,13,856,856,7615,814,0]An[11085,13,856,856,10038,814,0]Am[11085,13,856,856,8395,814,0]Bb[11085,13,10020,10020,10760,814,0]Bb[11085,13,10020,10020,11244,814,0]Ao[11085,13,9513,9513,8392,814,0]B`[11085,13,9513,9513,10127,814,0]Ao[11085,13,9513,9513,9577,814,0]B`[11085,13,9513,9513,11059,814,0]Ao[11085,13,9878,9878,4480,814,0]Ao[11085,13,9878,9878,3466,814,0]Ao[11085,13,5290,5290,3467,814,0]Ao[11085,13,6198,6198,4481,814,0]Am[11085,13,125,125,4482,814,0]Am[11085,13,125,125,5275,814,0]Am[11085,13,125,125,9844,814,0]Am[11085,13,125,125,9835,814,0]Am[11085,13,125,125,5242,814,0]Am[11085,13,125,125,9831,814,0]Am[11085,13,125,125,5224,814,0]An[11085,13,125,125,10322,814,0]An[11085,13,125,125,11334,814,0]Am[11085,13,125,125,3468,814,0]B`[11085,13,7677,7677,10134,814,0]B`[11085,13,7677,7677,10053,814,0]B`[11085,13,7677,7677,11065,814,0]B`[11085,13,7677,7677,11483,814,0]B`[11085,13,7677,7677,11008,814,0]B`[11085,13,7677,7677,11066,814,0]B`[11085,13,7677,7677,11246,814,0]B`[11085,13,7677,7677,10294,814,0]B`[11085,13,7677,7677,10130,814,0]Ao[11085,13,7677,7677,7616,814,0]B`[11085,13,7677,7677,10764,814,0]B`[11085,13,7677,7677,10131,814,0]B`[11085,13,7677,7677,10840,814,0]B`[11085,13,7677,7677,11469,814,0]B`[11085,13,7677,7677,11299,814,0]Ao[11085,13,7677,7677,7624,814,0]Ao[11085,13,7677,7677,4483,814,0]Ao[11085,13,7677,7677,5261,814,0]B`[11085,13,7677,7677,11302,814,0]Ao[11085,13,7679,7679,8419,814,0]B`[11085,13,7679,7679,11209,814,0]Ao[11085,13,7679,7679,8396,814,0]B`[11085,13,7679,7679,10765,814,0]B`[11085,13,7679,7679,10140,814,0]B`[11085,13,7679,7679,11414,814,0]B`[11085,13,7679,7679,11248,814,0]Bb[11085,13,10864,10864,11249,814,0]Bb[11085,13,10864,10864,10775,814,0]Bb[11085,13,10864,10864,11011,814,0]Ba[11085,13,10864,10864,5274,814,0]Ba[11085,13,10864,10864,5223,814,0]Bb[11085,13,10864,10864,10295,814,0]B`[11085,13,5147,5147,11250,814,0]B`[11085,13,9313,9313,11251,814,0]B`[11085,13,9315,9315,10296,814,0]Ao[11085,13,9315,9315,4484,814,0]Ao[11085,13,9888,9888,9838,814,0]Ao[11085,13,9888,9888,9834,814,0]Ao[11085,13,9890,9890,4485,814,0]Ao[11085,13,5357,5357,6173,814,0]Ao[11085,13,5357,5357,5262,814,0]Ao[11085,13,5357,5357,4486,814,0]B`[11085,13,5357,5357,10845,814,0]B`[11085,13,5357,5357,11017,814,0]B`[11085,13,5357,5357,11335,814,0]Ao[11085,13,5357,5357,9580,814,0]B`[11085,13,5357,5357,11300,814,0]B`[11085,13,5357,5357,10036,814,0]B`[11085,13,5357,5357,11010,814,0]Ao[11085,13,5357,5357,5243,814,0]Ao[11085,13,5357,5357,5225,814,0]Ao[11085,13,5357,5357,3469,814,0]B`[11085,13,1364,1364,11252,814,0]Ao[11085,13,5171,5171,4487,814,0]Ao[11085,13,5171,5171,4551,814,0]Ao[11085,13,5365,5365,4488,814,0]Ao[11085,13,6247,6247,3518,814,0]Ao[11085,13,4423,4423,4489,814,0]Ao[11085,13,4423,4423,5238,814,0]Ao[11085,13,4423,4423,9591,814,0]Ao[11085,13,4423,4423,4569,814,0]B`[11085,13,4423,4423,10050,814,0]B`[11085,13,4423,4423,10841,814,0]B`[11085,13,4423,4423,10853,814,0]Ao[11085,13,4423,4423,7625,814,0]An[11085,13,4423,4423,803,814,0]Ao[11085,13,9603,9603,4490,814,0]Ao[11085,13,9603,9603,5244,814,0]Ao[11085,13,9603,9603,5226,814,0]B`[11085,13,9603,9603,10766,814,0]Ao[11085,13,9603,9603,9574,814,0]Ba[11085,13,10726,10726,9592,814,0]Ba[11085,13,10726,10726,4570,814,0]Bb[11085,13,10726,10726,10051,814,0]Bb[11085,13,10726,10726,10842,814,0]Bb[11085,13,10726,10726,10854,814,0]Ba[11085,13,10726,10726,7626,814,0]B`[11085,13,10726,10726,804,814,0]Ao[11085,13,4402,4402,4491,814,0]Ao[11085,13,4402,4402,3470,814,0]Ao[11085,13,5174,5174,4492,814,0]Ao[11085,13,5174,5174,3471,814,0]Ao[11085,13,5176,5176,4493,814,0]Ao[11085,13,5176,5176,3472,814,0]Ao[11085,13,1861,1861,4494,814,0]Ao[11085,13,1861,1861,3473,814,0]B`[11085,13,5617,5617,10300,814,0]B`[11085,13,5617,5617,10847,814,0]B`[11085,13,5617,5617,10133,814,0]B`[11085,13,5617,5617,10041,814,0]Ao[11085,13,5617,5617,4495,814,0]Ao[11085,13,5617,5617,3442,814,0]Ao[11085,13,5617,5617,5254,814,0]Ao[11085,13,5180,5180,4496,814,0]Ao[11085,13,5180,5180,3474,814,0]Ao[11085,13,4404,4404,4497,814,0]B`[11085,13,8306,8306,11258,814,0]Ao[11085,13,8306,8306,4498,814,0]Ao[11085,13,8306,8306,7613,814,0]B`[11085,13,4413,4413,10135,814,0]B`[11085,13,4413,4413,10767,814,0]Ao[11085,13,4413,4413,9837,814,0]Ao[11085,13,4413,4413,9586,814,0]Ao[11085,13,4413,4413,4499,814,0]Ao[11085,13,4413,4413,3443,814,0]Ao[11085,13,4413,4413,3459,814,0]Ao[11085,13,6224,6224,4500,814,0]Ao[11085,13,6224,6224,3444,814,0]Ao[11085,13,6224,6224,3460,814,0]Bb[11085,13,10809,10809,11016,814,0]Ao[11085,13,4416,4416,9582,814,0]Ao[11085,13,4416,4416,9589,814,0]B`[11085,13,4416,4416,10292,814,0]Ao[11085,13,4416,4416,3457,814,0]Ao[11085,13,5086,5086,9584,814,0]B`[11085,13,5086,5086,10848,814,0]B`[11085,13,5086,5086,11067,814,0]B`[11085,13,5086,5086,10042,814,0]B`[11085,13,5086,5086,11013,814,0]B`[11085,13,5086,5086,11210,814,0]Ao[11085,13,4419,4419,3519,814,0]Ao[11085,13,4419,4419,4501,814,0]Ao[11085,13,4419,4419,8410,814,0]B`[11085,13,4419,4419,10046,814,0]Ao[11085,13,4419,4419,3475,814,0]Ao[11085,13,5187,5187,4502,814,0]Ao[11085,13,5187,5187,5245,814,0]Ao[11085,13,5187,5187,5227,814,0]Ao[11085,13,5187,5187,5259,814,0]Ao[11085,13,9812,9812,4503,814,0]Ao[11085,13,9812,9812,3476,814,0]Ba[11085,13,10740,10740,3477,814,0]Ba[11085,13,10740,10740,4504,814,0]An[11085,13,9523,9523,107,814,0]Am[11085,13,537,537,3478,814,0]Am[11085,13,537,537,6174,814,0]An[11085,13,537,537,10126,814,0]An[11085,13,537,537,10772,814,0]Am[11085,13,537,537,4505,814,0]B`[11085,13,6183,6183,10055,814,0]B`[11085,13,6183,6183,11487,814,0]Ao[11085,13,2899,2899,6175,814,0]B`[11085,13,5359,5359,10139,814,0]Ao[11085,13,5359,5359,4506,814,0]Ao[11085,13,5359,5359,5241,814,0]Al[11085,13,861,861,819,814,0]Am[11085,13,861,861,5263,814,0]Am[11085,13,861,861,8412,814,0]An[11085,13,861,861,11074,814,0]An[11085,13,861,861,10777,814,0]An[11085,13,861,861,11416,814,0]An[11085,13,861,861,10761,814,0]An[11085,13,861,861,10762,814,0]B`[11085,13,9813,9813,11075,814,0]Ao[11085,13,9813,9813,4507,814,0]B`[11085,13,9813,9813,10310,814,0]Ao[11085,13,9813,9813,8409,814,0]B`[11085,13,9813,9813,11439,814,0]B`[11085,13,9813,9813,11475,814,0]An[11085,13,9813,9813,115,814,0]Ao[11085,13,9813,9813,5271,814,0]An[11085,13,9813,9813,820,814,0]B`[11085,13,9813,9813,11417,814,0]B`[11085,13,9813,9813,11214,814,0]B`[11085,13,9813,9813,11212,814,0]B`[11085,13,9966,9966,10846,814,0]B`[11085,13,9966,9966,11018,814,0]B`[11085,13,9966,9966,11426,814,0]B`[11085,13,9966,9966,11336,814,0]B`[11085,13,9966,9966,11451,814,0]Ao[11085,13,5210,5210,4508,814,0]B`[11085,13,5210,5210,10852,814,0]B`[11085,13,5210,5210,10049,814,0]B`[11085,13,5210,5210,10048,814,0]Ao[11085,13,5623,5623,4509,814,0]Ao[11085,13,5623,5623,3479,814,0]Ao[11085,13,8313,8313,4510,814,0]B`[11085,13,8313,8313,11465,814,0]Ao[11085,13,5625,5625,4511,814,0]Ao[11085,13,5625,5625,3480,814,0]B`[11085,13,4584,4584,11255,814,0]Ao[11085,13,4584,4584,6158,814,0]B`[11085,13,4584,4584,10850,814,0]B`[11085,13,4584,4584,11460,814,0]B`[11085,13,4584,4584,10776,814,0]B`[11085,13,4584,4584,10309,814,0]Ao[11085,13,4584,4584,8401,814,0]B`[11085,13,4584,4584,10306,814,0]B`[11085,13,4584,4584,10768,814,0]B`[11085,13,4584,4584,11393,814,0]B`[11085,13,8181,8181,10044,814,0]Ao[11085,13,8181,8181,9853,814,0]B`[11085,13,8181,8181,10773,814,0]B`[11085,13,8181,8181,10779,814,0]B`[11085,13,8181,8181,10144,814,0]Ao[11085,13,4424,4424,3461,814,0]Ao[11085,13,4424,4424,7632,814,0]Ao[11085,13,4424,4424,4512,814,0]An[11085,13,9778,9778,117,814,0]An[11085,13,9778,9778,116,814,0]B`[11085,13,9778,9778,11301,814,0]B`[11085,13,9778,9778,10289,814,0]B`[11085,13,9430,9430,10307,814,0]B`[11085,13,9430,9430,10769,814,0]Ao[11085,13,9769,9769,4513,814,0]Ao[11085,13,8316,8316,4514,814,0]Ao[11085,13,9437,9437,4515,814,0]B`[11085,13,9437,9437,10839,814,0]B`[11085,13,9437,9437,10759,814,0]B`[11085,13,9437,9437,10043,814,0]B`[11085,13,9437,9437,10308,814,0]B`[11085,13,9437,9437,10136,814,0]B`[11085,13,9437,9437,10851,814,0]Ao[11085,13,9437,9437,8411,814,0]B`[11085,13,9437,9437,11254,814,0]B`[11085,13,9437,9437,11211,814,0]B`[11085,13,9437,9437,11484,814,0]Ao[11085,13,8319,8319,4516,814,0]Ao[11085,13,8319,8319,9855,814,0]Ao[11085,13,8319,8319,5246,814,0]B`[11085,13,8319,8319,10060,814,0]Ao[11085,13,8319,8319,3481,814,0]Am[11085,13,542,542,4517,814,0]Am[11085,13,542,542,3482,814,0]Ao[11085,13,8182,8182,3483,814,0]Ao[11085,13,4425,4425,3484,814,0]Ao[11085,13,2904,2904,4518,814,0]Ao[11085,13,2904,2904,3485,814,0]Ao[11085,13,9514,9514,4519,814,0]Ao[11085,13,9514,9514,5247,814,0]B`[11085,13,9514,9514,11333,814,0]Ao[11085,13,8331,8331,4520,814,0]B`[11085,13,8331,8331,11070,814,0]Ao[11085,13,8331,8331,3486,814,0]B`[11085,13,9457,9457,10035,814,0]Ao[11085,13,9457,9457,4521,814,0]Ao[11085,13,9457,9457,7608,814,0]Ao[11085,13,9457,9457,9832,814,0]Ao[11085,13,9457,9457,5228,814,0]Ao[11085,13,9457,9457,3487,814,0]B`[11085,13,8334,8334,11259,814,0]Ao[11085,13,8334,8334,4522,814,0]Am[11085,13,779,779,4523,814,0]Am[11085,13,779,779,3488,814,0]Ao[11085,13,2906,2906,4524,814,0]B`[11085,13,2906,2906,10311,814,0]Ao[11085,13,2906,2906,3489,814,0]Ao[11085,13,4418,4418,4525,814,0]B`[11085,13,4418,4418,11071,814,0]Ao[11085,13,4418,4418,3490,814,0]Ba[11085,13,10021,10021,4526,814,0]Ba[11085,13,10021,10021,3491,814,0]Ba[11085,13,10245,10245,9600,814,0]Bb[11085,13,10245,10245,11447,814,0]Ba[11085,13,11182,11182,8418,814,0]Bb[11085,13,11182,11182,10318,814,0]Ba[11085,13,10724,10724,9840,814,0]Ba[11085,13,11050,11050,4568,814,0]Ao[11085,13,9814,9814,3492,814,0]Ba[11085,13,10991,10991,3493,814,0]Bb[11085,13,11186,11186,11466,814,0]Ba[11085,13,11188,11188,3494,814,0]Ba[11085,13,11188,11188,5248,814,0]Bb[11085,13,11188,11188,10061,814,0]Ba[11085,13,10094,10094,3495,814,0]Ba[11085,13,10096,10096,9841,814,0]Ba[11085,13,10247,10247,9842,814,0]Ba[11085,13,10730,10730,9843,814,0]Ba[11085,13,11422,11422,3496,814,0]Ba[11085,13,10993,10993,3497,814,0]Ba[11085,13,10995,10995,3498,814,0]Ba[11085,13,11190,11190,3499,814,0]Ao[11085,13,9970,9970,4529,814,0]B`[11085,13,9970,9970,10141,814,0]B`[11085,13,9970,9970,11427,814,0]Ao[11085,13,4434,4434,4530,814,0]Ao[11085,13,4434,4434,3500,814,0]B`[11085,13,4434,4434,10770,814,0]Ao[11085,13,8339,8339,4531,814,0]Ao[11085,13,8339,8339,3501,814,0]Bb[11085,13,10732,10732,10855,814,0]Ba[11085,13,10732,10732,4532,814,0]Ba[11085,13,10732,10732,3502,814,0]Ao[11085,13,5201,5201,4533,814,0]B`[11085,13,5643,5643,10054,814,0]Ao[11085,13,5643,5643,3520,814,0]Ao[11085,13,5643,5643,7651,814,0]Ao[11085,13,5643,5643,4534,814,0]Ao[11085,13,5643,5643,3503,814,0]Ao[11085,13,5645,5645,3504,814,0]Ao[11085,13,8347,8347,4535,814,0]B`[11085,13,8347,8347,11415,814,0]B`[11085,13,8347,8347,11398,814,0]Ba[11085,13,10825,10825,9585,814,0]Ba[11085,13,10825,10825,6167,814,0]B`[11085,13,9815,9815,10857,814,0]Bb[11085,13,10078,10078,10301,814,0]Ao[11085,13,9930,9930,9590,814,0]Bb[11085,13,10243,10243,10045,814,0]Al[11085,13,786,786,118,814,0]Ao[11085,13,6251,6251,5277,814,0]Ao[11085,13,5213,5213,8416,814,0]Ao[11085,13,5213,5213,9857,814,0]Ao[11085,13,5213,5213,4536,814,0]Ao[11085,13,5213,5213,9601,814,0]B`[11085,13,5213,5213,10319,814,0]Ao[11085,13,5213,5213,7646,814,0]Ao[11085,13,5213,5213,3505,814,0]Bb[11085,13,10827,10827,11260,814,0]Am[11085,13,857,857,8393,814,0]Am[11085,13,857,857,4537,814,0]An[11085,13,857,857,11060,814,0]B`[11085,13,5205,5205,11076,814,0]B`[11085,13,5205,5205,10047,814,0]B`[11085,13,9320,9320,10856,814,0]Ao[11085,13,9320,9320,7647,814,0]B`[11085,13,7660,7660,10128,814,0]B`[11085,13,7660,7660,11399,814,0]B`[11085,13,7660,7660,11015,814,0]B`[11085,13,7660,7660,11205,814,0]B`[11085,13,7660,7660,10125,814,0]An[11085,13,866,866,11061,814,0]An[11085,13,866,866,10033,814,0]An[11085,13,868,868,10034,814,0]An[11085,13,868,868,10763,814,0]An[11085,13,868,868,11062,814,0]Bb[11085,13,11400,11400,11489,814,0]Bb[11085,13,11400,11400,11470,814,0]Ao[11085,13,9502,9502,9827,814,0]B`[11085,13,9502,9502,10137,814,0]B`[11085,13,9502,9502,10320,814,0]Ao[11085,13,6144,6144,9576,814,0]B`[11085,13,6144,6144,11429,814,0]B`[11085,13,6144,6144,11215,814,0]Bb[11085,13,10276,10276,11395,814,0]Bb[11085,13,10276,10276,11009,814,0]Bb[11085,13,10276,10276,11303,814,0]Bb[11085,13,10276,10276,10782,814,0]Bb[11085,13,10276,10276,11216,814,0]Bb[11085,13,10276,10276,10143,814,0]Bb[11085,13,10276,10276,11461,814,0]Bb[11085,13,10276,10276,11337,814,0]Bb[11085,13,10276,10276,10843,814,0]Ba[11085,13,10276,10276,9579,814,0]Bb[11085,13,10276,10276,11425,814,0]Bb[11085,13,10276,10276,11207,814,0]Bb[11085,13,10276,10276,10321,814,0]Ba[11085,13,10276,10276,7653,814,0]Bb[11085,13,10276,10276,11394,814,0]Bb[11085,13,10276,10276,11007,814,0]B`[11085,13,5216,5216,11396,814,0]B`[11085,13,5216,5216,10052,814,0]B`[11085,13,5216,5216,11068,814,0]B`[11085,13,5216,5216,11397,814,0]Ao[11085,13,5216,5216,8415,814,0]B`[11085,13,5216,5216,10030,814,0]B`[11085,13,5216,5216,10297,814,0]B`[11085,13,5216,5216,10780,814,0]B`[11085,13,5216,5216,11298,814,0]B`[11085,13,5216,5216,11217,814,0]An[11085,13,794,794,11449,814,0]An[11085,13,794,794,11058,814,0]An[11085,13,794,794,10031,814,0]Ao[11085,13,8359,8359,4538,814,0]Ao[11085,13,8359,8359,3506,814,0]Ao[11085,13,9510,9510,4539,814,0]Ao[11085,13,9510,9510,3507,814,0]Ba[11085,13,10006,10006,9839,814,0]Ba[11085,13,10006,10006,4540,814,0]Ba[11085,13,10006,10006,7618,814,0]Ba[11085,13,10006,10006,6160,814,0]Ba[11085,13,10006,10006,8397,814,0]Ba[11085,13,10006,10006,3508,814,0]Bb[11085,13,10006,10006,10132,814,0]Ak[11085,13,93,93,4561,814,0]Al[11085,13,93,93,11445,814,0]Ak[11085,13,93,93,4541,814,0]Al[11085,13,93,93,10142,814,0]Al[11085,13,93,93,11428,814,0]Ao[11085,13,4452,4452,9597,814,0]Ao[11085,13,4452,4452,9851,814,0]Ao[11085,13,4452,4452,9852,814,0]B`[11085,13,4452,4452,10781,814,0]Ao[11085,13,4452,4452,8420,814,0]Am[11085,13,797,797,4565,814,0]Al[11085,13,797,797,121,814,0]Am[11085,13,799,799,4542,814,0]Am[11085,13,799,799,8398,814,0]Am[11085,13,799,799,5249,814,0]Am[11085,13,799,799,3509,814,0]Ao[11085,13,6150,6150,4543,814,0]Ao[11085,13,4426,4426,9825,814,0]Ao[11085,13,4426,4426,9595,814,0]Ao[11085,13,4426,4426,5281,814,0]Ba[11085,13,10727,10727,9826,814,0]Ba[11085,13,10727,10727,9596,814,0]Ba[11085,13,10727,10727,5282,814,0]Ba[11085,13,10028,10028,7620,814,0]Ba[11085,13,10028,10028,4562,814,0]Ba[11085,13,10028,10028,4547,814,0]Ba[11085,13,10028,10028,5264,814,0]Ba[11085,13,10028,10028,7631,814,0]Ba[11085,13,10028,10028,5272,814,0]Ao[11085,13,5084,5084,8434,814,0]B`[11085,13,5084,5084,11014,814,0]B`[11085,13,5084,5084,10058,814,0]B`[11085,13,5084,5084,11012,814,0]Ao[11085,13,5084,5084,6177,814,0]Ao[11085,13,5084,5084,7610,814,0]An[11085,13,869,869,10129,814,0]An[11085,13,869,869,11208,814,0]Ba[11085,13,11081,11081,7609,814,0]B`[11085,13,6201,6201,10138,814,0]Ao[11085,13,6201,6201,7654,814,0]B`[11085,13,8329,8329,11069,814,0]Ao[11085,13,8329,8329,6176,814,0]Ao[11085,13,4432,4432,4583,814,0]B`[11085,13,9823,9823,10323,814,0]B`[11085,13,9823,9823,11261,814,0]B`[11085,13,9823,9823,11485,814,0]Ao[11085,13,9823,9823,4544,814,0]Am[11085,13,101,101,4545,814,0]Am[11085,13,101,101,3510,814,0]B`[11085,13,10813,10813,801,814,0]Ba[11085,13,10813,10813,6163,814,0]Ao[11085,13,9968,9968,7621,814,0]Ao[11085,13,9968,9968,4563,814,0]Ao[11085,13,9968,9968,5273,814,0]Ba[11085,13,11280,11280,8433,814,0]Ak[11085,13,849,849,7612,0,0]Al[11085,13,849,849,11206,0,0]Al[11085,13,849,849,10291,0,0]Al[11085,13,849,849,10290,0,0]Ak[11085,13,849,849,9575,0,0]Am[11085,13,5285,5285,8405,0,0]An[11085,13,7677,7677,11065,0,0]An[11085,13,7677,7677,11483,0,0]An[11085,13,7677,7677,11008,0,0]An[11085,13,7677,7677,11066,0,0]An[11085,13,7677,7677,11246,0,0]An[11085,13,7677,7677,10294,0,0]An[11085,13,7677,7677,10130,0,0]Am[11085,13,7677,7677,7616,0,0]An[11085,13,7677,7677,10764,0,0]An[11085,13,7677,7677,10131,0,0]An[11085,13,7677,7677,10840,0,0]An[11085,13,7677,7677,11469,0,0]An[11085,13,7677,7677,11299,0,0]An[11085,13,9315,9315,10296,0,0]Am[11085,13,5171,5171,4551,0,0]Am[11085,13,5617,5617,5254,0,0]Am[11085,13,4413,4413,3459,0,0]Am[11085,13,6224,6224,3460,0,0]Am[11085,13,4416,4416,9589,0,0]Am[11085,13,4416,4416,3457,0,0]Ai[11085,4,2899,5359,0,0,0]Af[11085,7,5359,0,0,0,0]Am[11085,13,9437,9437,8411,0,0]An[11085,13,9437,9437,11254,0,0]An[11085,13,9437,9437,11484,0,0]Ao[11085,13,11050,11050,4568,0,0]An[11085,13,9970,9970,10141,0,0]An[11085,13,9970,9970,11427,0,0]Aj[11085,13,93,93,10142,0,0]Aj[11085,13,93,93,11428,0,0]Am[11085,13,4426,4426,5281,0,0]Ao[11085,13,10727,10727,5282,0,0]Am[11085,14,5210,5210,4508,0,0]Am[11085,13,5365,5365,4488,0,0]Am[11085,13,6224,6224,3444,0,0]Ao[11085,14,10813,10813,6163,0,0]222Af[11085,2,5190,0,0,0,0]Am[11085,13,6198,6198,4481,0,0]Am[11085,14,9813,9813,4507,0,0]6221555B`[11085,13,10827,10827,11260,0,0]Ak[11085,13,857,857,4537,0,0]An[11085,14,5086,5086,11210,0,0]Ai[11085,14,114,0,6171,0,0]Ai[11085,14,114,0,4553,0,0]B`[11085,13,861,861,10777,10315,0]B`[11085,13,861,861,11416,10315,0]B`[11085,13,861,861,10761,10315,0]B`[11085,13,861,861,10762,10315,0]Bb[11085,13,9813,9813,11214,10315,0]Bb[11085,13,9813,9813,11212,10315,0]Bb[11085,13,5210,5210,10852,10315,0]Bb[11085,13,5210,5210,10049,10315,0]Bb[11085,13,5210,5210,10048,10315,0]Ao[11085,13,866,866,10033,7644,0]Al[11085,13,868,868,10034,0,0]Bc[11085,13,11400,11400,11470,7644,0]Am[11085,12,9502,9502,7644,0,0]Ba[11085,13,5216,5216,11396,7644,0]Al[11085,13,869,869,10129,0,0]Am[11085,13,6198,6198,4481,0,0]Am[11085,13,4404,4404,4497,0,0]An[11085,12,7679,7679,10059,0,0]Am[11085,13,5359,5359,4506,0,0]Am[11085,13,8313,8313,4510,0,0]B`[11085,13,10827,10827,11260,0,0]Ak[11085,13,857,857,4537,0,0]10B`[11085,13,9379,9379,10305,835,0]Ao[11085,13,9379,9379,6179,835,0]B`[11085,13,3529,3529,11471,835,0]B`[11085,13,3529,3529,11253,835,0]B`[11085,13,3529,3529,11450,835,0]Ao[11085,13,3529,3529,4474,835,0]Ao[11085,13,3529,3529,3464,835,0]An[11085,13,847,847,11242,835,0]Am[11085,13,849,849,7612,835,0]An[11085,13,849,849,11206,835,0]An[11085,13,849,849,10291,835,0]An[11085,13,849,849,10290,835,0]Am[11085,13,849,849,7623,835,0]An[11085,13,849,849,11256,835,0]Am[11085,13,849,849,4475,835,0]Am[11085,13,849,849,7611,835,0]Am[11085,13,849,849,9575,835,0]Ao[11085,13,5285,5285,8405,835,0]Ao[11085,13,5285,5285,4476,835,0]Am[11085,13,853,853,9854,835,0]Am[11085,13,853,853,4477,835,0]Am[11085,13,853,853,9599,835,0]An[11085,13,853,853,11446,835,0]Ao[11085,13,7666,7666,4478,835,0]Ao[11085,13,7666,7666,8417,835,0]B`[11085,13,7666,7666,10317,835,0]Ao[11085,13,5288,5288,4479,835,0]Ao[11085,13,5288,5288,3465,835,0]Ao[11085,13,9875,9875,8391,835,0]B`[11085,13,9875,9875,10838,835,0]B`[11085,13,9875,9875,10037,835,0]B`[11085,13,9875,9875,10758,835,0]Bb[11085,13,10019,10019,11332,835,0]Bb[11085,13,10019,10019,11438,835,0]Bb[11085,13,10019,10019,11392,835,0]Bb[11085,13,10019,10019,11448,835,0]B`[11085,13,9512,9512,11257,835,0]B`[11085,13,9512,9512,11243,835,0]B`[11085,13,9512,9512,11413,835,0]B`[11085,13,9512,9512,11424,835,0]Am[11085,13,856,856,7615,835,0]An[11085,13,856,856,10038,835,0]Am[11085,13,856,856,8395,835,0]Bb[11085,13,10020,10020,10760,835,0]Bb[11085,13,10020,10020,11244,835,0]Ao[11085,13,9513,9513,8392,835,0]B`[11085,13,9513,9513,10127,835,0]Ao[11085,13,9513,9513,9577,835,0]B`[11085,13,9513,9513,11059,835,0]Ao[11085,13,9878,9878,4480,835,0]Ao[11085,13,9878,9878,3466,835,0]Ao[11085,13,5290,5290,3467,835,0]Ao[11085,13,6198,6198,4481,835,0]Am[11085,13,125,125,4482,835,0]Am[11085,13,125,125,5275,835,0]Am[11085,13,125,125,9844,835,0]Am[11085,13,125,125,9835,835,0]Am[11085,13,125,125,5242,835,0]Am[11085,13,125,125,9831,835,0]Am[11085,13,125,125,5224,835,0]An[11085,13,125,125,10322,835,0]An[11085,13,125,125,11334,835,0]Am[11085,13,125,125,3468,835,0]B`[11085,13,7677,7677,10134,835,0]B`[11085,13,7677,7677,10053,835,0]B`[11085,13,7677,7677,11065,835,0]B`[11085,13,7677,7677,11483,835,0]B`[11085,13,7677,7677,11008,835,0]B`[11085,13,7677,7677,11066,835,0]B`[11085,13,7677,7677,11246,835,0]B`[11085,13,7677,7677,10294,835,0]B`[11085,13,7677,7677,10130,835,0]Ao[11085,13,7677,7677,7616,835,0]B`[11085,13,7677,7677,10764,835,0]B`[11085,13,7677,7677,10131,835,0]B`[11085,13,7677,7677,10840,835,0]B`[11085,13,7677,7677,11469,835,0]B`[11085,13,7677,7677,11299,835,0]Ao[11085,13,7677,7677,7624,835,0]Ao[11085,13,7677,7677,4483,835,0]Ao[11085,13,7677,7677,5261,835,0]B`[11085,13,7677,7677,11302,835,0]Ao[11085,13,7679,7679,8419,835,0]B`[11085,13,7679,7679,11209,835,0]Ao[11085,13,7679,7679,8396,835,0]B`[11085,13,7679,7679,10765,835,0]B`[11085,13,7679,7679,10140,835,0]B`[11085,13,7679,7679,11414,835,0]B`[11085,13,7679,7679,11248,835,0]Bb[11085,13,10864,10864,11249,835,0]Bb[11085,13,10864,10864,10775,835,0]Bb[11085,13,10864,10864,11011,835,0]Ba[11085,13,10864,10864,5274,835,0]Ba[11085,13,10864,10864,5223,835,0]Bb[11085,13,10864,10864,10295,835,0]B`[11085,13,5147,5147,11250,835,0]B`[11085,13,9313,9313,11251,835,0]B`[11085,13,9315,9315,10296,835,0]Ao[11085,13,9315,9315,4484,835,0]Ao[11085,13,9888,9888,9838,835,0]Ao[11085,13,9888,9888,9834,835,0]Ao[11085,13,9890,9890,4485,835,0]Ao[11085,13,5357,5357,6173,835,0]Ao[11085,13,5357,5357,5262,835,0]Ao[11085,13,5357,5357,4486,835,0]B`[11085,13,5357,5357,10845,835,0]B`[11085,13,5357,5357,11017,835,0]B`[11085,13,5357,5357,11335,835,0]Ao[11085,13,5357,5357,9580,835,0]B`[11085,13,5357,5357,11300,835,0]B`[11085,13,5357,5357,10036,835,0]B`[11085,13,5357,5357,11010,835,0]Ao[11085,13,5357,5357,5243,835,0]Ao[11085,13,5357,5357,5225,835,0]Ao[11085,13,5357,5357,3469,835,0]B`[11085,13,1364,1364,11252,835,0]Ao[11085,13,5171,5171,4487,835,0]Ao[11085,13,5171,5171,4551,835,0]Ao[11085,13,5365,5365,4488,835,0]Ao[11085,13,6247,6247,3518,835,0]Ao[11085,13,4423,4423,4489,835,0]Ao[11085,13,4423,4423,5238,835,0]Ao[11085,13,4423,4423,9591,835,0]Ao[11085,13,4423,4423,4569,835,0]B`[11085,13,4423,4423,10050,835,0]B`[11085,13,4423,4423,10841,835,0]B`[11085,13,4423,4423,10853,835,0]Ao[11085,13,4423,4423,7625,835,0]An[11085,13,4423,4423,803,835,0]Ao[11085,13,9603,9603,4490,835,0]Ao[11085,13,9603,9603,5244,835,0]Ao[11085,13,9603,9603,5226,835,0]B`[11085,13,9603,9603,10766,835,0]Ao[11085,13,9603,9603,9574,835,0]Ba[11085,13,10726,10726,9592,835,0]Ba[11085,13,10726,10726,4570,835,0]Bb[11085,13,10726,10726,10051,835,0]Bb[11085,13,10726,10726,10842,835,0]Bb[11085,13,10726,10726,10854,835,0]Ba[11085,13,10726,10726,7626,835,0]B`[11085,13,10726,10726,804,835,0]Ao[11085,13,4402,4402,4491,835,0]Ao[11085,13,4402,4402,3470,835,0]Ao[11085,13,5174,5174,4492,835,0]Ao[11085,13,5174,5174,3471,835,0]Ao[11085,13,5176,5176,4493,835,0]Ao[11085,13,5176,5176,3472,835,0]Ao[11085,13,1861,1861,4494,835,0]Ao[11085,13,1861,1861,3473,835,0]B`[11085,13,5617,5617,10300,835,0]B`[11085,13,5617,5617,10847,835,0]B`[11085,13,5617,5617,10133,835,0]B`[11085,13,5617,5617,10041,835,0]Ao[11085,13,5617,5617,4495,835,0]Ao[11085,13,5617,5617,3442,835,0]Ao[11085,13,5617,5617,5254,835,0]Ao[11085,13,5180,5180,4496,835,0]Ao[11085,13,5180,5180,3474,835,0]Ao[11085,13,4404,4404,4497,835,0]B`[11085,13,8306,8306,11258,835,0]Ao[11085,13,8306,8306,4498,835,0]Ao[11085,13,8306,8306,7613,835,0]B`[11085,13,4413,4413,10135,835,0]B`[11085,13,4413,4413,10767,835,0]Ao[11085,13,4413,4413,9837,835,0]Ao[11085,13,4413,4413,9586,835,0]Ao[11085,13,4413,4413,4499,835,0]Ao[11085,13,4413,4413,3443,835,0]Ao[11085,13,4413,4413,3459,835,0]Ao[11085,13,6224,6224,4500,835,0]Ao[11085,13,6224,6224,3444,835,0]Ao[11085,13,6224,6224,3460,835,0]Bb[11085,13,10809,10809,11016,835,0]Ao[11085,13,4416,4416,9582,835,0]Ao[11085,13,4416,4416,9589,835,0]B`[11085,13,4416,4416,10292,835,0]Ao[11085,13,4416,4416,3457,835,0]Ao[11085,13,5086,5086,9584,835,0]B`[11085,13,5086,5086,10848,835,0]B`[11085,13,5086,5086,11067,835,0]B`[11085,13,5086,5086,10042,835,0]B`[11085,13,5086,5086,11013,835,0]B`[11085,13,5086,5086,11210,835,0]Ao[11085,13,4419,4419,3519,835,0]Ao[11085,13,4419,4419,4501,835,0]Ao[11085,13,4419,4419,8410,835,0]B`[11085,13,4419,4419,10046,835,0]Ao[11085,13,4419,4419,3475,835,0]Ao[11085,13,5187,5187,4502,835,0]Ao[11085,13,5187,5187,5245,835,0]Ao[11085,13,5187,5187,5227,835,0]Ao[11085,13,5187,5187,5259,835,0]Ao[11085,13,9812,9812,4503,835,0]Ao[11085,13,9812,9812,3476,835,0]Ba[11085,13,10740,10740,3477,835,0]Ba[11085,13,10740,10740,4504,835,0]An[11085,13,9523,9523,107,835,0]Am[11085,13,537,537,3478,835,0]Am[11085,13,537,537,6174,835,0]An[11085,13,537,537,10126,835,0]An[11085,13,537,537,10772,835,0]Am[11085,13,537,537,4505,835,0]B`[11085,13,6183,6183,10055,835,0]B`[11085,13,6183,6183,11487,835,0]Ao[11085,13,2899,2899,6175,835,0]B`[11085,13,5359,5359,10139,835,0]Ao[11085,13,5359,5359,4506,835,0]Ao[11085,13,5359,5359,5241,835,0]Al[11085,13,861,861,819,835,0]Am[11085,13,861,861,5263,835,0]Am[11085,13,861,861,8412,835,0]An[11085,13,861,861,11074,835,0]An[11085,13,861,861,10777,835,0]An[11085,13,861,861,11416,835,0]An[11085,13,861,861,10761,835,0]An[11085,13,861,861,10762,835,0]B`[11085,13,9813,9813,11075,835,0]Ao[11085,13,9813,9813,4507,835,0]B`[11085,13,9813,9813,10310,835,0]Ao[11085,13,9813,9813,8409,835,0]B`[11085,13,9813,9813,11439,835,0]B`[11085,13,9813,9813,11475,835,0]An[11085,13,9813,9813,115,835,0]Ao[11085,13,9813,9813,5271,835,0]An[11085,13,9813,9813,820,835,0]B`[11085,13,9813,9813,11417,835,0]B`[11085,13,9813,9813,11214,835,0]B`[11085,13,9813,9813,11212,835,0]B`[11085,13,9966,9966,10846,835,0]B`[11085,13,9966,9966,11018,835,0]B`[11085,13,9966,9966,11426,835,0]B`[11085,13,9966,9966,11336,835,0]B`[11085,13,9966,9966,11451,835,0]Ao[11085,13,5210,5210,4508,835,0]B`[11085,13,5210,5210,10852,835,0]B`[11085,13,5210,5210,10049,835,0]B`[11085,13,5210,5210,10048,835,0]Ao[11085,13,5623,5623,4509,835,0]Ao[11085,13,5623,5623,3479,835,0]Ao[11085,13,8313,8313,4510,835,0]B`[11085,13,8313,8313,11465,835,0]Ao[11085,13,5625,5625,4511,835,0]Ao[11085,13,5625,5625,3480,835,0]B`[11085,13,4584,4584,11255,835,0]Ao[11085,13,4584,4584,6158,835,0]B`[11085,13,4584,4584,10850,835,0]B`[11085,13,4584,4584,11460,835,0]B`[11085,13,4584,4584,10776,835,0]B`[11085,13,4584,4584,10309,835,0]Ao[11085,13,4584,4584,8401,835,0]B`[11085,13,4584,4584,10306,835,0]B`[11085,13,4584,4584,10768,835,0]B`[11085,13,4584,4584,11393,835,0]B`[11085,13,8181,8181,10044,835,0]Ao[11085,13,8181,8181,9853,835,0]B`[11085,13,8181,8181,10773,835,0]B`[11085,13,8181,8181,10779,835,0]B`[11085,13,8181,8181,10144,835,0]Ao[11085,13,4424,4424,3461,835,0]Ao[11085,13,4424,4424,7632,835,0]Ao[11085,13,4424,4424,4512,835,0]An[11085,13,9778,9778,117,835,0]An[11085,13,9778,9778,116,835,0]B`[11085,13,9778,9778,11301,835,0]B`[11085,13,9778,9778,10289,835,0]B`[11085,13,9430,9430,10307,835,0]B`[11085,13,9430,9430,10769,835,0]Ao[11085,13,9769,9769,4513,835,0]Ao[11085,13,8316,8316,4514,835,0]Ao[11085,13,9437,9437,4515,835,0]B`[11085,13,9437,9437,10839,835,0]B`[11085,13,9437,9437,10759,835,0]B`[11085,13,9437,9437,10043,835,0]B`[11085,13,9437,9437,10308,835,0]B`[11085,13,9437,9437,10136,835,0]B`[11085,13,9437,9437,10851,835,0]Ao[11085,13,9437,9437,8411,835,0]B`[11085,13,9437,9437,11254,835,0]B`[11085,13,9437,9437,11211,835,0]B`[11085,13,9437,9437,11484,835,0]Ao[11085,13,8319,8319,4516,835,0]Ao[11085,13,8319,8319,9855,835,0]Ao[11085,13,8319,8319,5246,835,0]B`[11085,13,8319,8319,10060,835,0]Ao[11085,13,8319,8319,3481,835,0]Am[11085,13,542,542,4517,835,0]Am[11085,13,542,542,3482,835,0]Ao[11085,13,8182,8182,3483,835,0]Ao[11085,13,4425,4425,3484,835,0]Ao[11085,13,2904,2904,4518,835,0]Ao[11085,13,2904,2904,3485,835,0]Ao[11085,13,9514,9514,4519,835,0]Ao[11085,13,9514,9514,5247,835,0]B`[11085,13,9514,9514,11333,835,0]Ao[11085,13,8331,8331,4520,835,0]B`[11085,13,8331,8331,11070,835,0]Ao[11085,13,8331,8331,3486,835,0]B`[11085,13,9457,9457,10035,835,0]Ao[11085,13,9457,9457,4521,835,0]Ao[11085,13,9457,9457,7608,835,0]Ao[11085,13,9457,9457,9832,835,0]Ao[11085,13,9457,9457,5228,835,0]Ao[11085,13,9457,9457,3487,835,0]B`[11085,13,8334,8334,11259,835,0]Ao[11085,13,8334,8334,4522,835,0]Am[11085,13,779,779,4523,835,0]Am[11085,13,779,779,3488,835,0]Ao[11085,13,2906,2906,4524,835,0]B`[11085,13,2906,2906,10311,835,0]Ao[11085,13,2906,2906,3489,835,0]Ao[11085,13,4418,4418,4525,835,0]B`[11085,13,4418,4418,11071,835,0]Ao[11085,13,4418,4418,3490,835,0]Ba[11085,13,10021,10021,4526,835,0]Ba[11085,13,10021,10021,3491,835,0]Ba[11085,13,10245,10245,9600,835,0]Bb[11085,13,10245,10245,11447,835,0]Ba[11085,13,11182,11182,8418,835,0]Bb[11085,13,11182,11182,10318,835,0]Ba[11085,13,10724,10724,9840,835,0]Ba[11085,13,11050,11050,4568,835,0]Ao[11085,13,9814,9814,3492,835,0]Ba[11085,13,10991,10991,3493,835,0]Bb[11085,13,11186,11186,11466,835,0]Ba[11085,13,11188,11188,3494,835,0]Ba[11085,13,11188,11188,5248,835,0]Bb[11085,13,11188,11188,10061,835,0]Ba[11085,13,10094,10094,3495,835,0]Ba[11085,13,10096,10096,9841,835,0]Ba[11085,13,10247,10247,9842,835,0]Ba[11085,13,10730,10730,9843,835,0]Ba[11085,13,11422,11422,3496,835,0]Ba[11085,13,10993,10993,3497,835,0]Ba[11085,13,10995,10995,3498,835,0]Ba[11085,13,11190,11190,3499,835,0]Ao[11085,13,9970,9970,4529,835,0]B`[11085,13,9970,9970,10141,835,0]B`[11085,13,9970,9970,11427,835,0]Ao[11085,13,4434,4434,4530,835,0]Ao[11085,13,4434,4434,3500,835,0]B`[11085,13,4434,4434,10770,835,0]Ao[11085,13,8339,8339,4531,835,0]Ao[11085,13,8339,8339,3501,835,0]Bb[11085,13,10732,10732,10855,835,0]Ba[11085,13,10732,10732,4532,835,0]Ba[11085,13,10732,10732,3502,835,0]Ao[11085,13,5201,5201,4533,835,0]B`[11085,13,5643,5643,10054,835,0]Ao[11085,13,5643,5643,3520,835,0]Ao[11085,13,5643,5643,7651,835,0]Ao[11085,13,5643,5643,4534,835,0]Ao[11085,13,5643,5643,3503,835,0]Ao[11085,13,5645,5645,3504,835,0]Ao[11085,13,8347,8347,4535,835,0]B`[11085,13,8347,8347,11415,835,0]B`[11085,13,8347,8347,11398,835,0]Ba[11085,13,10825,10825,9585,835,0]Ba[11085,13,10825,10825,6167,835,0]B`[11085,13,9815,9815,10857,835,0]Bb[11085,13,10078,10078,10301,835,0]Ao[11085,13,9930,9930,9590,835,0]Bb[11085,13,10243,10243,10045,835,0]Al[11085,13,786,786,118,835,0]Ao[11085,13,6251,6251,5277,835,0]Ao[11085,13,5213,5213,8416,835,0]Ao[11085,13,5213,5213,9857,835,0]Ao[11085,13,5213,5213,4536,835,0]Ao[11085,13,5213,5213,9601,835,0]B`[11085,13,5213,5213,10319,835,0]Ao[11085,13,5213,5213,7646,835,0]Ao[11085,13,5213,5213,3505,835,0]Bb[11085,13,10827,10827,11260,835,0]Am[11085,13,857,857,8393,835,0]Am[11085,13,857,857,4537,835,0]An[11085,13,857,857,11060,835,0]B`[11085,13,5205,5205,11076,835,0]B`[11085,13,5205,5205,10047,835,0]B`[11085,13,9320,9320,10856,835,0]Ao[11085,13,9320,9320,7647,835,0]B`[11085,13,7660,7660,10128,835,0]B`[11085,13,7660,7660,11399,835,0]B`[11085,13,7660,7660,11015,835,0]B`[11085,13,7660,7660,11205,835,0]B`[11085,13,7660,7660,10125,835,0]An[11085,13,866,866,11061,835,0]An[11085,13,866,866,10033,835,0]An[11085,13,868,868,10034,835,0]An[11085,13,868,868,10763,835,0]An[11085,13,868,868,11062,835,0]Bb[11085,13,11400,11400,11489,835,0]Bb[11085,13,11400,11400,11470,835,0]Ao[11085,13,9502,9502,9827,835,0]B`[11085,13,9502,9502,10137,835,0]B`[11085,13,9502,9502,10320,835,0]Ao[11085,13,6144,6144,9576,835,0]B`[11085,13,6144,6144,11429,835,0]B`[11085,13,6144,6144,11215,835,0]Bb[11085,13,10276,10276,11395,835,0]Bb[11085,13,10276,10276,11009,835,0]Bb[11085,13,10276,10276,11303,835,0]Bb[11085,13,10276,10276,10782,835,0]Bb[11085,13,10276,10276,11216,835,0]Bb[11085,13,10276,10276,10143,835,0]Bb[11085,13,10276,10276,11461,835,0]Bb[11085,13,10276,10276,11337,835,0]Bb[11085,13,10276,10276,10843,835,0]Ba[11085,13,10276,10276,9579,835,0]Bb[11085,13,10276,10276,11425,835,0]Bb[11085,13,10276,10276,11207,835,0]Bb[11085,13,10276,10276,10321,835,0]Ba[11085,13,10276,10276,7653,835,0]Bb[11085,13,10276,10276,11394,835,0]Bb[11085,13,10276,10276,11007,835,0]B`[11085,13,5216,5216,11396,835,0]B`[11085,13,5216,5216,10052,835,0]B`[11085,13,5216,5216,11068,835,0]B`[11085,13,5216,5216,11397,835,0]Ao[11085,13,5216,5216,8415,835,0]B`[11085,13,5216,5216,10030,835,0]B`[11085,13,5216,5216,10297,835,0]B`[11085,13,5216,5216,10780,835,0]B`[11085,13,5216,5216,11298,835,0]B`[11085,13,5216,5216,11217,835,0]An[11085,13,794,794,11449,835,0]An[11085,13,794,794,11058,835,0]An[11085,13,794,794,10031,835,0]Ao[11085,13,8359,8359,4538,835,0]Ao[11085,13,8359,8359,3506,835,0]Ao[11085,13,9510,9510,4539,835,0]Ao[11085,13,9510,9510,3507,835,0]Ba[11085,13,10006,10006,9839,835,0]Ba[11085,13,10006,10006,4540,835,0]Ba[11085,13,10006,10006,7618,835,0]Ba[11085,13,10006,10006,6160,835,0]Ba[11085,13,10006,10006,8397,835,0]Ba[11085,13,10006,10006,3508,835,0]Bb[11085,13,10006,10006,10132,835,0]Ak[11085,13,93,93,4561,835,0]Al[11085,13,93,93,11445,835,0]Ak[11085,13,93,93,4541,835,0]Al[11085,13,93,93,10142,835,0]Al[11085,13,93,93,11428,835,0]Ao[11085,13,4452,4452,9597,835,0]Ao[11085,13,4452,4452,9851,835,0]Ao[11085,13,4452,4452,9852,835,0]B`[11085,13,4452,4452,10781,835,0]Ao[11085,13,4452,4452,8420,835,0]Am[11085,13,797,797,4565,835,0]Al[11085,13,797,797,121,835,0]Am[11085,13,799,799,4542,835,0]Am[11085,13,799,799,8398,835,0]Am[11085,13,799,799,5249,835,0]Am[11085,13,799,799,3509,835,0]Ao[11085,13,6150,6150,4543,835,0]Ao[11085,13,4426,4426,9825,835,0]Ao[11085,13,4426,4426,9595,835,0]Ao[11085,13,4426,4426,5281,835,0]Ba[11085,13,10727,10727,9826,835,0]Ba[11085,13,10727,10727,9596,835,0]Ba[11085,13,10727,10727,5282,835,0]Ba[11085,13,10028,10028,7620,835,0]Ba[11085,13,10028,10028,4562,835,0]Ba[11085,13,10028,10028,4547,835,0]Ba[11085,13,10028,10028,5264,835,0]Ba[11085,13,10028,10028,7631,835,0]Ba[11085,13,10028,10028,5272,835,0]Ao[11085,13,5084,5084,8434,835,0]B`[11085,13,5084,5084,11014,835,0]B`[11085,13,5084,5084,10058,835,0]B`[11085,13,5084,5084,11012,835,0]Ao[11085,13,5084,5084,6177,835,0]Ao[11085,13,5084,5084,7610,835,0]An[11085,13,869,869,10129,835,0]An[11085,13,869,869,11208,835,0]Ba[11085,13,11081,11081,7609,835,0]B`[11085,13,6201,6201,10138,835,0]Ao[11085,13,6201,6201,7654,835,0]B`[11085,13,8329,8329,11069,835,0]Ao[11085,13,8329,8329,6176,835,0]Ao[11085,13,4432,4432,4583,835,0]B`[11085,13,9823,9823,10323,835,0]B`[11085,13,9823,9823,11261,835,0]B`[11085,13,9823,9823,11485,835,0]Ao[11085,13,9823,9823,4544,835,0]Am[11085,13,101,101,4545,835,0]Am[11085,13,101,101,3510,835,0]B`[11085,13,10813,10813,801,835,0]Ba[11085,13,10813,10813,6163,835,0]Ao[11085,13,9968,9968,7621,835,0]Ao[11085,13,9968,9968,4563,835,0]Ao[11085,13,9968,9968,5273,835,0]Ba[11085,13,11280,11280,8433,835,0]Am[11085,14,7677,7677,5261,0,0]An[11085,14,10813,10813,801,0,0]000An[11085,15,8306,8306,11258,0,0]An[11085,15,8334,8334,11259,0,0]Af[11085,5,5617,0,0,0,0]Af[11085,5,4413,0,0,0,0]Af[11085,5,6224,0,0,0,0]Af[11085,18,849,0,0,0,0]Ag[11085,18,7677,0,0,0,0]Ag[11085,18,9315,0,0,0,0]Ag[11085,18,8306,0,0,0,0]Ag[11085,18,8334,0,0,0,0]Ag[11085,18,6150,0,0,0,0]Ag[11085,10,3527,0,0,0,0]Af[11085,5,4416,0,0,0,0]Ao[11085,15,10006,10006,9839,0,0]:9Af[11085,5,4424,0,0,0,0]Af[11085,4,2899,0,0,0,0]Ai[11085,4,5635,4418,0,0,0]Af[11085,5,3529,0,0,0,0]Af[11085,5,5288,0,0,0,0]Af[11085,5,9878,0,0,0,0]Af[11085,5,5290,0,0,0,0]Ae[11085,5,125,0,0,0,0]Af[11085,5,5357,0,0,0,0]Af[11085,5,4402,0,0,0,0]Af[11085,5,5174,0,0,0,0]Af[11085,5,5176,0,0,0,0]Af[11085,5,1861,0,0,0,0]Af[11085,5,5180,0,0,0,0]Af[11085,5,4419,0,0,0,0]Af[11085,5,9812,0,0,0,0]Ag[11085,5,10740,0,0,0,0]Ae[11085,5,537,0,0,0,0]Af[11085,5,5623,0,0,0,0]Af[11085,5,5625,0,0,0,0]Af[11085,5,8319,0,0,0,0]Ae[11085,5,542,0,0,0,0]Af[11085,5,8182,0,0,0,0]Af[11085,5,4425,0,0,0,0]Af[11085,5,2904,0,0,0,0]Af[11085,5,8331,0,0,0,0]Af[11085,5,9457,0,0,0,0]Ae[11085,5,779,0,0,0,0]Af[11085,5,2906,0,0,0,0]Af[11085,5,4418,0,0,0,0]Ag[11085,5,10021,0,0,0,0]Af[11085,5,9814,0,0,0,0]Ag[11085,5,10991,0,0,0,0]Ag[11085,5,11188,0,0,0,0]Ag[11085,5,10094,0,0,0,0]Ag[11085,5,11422,0,0,0,0]Ag[11085,5,10993,0,0,0,0]Ag[11085,5,10995,0,0,0,0]Ag[11085,5,11190,0,0,0,0]Af[11085,5,4434,0,0,0,0]Af[11085,5,8339,0,0,0,0]Ag[11085,5,10732,0,0,0,0]Af[11085,5,5643,0,0,0,0]Af[11085,5,5645,0,0,0,0]Af[11085,5,5213,0,0,0,0]Af[11085,5,8359,0,0,0,0]Af[11085,5,9510,0,0,0,0]Ag[11085,5,10006,0,0,0,0]Ae[11085,5,799,0,0,0,0]Ae[11085,5,101,0,0,0,0]Ag[11085,18,6150,0,0,0,0]Ao[11085,15,10006,10006,9839,0,0]Aj[11085,4,10993,5643,0,0,0]Aj[11085,4,10995,5643,0,0,0]Ai[11085,4,5645,5643,0,0,0]Af[11085,5,6247,0,0,0,0]Af[11085,5,4419,0,0,0,0]>Ak[11085,15,797,797,4565,0,0]00Am[11085,14,5171,5171,4487,0,0]Af[11085,2,6150,0,0,0,0]Af[11085,2,5190,0,0,0,0]B`[11085,13,866,866,11061,10313,0]Bd[11085,13,11400,11400,11489,10313,0]An[11085,12,9502,9502,10313,0,0]Bb[11085,13,5216,5216,11217,10313,0]B`[11085,14,10827,10827,11260,0,0]B`[11085,13,9379,9379,6179,3445,0]Ba[11085,13,3529,3529,11471,3445,0]Ba[11085,13,3529,3529,11253,3445,0]Ba[11085,13,3529,3529,11450,3445,0]B`[11085,13,3529,3529,4474,3445,0]B`[11085,13,3529,3529,3464,3445,0]An[11085,13,849,849,7623,3445,0]Ao[11085,13,849,849,11256,3445,0]An[11085,13,849,849,4475,3445,0]An[11085,13,849,849,7611,3445,0]An[11085,13,849,849,9575,3445,0]An[11085,13,853,853,9854,3445,0]An[11085,13,853,853,4477,3445,0]An[11085,13,853,853,9599,3445,0]Ao[11085,13,853,853,11446,3445,0]B`[11085,13,7666,7666,4478,3445,0]B`[11085,13,7666,7666,8417,3445,0]Ba[11085,13,7666,7666,10317,3445,0]B`[11085,13,5288,5288,4479,3445,0]B`[11085,13,5288,5288,3465,3445,0]B`[11085,13,9875,9875,8391,3445,0]Ba[11085,13,9875,9875,10838,3445,0]Ba[11085,13,9875,9875,10037,3445,0]Ba[11085,13,9875,9875,10758,3445,0]Bc[11085,13,10019,10019,11332,3445,0]Bc[11085,13,10019,10019,11438,3445,0]Bc[11085,13,10019,10019,11392,3445,0]Bc[11085,13,10019,10019,11448,3445,0]Ba[11085,13,9512,9512,11257,3445,0]Ba[11085,13,9512,9512,11243,3445,0]Ba[11085,13,9512,9512,11413,3445,0]Ba[11085,13,9512,9512,11424,3445,0]An[11085,13,856,856,7615,3445,0]Ao[11085,13,856,856,10038,3445,0]An[11085,13,856,856,8395,3445,0]Bc[11085,13,10020,10020,10760,3445,0]Bc[11085,13,10020,10020,11244,3445,0]B`[11085,13,9513,9513,8392,3445,0]Ba[11085,13,9513,9513,10127,3445,0]B`[11085,13,9513,9513,9577,3445,0]Ba[11085,13,9513,9513,11059,3445,0]B`[11085,13,9878,9878,4480,3445,0]B`[11085,13,9878,9878,3466,3445,0]B`[11085,13,6198,6198,4481,3445,0]An[11085,13,125,125,4482,3445,0]An[11085,13,125,125,5275,3445,0]An[11085,13,125,125,9844,3445,0]An[11085,13,125,125,9835,3445,0]An[11085,13,125,125,5242,3445,0]An[11085,13,125,125,9831,3445,0]An[11085,13,125,125,5224,3445,0]Ao[11085,13,125,125,10322,3445,0]Ao[11085,13,125,125,11334,3445,0]An[11085,13,125,125,3468,3445,0]B`[11085,13,7677,7677,7624,3445,0]B`[11085,13,7677,7677,4483,3445,0]Ba[11085,13,7679,7679,10765,3445,0]Ba[11085,13,7679,7679,10140,3445,0]Ba[11085,13,7679,7679,11414,3445,0]Ba[11085,13,7679,7679,11248,3445,0]B`[11085,13,9315,9315,4484,3445,0]B`[11085,13,9888,9888,9838,3445,0]B`[11085,13,9890,9890,4485,3445,0]B`[11085,13,5357,5357,6173,3445,0]B`[11085,13,5357,5357,5262,3445,0]B`[11085,13,5357,5357,4486,3445,0]Ba[11085,13,5357,5357,10845,3445,0]Ba[11085,13,5357,5357,11017,3445,0]Ba[11085,13,5357,5357,11335,3445,0]B`[11085,13,5357,5357,9580,3445,0]Ba[11085,13,5357,5357,11300,3445,0]Ba[11085,13,5357,5357,10036,3445,0]Ba[11085,13,5357,5357,11010,3445,0]B`[11085,13,5357,5357,5243,3445,0]B`[11085,13,5357,5357,5225,3445,0]B`[11085,13,5171,5171,4487,3445,0]B`[11085,13,5171,5171,4551,3445,0]B`[11085,13,5365,5365,4488,3445,0]B`[11085,13,6247,6247,3518,3445,0]B`[11085,13,4423,4423,4489,3445,0]B`[11085,13,4423,4423,5238,3445,0]B`[11085,13,4423,4423,9591,3445,0]B`[11085,13,4423,4423,4569,3445,0]Ba[11085,13,4423,4423,10050,3445,0]Ba[11085,13,4423,4423,10841,3445,0]Ba[11085,13,4423,4423,10853,3445,0]B`[11085,13,4423,4423,7625,3445,0]Ao[11085,13,4423,4423,803,3445,0]B`[11085,13,9603,9603,4490,3445,0]B`[11085,13,9603,9603,5244,3445,0]B`[11085,13,9603,9603,5226,3445,0]Ba[11085,13,9603,9603,10766,3445,0]B`[11085,13,9603,9603,9574,3445,0]Bb[11085,13,10726,10726,9592,3445,0]Bb[11085,13,10726,10726,4570,3445,0]Bc[11085,13,10726,10726,10051,3445,0]Bc[11085,13,10726,10726,10842,3445,0]Bc[11085,13,10726,10726,10854,3445,0]Bb[11085,13,10726,10726,7626,3445,0]Ba[11085,13,10726,10726,804,3445,0]B`[11085,13,4402,4402,4491,3445,0]B`[11085,13,4402,4402,3470,3445,0]B`[11085,13,5174,5174,4492,3445,0]B`[11085,13,5174,5174,3471,3445,0]B`[11085,13,5176,5176,4493,3445,0]B`[11085,13,5176,5176,3472,3445,0]B`[11085,13,1861,1861,4494,3445,0]B`[11085,13,1861,1861,3473,3445,0]Ba[11085,13,5617,5617,10300,3445,0]Ba[11085,13,5617,5617,10847,3445,0]Ba[11085,13,5617,5617,10133,3445,0]Ba[11085,13,5617,5617,10041,3445,0]B`[11085,13,5617,5617,4495,3445,0]B`[11085,13,5617,5617,3442,3445,0]B`[11085,13,5617,5617,5254,3445,0]B`[11085,13,5180,5180,4496,3445,0]B`[11085,13,5180,5180,3474,3445,0]B`[11085,13,4404,4404,4497,3445,0]Ba[11085,13,8306,8306,11258,3445,0]B`[11085,13,8306,8306,4498,3445,0]B`[11085,13,8306,8306,7613,3445,0]Ba[11085,13,4413,4413,10135,3445,0]Ba[11085,13,4413,4413,10767,3445,0]B`[11085,13,4413,4413,9837,3445,0]B`[11085,13,4413,4413,9586,3445,0]B`[11085,13,4413,4413,4499,3445,0]B`[11085,13,4413,4413,3443,3445,0]B`[11085,13,4413,4413,3459,3445,0]B`[11085,13,6224,6224,4500,3445,0]B`[11085,13,6224,6224,3444,3445,0]B`[11085,13,6224,6224,3460,3445,0]B`[11085,13,5086,5086,9584,3445,0]Ba[11085,13,5086,5086,10848,3445,0]Ba[11085,13,5086,5086,11067,3445,0]Ba[11085,13,5086,5086,10042,3445,0]Ba[11085,13,5086,5086,11013,3445,0]Ba[11085,13,5086,5086,11210,3445,0]B`[11085,13,4419,4419,4501,3445,0]B`[11085,13,4419,4419,8410,3445,0]Ba[11085,13,4419,4419,10046,3445,0]B`[11085,13,4419,4419,3475,3445,0]B`[11085,13,5187,5187,4502,3445,0]B`[11085,13,5187,5187,5245,3445,0]B`[11085,13,5187,5187,5227,3445,0]B`[11085,13,5187,5187,5259,3445,0]B`[11085,13,9812,9812,4503,3445,0]B`[11085,13,9812,9812,3476,3445,0]Bb[11085,13,10740,10740,4504,3445,0]An[11085,13,537,537,6174,3445,0]Ao[11085,13,537,537,10126,3445,0]Ao[11085,13,537,537,10772,3445,0]An[11085,13,537,537,4505,3445,0]B`[11085,13,2899,2899,6175,3445,0]Ba[11085,13,5359,5359,10139,3445,0]B`[11085,13,5359,5359,4506,3445,0]B`[11085,13,5359,5359,5241,3445,0]Am[11085,13,861,861,819,3445,0]An[11085,13,861,861,5263,3445,0]An[11085,13,861,861,8412,3445,0]Ao[11085,13,861,861,11074,3445,0]Ao[11085,13,861,861,10777,3445,0]Ao[11085,13,861,861,11416,3445,0]Ao[11085,13,861,861,10761,3445,0]Ao[11085,13,861,861,10762,3445,0]Ba[11085,13,9813,9813,11075,3445,0]B`[11085,13,9813,9813,4507,3445,0]Ba[11085,13,9813,9813,10310,3445,0]B`[11085,13,9813,9813,8409,3445,0]Ba[11085,13,9813,9813,11439,3445,0]Ba[11085,13,9813,9813,11475,3445,0]Ao[11085,13,9813,9813,115,3445,0]B`[11085,13,9813,9813,5271,3445,0]Ao[11085,13,9813,9813,820,3445,0]Ba[11085,13,9813,9813,11417,3445,0]Ba[11085,13,9813,9813,11214,3445,0]Ba[11085,13,9813,9813,11212,3445,0]Ba[11085,13,9966,9966,10846,3445,0]Ba[11085,13,9966,9966,11018,3445,0]Ba[11085,13,9966,9966,11426,3445,0]Ba[11085,13,9966,9966,11336,3445,0]Ba[11085,13,9966,9966,11451,3445,0]B`[11085,13,5210,5210,4508,3445,0]Ba[11085,13,5210,5210,10852,3445,0]Ba[11085,13,5210,5210,10049,3445,0]Ba[11085,13,5210,5210,10048,3445,0]B`[11085,13,5623,5623,4509,3445,0]B`[11085,13,5623,5623,3479,3445,0]B`[11085,13,8313,8313,4510,3445,0]Ba[11085,13,8313,8313,11465,3445,0]B`[11085,13,5625,5625,4511,3445,0]B`[11085,13,5625,5625,3480,3445,0]B`[11085,13,4424,4424,4512,3445,0]Ba[11085,13,9430,9430,10307,3445,0]Ba[11085,13,9430,9430,10769,3445,0]B`[11085,13,9769,9769,4513,3445,0]B`[11085,13,8316,8316,4514,3445,0]B`[11085,13,9437,9437,4515,3445,0]Ba[11085,13,9437,9437,10839,3445,0]Ba[11085,13,9437,9437,10759,3445,0]Ba[11085,13,9437,9437,10043,3445,0]Ba[11085,13,9437,9437,10308,3445,0]Ba[11085,13,9437,9437,10136,3445,0]Ba[11085,13,9437,9437,10851,3445,0]B`[11085,13,9437,9437,8411,3445,0]Ba[11085,13,9437,9437,11254,3445,0]Ba[11085,13,9437,9437,11211,3445,0]Ba[11085,13,9437,9437,11484,3445,0]B`[11085,13,8319,8319,4516,3445,0]B`[11085,13,8319,8319,9855,3445,0]B`[11085,13,8319,8319,5246,3445,0]Ba[11085,13,8319,8319,10060,3445,0]B`[11085,13,8319,8319,3481,3445,0]An[11085,13,542,542,4517,3445,0]An[11085,13,542,542,3482,3445,0]B`[11085,13,8182,8182,3483,3445,0]B`[11085,13,2904,2904,4518,3445,0]B`[11085,13,2904,2904,3485,3445,0]B`[11085,13,9514,9514,4519,3445,0]B`[11085,13,9514,9514,5247,3445,0]Ba[11085,13,9514,9514,11333,3445,0]B`[11085,13,8331,8331,4520,3445,0]Ba[11085,13,8331,8331,11070,3445,0]B`[11085,13,8331,8331,3486,3445,0]Ba[11085,13,9457,9457,10035,3445,0]B`[11085,13,9457,9457,4521,3445,0]B`[11085,13,9457,9457,7608,3445,0]B`[11085,13,9457,9457,9832,3445,0]B`[11085,13,9457,9457,5228,3445,0]B`[11085,13,9457,9457,3487,3445,0]Ba[11085,13,8334,8334,11259,3445,0]B`[11085,13,8334,8334,4522,3445,0]An[11085,13,779,779,4523,3445,0]An[11085,13,779,779,3488,3445,0]B`[11085,13,2906,2906,4524,3445,0]Ba[11085,13,2906,2906,10311,3445,0]B`[11085,13,2906,2906,3489,3445,0]B`[11085,13,4418,4418,4525,3445,0]Ba[11085,13,4418,4418,11071,3445,0]B`[11085,13,4418,4418,3490,3445,0]Bb[11085,13,10021,10021,4526,3445,0]Bb[11085,13,10021,10021,3491,3445,0]Bb[11085,13,10245,10245,9600,3445,0]Bc[11085,13,10245,10245,11447,3445,0]Bb[11085,13,11182,11182,8418,3445,0]Bc[11085,13,11182,11182,10318,3445,0]Bb[11085,13,10724,10724,9840,3445,0]Bb[11085,13,11050,11050,4568,3445,0]B`[11085,13,9814,9814,3492,3445,0]Bb[11085,13,10991,10991,3493,3445,0]Bc[11085,13,11186,11186,11466,3445,0]Bb[11085,13,11188,11188,5248,3445,0]Bc[11085,13,11188,11188,10061,3445,0]Bb[11085,13,10094,10094,3495,3445,0]Bb[11085,13,10096,10096,9841,3445,0]Bb[11085,13,10247,10247,9842,3445,0]Bb[11085,13,11422,11422,3496,3445,0]Bb[11085,13,10993,10993,3497,3445,0]Bb[11085,13,10995,10995,3498,3445,0]Bb[11085,13,11190,11190,3499,3445,0]B`[11085,13,9970,9970,4529,3445,0]Ba[11085,13,9970,9970,10141,3445,0]Ba[11085,13,9970,9970,11427,3445,0]B`[11085,13,4434,4434,4530,3445,0]B`[11085,13,4434,4434,3500,3445,0]Ba[11085,13,4434,4434,10770,3445,0]B`[11085,13,8339,8339,4531,3445,0]B`[11085,13,8339,8339,3501,3445,0]Bc[11085,13,10732,10732,10855,3445,0]Bb[11085,13,10732,10732,4532,3445,0]Bb[11085,13,10732,10732,3502,3445,0]B`[11085,13,5201,5201,4533,3445,0]B`[11085,13,5643,5643,4534,3445,0]B`[11085,13,5643,5643,3503,3445,0]B`[11085,13,5645,5645,3504,3445,0]B`[11085,13,8347,8347,4535,3445,0]Ba[11085,13,8347,8347,11415,3445,0]Ba[11085,13,8347,8347,11398,3445,0]B`[11085,13,5213,5213,8416,3445,0]B`[11085,13,5213,5213,9857,3445,0]B`[11085,13,5213,5213,4536,3445,0]B`[11085,13,5213,5213,9601,3445,0]Ba[11085,13,5213,5213,10319,3445,0]B`[11085,13,5213,5213,7646,3445,0]B`[11085,13,5213,5213,3505,3445,0]Bc[11085,13,10827,10827,11260,3445,0]An[11085,13,857,857,8393,3445,0]An[11085,13,857,857,4537,3445,0]Ba[11085,13,5205,5205,11076,3445,0]Ba[11085,13,7660,7660,11399,3445,0]Ba[11085,13,7660,7660,11205,3445,0]Ao[11085,13,866,866,11061,3445,0]Ao[11085,13,866,866,10033,3445,0]Ao[11085,13,868,868,10763,3445,0]Ao[11085,13,868,868,11062,3445,0]Bc[11085,13,11400,11400,11489,3445,0]Bc[11085,13,11400,11400,11470,3445,0]B`[11085,13,9502,9502,9827,3445,0]Ba[11085,13,9502,9502,10137,3445,0]Ba[11085,13,9502,9502,10320,3445,0]B`[11085,13,6144,6144,9576,3445,0]Ba[11085,13,6144,6144,11429,3445,0]Bc[11085,13,10276,10276,11395,3445,0]Bc[11085,13,10276,10276,11303,3445,0]Bc[11085,13,10276,10276,11216,3445,0]Bc[11085,13,10276,10276,11461,3445,0]Bc[11085,13,10276,10276,10843,3445,0]Bc[11085,13,10276,10276,11425,3445,0]Bc[11085,13,10276,10276,10321,3445,0]Bc[11085,13,10276,10276,11394,3445,0]Ba[11085,13,5216,5216,10052,3445,0]Ba[11085,13,5216,5216,11068,3445,0]Ba[11085,13,5216,5216,11397,3445,0]B`[11085,13,5216,5216,8415,3445,0]Ba[11085,13,5216,5216,10030,3445,0]Ba[11085,13,5216,5216,10297,3445,0]Ba[11085,13,5216,5216,10780,3445,0]Ba[11085,13,5216,5216,11298,3445,0]Ba[11085,13,5216,5216,11217,3445,0]Ao[11085,13,794,794,11058,3445,0]B`[11085,13,8359,8359,4538,3445,0]B`[11085,13,9510,9510,4539,3445,0]B`[11085,13,9510,9510,3507,3445,0]Bb[11085,13,10006,10006,9839,3445,0]Bb[11085,13,10006,10006,4540,3445,0]Bb[11085,13,10006,10006,7618,3445,0]Bb[11085,13,10006,10006,6160,3445,0]Bb[11085,13,10006,10006,8397,3445,0]Bb[11085,13,10006,10006,3508,3445,0]Al[11085,13,93,93,4561,3445,0]Am[11085,13,93,93,11445,3445,0]Al[11085,13,93,93,4541,3445,0]Am[11085,13,93,93,10142,3445,0]Am[11085,13,93,93,11428,3445,0]B`[11085,13,4452,4452,9597,3445,0]B`[11085,13,4452,4452,9851,3445,0]B`[11085,13,4452,4452,9852,3445,0]Ba[11085,13,4452,4452,10781,3445,0]B`[11085,13,4452,4452,8420,3445,0]An[11085,13,799,799,4542,3445,0]An[11085,13,799,799,8398,3445,0]An[11085,13,799,799,5249,3445,0]An[11085,13,799,799,3509,3445,0]B`[11085,13,6150,6150,4543,3445,0]B`[11085,13,4426,4426,9825,3445,0]B`[11085,13,4426,4426,9595,3445,0]B`[11085,13,4426,4426,5281,3445,0]Bb[11085,13,10727,10727,9826,3445,0]Bb[11085,13,10727,10727,9596,3445,0]Bb[11085,13,10727,10727,5282,3445,0]Bb[11085,13,10028,10028,7620,3445,0]Bb[11085,13,10028,10028,4562,3445,0]Bb[11085,13,10028,10028,4547,3445,0]Bb[11085,13,10028,10028,5264,3445,0]Bb[11085,13,10028,10028,7631,3445,0]Bb[11085,13,10028,10028,5272,3445,0]Ao[11085,13,869,869,11208,3445,0]B`[11085,13,9823,9823,4544,3445,0]An[11085,13,101,101,4545,3445,0]An[11085,13,101,101,3510,3445,0]Ba[11085,13,10813,10813,801,3445,0]Bb[11085,13,10813,10813,6163,3445,0]B`[11085,13,9968,9968,7621,3445,0]B`[11085,13,9968,9968,4563,3445,0]B`[11085,13,9968,9968,5273,3445,0]Bb[11085,13,11280,11280,8433,3445,0]Am[11085,14,4423,4423,4489,0,0]Am[11085,14,4424,4424,4512,0,0]An[11085,14,7660,7660,11399,0,0]Ba[11085,13,9379,9379,10305,7636,0]B`[11085,13,9379,9379,6179,7636,0]Ba[11085,13,3529,3529,11471,7636,0]Ba[11085,13,3529,3529,11253,7636,0]Ba[11085,13,3529,3529,11450,7636,0]B`[11085,13,3529,3529,4474,7636,0]B`[11085,13,3529,3529,3464,7636,0]Ao[11085,13,847,847,11242,7636,0]An[11085,13,849,849,7612,7636,0]Ao[11085,13,849,849,11206,7636,0]Ao[11085,13,849,849,10291,7636,0]Ao[11085,13,849,849,10290,7636,0]An[11085,13,849,849,7623,7636,0]Ao[11085,13,849,849,11256,7636,0]An[11085,13,849,849,4475,7636,0]An[11085,13,849,849,7611,7636,0]An[11085,13,849,849,9575,7636,0]B`[11085,13,5285,5285,8405,7636,0]B`[11085,13,5285,5285,4476,7636,0]An[11085,13,853,853,9854,7636,0]An[11085,13,853,853,4477,7636,0]An[11085,13,853,853,9599,7636,0]Ao[11085,13,853,853,11446,7636,0]B`[11085,13,7666,7666,4478,7636,0]B`[11085,13,7666,7666,8417,7636,0]Ba[11085,13,7666,7666,10317,7636,0]B`[11085,13,5288,5288,4479,7636,0]B`[11085,13,5288,5288,3465,7636,0]B`[11085,13,9875,9875,8391,7636,0]Ba[11085,13,9875,9875,10838,7636,0]Ba[11085,13,9875,9875,10037,7636,0]Ba[11085,13,9875,9875,10758,7636,0]Bc[11085,13,10019,10019,11332,7636,0]Bc[11085,13,10019,10019,11438,7636,0]Bc[11085,13,10019,10019,11392,7636,0]Bc[11085,13,10019,10019,11448,7636,0]Ba[11085,13,9512,9512,11257,7636,0]Ba[11085,13,9512,9512,11243,7636,0]Ba[11085,13,9512,9512,11413,7636,0]Ba[11085,13,9512,9512,11424,7636,0]An[11085,13,856,856,7615,7636,0]Ao[11085,13,856,856,10038,7636,0]An[11085,13,856,856,8395,7636,0]Bc[11085,13,10020,10020,10760,7636,0]Bc[11085,13,10020,10020,11244,7636,0]B`[11085,13,9513,9513,8392,7636,0]Ba[11085,13,9513,9513,10127,7636,0]B`[11085,13,9513,9513,9577,7636,0]Ba[11085,13,9513,9513,11059,7636,0]B`[11085,13,9878,9878,4480,7636,0]B`[11085,13,9878,9878,3466,7636,0]B`[11085,13,5290,5290,3467,7636,0]B`[11085,13,6198,6198,4481,7636,0]An[11085,13,125,125,4482,7636,0]An[11085,13,125,125,5275,7636,0]An[11085,13,125,125,9844,7636,0]An[11085,13,125,125,9835,7636,0]An[11085,13,125,125,5242,7636,0]An[11085,13,125,125,9831,7636,0]An[11085,13,125,125,5224,7636,0]Ao[11085,13,125,125,10322,7636,0]Ao[11085,13,125,125,11334,7636,0]An[11085,13,125,125,3468,7636,0]Ba[11085,13,7677,7677,10134,7636,0]Ba[11085,13,7677,7677,10053,7636,0]Ba[11085,13,7677,7677,11065,7636,0]Ba[11085,13,7677,7677,11483,7636,0]Ba[11085,13,7677,7677,11008,7636,0]Ba[11085,13,7677,7677,11066,7636,0]Ba[11085,13,7677,7677,11246,7636,0]Ba[11085,13,7677,7677,10294,7636,0]Ba[11085,13,7677,7677,10130,7636,0]B`[11085,13,7677,7677,7616,7636,0]Ba[11085,13,7677,7677,10764,7636,0]Ba[11085,13,7677,7677,10131,7636,0]Ba[11085,13,7677,7677,10840,7636,0]Ba[11085,13,7677,7677,11469,7636,0]Ba[11085,13,7677,7677,11299,7636,0]B`[11085,13,7677,7677,7624,7636,0]B`[11085,13,7677,7677,4483,7636,0]B`[11085,13,7677,7677,5261,7636,0]Ba[11085,13,7677,7677,11302,7636,0]B`[11085,13,7679,7679,8419,7636,0]Ba[11085,13,7679,7679,11209,7636,0]B`[11085,13,7679,7679,8396,7636,0]Ba[11085,13,7679,7679,10765,7636,0]Ba[11085,13,7679,7679,10140,7636,0]Ba[11085,13,7679,7679,11414,7636,0]Ba[11085,13,7679,7679,11248,7636,0]Bc[11085,13,10864,10864,11249,7636,0]Bc[11085,13,10864,10864,10775,7636,0]Bc[11085,13,10864,10864,11011,7636,0]Bb[11085,13,10864,10864,5274,7636,0]Bb[11085,13,10864,10864,5223,7636,0]Bc[11085,13,10864,10864,10295,7636,0]Ba[11085,13,5147,5147,11250,7636,0]Ba[11085,13,9313,9313,11251,7636,0]Ba[11085,13,9315,9315,10296,7636,0]B`[11085,13,9315,9315,4484,7636,0]B`[11085,13,9888,9888,9838,7636,0]B`[11085,13,9888,9888,9834,7636,0]B`[11085,13,9890,9890,4485,7636,0]B`[11085,13,5357,5357,6173,7636,0]B`[11085,13,5357,5357,5262,7636,0]B`[11085,13,5357,5357,4486,7636,0]Ba[11085,13,5357,5357,10845,7636,0]Ba[11085,13,5357,5357,11017,7636,0]Ba[11085,13,5357,5357,11335,7636,0]B`[11085,13,5357,5357,9580,7636,0]Ba[11085,13,5357,5357,11300,7636,0]Ba[11085,13,5357,5357,10036,7636,0]Ba[11085,13,5357,5357,11010,7636,0]B`[11085,13,5357,5357,5243,7636,0]B`[11085,13,5357,5357,5225,7636,0]B`[11085,13,5357,5357,3469,7636,0]Ba[11085,13,1364,1364,11252,7636,0]B`[11085,13,5171,5171,4487,7636,0]B`[11085,13,5171,5171,4551,7636,0]B`[11085,13,5365,5365,4488,7636,0]B`[11085,13,6247,6247,3518,7636,0]B`[11085,13,4423,4423,4489,7636,0]B`[11085,13,4423,4423,5238,7636,0]B`[11085,13,4423,4423,9591,7636,0]B`[11085,13,4423,4423,4569,7636,0]Ba[11085,13,4423,4423,10050,7636,0]Ba[11085,13,4423,4423,10841,7636,0]Ba[11085,13,4423,4423,10853,7636,0]B`[11085,13,4423,4423,7625,7636,0]Ao[11085,13,4423,4423,803,7636,0]B`[11085,13,9603,9603,4490,7636,0]B`[11085,13,9603,9603,5244,7636,0]B`[11085,13,9603,9603,5226,7636,0]Ba[11085,13,9603,9603,10766,7636,0]B`[11085,13,9603,9603,9574,7636,0]Bb[11085,13,10726,10726,9592,7636,0]Bb[11085,13,10726,10726,4570,7636,0]Bc[11085,13,10726,10726,10051,7636,0]Bc[11085,13,10726,10726,10842,7636,0]Bc[11085,13,10726,10726,10854,7636,0]Bb[11085,13,10726,10726,7626,7636,0]Ba[11085,13,10726,10726,804,7636,0]B`[11085,13,4402,4402,4491,7636,0]B`[11085,13,4402,4402,3470,7636,0]B`[11085,13,5174,5174,4492,7636,0]B`[11085,13,5174,5174,3471,7636,0]B`[11085,13,5176,5176,4493,7636,0]B`[11085,13,5176,5176,3472,7636,0]B`[11085,13,1861,1861,4494,7636,0]B`[11085,13,1861,1861,3473,7636,0]Ba[11085,13,5617,5617,10300,7636,0]Ba[11085,13,5617,5617,10847,7636,0]Ba[11085,13,5617,5617,10133,7636,0]Ba[11085,13,5617,5617,10041,7636,0]B`[11085,13,5617,5617,4495,7636,0]B`[11085,13,5617,5617,3442,7636,0]B`[11085,13,5617,5617,5254,7636,0]B`[11085,13,5180,5180,4496,7636,0]B`[11085,13,5180,5180,3474,7636,0]B`[11085,13,4404,4404,4497,7636,0]Ba[11085,13,8306,8306,11258,7636,0]B`[11085,13,8306,8306,4498,7636,0]B`[11085,13,8306,8306,7613,7636,0]Ba[11085,13,4413,4413,10135,7636,0]Ba[11085,13,4413,4413,10767,7636,0]B`[11085,13,4413,4413,9837,7636,0]B`[11085,13,4413,4413,9586,7636,0]B`[11085,13,4413,4413,4499,7636,0]B`[11085,13,4413,4413,3443,7636,0]B`[11085,13,4413,4413,3459,7636,0]B`[11085,13,6224,6224,4500,7636,0]B`[11085,13,6224,6224,3444,7636,0]B`[11085,13,6224,6224,3460,7636,0]Bc[11085,13,10809,10809,11016,7636,0]B`[11085,13,4416,4416,9582,7636,0]B`[11085,13,4416,4416,9589,7636,0]Ba[11085,13,4416,4416,10292,7636,0]B`[11085,13,4416,4416,3457,7636,0]B`[11085,13,5086,5086,9584,7636,0]Ba[11085,13,5086,5086,10848,7636,0]Ba[11085,13,5086,5086,11067,7636,0]Ba[11085,13,5086,5086,10042,7636,0]Ba[11085,13,5086,5086,11013,7636,0]Ba[11085,13,5086,5086,11210,7636,0]B`[11085,13,4419,4419,3519,7636,0]B`[11085,13,4419,4419,4501,7636,0]B`[11085,13,4419,4419,8410,7636,0]Ba[11085,13,4419,4419,10046,7636,0]B`[11085,13,4419,4419,3475,7636,0]B`[11085,13,5187,5187,4502,7636,0]B`[11085,13,5187,5187,5245,7636,0]B`[11085,13,5187,5187,5227,7636,0]B`[11085,13,5187,5187,5259,7636,0]B`[11085,13,9812,9812,4503,7636,0]B`[11085,13,9812,9812,3476,7636,0]Bb[11085,13,10740,10740,3477,7636,0]Bb[11085,13,10740,10740,4504,7636,0]Ao[11085,13,9523,9523,107,7636,0]An[11085,13,537,537,3478,7636,0]An[11085,13,537,537,6174,7636,0]Ao[11085,13,537,537,10126,7636,0]Ao[11085,13,537,537,10772,7636,0]An[11085,13,537,537,4505,7636,0]Ba[11085,13,6183,6183,10055,7636,0]Ba[11085,13,6183,6183,11487,7636,0]B`[11085,13,2899,2899,6175,7636,0]Ba[11085,13,5359,5359,10139,7636,0]B`[11085,13,5359,5359,4506,7636,0]B`[11085,13,5359,5359,5241,7636,0]Am[11085,13,861,861,819,7636,0]An[11085,13,861,861,5263,7636,0]An[11085,13,861,861,8412,7636,0]Ao[11085,13,861,861,11074,7636,0]Ao[11085,13,861,861,10777,7636,0]Ao[11085,13,861,861,11416,7636,0]Ao[11085,13,861,861,10761,7636,0]Ao[11085,13,861,861,10762,7636,0]Ba[11085,13,9813,9813,11075,7636,0]B`[11085,13,9813,9813,4507,7636,0]Ba[11085,13,9813,9813,10310,7636,0]B`[11085,13,9813,9813,8409,7636,0]Ba[11085,13,9813,9813,11439,7636,0]Ba[11085,13,9813,9813,11475,7636,0]Ao[11085,13,9813,9813,115,7636,0]B`[11085,13,9813,9813,5271,7636,0]Ao[11085,13,9813,9813,820,7636,0]Ba[11085,13,9813,9813,11417,7636,0]Ba[11085,13,9813,9813,11214,7636,0]Ba[11085,13,9813,9813,11212,7636,0]Ba[11085,13,9966,9966,10846,7636,0]Ba[11085,13,9966,9966,11018,7636,0]Ba[11085,13,9966,9966,11426,7636,0]Ba[11085,13,9966,9966,11336,7636,0]Ba[11085,13,9966,9966,11451,7636,0]B`[11085,13,5210,5210,4508,7636,0]Ba[11085,13,5210,5210,10852,7636,0]Ba[11085,13,5210,5210,10049,7636,0]Ba[11085,13,5210,5210,10048,7636,0]B`[11085,13,5623,5623,4509,7636,0]B`[11085,13,5623,5623,3479,7636,0]B`[11085,13,8313,8313,4510,7636,0]Ba[11085,13,8313,8313,11465,7636,0]B`[11085,13,5625,5625,4511,7636,0]B`[11085,13,5625,5625,3480,7636,0]Ba[11085,13,4584,4584,11255,7636,0]B`[11085,13,4584,4584,6158,7636,0]Ba[11085,13,4584,4584,10850,7636,0]Ba[11085,13,4584,4584,11460,7636,0]Ba[11085,13,4584,4584,10776,7636,0]Ba[11085,13,4584,4584,10309,7636,0]B`[11085,13,4584,4584,8401,7636,0]Ba[11085,13,4584,4584,10306,7636,0]Ba[11085,13,4584,4584,10768,7636,0]Ba[11085,13,4584,4584,11393,7636,0]Ba[11085,13,8181,8181,10044,7636,0]B`[11085,13,8181,8181,9853,7636,0]Ba[11085,13,8181,8181,10773,7636,0]Ba[11085,13,8181,8181,10779,7636,0]Ba[11085,13,8181,8181,10144,7636,0]B`[11085,13,4424,4424,3461,7636,0]B`[11085,13,4424,4424,7632,7636,0]B`[11085,13,4424,4424,4512,7636,0]Ao[11085,13,9778,9778,117,7636,0]Ao[11085,13,9778,9778,116,7636,0]Ba[11085,13,9778,9778,11301,7636,0]Ba[11085,13,9778,9778,10289,7636,0]Ba[11085,13,9430,9430,10307,7636,0]Ba[11085,13,9430,9430,10769,7636,0]B`[11085,13,9769,9769,4513,7636,0]B`[11085,13,8316,8316,4514,7636,0]B`[11085,13,9437,9437,4515,7636,0]Ba[11085,13,9437,9437,10839,7636,0]Ba[11085,13,9437,9437,10759,7636,0]Ba[11085,13,9437,9437,10043,7636,0]Ba[11085,13,9437,9437,10308,7636,0]Ba[11085,13,9437,9437,10136,7636,0]Ba[11085,13,9437,9437,10851,7636,0]B`[11085,13,9437,9437,8411,7636,0]Ba[11085,13,9437,9437,11254,7636,0]Ba[11085,13,9437,9437,11211,7636,0]Ba[11085,13,9437,9437,11484,7636,0]B`[11085,13,8319,8319,4516,7636,0]B`[11085,13,8319,8319,9855,7636,0]B`[11085,13,8319,8319,5246,7636,0]Ba[11085,13,8319,8319,10060,7636,0]B`[11085,13,8319,8319,3481,7636,0]An[11085,13,542,542,4517,7636,0]An[11085,13,542,542,3482,7636,0]B`[11085,13,8182,8182,3483,7636,0]B`[11085,13,4425,4425,3484,7636,0]B`[11085,13,2904,2904,4518,7636,0]B`[11085,13,2904,2904,3485,7636,0]B`[11085,13,9514,9514,4519,7636,0]B`[11085,13,9514,9514,5247,7636,0]Ba[11085,13,9514,9514,11333,7636,0]B`[11085,13,8331,8331,4520,7636,0]Ba[11085,13,8331,8331,11070,7636,0]B`[11085,13,8331,8331,3486,7636,0]Ba[11085,13,9457,9457,10035,7636,0]B`[11085,13,9457,9457,4521,7636,0]B`[11085,13,9457,9457,7608,7636,0]B`[11085,13,9457,9457,9832,7636,0]B`[11085,13,9457,9457,5228,7636,0]B`[11085,13,9457,9457,3487,7636,0]Ba[11085,13,8334,8334,11259,7636,0]B`[11085,13,8334,8334,4522,7636,0]An[11085,13,779,779,4523,7636,0]An[11085,13,779,779,3488,7636,0]B`[11085,13,2906,2906,4524,7636,0]Ba[11085,13,2906,2906,10311,7636,0]B`[11085,13,2906,2906,3489,7636,0]B`[11085,13,4418,4418,4525,7636,0]Ba[11085,13,4418,4418,11071,7636,0]B`[11085,13,4418,4418,3490,7636,0]Bb[11085,13,10021,10021,4526,7636,0]Bb[11085,13,10021,10021,3491,7636,0]Bb[11085,13,10245,10245,9600,7636,0]Bc[11085,13,10245,10245,11447,7636,0]Bb[11085,13,11182,11182,8418,7636,0]Bc[11085,13,11182,11182,10318,7636,0]Bb[11085,13,10724,10724,9840,7636,0]Bb[11085,13,11050,11050,4568,7636,0]B`[11085,13,9814,9814,3492,7636,0]Bb[11085,13,10991,10991,3493,7636,0]Bc[11085,13,11186,11186,11466,7636,0]Bb[11085,13,11188,11188,3494,7636,0]Bb[11085,13,11188,11188,5248,7636,0]Bc[11085,13,11188,11188,10061,7636,0]Bb[11085,13,10094,10094,3495,7636,0]Bb[11085,13,10096,10096,9841,7636,0]Bb[11085,13,10247,10247,9842,7636,0]Bb[11085,13,10730,10730,9843,7636,0]Bb[11085,13,11422,11422,3496,7636,0]Bb[11085,13,10993,10993,3497,7636,0]Bb[11085,13,10995,10995,3498,7636,0]Bb[11085,13,11190,11190,3499,7636,0]B`[11085,13,9970,9970,4529,7636,0]Ba[11085,13,9970,9970,10141,7636,0]Ba[11085,13,9970,9970,11427,7636,0]B`[11085,13,4434,4434,4530,7636,0]B`[11085,13,4434,4434,3500,7636,0]Ba[11085,13,4434,4434,10770,7636,0]B`[11085,13,8339,8339,4531,7636,0]B`[11085,13,8339,8339,3501,7636,0]Bc[11085,13,10732,10732,10855,7636,0]Bb[11085,13,10732,10732,4532,7636,0]Bb[11085,13,10732,10732,3502,7636,0]B`[11085,13,5201,5201,4533,7636,0]Ba[11085,13,5643,5643,10054,7636,0]B`[11085,13,5643,5643,3520,7636,0]B`[11085,13,5643,5643,7651,7636,0]B`[11085,13,5643,5643,4534,7636,0]B`[11085,13,5643,5643,3503,7636,0]B`[11085,13,5645,5645,3504,7636,0]B`[11085,13,8347,8347,4535,7636,0]Ba[11085,13,8347,8347,11415,7636,0]Ba[11085,13,8347,8347,11398,7636,0]Bb[11085,13,10825,10825,9585,7636,0]Bb[11085,13,10825,10825,6167,7636,0]Ba[11085,13,9815,9815,10857,7636,0]Bc[11085,13,10078,10078,10301,7636,0]B`[11085,13,9930,9930,9590,7636,0]Bc[11085,13,10243,10243,10045,7636,0]Am[11085,13,786,786,118,7636,0]B`[11085,13,6251,6251,5277,7636,0]B`[11085,13,5213,5213,8416,7636,0]B`[11085,13,5213,5213,9857,7636,0]B`[11085,13,5213,5213,4536,7636,0]B`[11085,13,5213,5213,9601,7636,0]Ba[11085,13,5213,5213,10319,7636,0]B`[11085,13,5213,5213,7646,7636,0]B`[11085,13,5213,5213,3505,7636,0]Bc[11085,13,10827,10827,11260,7636,0]An[11085,13,857,857,8393,7636,0]An[11085,13,857,857,4537,7636,0]Ao[11085,13,857,857,11060,7636,0]Ba[11085,13,5205,5205,11076,7636,0]Ba[11085,13,5205,5205,10047,7636,0]Ba[11085,13,9320,9320,10856,7636,0]B`[11085,13,9320,9320,7647,7636,0]Ba[11085,13,7660,7660,10128,7636,0]Ba[11085,13,7660,7660,11399,7636,0]Ba[11085,13,7660,7660,11015,7636,0]Ba[11085,13,7660,7660,11205,7636,0]Ba[11085,13,7660,7660,10125,7636,0]Ao[11085,13,866,866,11061,7636,0]Ao[11085,13,866,866,10033,7636,0]Ao[11085,13,868,868,10034,7636,0]Ao[11085,13,868,868,10763,7636,0]Ao[11085,13,868,868,11062,7636,0]Bc[11085,13,11400,11400,11489,7636,0]Bc[11085,13,11400,11400,11470,7636,0]B`[11085,13,9502,9502,9827,7636,0]Ba[11085,13,9502,9502,10137,7636,0]Ba[11085,13,9502,9502,10320,7636,0]B`[11085,13,6144,6144,9576,7636,0]Ba[11085,13,6144,6144,11429,7636,0]Ba[11085,13,6144,6144,11215,7636,0]Bc[11085,13,10276,10276,11395,7636,0]Bc[11085,13,10276,10276,11009,7636,0]Bc[11085,13,10276,10276,11303,7636,0]Bc[11085,13,10276,10276,10782,7636,0]Bc[11085,13,10276,10276,11216,7636,0]Bc[11085,13,10276,10276,10143,7636,0]Bc[11085,13,10276,10276,11461,7636,0]Bc[11085,13,10276,10276,11337,7636,0]Bc[11085,13,10276,10276,10843,7636,0]Bb[11085,13,10276,10276,9579,7636,0]Bc[11085,13,10276,10276,11425,7636,0]Bc[11085,13,10276,10276,11207,7636,0]Bc[11085,13,10276,10276,10321,7636,0]Bb[11085,13,10276,10276,7653,7636,0]Bc[11085,13,10276,10276,11394,7636,0]Bc[11085,13,10276,10276,11007,7636,0]Ba[11085,13,5216,5216,11396,7636,0]Ba[11085,13,5216,5216,10052,7636,0]Ba[11085,13,5216,5216,11068,7636,0]Ba[11085,13,5216,5216,11397,7636,0]B`[11085,13,5216,5216,8415,7636,0]Ba[11085,13,5216,5216,10030,7636,0]Ba[11085,13,5216,5216,10297,7636,0]Ba[11085,13,5216,5216,10780,7636,0]Ba[11085,13,5216,5216,11298,7636,0]Ba[11085,13,5216,5216,11217,7636,0]Ao[11085,13,794,794,11449,7636,0]Ao[11085,13,794,794,11058,7636,0]Ao[11085,13,794,794,10031,7636,0]B`[11085,13,8359,8359,4538,7636,0]B`[11085,13,8359,8359,3506,7636,0]B`[11085,13,9510,9510,4539,7636,0]B`[11085,13,9510,9510,3507,7636,0]Bb[11085,13,10006,10006,9839,7636,0]Bb[11085,13,10006,10006,4540,7636,0]Bb[11085,13,10006,10006,7618,7636,0]Bb[11085,13,10006,10006,6160,7636,0]Bb[11085,13,10006,10006,8397,7636,0]Bb[11085,13,10006,10006,3508,7636,0]Bc[11085,13,10006,10006,10132,7636,0]Al[11085,13,93,93,4561,7636,0]Am[11085,13,93,93,11445,7636,0]Al[11085,13,93,93,4541,7636,0]Am[11085,13,93,93,10142,7636,0]Am[11085,13,93,93,11428,7636,0]B`[11085,13,4452,4452,9597,7636,0]B`[11085,13,4452,4452,9851,7636,0]B`[11085,13,4452,4452,9852,7636,0]Ba[11085,13,4452,4452,10781,7636,0]B`[11085,13,4452,4452,8420,7636,0]An[11085,13,797,797,4565,7636,0]Am[11085,13,797,797,121,7636,0]An[11085,13,799,799,4542,7636,0]An[11085,13,799,799,8398,7636,0]An[11085,13,799,799,5249,7636,0]An[11085,13,799,799,3509,7636,0]B`[11085,13,6150,6150,4543,7636,0]B`[11085,13,4426,4426,9825,7636,0]B`[11085,13,4426,4426,9595,7636,0]B`[11085,13,4426,4426,5281,7636,0]Bb[11085,13,10727,10727,9826,7636,0]Bb[11085,13,10727,10727,9596,7636,0]Bb[11085,13,10727,10727,5282,7636,0]Bb[11085,13,10028,10028,7620,7636,0]Bb[11085,13,10028,10028,4562,7636,0]Bb[11085,13,10028,10028,4547,7636,0]Bb[11085,13,10028,10028,5264,7636,0]Bb[11085,13,10028,10028,7631,7636,0]Bb[11085,13,10028,10028,5272,7636,0]B`[11085,13,5084,5084,8434,7636,0]Ba[11085,13,5084,5084,11014,7636,0]Ba[11085,13,5084,5084,10058,7636,0]Ba[11085,13,5084,5084,11012,7636,0]B`[11085,13,5084,5084,6177,7636,0]B`[11085,13,5084,5084,7610,7636,0]Ao[11085,13,869,869,10129,7636,0]Ao[11085,13,869,869,11208,7636,0]Bb[11085,13,11081,11081,7609,7636,0]Ba[11085,13,6201,6201,10138,7636,0]B`[11085,13,6201,6201,7654,7636,0]Ba[11085,13,8329,8329,11069,7636,0]B`[11085,13,8329,8329,6176,7636,0]B`[11085,13,4432,4432,4583,7636,0]Ba[11085,13,9823,9823,10323,7636,0]Ba[11085,13,9823,9823,11261,7636,0]Ba[11085,13,9823,9823,11485,7636,0]B`[11085,13,9823,9823,4544,7636,0]An[11085,13,101,101,4545,7636,0]An[11085,13,101,101,3510,7636,0]Ba[11085,13,10813,10813,801,7636,0]Bb[11085,13,10813,10813,6163,7636,0]B`[11085,13,9968,9968,7621,7636,0]B`[11085,13,9968,9968,4563,7636,0]B`[11085,13,9968,9968,5273,7636,0]Bb[11085,13,11280,11280,8433,7636,0]Am[11085,13,4419,4419,3475,0,0]Am[11085,14,4425,4425,3484,0,0]Am[11085,14,4418,4418,3490,0,0]Am[11085,13,4413,4413,3459,0,0]Am[11085,13,6198,6198,4481,0,0]Aj[11085,14,93,93,11445,0,0]Af[11085,2,5190,0,0,0,0]0Af[11085,7,4404,0,0,0,0]Am[11085,14,7677,7677,5261,0,0]An[11085,14,7677,7677,11302,0,0]5Am[11085,13,4404,4404,4497,0,0]Am[11085,13,9769,9769,4513,0,0]5Am[11085,14,4416,4416,3457,0,0]6Af[11085,2,5635,0,0,0,0]77Am[11085,14,5290,5290,3467,0,0]Af[11085,2,1366,0,0,0,0]Af[11085,2,4421,0,0,0,0]Af[11085,2,9454,0,0,0,0]Af[11085,2,6150,0,0,0,0]Af[11085,2,9570,0,0,0,0]=Al[11085,14,9523,9523,107,0,0]<;Ak[11085,13,857,857,4537,0,0]Am[11085,13,8331,8331,3486,0,0]Am[11085,13,6198,6198,4481,0,0]=Ak[11085,14,537,537,4505,0,0]Am[11085,14,9812,9812,4503,0,0]1An[11085,13,8313,8313,11465,0,0]B`[11085,13,11186,11186,11466,0,0]Al[11085,14,9523,9523,107,0,0]Am[11085,14,9603,9603,4490,0,0]Am[11085,14,5210,5210,4508,0,0]Af[11085,2,5190,0,0,0,0]Af[11085,7,5201,0,0,0,0]1Ag[11085,2,10827,0,0,0,0]An[11085,13,9379,9379,10305,0,0]Al[11085,13,794,794,11449,0,0]Af[11085,2,2899,0,0,0,0]Am[11085,14,5359,5359,4506,0,0]6Ak[11085,13,857,857,4537,0,0]5Af[11085,7,6247,0,0,0,0]Am[11085,14,7679,7679,8419,0,0]Am[11085,13,6198,6198,4481,0,0]Ag[11085,5,10864,0,0,0,0]Ae[11085,5,125,0,0,0,0]Af[11085,5,5357,0,0,0,0]Af[11085,5,9603,0,0,0,0]Af[11085,5,5187,0,0,0,0]Af[11085,5,9457,0,0,0,0]An[11085,15,5617,5617,10300,0,0]An[11085,15,4413,4413,10135,0,0]Ao[11085,15,10006,10006,6160,0,0]0000An[11085,15,7679,7679,10140,0,0]Af[11085,5,4423,0,0,0,0]An[11085,15,5216,5216,11298,0,0]Af[11085,5,5359,0,0,0,0];:98Af[11085,5,8319,0,0,0,0]Af[11085,5,9514,0,0,0,0]Ag[11085,5,11188,0,0,0,0]Ae[11085,5,799,0,0,0,0]An[11085,15,9502,9502,10137,0,0]Ak[11085,15,857,857,8393,0,0]Am[11085,15,9875,9875,8391,0,0]=Af[11085,5,5617,0,0,0,0]An[11085,15,9502,9502,10320,0,0]Al[11085,15,868,868,10763,0,0]Af[11085,5,5187,0,0,0,0]Af[11085,5,7677,0,0,0,0]Af[11085,6,5357,0,0,0,0]Ae[11085,6,861,0,0,0,0]Ag[11085,5,10028,0,0,0,0]Ak[11085,15,537,537,6174,0,0]Am[11085,15,5357,5357,5262,0,0]Ak[11085,15,861,861,5263,0,0]Am[11085,15,2899,2899,6175,0,0]Al[11085,15,9813,9813,820,0,0]Af[11085,5,9813,0,0,0,0]6Af[11085,5,9968,0,0,0,0]Ag[11085,5,10864,0,0,0,0]Ae[11085,5,125,0,0,0,0]Ag[11085,10,7679,0,0,0,0]Af[11085,5,6251,0,0,0,0]Af[11085,5,4426,0,0,0,0]Ag[11085,5,10727,0,0,0,0]Am[11085,13,8334,8334,4522,0,0]Am[11085,14,9813,9813,4507,0,0]Af[11085,2,5190,0,0,0,0]Am[11085,14,9603,9603,4490,0,0]112Am[11085,14,4419,4419,4501,0,0]Am[11085,14,5187,5187,4502,0,0]4Ai[11085,14,93,93,4541,0,0]Am[11085,14,4452,4452,9597,0,0]Am[11085,14,6150,6150,4543,0,0]Ak[11085,14,125,125,3468,0,0]Am[11085,13,5187,5187,5259,0,0]Am[11085,14,9457,9457,4521,0,0]Am[11085,14,9457,9457,3487,0,0]Am[11085,13,4452,4452,8420,0,0]Am[11085,14,4426,4426,5281,0,0]Ao[11085,14,10727,10727,5282,0,0]Ao[11085,13,849,849,11256,5229,0]An[11085,13,849,849,4475,5229,0]Bc[11085,13,10019,10019,11332,5229,0]Ba[11085,13,9512,9512,11243,5229,0]B`[11085,13,9878,9878,4480,5229,0]B`[11085,13,9315,9315,4484,5229,0]B`[11085,13,5357,5357,4486,5229,0]B`[11085,13,5171,5171,4487,5229,0]B`[11085,13,1861,1861,4494,5229,0]Ba[11085,13,5617,5617,10300,5229,0]Ba[11085,13,5617,5617,10847,5229,0]Ba[11085,13,4413,4413,10135,5229,0]Ba[11085,13,4413,4413,10767,5229,0]Ba[11085,13,9437,9437,10839,5229,0]B`[11085,13,9970,9970,4529,5229,0]Ba[11085,13,5205,5205,11076,5229,0]Ba[11085,13,7660,7660,11399,5229,0]Ba[11085,13,7660,7660,11205,5229,0]Ao[11085,13,866,866,11061,5229,0]Ao[11085,13,868,868,10763,5229,0]Ao[11085,13,868,868,11062,5229,0]Bc[11085,13,11400,11400,11489,5229,0]Ba[11085,13,9502,9502,10320,5229,0]Ba[11085,13,6144,6144,11429,5229,0]Bc[11085,13,10276,10276,11395,5229,0]Bc[11085,13,10276,10276,11303,5229,0]Bc[11085,13,10276,10276,11216,5229,0]Bc[11085,13,10276,10276,11461,5229,0]Bc[11085,13,10276,10276,10843,5229,0]Bc[11085,13,10276,10276,11425,5229,0]Bc[11085,13,10276,10276,10321,5229,0]Bc[11085,13,10276,10276,11394,5229,0]Ba[11085,13,5216,5216,10052,5229,0]Ba[11085,13,5216,5216,11068,5229,0]Ba[11085,13,5216,5216,11397,5229,0]B`[11085,13,5216,5216,8415,5229,0]Ba[11085,13,5216,5216,10030,5229,0]Ba[11085,13,5216,5216,10297,5229,0]Ba[11085,13,5216,5216,11298,5229,0]Ba[11085,13,5216,5216,11217,5229,0]Ao[11085,13,794,794,11058,5229,0]Bb[11085,13,10006,10006,9839,5229,0]Bb[11085,13,10006,10006,4540,5229,0]Bb[11085,13,10006,10006,7618,5229,0]Bb[11085,13,10006,10006,6160,5229,0]Am[11085,13,93,93,11445,5229,0]Al[11085,13,93,93,4541,5229,0]B`[11085,13,4452,4452,9597,5229,0]Ao[11085,13,869,869,11208,5229,0]Af[11085,7,6247,0,0,0,0]Am[11085,14,4452,4452,9597,0,0]Af[11085,2,5190,0,0,0,0]Af[11085,2,2899,0,0,0,0]Ak[11085,14,125,125,3468,0,0]Am[11085,13,5187,5187,5259,0,0]Am[11085,13,4452,4452,8420,0,0]Am[11085,14,4426,4426,5281,0,0]Ao[11085,14,10727,10727,5282,0,0]6Af[11085,7,5365,0,0,0,0]An[11085,14,9457,9457,10035,0,0]Am[11085,13,3529,3529,3464,0,0]Ao[11085,13,847,847,11242,4566,0]Ak[11085,13,849,849,7612,0,0]Ao[11085,13,849,849,11206,4566,0]Ao[11085,13,849,849,10291,4566,0]Al[11085,13,849,849,10290,0,0]Ak[11085,13,849,849,9575,0,0]Am[11085,13,5285,5285,8405,0,0]An[11085,13,853,853,9599,4566,0]B`[11085,13,7666,7666,8417,4566,0]An[11085,13,7666,7666,10317,0,0]Am[11085,13,5288,5288,3465,0,0]B`[11085,13,9875,9875,8391,4566,0]An[11085,13,9875,9875,10758,0,0]Bc[11085,13,10019,10019,11438,4566,0]B`[11085,13,10019,10019,11392,0,0]Bc[11085,13,10019,10019,11448,4566,0]An[11085,13,9512,9512,11424,0,0]Ak[11085,13,856,856,7615,0,0]Bc[11085,13,10020,10020,11244,4566,0]B`[11085,13,9513,9513,8392,4566,0]Am[11085,13,9513,9513,9577,0,0]Ba[11085,13,9513,9513,11059,4566,0]Am[11085,13,9878,9878,3466,0,0]An[11085,13,125,125,5275,4566,0]An[11085,13,125,125,9844,4566,0]An[11085,13,125,125,9835,4566,0]An[11085,13,125,125,5242,4566,0]An[11085,13,125,125,9831,4566,0]An[11085,13,125,125,5224,4566,0]An[11085,13,7677,7677,10053,0,0]An[11085,13,7677,7677,11065,0,0]An[11085,13,7677,7677,11483,0,0]An[11085,13,7677,7677,11066,0,0]An[11085,13,7677,7677,11246,0,0]An[11085,13,7677,7677,10294,0,0]Am[11085,13,7677,7677,7616,0,0]An[11085,13,7677,7677,10764,0,0]An[11085,13,7677,7677,10131,0,0]An[11085,13,7677,7677,10840,0,0]An[11085,13,7677,7677,11469,0,0]An[11085,13,7677,7677,11299,0,0]Am[11085,13,7679,7679,8396,0,0]An[11085,13,7679,7679,11414,0,0]Bc[11085,13,10864,10864,10775,4566,0]Bc[11085,13,10864,10864,11011,4566,0]Bb[11085,13,10864,10864,5223,4566,0]Bc[11085,13,10864,10864,10295,4566,0]Ba[11085,13,5147,5147,11250,4566,0]Ba[11085,13,9313,9313,11251,4566,0]An[11085,13,9315,9315,10296,0,0]B`[11085,13,9888,9888,9834,4566,0]B`[11085,13,5357,5357,9580,4566,0]Ba[11085,13,5357,5357,11300,4566,0]Ba[11085,13,5357,5357,10036,4566,0]Ba[11085,13,5357,5357,11010,4566,0]B`[11085,13,5357,5357,5243,4566,0]B`[11085,13,5357,5357,5225,4566,0]Ba[11085,13,1364,1364,11252,4566,0]Am[11085,13,5171,5171,4551,0,0]Am[11085,12,1366,1366,9602,0,0]B`[11085,13,4423,4423,5238,4566,0]B`[11085,13,4423,4423,9591,4566,0]Ao[11085,13,4423,4423,803,9602,0]B`[11085,13,9603,9603,5244,4566,0]B`[11085,13,9603,9603,5226,4566,0]Ba[11085,13,9603,9603,10766,4566,0]B`[11085,13,9603,9603,9574,4566,0]Bb[11085,13,10726,10726,9592,4566,0]Ba[11085,13,10726,10726,804,9602,0]Am[11085,13,4402,4402,3470,0,0]Am[11085,13,5174,5174,3471,0,0]Am[11085,13,5176,5176,3472,0,0]Am[11085,13,1861,1861,3473,0,0]Am[11085,13,5617,5617,5254,0,0]Am[11085,13,5180,5180,3474,0,0]B`[11085,13,8306,8306,7613,4566,0]Am[11085,13,4413,4413,3459,0,0]Am[11085,13,6224,6224,3460,0,0]B`[11085,13,4416,4416,9582,4566,0]Am[11085,13,4416,4416,9589,0,0]An[11085,13,4416,4416,10292,0,0]Am[11085,13,4416,4416,3457,0,0]Am[11085,13,4419,4419,8410,0,0]Am[11085,13,4419,4419,3475,0,0]Am[11085,13,5187,5187,5245,0,0]Am[11085,13,5187,5187,5227,0,0]Am[11085,13,9812,9812,3476,0,0]Bb[11085,13,10740,10740,3477,4566,0]Ak[11085,13,537,537,3478,0,0]An[11085,13,861,861,8412,4566,0]Ao[11085,13,861,861,11074,4566,0]Ao[11085,13,861,861,10777,4566,0]Ao[11085,13,861,861,11416,4566,0]Ao[11085,13,861,861,10761,4566,0]Ao[11085,13,861,861,10762,4566,0]B`[11085,13,9813,9813,8409,4566,0]An[11085,13,9813,9813,11439,0,0]An[11085,13,9813,9813,11475,0,0]Ao[11085,13,9813,9813,115,4566,0]B`[11085,13,9813,9813,5271,4566,0]Ao[11085,13,9813,9813,820,4566,0]An[11085,13,9813,9813,11417,0,0]An[11085,13,9813,9813,11214,0,0]An[11085,13,9813,9813,11212,0,0]Ba[11085,13,5210,5210,10852,4566,0]Ba[11085,13,5210,5210,10049,4566,0]Ba[11085,13,5210,5210,10048,4566,0]Am[11085,13,5623,5623,3479,0,0]An[11085,13,8313,8313,11465,0,0]Am[11085,13,5625,5625,3480,0,0]Am[11085,12,4584,4584,8408,0,0]Ba[11085,13,4584,4584,10850,4566,0]Am[11085,13,4584,4584,8401,0,0]Ba[11085,13,4584,4584,10306,8408,0]Ba[11085,13,4584,4584,10768,8408,0]An[11085,13,4584,4584,11393,0,0]Ba[11085,13,8181,8181,10044,4566,0]Ba[11085,13,8181,8181,10779,4566,0]Ba[11085,13,8181,8181,10144,4566,0]Am[11085,13,4424,4424,3461,0,0]Am[11085,13,4424,4424,7632,0,0]Ao[11085,13,9778,9778,116,4566,0]An[11085,13,9430,9430,10307,0,0]Ba[11085,13,9437,9437,10043,4566,0]Ba[11085,13,9437,9437,10136,4566,0]Ba[11085,13,9437,9437,10851,4566,0]Am[11085,13,9437,9437,8411,0,0]An[11085,13,9437,9437,11254,0,0]Ba[11085,13,9437,9437,11211,4566,0]An[11085,13,9437,9437,11484,0,0]B`[11085,13,8319,8319,5246,4566,0]Ba[11085,13,8319,8319,10060,4566,0]Ak[11085,13,542,542,3482,0,0]Am[11085,13,8182,8182,3483,0,0]Am[11085,13,4425,4425,3484,0,0]Am[11085,13,2904,2904,3485,0,0]Am[11085,13,9514,9514,5247,0,0]Dk[11085,13,9514,9514,11333,4566,0,\"impl-Module-for-OpenClipTextTransformer\"]Cm[11085,13,9514,9514,11333,0,0,\"impl-OpenClipTextTransformer\"]Ba[11085,13,8331,8331,11070,4566,0]Am[11085,13,8331,8331,3486,0,0]Am[11085,13,9457,9457,5228,0,0]Ak[11085,13,779,779,3488,0,0]Am[11085,13,2906,2906,3489,0,0]Ba[11085,13,4418,4418,11071,4566,0]Bb[11085,13,10021,10021,3491,4566,0]Bb[11085,13,10245,10245,9600,4566,0]Bb[11085,13,11182,11182,8418,4566,0]B`[11085,13,11182,11182,10318,0,0]Ao[11085,13,10724,10724,9840,0,0]Ao[11085,13,11050,11050,4568,0,0]Am[11085,13,9814,9814,3492,0,0]Ao[11085,13,10991,10991,3493,0,0]B`[11085,13,11186,11186,11466,0,0]Bb[11085,13,11188,11188,5248,4566,0]Bc[11085,13,11188,11188,10061,4566,0]Ao[11085,13,10094,10094,3495,0,0]Ao[11085,13,10096,10096,9841,0,0]Ao[11085,13,10247,10247,9842,0,0]Ao[11085,13,10730,10730,9843,0,0]Ao[11085,13,11422,11422,3496,0,0]Ao[11085,13,10993,10993,3497,0,0]Ao[11085,13,10995,10995,3498,0,0]Ao[11085,13,11190,11190,3499,0,0]An[11085,13,9970,9970,10141,0,0]An[11085,13,9970,9970,11427,0,0]Am[11085,13,4434,4434,3500,0,0]An[11085,13,4434,4434,10770,0,0]Am[11085,13,8339,8339,3501,0,0]Ao[11085,13,10732,10732,3502,0,0]Am[11085,13,5643,5643,3503,0,0]Am[11085,13,5645,5645,3504,0,0]Ba[11085,13,8347,8347,11415,4566,0]Ba[11085,13,8347,8347,11398,4566,0]Bb[11085,13,10825,10825,9585,4566,0]Bb[11085,13,10825,10825,6167,4566,0]An[11085,13,9815,9815,10857,0,0]Bc[11085,13,10078,10078,10301,4566,0]Am[11085,13,9930,9930,9590,0,0]B`[11085,13,10243,10243,10045,0,0]Aj[11085,13,786,786,118,0,0]B`[11085,13,6251,6251,5277,4566,0]B`[11085,13,5213,5213,9601,4566,0]Ba[11085,13,5213,5213,10319,4566,0]B`[11085,13,5213,5213,7646,4566,0]Am[11085,13,5213,5213,3505,0,0]An[11085,13,857,857,8393,4566,0]Ao[11085,13,857,857,11060,4566,0]An[11085,13,5205,5205,10047,0,0]Ba[11085,13,9320,9320,10856,4566,0]B`[11085,13,9320,9320,7647,4566,0]An[11085,13,7660,7660,10128,0,0]An[11085,13,7660,7660,11015,0,0]Ba[11085,13,7660,7660,10125,4566,0]An[11085,13,6144,6144,11215,0,0]Bc[11085,13,10276,10276,11009,4566,0]Bc[11085,13,10276,10276,10782,4566,0]B`[11085,13,10276,10276,10143,0,0]B`[11085,13,10276,10276,11337,0,0]Ao[11085,13,10276,10276,9579,0,0]B`[11085,13,10276,10276,11207,0,0]Ao[11085,13,10276,10276,7653,0,0]B`[11085,13,10276,10276,11007,0,0]Am[11085,13,8359,8359,3506,0,0]Am[11085,13,9510,9510,3507,0,0]Bb[11085,13,10006,10006,8397,4566,0]Ao[11085,13,10006,10006,3508,0,0]B`[11085,13,10006,10006,10132,0,0]Al[11085,13,93,93,4561,4566,0]Aj[11085,13,93,93,10142,0,0]Aj[11085,13,93,93,11428,0,0]Am[11085,13,4452,4452,9851,0,0]Am[11085,13,4452,4452,9852,0,0]An[11085,13,4452,4452,10781,0,0]Ak[11085,13,799,799,8398,0,0]An[11085,13,799,799,5249,4566,0]Ak[11085,13,799,799,3509,0,0]Am[11085,13,4426,4426,9825,0,0]Am[11085,13,4426,4426,9595,0,0]Ao[11085,13,10727,10727,9826,0,0]Ao[11085,13,10727,10727,9596,0,0]Bb[11085,13,10028,10028,7620,4566,0]Bb[11085,13,10028,10028,4562,4566,0]Bb[11085,13,10028,10028,4547,4566,0]Bb[11085,13,10028,10028,5264,4566,0]Bb[11085,13,10028,10028,7631,4566,0]Bb[11085,13,10028,10028,5272,4566,0]B`[11085,13,5084,5084,8434,4566,0]Ba[11085,13,5084,5084,11014,4566,0]An[11085,13,5084,5084,10058,0,0]Ba[11085,13,5084,5084,11012,4566,0]Am[11085,13,5084,5084,6177,0,0]Am[11085,13,5084,5084,7610,0,0]Ao[11085,13,11081,11081,7609,0,0]An[11085,13,6201,6201,10138,0,0]Am[11085,13,6201,6201,7654,0,0]Ba[11085,13,8329,8329,11069,4566,0]B`[11085,13,8329,8329,6176,4566,0]Am[11085,13,4432,4432,4583,0,0]An[11085,13,9823,9823,10323,0,0]An[11085,13,9823,9823,11261,0,0]An[11085,13,9823,9823,11485,0,0]Ak[11085,13,101,101,3510,0,0]B`[11085,13,9968,9968,7621,4566,0]B`[11085,13,9968,9968,4563,4566,0]B`[11085,13,9968,9968,5273,4566,0]Am[11085,13,5288,5288,4479,0,0]Af[11085,2,5190,0,0,0,0]Am[11085,14,6247,6247,3518,0,0]Am[11085,14,7679,7679,8419,0,0]Ai[11085,14,114,0,6171,0,0]033Am[11085,14,4416,4416,9589,0,0]Am[11085,14,6224,6224,4500,0,0]Am[11085,14,5285,5285,4476,0,0]Am[11085,14,4419,4419,4501,0,0]Am[11085,14,9812,9812,4503,0,0]Ak[11085,14,537,537,4505,0,0]Am[11085,12,7679,7679,7634,0,0]Am[11085,14,5357,5357,4486,0,0];Am[11085,14,4419,4419,3519,0,0]Ao[11085,14,10276,10276,7653,0,0]Am[11085,14,5288,5288,4479,0,0]Am[11085,14,9878,9878,4480,0,0]Am[11085,14,1861,1861,4494,0,0]Af[11085,2,5190,0,0,0,0]0Am[11085,13,4423,4423,4489,0,0]Am[11085,13,9603,9603,4490,0,0]>Am[11085,14,8347,8347,4535,0,0]Am[11085,14,6247,6247,3518,0,0]B`[11085,13,9379,9379,10305,105,0]Ao[11085,13,9379,9379,6179,105,0]B`[11085,13,3529,3529,11471,105,0]B`[11085,13,3529,3529,11253,105,0]B`[11085,13,3529,3529,11450,105,0]Ao[11085,13,3529,3529,4474,105,0]Ao[11085,13,3529,3529,3464,105,0]An[11085,13,847,847,11242,105,0]Am[11085,13,849,849,7612,105,0]An[11085,13,849,849,11206,105,0]An[11085,13,849,849,10291,105,0]An[11085,13,849,849,10290,105,0]Am[11085,13,849,849,7623,105,0]An[11085,13,849,849,11256,105,0]Am[11085,13,849,849,4475,105,0]Am[11085,13,849,849,7611,105,0]Am[11085,13,849,849,9575,105,0]Ao[11085,13,5285,5285,8405,105,0]Ao[11085,13,5285,5285,4476,105,0]Am[11085,13,853,853,9854,105,0]Am[11085,13,853,853,4477,105,0]Am[11085,13,853,853,9599,105,0]An[11085,13,853,853,11446,105,0]Ao[11085,13,7666,7666,4478,105,0]Ao[11085,13,7666,7666,8417,105,0]B`[11085,13,7666,7666,10317,105,0]Ao[11085,13,5288,5288,4479,105,0]Ao[11085,13,5288,5288,3465,105,0]Ao[11085,13,9875,9875,8391,105,0]B`[11085,13,9875,9875,10838,105,0]B`[11085,13,9875,9875,10037,105,0]B`[11085,13,9875,9875,10758,105,0]Bb[11085,13,10019,10019,11332,105,0]Bb[11085,13,10019,10019,11438,105,0]Bb[11085,13,10019,10019,11392,105,0]Bb[11085,13,10019,10019,11448,105,0]B`[11085,13,9512,9512,11257,105,0]B`[11085,13,9512,9512,11243,105,0]B`[11085,13,9512,9512,11413,105,0]B`[11085,13,9512,9512,11424,105,0]Am[11085,13,856,856,7615,105,0]An[11085,13,856,856,10038,105,0]Am[11085,13,856,856,8395,105,0]Bb[11085,13,10020,10020,10760,105,0]Bb[11085,13,10020,10020,11244,105,0]Ao[11085,13,9513,9513,8392,105,0]B`[11085,13,9513,9513,10127,105,0]Ao[11085,13,9513,9513,9577,105,0]B`[11085,13,9513,9513,11059,105,0]Ao[11085,13,9878,9878,4480,105,0]Ao[11085,13,9878,9878,3466,105,0]Ao[11085,13,5290,5290,3467,105,0]Ao[11085,13,6198,6198,4481,105,0]Am[11085,13,125,125,4482,105,0]Am[11085,13,125,125,5275,105,0]Am[11085,13,125,125,9844,105,0]Am[11085,13,125,125,9835,105,0]Am[11085,13,125,125,5242,105,0]Am[11085,13,125,125,9831,105,0]Am[11085,13,125,125,5224,105,0]An[11085,13,125,125,10322,105,0]An[11085,13,125,125,11334,105,0]Am[11085,13,125,125,3468,105,0]B`[11085,13,7677,7677,10134,105,0]B`[11085,13,7677,7677,10053,105,0]B`[11085,13,7677,7677,11065,105,0]B`[11085,13,7677,7677,11483,105,0]B`[11085,13,7677,7677,11008,105,0]B`[11085,13,7677,7677,11066,105,0]B`[11085,13,7677,7677,11246,105,0]B`[11085,13,7677,7677,10294,105,0]B`[11085,13,7677,7677,10130,105,0]Ao[11085,13,7677,7677,7616,105,0]B`[11085,13,7677,7677,10764,105,0]B`[11085,13,7677,7677,10131,105,0]B`[11085,13,7677,7677,10840,105,0]B`[11085,13,7677,7677,11469,105,0]B`[11085,13,7677,7677,11299,105,0]Ao[11085,13,7677,7677,7624,105,0]Ao[11085,13,7677,7677,4483,105,0]Ao[11085,13,7677,7677,5261,105,0]B`[11085,13,7677,7677,11302,105,0]Ao[11085,13,7679,7679,8419,105,0]B`[11085,13,7679,7679,11209,105,0]Ao[11085,13,7679,7679,8396,105,0]B`[11085,13,7679,7679,10765,105,0]B`[11085,13,7679,7679,10140,105,0]B`[11085,13,7679,7679,11414,105,0]B`[11085,13,7679,7679,11248,105,0]Bb[11085,13,10864,10864,11249,105,0]Bb[11085,13,10864,10864,10775,105,0]Bb[11085,13,10864,10864,11011,105,0]Ba[11085,13,10864,10864,5274,105,0]Ba[11085,13,10864,10864,5223,105,0]Bb[11085,13,10864,10864,10295,105,0]B`[11085,13,5147,5147,11250,105,0]B`[11085,13,9313,9313,11251,105,0]B`[11085,13,9315,9315,10296,105,0]Ao[11085,13,9315,9315,4484,105,0]Ao[11085,13,9888,9888,9838,105,0]Ao[11085,13,9888,9888,9834,105,0]Ao[11085,13,9890,9890,4485,105,0]Ao[11085,13,5357,5357,6173,105,0]Ao[11085,13,5357,5357,5262,105,0]Ao[11085,13,5357,5357,4486,105,0]B`[11085,13,5357,5357,10845,105,0]B`[11085,13,5357,5357,11017,105,0]B`[11085,13,5357,5357,11335,105,0]Ao[11085,13,5357,5357,9580,105,0]B`[11085,13,5357,5357,11300,105,0]B`[11085,13,5357,5357,10036,105,0]B`[11085,13,5357,5357,11010,105,0]Ao[11085,13,5357,5357,5243,105,0]Ao[11085,13,5357,5357,5225,105,0]Ao[11085,13,5357,5357,3469,105,0]B`[11085,13,1364,1364,11252,105,0]Ao[11085,13,5171,5171,4487,105,0]Ao[11085,13,5171,5171,4551,105,0]Ao[11085,13,5365,5365,4488,105,0]Ao[11085,13,6247,6247,3518,105,0]Ao[11085,13,4423,4423,4489,105,0]Ao[11085,13,4423,4423,5238,105,0]Ao[11085,13,4423,4423,9591,105,0]Ao[11085,13,4423,4423,4569,105,0]B`[11085,13,4423,4423,10050,105,0]B`[11085,13,4423,4423,10841,105,0]B`[11085,13,4423,4423,10853,105,0]Ao[11085,13,4423,4423,7625,105,0]An[11085,13,4423,4423,803,105,0]Ao[11085,13,9603,9603,4490,105,0]Ao[11085,13,9603,9603,5244,105,0]Ao[11085,13,9603,9603,5226,105,0]B`[11085,13,9603,9603,10766,105,0]Ao[11085,13,9603,9603,9574,105,0]Ba[11085,13,10726,10726,9592,105,0]Ba[11085,13,10726,10726,4570,105,0]Bb[11085,13,10726,10726,10051,105,0]Bb[11085,13,10726,10726,10842,105,0]Bb[11085,13,10726,10726,10854,105,0]Ba[11085,13,10726,10726,7626,105,0]B`[11085,13,10726,10726,804,105,0]Ao[11085,13,4402,4402,4491,105,0]Ao[11085,13,4402,4402,3470,105,0]Ao[11085,13,5174,5174,4492,105,0]Ao[11085,13,5174,5174,3471,105,0]Ao[11085,13,5176,5176,4493,105,0]Ao[11085,13,5176,5176,3472,105,0]Ao[11085,13,1861,1861,4494,105,0]Ao[11085,13,1861,1861,3473,105,0]B`[11085,13,5617,5617,10300,105,0]B`[11085,13,5617,5617,10847,105,0]B`[11085,13,5617,5617,10133,105,0]B`[11085,13,5617,5617,10041,105,0]Ao[11085,13,5617,5617,4495,105,0]Ao[11085,13,5617,5617,3442,105,0]Ao[11085,13,5617,5617,5254,105,0]Ao[11085,13,5180,5180,4496,105,0]Ao[11085,13,5180,5180,3474,105,0]Ao[11085,13,4404,4404,4497,105,0]B`[11085,13,8306,8306,11258,105,0]Ao[11085,13,8306,8306,4498,105,0]Ao[11085,13,8306,8306,7613,105,0]B`[11085,13,4413,4413,10135,105,0]B`[11085,13,4413,4413,10767,105,0]Ao[11085,13,4413,4413,9837,105,0]Ao[11085,13,4413,4413,9586,105,0]Ao[11085,13,4413,4413,4499,105,0]Ao[11085,13,4413,4413,3443,105,0]Ao[11085,13,4413,4413,3459,105,0]Ao[11085,13,6224,6224,4500,105,0]Ao[11085,13,6224,6224,3444,105,0]Ao[11085,13,6224,6224,3460,105,0]Bb[11085,13,10809,10809,11016,105,0]Ao[11085,13,4416,4416,9582,105,0]Ao[11085,13,4416,4416,9589,105,0]B`[11085,13,4416,4416,10292,105,0]Ao[11085,13,4416,4416,3457,105,0]Ao[11085,13,5086,5086,9584,105,0]B`[11085,13,5086,5086,10848,105,0]B`[11085,13,5086,5086,11067,105,0]B`[11085,13,5086,5086,10042,105,0]B`[11085,13,5086,5086,11013,105,0]B`[11085,13,5086,5086,11210,105,0]Ao[11085,13,4419,4419,3519,105,0]Ao[11085,13,4419,4419,4501,105,0]Ao[11085,13,4419,4419,8410,105,0]B`[11085,13,4419,4419,10046,105,0]Ao[11085,13,4419,4419,3475,105,0]Ao[11085,13,5187,5187,4502,105,0]Ao[11085,13,5187,5187,5245,105,0]Ao[11085,13,5187,5187,5227,105,0]Ao[11085,13,5187,5187,5259,105,0]Ao[11085,13,9812,9812,4503,105,0]Ao[11085,13,9812,9812,3476,105,0]Ba[11085,13,10740,10740,3477,105,0]Ba[11085,13,10740,10740,4504,105,0]An[11085,13,9523,9523,107,105,0]Am[11085,13,537,537,3478,105,0]Am[11085,13,537,537,6174,105,0]An[11085,13,537,537,10126,105,0]An[11085,13,537,537,10772,105,0]Am[11085,13,537,537,4505,105,0]B`[11085,13,6183,6183,10055,105,0]B`[11085,13,6183,6183,11487,105,0]Ao[11085,13,2899,2899,6175,105,0]B`[11085,13,5359,5359,10139,105,0]Ao[11085,13,5359,5359,4506,105,0]Ao[11085,13,5359,5359,5241,105,0]Al[11085,13,861,861,819,105,0]Am[11085,13,861,861,5263,105,0]Am[11085,13,861,861,8412,105,0]An[11085,13,861,861,11074,105,0]An[11085,13,861,861,10777,105,0]An[11085,13,861,861,11416,105,0]An[11085,13,861,861,10761,105,0]An[11085,13,861,861,10762,105,0]B`[11085,13,9813,9813,11075,105,0]Ao[11085,13,9813,9813,4507,105,0]B`[11085,13,9813,9813,10310,105,0]Ao[11085,13,9813,9813,8409,105,0]B`[11085,13,9813,9813,11439,105,0]B`[11085,13,9813,9813,11475,105,0]An[11085,13,9813,9813,115,105,0]Ao[11085,13,9813,9813,5271,105,0]An[11085,13,9813,9813,820,105,0]B`[11085,13,9813,9813,11417,105,0]B`[11085,13,9813,9813,11214,105,0]B`[11085,13,9813,9813,11212,105,0]B`[11085,13,9966,9966,10846,105,0]B`[11085,13,9966,9966,11018,105,0]B`[11085,13,9966,9966,11426,105,0]B`[11085,13,9966,9966,11336,105,0]B`[11085,13,9966,9966,11451,105,0]Ao[11085,13,5210,5210,4508,105,0]B`[11085,13,5210,5210,10852,105,0]B`[11085,13,5210,5210,10049,105,0]B`[11085,13,5210,5210,10048,105,0]Ao[11085,13,5623,5623,4509,105,0]Ao[11085,13,5623,5623,3479,105,0]Ao[11085,13,8313,8313,4510,105,0]B`[11085,13,8313,8313,11465,105,0]Ao[11085,13,5625,5625,4511,105,0]Ao[11085,13,5625,5625,3480,105,0]B`[11085,13,4584,4584,11255,105,0]Ao[11085,13,4584,4584,6158,105,0]B`[11085,13,4584,4584,10850,105,0]B`[11085,13,4584,4584,11460,105,0]B`[11085,13,4584,4584,10776,105,0]B`[11085,13,4584,4584,10309,105,0]Ao[11085,13,4584,4584,8401,105,0]B`[11085,13,4584,4584,10306,105,0]B`[11085,13,4584,4584,10768,105,0]B`[11085,13,4584,4584,11393,105,0]B`[11085,13,8181,8181,10044,105,0]Ao[11085,13,8181,8181,9853,105,0]B`[11085,13,8181,8181,10773,105,0]B`[11085,13,8181,8181,10779,105,0]B`[11085,13,8181,8181,10144,105,0]Ao[11085,13,4424,4424,3461,105,0]Ao[11085,13,4424,4424,7632,105,0]Ao[11085,13,4424,4424,4512,105,0]An[11085,13,9778,9778,117,105,0]An[11085,13,9778,9778,116,105,0]B`[11085,13,9778,9778,11301,105,0]B`[11085,13,9778,9778,10289,105,0]B`[11085,13,9430,9430,10307,105,0]B`[11085,13,9430,9430,10769,105,0]Ao[11085,13,9769,9769,4513,105,0]Ao[11085,13,8316,8316,4514,105,0]Ao[11085,13,9437,9437,4515,105,0]B`[11085,13,9437,9437,10839,105,0]B`[11085,13,9437,9437,10759,105,0]B`[11085,13,9437,9437,10043,105,0]B`[11085,13,9437,9437,10308,105,0]B`[11085,13,9437,9437,10136,105,0]B`[11085,13,9437,9437,10851,105,0]Ao[11085,13,9437,9437,8411,105,0]B`[11085,13,9437,9437,11254,105,0]B`[11085,13,9437,9437,11211,105,0]B`[11085,13,9437,9437,11484,105,0]Ao[11085,13,8319,8319,4516,105,0]Ao[11085,13,8319,8319,9855,105,0]Ao[11085,13,8319,8319,5246,105,0]B`[11085,13,8319,8319,10060,105,0]Ao[11085,13,8319,8319,3481,105,0]Am[11085,13,542,542,4517,105,0]Am[11085,13,542,542,3482,105,0]Ao[11085,13,8182,8182,3483,105,0]Ao[11085,13,4425,4425,3484,105,0]Ao[11085,13,2904,2904,4518,105,0]Ao[11085,13,2904,2904,3485,105,0]Ao[11085,13,9514,9514,4519,105,0]Ao[11085,13,9514,9514,5247,105,0]B`[11085,13,9514,9514,11333,105,0]Ao[11085,13,8331,8331,4520,105,0]B`[11085,13,8331,8331,11070,105,0]Ao[11085,13,8331,8331,3486,105,0]B`[11085,13,9457,9457,10035,105,0]Ao[11085,13,9457,9457,4521,105,0]Ao[11085,13,9457,9457,7608,105,0]Ao[11085,13,9457,9457,9832,105,0]Ao[11085,13,9457,9457,5228,105,0]Ao[11085,13,9457,9457,3487,105,0]B`[11085,13,8334,8334,11259,105,0]Ao[11085,13,8334,8334,4522,105,0]Am[11085,13,779,779,4523,105,0]Am[11085,13,779,779,3488,105,0]Ao[11085,13,2906,2906,4524,105,0]B`[11085,13,2906,2906,10311,105,0]Ao[11085,13,2906,2906,3489,105,0]Ao[11085,13,4418,4418,4525,105,0]B`[11085,13,4418,4418,11071,105,0]Ao[11085,13,4418,4418,3490,105,0]Ba[11085,13,10021,10021,4526,105,0]Ba[11085,13,10021,10021,3491,105,0]Ba[11085,13,10245,10245,9600,105,0]Bb[11085,13,10245,10245,11447,105,0]Ba[11085,13,11182,11182,8418,105,0]Bb[11085,13,11182,11182,10318,105,0]Ba[11085,13,10724,10724,9840,105,0]Ba[11085,13,11050,11050,4568,105,0]Ao[11085,13,9814,9814,3492,105,0]Ba[11085,13,10991,10991,3493,105,0]Bb[11085,13,11186,11186,11466,105,0]Ba[11085,13,11188,11188,3494,105,0]Ba[11085,13,11188,11188,5248,105,0]Bb[11085,13,11188,11188,10061,105,0]Ba[11085,13,10094,10094,3495,105,0]Ba[11085,13,10096,10096,9841,105,0]Ba[11085,13,10247,10247,9842,105,0]Ba[11085,13,10730,10730,9843,105,0]Ba[11085,13,11422,11422,3496,105,0]Ba[11085,13,10993,10993,3497,105,0]Ba[11085,13,10995,10995,3498,105,0]Ba[11085,13,11190,11190,3499,105,0]Ao[11085,13,9970,9970,4529,105,0]B`[11085,13,9970,9970,10141,105,0]B`[11085,13,9970,9970,11427,105,0]Ao[11085,13,4434,4434,4530,105,0]Ao[11085,13,4434,4434,3500,105,0]B`[11085,13,4434,4434,10770,105,0]Ao[11085,13,8339,8339,4531,105,0]Ao[11085,13,8339,8339,3501,105,0]Bb[11085,13,10732,10732,10855,105,0]Ba[11085,13,10732,10732,4532,105,0]Ba[11085,13,10732,10732,3502,105,0]Ao[11085,13,5201,5201,4533,105,0]B`[11085,13,5643,5643,10054,105,0]Ao[11085,13,5643,5643,3520,105,0]Ao[11085,13,5643,5643,7651,105,0]Ao[11085,13,5643,5643,4534,105,0]Ao[11085,13,5643,5643,3503,105,0]Ao[11085,13,5645,5645,3504,105,0]Ao[11085,13,8347,8347,4535,105,0]B`[11085,13,8347,8347,11415,105,0]B`[11085,13,8347,8347,11398,105,0]Ba[11085,13,10825,10825,9585,105,0]Ba[11085,13,10825,10825,6167,105,0]B`[11085,13,9815,9815,10857,105,0]Bb[11085,13,10078,10078,10301,105,0]Ao[11085,13,9930,9930,9590,105,0]Bb[11085,13,10243,10243,10045,105,0]Al[11085,13,786,786,118,105,0]Ao[11085,13,6251,6251,5277,105,0]Ao[11085,13,5213,5213,8416,105,0]Ao[11085,13,5213,5213,9857,105,0]Ao[11085,13,5213,5213,4536,105,0]Ao[11085,13,5213,5213,9601,105,0]B`[11085,13,5213,5213,10319,105,0]Ao[11085,13,5213,5213,7646,105,0]Ao[11085,13,5213,5213,3505,105,0]Bb[11085,13,10827,10827,11260,105,0]Am[11085,13,857,857,8393,105,0]Am[11085,13,857,857,4537,105,0]An[11085,13,857,857,11060,105,0]B`[11085,13,5205,5205,11076,105,0]B`[11085,13,5205,5205,10047,105,0]B`[11085,13,9320,9320,10856,105,0]Ao[11085,13,9320,9320,7647,105,0]B`[11085,13,7660,7660,10128,105,0]B`[11085,13,7660,7660,11399,105,0]B`[11085,13,7660,7660,11015,105,0]B`[11085,13,7660,7660,11205,105,0]B`[11085,13,7660,7660,10125,105,0]An[11085,13,866,866,11061,105,0]An[11085,13,866,866,10033,105,0]An[11085,13,868,868,10034,105,0]An[11085,13,868,868,10763,105,0]An[11085,13,868,868,11062,105,0]Bb[11085,13,11400,11400,11489,105,0]Bb[11085,13,11400,11400,11470,105,0]Ao[11085,13,9502,9502,9827,105,0]B`[11085,13,9502,9502,10137,105,0]B`[11085,13,9502,9502,10320,105,0]Ao[11085,13,6144,6144,9576,105,0]B`[11085,13,6144,6144,11429,105,0]B`[11085,13,6144,6144,11215,105,0]Bb[11085,13,10276,10276,11395,105,0]Bb[11085,13,10276,10276,11009,105,0]Bb[11085,13,10276,10276,11303,105,0]Bb[11085,13,10276,10276,10782,105,0]Bb[11085,13,10276,10276,11216,105,0]Bb[11085,13,10276,10276,10143,105,0]Bb[11085,13,10276,10276,11461,105,0]Bb[11085,13,10276,10276,11337,105,0]Bb[11085,13,10276,10276,10843,105,0]Ba[11085,13,10276,10276,9579,105,0]Bb[11085,13,10276,10276,11425,105,0]Bb[11085,13,10276,10276,11207,105,0]Bb[11085,13,10276,10276,10321,105,0]Ba[11085,13,10276,10276,7653,105,0]Bb[11085,13,10276,10276,11394,105,0]Bb[11085,13,10276,10276,11007,105,0]B`[11085,13,5216,5216,11396,105,0]B`[11085,13,5216,5216,10052,105,0]B`[11085,13,5216,5216,11068,105,0]B`[11085,13,5216,5216,11397,105,0]Ao[11085,13,5216,5216,8415,105,0]B`[11085,13,5216,5216,10030,105,0]B`[11085,13,5216,5216,10297,105,0]B`[11085,13,5216,5216,10780,105,0]B`[11085,13,5216,5216,11298,105,0]B`[11085,13,5216,5216,11217,105,0]An[11085,13,794,794,11449,105,0]An[11085,13,794,794,11058,105,0]An[11085,13,794,794,10031,105,0]Ao[11085,13,8359,8359,4538,105,0]Ao[11085,13,8359,8359,3506,105,0]Ao[11085,13,9510,9510,4539,105,0]Ao[11085,13,9510,9510,3507,105,0]Ba[11085,13,10006,10006,9839,105,0]Ba[11085,13,10006,10006,4540,105,0]Ba[11085,13,10006,10006,7618,105,0]Ba[11085,13,10006,10006,6160,105,0]Ba[11085,13,10006,10006,8397,105,0]Ba[11085,13,10006,10006,3508,105,0]Bb[11085,13,10006,10006,10132,105,0]Ak[11085,13,93,93,4561,105,0]Al[11085,13,93,93,11445,105,0]Ak[11085,13,93,93,4541,105,0]Al[11085,13,93,93,10142,105,0]Al[11085,13,93,93,11428,105,0]Ao[11085,13,4452,4452,9597,105,0]Ao[11085,13,4452,4452,9851,105,0]Ao[11085,13,4452,4452,9852,105,0]B`[11085,13,4452,4452,10781,105,0]Ao[11085,13,4452,4452,8420,105,0]Am[11085,13,797,797,4565,105,0]Al[11085,13,797,797,121,105,0]Am[11085,13,799,799,4542,105,0]Am[11085,13,799,799,8398,105,0]Am[11085,13,799,799,5249,105,0]Am[11085,13,799,799,3509,105,0]Ao[11085,13,6150,6150,4543,105,0]Ao[11085,13,4426,4426,9825,105,0]Ao[11085,13,4426,4426,9595,105,0]Ao[11085,13,4426,4426,5281,105,0]Ba[11085,13,10727,10727,9826,105,0]Ba[11085,13,10727,10727,9596,105,0]Ba[11085,13,10727,10727,5282,105,0]Ba[11085,13,10028,10028,7620,105,0]Ba[11085,13,10028,10028,4562,105,0]Ba[11085,13,10028,10028,4547,105,0]Ba[11085,13,10028,10028,5264,105,0]Ba[11085,13,10028,10028,7631,105,0]Ba[11085,13,10028,10028,5272,105,0]Ao[11085,13,5084,5084,8434,105,0]B`[11085,13,5084,5084,11014,105,0]B`[11085,13,5084,5084,10058,105,0]B`[11085,13,5084,5084,11012,105,0]Ao[11085,13,5084,5084,6177,105,0]Ao[11085,13,5084,5084,7610,105,0]An[11085,13,869,869,10129,105,0]An[11085,13,869,869,11208,105,0]Ba[11085,13,11081,11081,7609,105,0]B`[11085,13,6201,6201,10138,105,0]Ao[11085,13,6201,6201,7654,105,0]B`[11085,13,8329,8329,11069,105,0]Ao[11085,13,8329,8329,6176,105,0]Ao[11085,13,4432,4432,4583,105,0]B`[11085,13,9823,9823,10323,105,0]B`[11085,13,9823,9823,11261,105,0]B`[11085,13,9823,9823,11485,105,0]Ao[11085,13,9823,9823,4544,105,0]Am[11085,13,101,101,4545,105,0]Am[11085,13,101,101,3510,105,0]B`[11085,13,10813,10813,801,105,0]Ba[11085,13,10813,10813,6163,105,0]Ao[11085,13,9968,9968,7621,105,0]Ao[11085,13,9968,9968,4563,105,0]Ao[11085,13,9968,9968,5273,105,0]Ba[11085,13,11280,11280,8433,105,0]Ag[11085,2,10827,0,0,0,0]B`[11085,14,10276,10276,11394,0,0]B`[11085,14,10276,10276,11007,0,0]Am[11085,13,8306,8306,4498,0,0]Ao[11085,14,10006,10006,4540,0,0]Af[11085,2,5190,0,0,0,0]Al[11085,15,849,849,11256,0,0]An[11085,15,9512,9512,11257,0,0]An[11085,15,8306,8306,11258,0,0]An[11085,15,8334,8334,11259,0,0]Am[11085,15,5357,5357,5262,0,0]Ak[11085,15,861,861,5263,0,0]Af[11085,5,4584,0,0,0,0]An[11085,15,5216,5216,11298,0,0]Ag[11085,6,10006,0,0,0,0]Af[11085,8,7677,0,0,0,0]Ag[11085,5,10813,0,0,0,0]1An[11085,15,9502,9502,10320,0,0]An[11085,15,5216,5216,10780,0,0]Ag[11085,5,10825,0,0,0,0]An[11085,15,5617,5617,10133,0,0]Am[11085,15,4413,4413,9837,0,0]Ag[11085,18,6150,0,0,0,0]Al[11085,15,9813,9813,115,0,0]Af[11085,6,5357,0,0,0,0]Ae[11085,6,537,0,0,0,0]Af[11085,6,2899,0,0,0,0]Af[11085,5,8329,0,0,0,0]Af[11085,5,5084,0,0,0,0]Af[11085,6,9379,0,0,0,0]An[11085,15,5216,5216,10297,0,0]=Af[11085,2,8311,0,0,0,0]Am[11085,14,4423,4423,4489,0,0]Al[11085,14,866,866,11061,0,0]Al[11085,14,868,868,11062,0,0]B`[11085,14,11400,11400,11489,0,0]Am[11085,12,7679,7679,8394,0,0]Af[11085,7,7673,0,0,0,0]0Am[11085,14,5359,5359,4506,0,0]Am[11085,14,5210,5210,4508,0,0]Am[11085,14,2904,2904,4518,0,0]Am[11085,14,5357,5357,4486,0,0]2Am[11085,14,7677,7677,4483,0,0]Af[11085,2,5190,0,0,0,0]Af[11085,7,6198,0,0,0,0]Af[11085,2,9570,0,0,0,0]Am[11085,13,5171,5171,4487,0,0]Am[11085,13,9968,9968,4563,0,0]Am[11085,13,9457,9457,3487,0,0]Am[11085,14,4402,4402,4491,0,0]Am[11085,14,5174,5174,4492,0,0]Am[11085,14,5176,5176,4493,0,0]Am[11085,14,5180,5180,4496,0,0]Am[11085,14,5623,5623,4509,0,0]Am[11085,13,2906,2906,4524,0,0]Ao[11085,14,10021,10021,4526,0,0]Ao[11085,14,10732,10732,4532,0,0]Am[11085,13,8359,8359,4538,0,0]?An[11085,14,9437,9437,10759,0,0]Am[11085,14,8347,8347,4535,0,0]Am[11085,14,4452,4452,9597,0,0]Am[11085,14,7677,7677,4483,0,0]3Ag[11085,7,10028,0,0,0,0]Af[11085,7,9968,0,0,0,0]Af[11085,7,4458,0,0,0,0]Af[11085,2,5190,0,0,0,0]=Am[11085,14,6224,6224,4500,0,0]Aj[11085,13,786,786,118,0,0]1Am[11085,14,9812,9812,4503,0,0]An[11085,14,6144,6144,11429,0,0]Ao[11085,14,10006,10006,4540,0,0]5Am[11085,14,5357,5357,4486,0,0]Am[11085,14,5210,5210,4508,0,0]An[11085,14,9513,9513,10127,0,0]Am[11085,14,9514,9514,4519,0,0]Ak[11085,14,857,857,4537,0,0]Am[11085,14,4423,4423,4489,0,0]Ak[11085,14,799,799,4542,0,0]An[11085,14,5086,5086,11210,0,0]Af[11085,7,5204,0,0,0,0]00An[11085,13,9379,9379,10305,0,0]Af[11085,2,1366,0,0,0,0]Am[11085,13,6224,6224,4500,0,0]0Ag[11085,2,10825,0,0,0,0]B`[11085,13,9379,9379,6179,5278,0]Ba[11085,13,3529,3529,11471,5278,0]Ba[11085,13,3529,3529,11253,5278,0]Ba[11085,13,3529,3529,11450,5278,0]B`[11085,13,3529,3529,4474,5278,0]B`[11085,13,3529,3529,3464,5278,0]An[11085,13,849,849,7623,5278,0]Ao[11085,13,849,849,11256,5278,0]An[11085,13,849,849,4475,5278,0]An[11085,13,849,849,7611,5278,0]An[11085,13,849,849,9575,5278,0]An[11085,13,853,853,9854,5278,0]An[11085,13,853,853,4477,5278,0]An[11085,13,853,853,9599,5278,0]Ao[11085,13,853,853,11446,5278,0]B`[11085,13,7666,7666,4478,5278,0]B`[11085,13,7666,7666,8417,5278,0]Ba[11085,13,7666,7666,10317,5278,0]B`[11085,13,5288,5288,4479,5278,0]B`[11085,13,5288,5288,3465,5278,0]B`[11085,13,9875,9875,8391,5278,0]Ba[11085,13,9875,9875,10838,5278,0]Ba[11085,13,9875,9875,10037,5278,0]Ba[11085,13,9875,9875,10758,5278,0]Bc[11085,13,10019,10019,11332,5278,0]Bc[11085,13,10019,10019,11438,5278,0]Bc[11085,13,10019,10019,11392,5278,0]Bc[11085,13,10019,10019,11448,5278,0]Ba[11085,13,9512,9512,11257,5278,0]Ba[11085,13,9512,9512,11243,5278,0]Ba[11085,13,9512,9512,11413,5278,0]Ba[11085,13,9512,9512,11424,5278,0]An[11085,13,856,856,7615,5278,0]Ao[11085,13,856,856,10038,5278,0]An[11085,13,856,856,8395,5278,0]Bc[11085,13,10020,10020,10760,5278,0]Bc[11085,13,10020,10020,11244,5278,0]B`[11085,13,9513,9513,8392,5278,0]Ba[11085,13,9513,9513,10127,5278,0]B`[11085,13,9513,9513,9577,5278,0]Ba[11085,13,9513,9513,11059,5278,0]B`[11085,13,9878,9878,4480,5278,0]B`[11085,13,9878,9878,3466,5278,0]B`[11085,13,6198,6198,4481,5278,0]An[11085,13,125,125,4482,5278,0]An[11085,13,125,125,5275,5278,0]An[11085,13,125,125,9844,5278,0]An[11085,13,125,125,9835,5278,0]An[11085,13,125,125,5242,5278,0]An[11085,13,125,125,9831,5278,0]An[11085,13,125,125,5224,5278,0]Ao[11085,13,125,125,10322,5278,0]Ao[11085,13,125,125,11334,5278,0]An[11085,13,125,125,3468,5278,0]B`[11085,13,7677,7677,7624,5278,0]B`[11085,13,7677,7677,4483,5278,0]Ba[11085,13,7679,7679,10765,5278,0]Ba[11085,13,7679,7679,10140,5278,0]Ba[11085,13,7679,7679,11414,5278,0]Ba[11085,13,7679,7679,11248,5278,0]B`[11085,13,9315,9315,4484,5278,0]B`[11085,13,9888,9888,9838,5278,0]B`[11085,13,9890,9890,4485,5278,0]B`[11085,13,5357,5357,6173,5278,0]B`[11085,13,5357,5357,5262,5278,0]B`[11085,13,5357,5357,4486,5278,0]Ba[11085,13,5357,5357,10845,5278,0]Ba[11085,13,5357,5357,11017,5278,0]Ba[11085,13,5357,5357,11335,5278,0]B`[11085,13,5357,5357,9580,5278,0]Ba[11085,13,5357,5357,11300,5278,0]Ba[11085,13,5357,5357,10036,5278,0]Ba[11085,13,5357,5357,11010,5278,0]B`[11085,13,5357,5357,5243,5278,0]B`[11085,13,5357,5357,5225,5278,0]B`[11085,13,5171,5171,4487,5278,0]B`[11085,13,5171,5171,4551,5278,0]B`[11085,13,5365,5365,4488,5278,0]B`[11085,13,6247,6247,3518,5278,0]B`[11085,13,4423,4423,4489,5278,0]B`[11085,13,4423,4423,5238,5278,0]B`[11085,13,4423,4423,9591,5278,0]B`[11085,13,4423,4423,4569,5278,0]Ba[11085,13,4423,4423,10050,5278,0]Ba[11085,13,4423,4423,10841,5278,0]Ba[11085,13,4423,4423,10853,5278,0]B`[11085,13,4423,4423,7625,5278,0]Ao[11085,13,4423,4423,803,5278,0]B`[11085,13,9603,9603,4490,5278,0]B`[11085,13,9603,9603,5244,5278,0]B`[11085,13,9603,9603,5226,5278,0]Ba[11085,13,9603,9603,10766,5278,0]B`[11085,13,9603,9603,9574,5278,0]Bb[11085,13,10726,10726,9592,5278,0]Bb[11085,13,10726,10726,4570,5278,0]Bc[11085,13,10726,10726,10051,5278,0]Bc[11085,13,10726,10726,10842,5278,0]Bc[11085,13,10726,10726,10854,5278,0]Bb[11085,13,10726,10726,7626,5278,0]Ba[11085,13,10726,10726,804,5278,0]B`[11085,13,4402,4402,4491,5278,0]B`[11085,13,4402,4402,3470,5278,0]B`[11085,13,5174,5174,4492,5278,0]B`[11085,13,5174,5174,3471,5278,0]B`[11085,13,5176,5176,4493,5278,0]B`[11085,13,5176,5176,3472,5278,0]B`[11085,13,1861,1861,4494,5278,0]B`[11085,13,1861,1861,3473,5278,0]Ba[11085,13,5617,5617,10300,5278,0]Ba[11085,13,5617,5617,10847,5278,0]Ba[11085,13,5617,5617,10133,5278,0]Ba[11085,13,5617,5617,10041,5278,0]B`[11085,13,5617,5617,4495,5278,0]B`[11085,13,5617,5617,3442,5278,0]B`[11085,13,5617,5617,5254,5278,0]B`[11085,13,5180,5180,4496,5278,0]B`[11085,13,5180,5180,3474,5278,0]B`[11085,13,4404,4404,4497,5278,0]Ba[11085,13,8306,8306,11258,5278,0]B`[11085,13,8306,8306,4498,5278,0]B`[11085,13,8306,8306,7613,5278,0]Ba[11085,13,4413,4413,10135,5278,0]Ba[11085,13,4413,4413,10767,5278,0]B`[11085,13,4413,4413,9837,5278,0]B`[11085,13,4413,4413,9586,5278,0]B`[11085,13,4413,4413,4499,5278,0]B`[11085,13,4413,4413,3443,5278,0]B`[11085,13,4413,4413,3459,5278,0]B`[11085,13,6224,6224,4500,5278,0]B`[11085,13,6224,6224,3444,5278,0]B`[11085,13,6224,6224,3460,5278,0]B`[11085,13,5086,5086,9584,5278,0]Ba[11085,13,5086,5086,10848,5278,0]Ba[11085,13,5086,5086,11067,5278,0]Ba[11085,13,5086,5086,10042,5278,0]Ba[11085,13,5086,5086,11013,5278,0]Ba[11085,13,5086,5086,11210,5278,0]B`[11085,13,4419,4419,4501,5278,0]B`[11085,13,4419,4419,8410,5278,0]Ba[11085,13,4419,4419,10046,5278,0]B`[11085,13,4419,4419,3475,5278,0]B`[11085,13,5187,5187,4502,5278,0]B`[11085,13,5187,5187,5245,5278,0]B`[11085,13,5187,5187,5227,5278,0]B`[11085,13,5187,5187,5259,5278,0]B`[11085,13,9812,9812,4503,5278,0]B`[11085,13,9812,9812,3476,5278,0]Bb[11085,13,10740,10740,4504,5278,0]An[11085,13,537,537,6174,5278,0]Ao[11085,13,537,537,10126,5278,0]Ao[11085,13,537,537,10772,5278,0]An[11085,13,537,537,4505,5278,0]B`[11085,13,2899,2899,6175,5278,0]Ba[11085,13,5359,5359,10139,5278,0]B`[11085,13,5359,5359,4506,5278,0]B`[11085,13,5359,5359,5241,5278,0]Am[11085,13,861,861,819,5278,0]An[11085,13,861,861,5263,5278,0]An[11085,13,861,861,8412,5278,0]Ao[11085,13,861,861,11074,5278,0]Ao[11085,13,861,861,10777,5278,0]Ao[11085,13,861,861,11416,5278,0]Ao[11085,13,861,861,10761,5278,0]Ao[11085,13,861,861,10762,5278,0]Ba[11085,13,9813,9813,11075,5278,0]B`[11085,13,9813,9813,4507,5278,0]Ba[11085,13,9813,9813,10310,5278,0]B`[11085,13,9813,9813,8409,5278,0]Ba[11085,13,9813,9813,11439,5278,0]Ba[11085,13,9813,9813,11475,5278,0]Ao[11085,13,9813,9813,115,5278,0]B`[11085,13,9813,9813,5271,5278,0]Ao[11085,13,9813,9813,820,5278,0]Ba[11085,13,9813,9813,11417,5278,0]Ba[11085,13,9813,9813,11214,5278,0]Ba[11085,13,9813,9813,11212,5278,0]Ba[11085,13,9966,9966,10846,5278,0]Ba[11085,13,9966,9966,11018,5278,0]Ba[11085,13,9966,9966,11426,5278,0]Ba[11085,13,9966,9966,11336,5278,0]Ba[11085,13,9966,9966,11451,5278,0]B`[11085,13,5210,5210,4508,5278,0]Ba[11085,13,5210,5210,10852,5278,0]Ba[11085,13,5210,5210,10049,5278,0]Ba[11085,13,5210,5210,10048,5278,0]B`[11085,13,5623,5623,4509,5278,0]B`[11085,13,5623,5623,3479,5278,0]B`[11085,13,8313,8313,4510,5278,0]Ba[11085,13,8313,8313,11465,5278,0]B`[11085,13,5625,5625,4511,5278,0]B`[11085,13,5625,5625,3480,5278,0]B`[11085,13,4424,4424,4512,5278,0]Ba[11085,13,9430,9430,10307,5278,0]Ba[11085,13,9430,9430,10769,5278,0]B`[11085,13,9769,9769,4513,5278,0]B`[11085,13,8316,8316,4514,5278,0]B`[11085,13,9437,9437,4515,5278,0]Ba[11085,13,9437,9437,10839,5278,0]Ba[11085,13,9437,9437,10759,5278,0]Ba[11085,13,9437,9437,10043,5278,0]Ba[11085,13,9437,9437,10308,5278,0]Ba[11085,13,9437,9437,10136,5278,0]Ba[11085,13,9437,9437,10851,5278,0]B`[11085,13,9437,9437,8411,5278,0]Ba[11085,13,9437,9437,11254,5278,0]Ba[11085,13,9437,9437,11211,5278,0]Ba[11085,13,9437,9437,11484,5278,0]B`[11085,13,8319,8319,4516,5278,0]B`[11085,13,8319,8319,9855,5278,0]B`[11085,13,8319,8319,5246,5278,0]Ba[11085,13,8319,8319,10060,5278,0]B`[11085,13,8319,8319,3481,5278,0]An[11085,13,542,542,4517,5278,0]An[11085,13,542,542,3482,5278,0]B`[11085,13,8182,8182,3483,5278,0]B`[11085,13,2904,2904,4518,5278,0]B`[11085,13,2904,2904,3485,5278,0]B`[11085,13,9514,9514,4519,5278,0]B`[11085,13,9514,9514,5247,5278,0]Ba[11085,13,9514,9514,11333,5278,0]B`[11085,13,8331,8331,4520,5278,0]Ba[11085,13,8331,8331,11070,5278,0]B`[11085,13,8331,8331,3486,5278,0]Ba[11085,13,9457,9457,10035,5278,0]B`[11085,13,9457,9457,4521,5278,0]B`[11085,13,9457,9457,7608,5278,0]B`[11085,13,9457,9457,9832,5278,0]B`[11085,13,9457,9457,5228,5278,0]B`[11085,13,9457,9457,3487,5278,0]Ba[11085,13,8334,8334,11259,5278,0]B`[11085,13,8334,8334,4522,5278,0]An[11085,13,779,779,4523,5278,0]An[11085,13,779,779,3488,5278,0]B`[11085,13,2906,2906,4524,5278,0]Ba[11085,13,2906,2906,10311,5278,0]B`[11085,13,2906,2906,3489,5278,0]B`[11085,13,4418,4418,4525,5278,0]Ba[11085,13,4418,4418,11071,5278,0]B`[11085,13,4418,4418,3490,5278,0]Bb[11085,13,10021,10021,4526,5278,0]Bb[11085,13,10021,10021,3491,5278,0]Bb[11085,13,10245,10245,9600,5278,0]Bc[11085,13,10245,10245,11447,5278,0]Bb[11085,13,11182,11182,8418,5278,0]Bc[11085,13,11182,11182,10318,5278,0]Bb[11085,13,10724,10724,9840,5278,0]Bb[11085,13,11050,11050,4568,5278,0]B`[11085,13,9814,9814,3492,5278,0]Bb[11085,13,10991,10991,3493,5278,0]Bc[11085,13,11186,11186,11466,5278,0]Bb[11085,13,11188,11188,5248,5278,0]Bc[11085,13,11188,11188,10061,5278,0]Bb[11085,13,10094,10094,3495,5278,0]Bb[11085,13,10096,10096,9841,5278,0]Bb[11085,13,10247,10247,9842,5278,0]Bb[11085,13,11422,11422,3496,5278,0]Bb[11085,13,10993,10993,3497,5278,0]Bb[11085,13,10995,10995,3498,5278,0]Bb[11085,13,11190,11190,3499,5278,0]B`[11085,13,9970,9970,4529,5278,0]Ba[11085,13,9970,9970,10141,5278,0]Ba[11085,13,9970,9970,11427,5278,0]B`[11085,13,4434,4434,4530,5278,0]B`[11085,13,4434,4434,3500,5278,0]Ba[11085,13,4434,4434,10770,5278,0]B`[11085,13,8339,8339,4531,5278,0]B`[11085,13,8339,8339,3501,5278,0]Bc[11085,13,10732,10732,10855,5278,0]Bb[11085,13,10732,10732,4532,5278,0]Bb[11085,13,10732,10732,3502,5278,0]B`[11085,13,5201,5201,4533,5278,0]B`[11085,13,5643,5643,4534,5278,0]B`[11085,13,5643,5643,3503,5278,0]B`[11085,13,5645,5645,3504,5278,0]B`[11085,13,8347,8347,4535,5278,0]Ba[11085,13,8347,8347,11415,5278,0]Ba[11085,13,8347,8347,11398,5278,0]B`[11085,13,5213,5213,8416,5278,0]B`[11085,13,5213,5213,9857,5278,0]B`[11085,13,5213,5213,4536,5278,0]B`[11085,13,5213,5213,9601,5278,0]Ba[11085,13,5213,5213,10319,5278,0]B`[11085,13,5213,5213,7646,5278,0]B`[11085,13,5213,5213,3505,5278,0]Bc[11085,13,10827,10827,11260,5278,0]An[11085,13,857,857,8393,5278,0]An[11085,13,857,857,4537,5278,0]Ba[11085,13,5205,5205,11076,5278,0]Ba[11085,13,7660,7660,11399,5278,0]Ba[11085,13,7660,7660,11205,5278,0]Ao[11085,13,866,866,11061,5278,0]Ao[11085,13,866,866,10033,5278,0]Ao[11085,13,868,868,10763,5278,0]Ao[11085,13,868,868,11062,5278,0]Bc[11085,13,11400,11400,11489,5278,0]Bc[11085,13,11400,11400,11470,5278,0]B`[11085,13,9502,9502,9827,5278,0]Ba[11085,13,9502,9502,10137,5278,0]Ba[11085,13,9502,9502,10320,5278,0]B`[11085,13,6144,6144,9576,5278,0]Ba[11085,13,6144,6144,11429,5278,0]Bc[11085,13,10276,10276,11395,5278,0]Bc[11085,13,10276,10276,11303,5278,0]Bc[11085,13,10276,10276,11216,5278,0]Bc[11085,13,10276,10276,11461,5278,0]Bc[11085,13,10276,10276,10843,5278,0]Bc[11085,13,10276,10276,11425,5278,0]Bc[11085,13,10276,10276,10321,5278,0]Bc[11085,13,10276,10276,11394,5278,0]Ba[11085,13,5216,5216,10052,5278,0]Ba[11085,13,5216,5216,11068,5278,0]Ba[11085,13,5216,5216,11397,5278,0]B`[11085,13,5216,5216,8415,5278,0]Ba[11085,13,5216,5216,10030,5278,0]Ba[11085,13,5216,5216,10297,5278,0]Ba[11085,13,5216,5216,10780,5278,0]Ba[11085,13,5216,5216,11298,5278,0]Ba[11085,13,5216,5216,11217,5278,0]Ao[11085,13,794,794,11058,5278,0]B`[11085,13,8359,8359,4538,5278,0]B`[11085,13,9510,9510,4539,5278,0]B`[11085,13,9510,9510,3507,5278,0]Bb[11085,13,10006,10006,9839,5278,0]Bb[11085,13,10006,10006,4540,5278,0]Bb[11085,13,10006,10006,7618,5278,0]Bb[11085,13,10006,10006,6160,5278,0]Bb[11085,13,10006,10006,8397,5278,0]Bb[11085,13,10006,10006,3508,5278,0]Al[11085,13,93,93,4561,5278,0]Am[11085,13,93,93,11445,5278,0]Al[11085,13,93,93,4541,5278,0]Am[11085,13,93,93,10142,5278,0]Am[11085,13,93,93,11428,5278,0]B`[11085,13,4452,4452,9597,5278,0]B`[11085,13,4452,4452,9851,5278,0]B`[11085,13,4452,4452,9852,5278,0]Ba[11085,13,4452,4452,10781,5278,0]B`[11085,13,4452,4452,8420,5278,0]An[11085,13,799,799,4542,5278,0]An[11085,13,799,799,8398,5278,0]An[11085,13,799,799,5249,5278,0]An[11085,13,799,799,3509,5278,0]B`[11085,13,6150,6150,4543,5278,0]B`[11085,13,4426,4426,9825,5278,0]B`[11085,13,4426,4426,9595,5278,0]B`[11085,13,4426,4426,5281,5278,0]Bb[11085,13,10727,10727,9826,5278,0]Bb[11085,13,10727,10727,9596,5278,0]Bb[11085,13,10727,10727,5282,5278,0]Bb[11085,13,10028,10028,7620,5278,0]Bb[11085,13,10028,10028,4562,5278,0]Bb[11085,13,10028,10028,4547,5278,0]Bb[11085,13,10028,10028,5264,5278,0]Bb[11085,13,10028,10028,7631,5278,0]Bb[11085,13,10028,10028,5272,5278,0]Ao[11085,13,869,869,11208,5278,0]B`[11085,13,9823,9823,4544,5278,0]An[11085,13,101,101,4545,5278,0]An[11085,13,101,101,3510,5278,0]Ba[11085,13,10813,10813,801,5278,0]Bb[11085,13,10813,10813,6163,5278,0]B`[11085,13,9968,9968,7621,5278,0]B`[11085,13,9968,9968,4563,5278,0]B`[11085,13,9968,9968,5273,5278,0]Bb[11085,13,11280,11280,8433,5278,0]Ba[11085,13,9379,9379,10305,5279,0]B`[11085,13,9379,9379,6179,5279,0]Ba[11085,13,3529,3529,11471,5279,0]Ba[11085,13,3529,3529,11253,5279,0]Ba[11085,13,3529,3529,11450,5279,0]B`[11085,13,3529,3529,4474,5279,0]B`[11085,13,3529,3529,3464,5279,0]Ao[11085,13,847,847,11242,5279,0]An[11085,13,849,849,7612,5279,0]Ao[11085,13,849,849,11206,5279,0]Ao[11085,13,849,849,10291,5279,0]Ao[11085,13,849,849,10290,5279,0]An[11085,13,849,849,7623,5279,0]Ao[11085,13,849,849,11256,5279,0]An[11085,13,849,849,4475,5279,0]An[11085,13,849,849,7611,5279,0]An[11085,13,849,849,9575,5279,0]B`[11085,13,5285,5285,8405,5279,0]B`[11085,13,5285,5285,4476,5279,0]An[11085,13,853,853,9854,5279,0]An[11085,13,853,853,4477,5279,0]An[11085,13,853,853,9599,5279,0]Ao[11085,13,853,853,11446,5279,0]B`[11085,13,7666,7666,4478,5279,0]B`[11085,13,7666,7666,8417,5279,0]Ba[11085,13,7666,7666,10317,5279,0]B`[11085,13,5288,5288,4479,5279,0]B`[11085,13,5288,5288,3465,5279,0]B`[11085,13,9875,9875,8391,5279,0]Ba[11085,13,9875,9875,10838,5279,0]Ba[11085,13,9875,9875,10037,5279,0]Ba[11085,13,9875,9875,10758,5279,0]Bc[11085,13,10019,10019,11332,5279,0]Bc[11085,13,10019,10019,11438,5279,0]Bc[11085,13,10019,10019,11392,5279,0]Bc[11085,13,10019,10019,11448,5279,0]Ba[11085,13,9512,9512,11257,5279,0]Ba[11085,13,9512,9512,11243,5279,0]Ba[11085,13,9512,9512,11413,5279,0]Ba[11085,13,9512,9512,11424,5279,0]An[11085,13,856,856,7615,5279,0]Ao[11085,13,856,856,10038,5279,0]An[11085,13,856,856,8395,5279,0]Bc[11085,13,10020,10020,10760,5279,0]Bc[11085,13,10020,10020,11244,5279,0]B`[11085,13,9513,9513,8392,5279,0]Ba[11085,13,9513,9513,10127,5279,0]B`[11085,13,9513,9513,9577,5279,0]Ba[11085,13,9513,9513,11059,5279,0]B`[11085,13,9878,9878,4480,5279,0]B`[11085,13,9878,9878,3466,5279,0]B`[11085,13,5290,5290,3467,5279,0]B`[11085,13,6198,6198,4481,5279,0]An[11085,13,125,125,4482,5279,0]An[11085,13,125,125,5275,5279,0]An[11085,13,125,125,9844,5279,0]An[11085,13,125,125,9835,5279,0]An[11085,13,125,125,5242,5279,0]An[11085,13,125,125,9831,5279,0]An[11085,13,125,125,5224,5279,0]Ao[11085,13,125,125,10322,5279,0]Ao[11085,13,125,125,11334,5279,0]An[11085,13,125,125,3468,5279,0]Ba[11085,13,7677,7677,10134,5279,0]Ba[11085,13,7677,7677,10053,5279,0]Ba[11085,13,7677,7677,11065,5279,0]Ba[11085,13,7677,7677,11483,5279,0]Ba[11085,13,7677,7677,11008,5279,0]Ba[11085,13,7677,7677,11066,5279,0]Ba[11085,13,7677,7677,11246,5279,0]Ba[11085,13,7677,7677,10294,5279,0]Ba[11085,13,7677,7677,10130,5279,0]B`[11085,13,7677,7677,7616,5279,0]Ba[11085,13,7677,7677,10764,5279,0]Ba[11085,13,7677,7677,10131,5279,0]Ba[11085,13,7677,7677,10840,5279,0]Ba[11085,13,7677,7677,11469,5279,0]Ba[11085,13,7677,7677,11299,5279,0]B`[11085,13,7677,7677,7624,5279,0]B`[11085,13,7677,7677,4483,5279,0]B`[11085,13,7677,7677,5261,5279,0]Ba[11085,13,7677,7677,11302,5279,0]B`[11085,13,7679,7679,8419,5279,0]Ba[11085,13,7679,7679,11209,5279,0]B`[11085,13,7679,7679,8396,5279,0]Ba[11085,13,7679,7679,10765,5279,0]Ba[11085,13,7679,7679,10140,5279,0]Ba[11085,13,7679,7679,11414,5279,0]Ba[11085,13,7679,7679,11248,5279,0]Bc[11085,13,10864,10864,11249,5279,0]Bc[11085,13,10864,10864,10775,5279,0]Bc[11085,13,10864,10864,11011,5279,0]Bb[11085,13,10864,10864,5274,5279,0]Bb[11085,13,10864,10864,5223,5279,0]Bc[11085,13,10864,10864,10295,5279,0]Ba[11085,13,5147,5147,11250,5279,0]Ba[11085,13,9313,9313,11251,5279,0]Ba[11085,13,9315,9315,10296,5279,0]B`[11085,13,9315,9315,4484,5279,0]B`[11085,13,9888,9888,9838,5279,0]B`[11085,13,9888,9888,9834,5279,0]B`[11085,13,9890,9890,4485,5279,0]B`[11085,13,5357,5357,6173,5279,0]B`[11085,13,5357,5357,5262,5279,0]B`[11085,13,5357,5357,4486,5279,0]Ba[11085,13,5357,5357,10845,5279,0]Ba[11085,13,5357,5357,11017,5279,0]Ba[11085,13,5357,5357,11335,5279,0]B`[11085,13,5357,5357,9580,5279,0]Ba[11085,13,5357,5357,11300,5279,0]Ba[11085,13,5357,5357,10036,5279,0]Ba[11085,13,5357,5357,11010,5279,0]B`[11085,13,5357,5357,5243,5279,0]B`[11085,13,5357,5357,5225,5279,0]B`[11085,13,5357,5357,3469,5279,0]Ba[11085,13,1364,1364,11252,5279,0]B`[11085,13,5171,5171,4487,5279,0]B`[11085,13,5171,5171,4551,5279,0]B`[11085,13,5365,5365,4488,5279,0]B`[11085,13,6247,6247,3518,5279,0]B`[11085,13,4423,4423,4489,5279,0]B`[11085,13,4423,4423,5238,5279,0]B`[11085,13,4423,4423,9591,5279,0]B`[11085,13,4423,4423,4569,5279,0]Ba[11085,13,4423,4423,10050,5279,0]Ba[11085,13,4423,4423,10841,5279,0]Ba[11085,13,4423,4423,10853,5279,0]B`[11085,13,4423,4423,7625,5279,0]Ao[11085,13,4423,4423,803,5279,0]B`[11085,13,9603,9603,4490,5279,0]B`[11085,13,9603,9603,5244,5279,0]B`[11085,13,9603,9603,5226,5279,0]Ba[11085,13,9603,9603,10766,5279,0]B`[11085,13,9603,9603,9574,5279,0]Bb[11085,13,10726,10726,9592,5279,0]Bb[11085,13,10726,10726,4570,5279,0]Bc[11085,13,10726,10726,10051,5279,0]Bc[11085,13,10726,10726,10842,5279,0]Bc[11085,13,10726,10726,10854,5279,0]Bb[11085,13,10726,10726,7626,5279,0]Ba[11085,13,10726,10726,804,5279,0]B`[11085,13,4402,4402,4491,5279,0]B`[11085,13,4402,4402,3470,5279,0]B`[11085,13,5174,5174,4492,5279,0]B`[11085,13,5174,5174,3471,5279,0]B`[11085,13,5176,5176,4493,5279,0]B`[11085,13,5176,5176,3472,5279,0]B`[11085,13,1861,1861,4494,5279,0]B`[11085,13,1861,1861,3473,5279,0]Ba[11085,13,5617,5617,10300,5279,0]Ba[11085,13,5617,5617,10847,5279,0]Ba[11085,13,5617,5617,10133,5279,0]Ba[11085,13,5617,5617,10041,5279,0]B`[11085,13,5617,5617,4495,5279,0]B`[11085,13,5617,5617,3442,5279,0]B`[11085,13,5617,5617,5254,5279,0]B`[11085,13,5180,5180,4496,5279,0]B`[11085,13,5180,5180,3474,5279,0]B`[11085,13,4404,4404,4497,5279,0]Ba[11085,13,8306,8306,11258,5279,0]B`[11085,13,8306,8306,4498,5279,0]B`[11085,13,8306,8306,7613,5279,0]Ba[11085,13,4413,4413,10135,5279,0]Ba[11085,13,4413,4413,10767,5279,0]B`[11085,13,4413,4413,9837,5279,0]B`[11085,13,4413,4413,9586,5279,0]B`[11085,13,4413,4413,4499,5279,0]B`[11085,13,4413,4413,3443,5279,0]B`[11085,13,4413,4413,3459,5279,0]B`[11085,13,6224,6224,4500,5279,0]B`[11085,13,6224,6224,3444,5279,0]B`[11085,13,6224,6224,3460,5279,0]Bc[11085,13,10809,10809,11016,5279,0]B`[11085,13,4416,4416,9582,5279,0]B`[11085,13,4416,4416,9589,5279,0]Ba[11085,13,4416,4416,10292,5279,0]B`[11085,13,4416,4416,3457,5279,0]B`[11085,13,5086,5086,9584,5279,0]Ba[11085,13,5086,5086,10848,5279,0]Ba[11085,13,5086,5086,11067,5279,0]Ba[11085,13,5086,5086,10042,5279,0]Ba[11085,13,5086,5086,11013,5279,0]Ba[11085,13,5086,5086,11210,5279,0]B`[11085,13,4419,4419,3519,5279,0]B`[11085,13,4419,4419,4501,5279,0]B`[11085,13,4419,4419,8410,5279,0]Ba[11085,13,4419,4419,10046,5279,0]B`[11085,13,4419,4419,3475,5279,0]B`[11085,13,5187,5187,4502,5279,0]B`[11085,13,5187,5187,5245,5279,0]B`[11085,13,5187,5187,5227,5279,0]B`[11085,13,5187,5187,5259,5279,0]B`[11085,13,9812,9812,4503,5279,0]B`[11085,13,9812,9812,3476,5279,0]Bb[11085,13,10740,10740,3477,5279,0]Bb[11085,13,10740,10740,4504,5279,0]Ao[11085,13,9523,9523,107,5279,0]An[11085,13,537,537,3478,5279,0]An[11085,13,537,537,6174,5279,0]Ao[11085,13,537,537,10126,5279,0]Ao[11085,13,537,537,10772,5279,0]An[11085,13,537,537,4505,5279,0]Ba[11085,13,6183,6183,10055,5279,0]Ba[11085,13,6183,6183,11487,5279,0]B`[11085,13,2899,2899,6175,5279,0]Ba[11085,13,5359,5359,10139,5279,0]B`[11085,13,5359,5359,4506,5279,0]B`[11085,13,5359,5359,5241,5279,0]Am[11085,13,861,861,819,5279,0]An[11085,13,861,861,5263,5279,0]An[11085,13,861,861,8412,5279,0]Ao[11085,13,861,861,11074,5279,0]Ao[11085,13,861,861,10777,5279,0]Ao[11085,13,861,861,11416,5279,0]Ao[11085,13,861,861,10761,5279,0]Ao[11085,13,861,861,10762,5279,0]Ba[11085,13,9813,9813,11075,5279,0]B`[11085,13,9813,9813,4507,5279,0]Ba[11085,13,9813,9813,10310,5279,0]B`[11085,13,9813,9813,8409,5279,0]Ba[11085,13,9813,9813,11439,5279,0]Ba[11085,13,9813,9813,11475,5279,0]Ao[11085,13,9813,9813,115,5279,0]B`[11085,13,9813,9813,5271,5279,0]Ao[11085,13,9813,9813,820,5279,0]Ba[11085,13,9813,9813,11417,5279,0]Ba[11085,13,9813,9813,11214,5279,0]Ba[11085,13,9813,9813,11212,5279,0]Ba[11085,13,9966,9966,10846,5279,0]Ba[11085,13,9966,9966,11018,5279,0]Ba[11085,13,9966,9966,11426,5279,0]Ba[11085,13,9966,9966,11336,5279,0]Ba[11085,13,9966,9966,11451,5279,0]B`[11085,13,5210,5210,4508,5279,0]Ba[11085,13,5210,5210,10852,5279,0]Ba[11085,13,5210,5210,10049,5279,0]Ba[11085,13,5210,5210,10048,5279,0]B`[11085,13,5623,5623,4509,5279,0]B`[11085,13,5623,5623,3479,5279,0]B`[11085,13,8313,8313,4510,5279,0]Ba[11085,13,8313,8313,11465,5279,0]B`[11085,13,5625,5625,4511,5279,0]B`[11085,13,5625,5625,3480,5279,0]Ba[11085,13,4584,4584,11255,5279,0]B`[11085,13,4584,4584,6158,5279,0]Ba[11085,13,4584,4584,10850,5279,0]Ba[11085,13,4584,4584,11460,5279,0]Ba[11085,13,4584,4584,10776,5279,0]Ba[11085,13,4584,4584,10309,5279,0]B`[11085,13,4584,4584,8401,5279,0]Ba[11085,13,4584,4584,10306,5279,0]Ba[11085,13,4584,4584,10768,5279,0]Ba[11085,13,4584,4584,11393,5279,0]Ba[11085,13,8181,8181,10044,5279,0]B`[11085,13,8181,8181,9853,5279,0]Ba[11085,13,8181,8181,10773,5279,0]Ba[11085,13,8181,8181,10779,5279,0]Ba[11085,13,8181,8181,10144,5279,0]B`[11085,13,4424,4424,3461,5279,0]B`[11085,13,4424,4424,7632,5279,0]B`[11085,13,4424,4424,4512,5279,0]Ao[11085,13,9778,9778,117,5279,0]Ao[11085,13,9778,9778,116,5279,0]Ba[11085,13,9778,9778,11301,5279,0]Ba[11085,13,9778,9778,10289,5279,0]Ba[11085,13,9430,9430,10307,5279,0]Ba[11085,13,9430,9430,10769,5279,0]B`[11085,13,9769,9769,4513,5279,0]B`[11085,13,8316,8316,4514,5279,0]B`[11085,13,9437,9437,4515,5279,0]Ba[11085,13,9437,9437,10839,5279,0]Ba[11085,13,9437,9437,10759,5279,0]Ba[11085,13,9437,9437,10043,5279,0]Ba[11085,13,9437,9437,10308,5279,0]Ba[11085,13,9437,9437,10136,5279,0]Ba[11085,13,9437,9437,10851,5279,0]B`[11085,13,9437,9437,8411,5279,0]Ba[11085,13,9437,9437,11254,5279,0]Ba[11085,13,9437,9437,11211,5279,0]Ba[11085,13,9437,9437,11484,5279,0]B`[11085,13,8319,8319,4516,5279,0]B`[11085,13,8319,8319,9855,5279,0]B`[11085,13,8319,8319,5246,5279,0]Ba[11085,13,8319,8319,10060,5279,0]B`[11085,13,8319,8319,3481,5279,0]An[11085,13,542,542,4517,5279,0]An[11085,13,542,542,3482,5279,0]B`[11085,13,8182,8182,3483,5279,0]B`[11085,13,4425,4425,3484,5279,0]B`[11085,13,2904,2904,4518,5279,0]B`[11085,13,2904,2904,3485,5279,0]B`[11085,13,9514,9514,4519,5279,0]B`[11085,13,9514,9514,5247,5279,0]Ba[11085,13,9514,9514,11333,5279,0]B`[11085,13,8331,8331,4520,5279,0]Ba[11085,13,8331,8331,11070,5279,0]B`[11085,13,8331,8331,3486,5279,0]Ba[11085,13,9457,9457,10035,5279,0]B`[11085,13,9457,9457,4521,5279,0]B`[11085,13,9457,9457,7608,5279,0]B`[11085,13,9457,9457,9832,5279,0]B`[11085,13,9457,9457,5228,5279,0]B`[11085,13,9457,9457,3487,5279,0]Ba[11085,13,8334,8334,11259,5279,0]B`[11085,13,8334,8334,4522,5279,0]An[11085,13,779,779,4523,5279,0]An[11085,13,779,779,3488,5279,0]B`[11085,13,2906,2906,4524,5279,0]Ba[11085,13,2906,2906,10311,5279,0]B`[11085,13,2906,2906,3489,5279,0]B`[11085,13,4418,4418,4525,5279,0]Ba[11085,13,4418,4418,11071,5279,0]B`[11085,13,4418,4418,3490,5279,0]Bb[11085,13,10021,10021,4526,5279,0]Bb[11085,13,10021,10021,3491,5279,0]Bb[11085,13,10245,10245,9600,5279,0]Bc[11085,13,10245,10245,11447,5279,0]Bb[11085,13,11182,11182,8418,5279,0]Bc[11085,13,11182,11182,10318,5279,0]Bb[11085,13,10724,10724,9840,5279,0]Bb[11085,13,11050,11050,4568,5279,0]B`[11085,13,9814,9814,3492,5279,0]Bb[11085,13,10991,10991,3493,5279,0]Bc[11085,13,11186,11186,11466,5279,0]Bb[11085,13,11188,11188,3494,5279,0]Bb[11085,13,11188,11188,5248,5279,0]Bc[11085,13,11188,11188,10061,5279,0]Bb[11085,13,10094,10094,3495,5279,0]Bb[11085,13,10096,10096,9841,5279,0]Bb[11085,13,10247,10247,9842,5279,0]Bb[11085,13,10730,10730,9843,5279,0]Bb[11085,13,11422,11422,3496,5279,0]Bb[11085,13,10993,10993,3497,5279,0]Bb[11085,13,10995,10995,3498,5279,0]Bb[11085,13,11190,11190,3499,5279,0]B`[11085,13,9970,9970,4529,5279,0]Ba[11085,13,9970,9970,10141,5279,0]Ba[11085,13,9970,9970,11427,5279,0]B`[11085,13,4434,4434,4530,5279,0]B`[11085,13,4434,4434,3500,5279,0]Ba[11085,13,4434,4434,10770,5279,0]B`[11085,13,8339,8339,4531,5279,0]B`[11085,13,8339,8339,3501,5279,0]Bc[11085,13,10732,10732,10855,5279,0]Bb[11085,13,10732,10732,4532,5279,0]Bb[11085,13,10732,10732,3502,5279,0]B`[11085,13,5201,5201,4533,5279,0]Ba[11085,13,5643,5643,10054,5279,0]B`[11085,13,5643,5643,3520,5279,0]B`[11085,13,5643,5643,7651,5279,0]B`[11085,13,5643,5643,4534,5279,0]B`[11085,13,5643,5643,3503,5279,0]B`[11085,13,5645,5645,3504,5279,0]B`[11085,13,8347,8347,4535,5279,0]Ba[11085,13,8347,8347,11415,5279,0]Ba[11085,13,8347,8347,11398,5279,0]Bb[11085,13,10825,10825,9585,5279,0]Bb[11085,13,10825,10825,6167,5279,0]Ba[11085,13,9815,9815,10857,5279,0]Bc[11085,13,10078,10078,10301,5279,0]B`[11085,13,9930,9930,9590,5279,0]Bc[11085,13,10243,10243,10045,5279,0]Am[11085,13,786,786,118,5279,0]B`[11085,13,6251,6251,5277,5279,0]B`[11085,13,5213,5213,8416,5279,0]B`[11085,13,5213,5213,9857,5279,0]B`[11085,13,5213,5213,4536,5279,0]B`[11085,13,5213,5213,9601,5279,0]Ba[11085,13,5213,5213,10319,5279,0]B`[11085,13,5213,5213,7646,5279,0]B`[11085,13,5213,5213,3505,5279,0]Bc[11085,13,10827,10827,11260,5279,0]An[11085,13,857,857,8393,5279,0]An[11085,13,857,857,4537,5279,0]Ao[11085,13,857,857,11060,5279,0]Ba[11085,13,5205,5205,11076,5279,0]Ba[11085,13,5205,5205,10047,5279,0]Ba[11085,13,9320,9320,10856,5279,0]B`[11085,13,9320,9320,7647,5279,0]Ba[11085,13,7660,7660,10128,5279,0]Ba[11085,13,7660,7660,11399,5279,0]Ba[11085,13,7660,7660,11015,5279,0]Ba[11085,13,7660,7660,11205,5279,0]Ba[11085,13,7660,7660,10125,5279,0]Ao[11085,13,866,866,11061,5279,0]Ao[11085,13,866,866,10033,5279,0]Ao[11085,13,868,868,10034,5279,0]Ao[11085,13,868,868,10763,5279,0]Ao[11085,13,868,868,11062,5279,0]Bc[11085,13,11400,11400,11489,5279,0]Bc[11085,13,11400,11400,11470,5279,0]B`[11085,13,9502,9502,9827,5279,0]Ba[11085,13,9502,9502,10137,5279,0]Ba[11085,13,9502,9502,10320,5279,0]B`[11085,13,6144,6144,9576,5279,0]Ba[11085,13,6144,6144,11429,5279,0]Ba[11085,13,6144,6144,11215,5279,0]Bc[11085,13,10276,10276,11395,5279,0]Bc[11085,13,10276,10276,11009,5279,0]Bc[11085,13,10276,10276,11303,5279,0]Bc[11085,13,10276,10276,10782,5279,0]Bc[11085,13,10276,10276,11216,5279,0]Bc[11085,13,10276,10276,10143,5279,0]Bc[11085,13,10276,10276,11461,5279,0]Bc[11085,13,10276,10276,11337,5279,0]Bc[11085,13,10276,10276,10843,5279,0]Bb[11085,13,10276,10276,9579,5279,0]Bc[11085,13,10276,10276,11425,5279,0]Bc[11085,13,10276,10276,11207,5279,0]Bc[11085,13,10276,10276,10321,5279,0]Bb[11085,13,10276,10276,7653,5279,0]Bc[11085,13,10276,10276,11394,5279,0]Bc[11085,13,10276,10276,11007,5279,0]Ba[11085,13,5216,5216,11396,5279,0]Ba[11085,13,5216,5216,10052,5279,0]Ba[11085,13,5216,5216,11068,5279,0]Ba[11085,13,5216,5216,11397,5279,0]B`[11085,13,5216,5216,8415,5279,0]Ba[11085,13,5216,5216,10030,5279,0]Ba[11085,13,5216,5216,10297,5279,0]Ba[11085,13,5216,5216,10780,5279,0]Ba[11085,13,5216,5216,11298,5279,0]Ba[11085,13,5216,5216,11217,5279,0]Ao[11085,13,794,794,11449,5279,0]Ao[11085,13,794,794,11058,5279,0]Ao[11085,13,794,794,10031,5279,0]B`[11085,13,8359,8359,4538,5279,0]B`[11085,13,8359,8359,3506,5279,0]B`[11085,13,9510,9510,4539,5279,0]B`[11085,13,9510,9510,3507,5279,0]Bb[11085,13,10006,10006,9839,5279,0]Bb[11085,13,10006,10006,4540,5279,0]Bb[11085,13,10006,10006,7618,5279,0]Bb[11085,13,10006,10006,6160,5279,0]Bb[11085,13,10006,10006,8397,5279,0]Bb[11085,13,10006,10006,3508,5279,0]Bc[11085,13,10006,10006,10132,5279,0]Al[11085,13,93,93,4561,5279,0]Am[11085,13,93,93,11445,5279,0]Al[11085,13,93,93,4541,5279,0]Am[11085,13,93,93,10142,5279,0]Am[11085,13,93,93,11428,5279,0]B`[11085,13,4452,4452,9597,5279,0]B`[11085,13,4452,4452,9851,5279,0]B`[11085,13,4452,4452,9852,5279,0]Ba[11085,13,4452,4452,10781,5279,0]B`[11085,13,4452,4452,8420,5279,0]An[11085,13,797,797,4565,5279,0]Am[11085,13,797,797,121,5279,0]An[11085,13,799,799,4542,5279,0]An[11085,13,799,799,8398,5279,0]An[11085,13,799,799,5249,5279,0]An[11085,13,799,799,3509,5279,0]B`[11085,13,6150,6150,4543,5279,0]B`[11085,13,4426,4426,9825,5279,0]B`[11085,13,4426,4426,9595,5279,0]B`[11085,13,4426,4426,5281,5279,0]Bb[11085,13,10727,10727,9826,5279,0]Bb[11085,13,10727,10727,9596,5279,0]Bb[11085,13,10727,10727,5282,5279,0]Bb[11085,13,10028,10028,7620,5279,0]Bb[11085,13,10028,10028,4562,5279,0]Bb[11085,13,10028,10028,4547,5279,0]Bb[11085,13,10028,10028,5264,5279,0]Bb[11085,13,10028,10028,7631,5279,0]Bb[11085,13,10028,10028,5272,5279,0]B`[11085,13,5084,5084,8434,5279,0]Ba[11085,13,5084,5084,11014,5279,0]Ba[11085,13,5084,5084,10058,5279,0]Ba[11085,13,5084,5084,11012,5279,0]B`[11085,13,5084,5084,6177,5279,0]B`[11085,13,5084,5084,7610,5279,0]Ao[11085,13,869,869,10129,5279,0]Ao[11085,13,869,869,11208,5279,0]Bb[11085,13,11081,11081,7609,5279,0]Ba[11085,13,6201,6201,10138,5279,0]B`[11085,13,6201,6201,7654,5279,0]Ba[11085,13,8329,8329,11069,5279,0]B`[11085,13,8329,8329,6176,5279,0]B`[11085,13,4432,4432,4583,5279,0]Ba[11085,13,9823,9823,10323,5279,0]Ba[11085,13,9823,9823,11261,5279,0]Ba[11085,13,9823,9823,11485,5279,0]B`[11085,13,9823,9823,4544,5279,0]An[11085,13,101,101,4545,5279,0]An[11085,13,101,101,3510,5279,0]Ba[11085,13,10813,10813,801,5279,0]Bb[11085,13,10813,10813,6163,5279,0]B`[11085,13,9968,9968,7621,5279,0]B`[11085,13,9968,9968,4563,5279,0]B`[11085,13,9968,9968,5273,5279,0]Bb[11085,13,11280,11280,8433,5279,0]Ba[11085,13,9379,9379,10305,5280,0]B`[11085,13,9379,9379,6179,5280,0]Ba[11085,13,3529,3529,11471,5280,0]Ba[11085,13,3529,3529,11253,5280,0]Ba[11085,13,3529,3529,11450,5280,0]B`[11085,13,3529,3529,4474,5280,0]B`[11085,13,3529,3529,3464,5280,0]Ao[11085,13,847,847,11242,5280,0]An[11085,13,849,849,7612,5280,0]Ao[11085,13,849,849,11206,5280,0]Ao[11085,13,849,849,10291,5280,0]Ao[11085,13,849,849,10290,5280,0]An[11085,13,849,849,7623,5280,0]Ao[11085,13,849,849,11256,5280,0]An[11085,13,849,849,4475,5280,0]An[11085,13,849,849,7611,5280,0]An[11085,13,849,849,9575,5280,0]B`[11085,13,5285,5285,8405,5280,0]B`[11085,13,5285,5285,4476,5280,0]An[11085,13,853,853,9854,5280,0]An[11085,13,853,853,4477,5280,0]An[11085,13,853,853,9599,5280,0]Ao[11085,13,853,853,11446,5280,0]B`[11085,13,7666,7666,4478,5280,0]B`[11085,13,7666,7666,8417,5280,0]Ba[11085,13,7666,7666,10317,5280,0]B`[11085,13,5288,5288,4479,5280,0]B`[11085,13,5288,5288,3465,5280,0]B`[11085,13,9875,9875,8391,5280,0]Ba[11085,13,9875,9875,10838,5280,0]Ba[11085,13,9875,9875,10037,5280,0]Ba[11085,13,9875,9875,10758,5280,0]Bc[11085,13,10019,10019,11332,5280,0]Bc[11085,13,10019,10019,11438,5280,0]Bc[11085,13,10019,10019,11392,5280,0]Bc[11085,13,10019,10019,11448,5280,0]Ba[11085,13,9512,9512,11257,5280,0]Ba[11085,13,9512,9512,11243,5280,0]Ba[11085,13,9512,9512,11413,5280,0]Ba[11085,13,9512,9512,11424,5280,0]An[11085,13,856,856,7615,5280,0]Ao[11085,13,856,856,10038,5280,0]An[11085,13,856,856,8395,5280,0]Bc[11085,13,10020,10020,10760,5280,0]Bc[11085,13,10020,10020,11244,5280,0]B`[11085,13,9513,9513,8392,5280,0]Ba[11085,13,9513,9513,10127,5280,0]B`[11085,13,9513,9513,9577,5280,0]Ba[11085,13,9513,9513,11059,5280,0]B`[11085,13,9878,9878,4480,5280,0]B`[11085,13,9878,9878,3466,5280,0]B`[11085,13,5290,5290,3467,5280,0]B`[11085,13,6198,6198,4481,5280,0]An[11085,13,125,125,4482,5280,0]An[11085,13,125,125,5275,5280,0]An[11085,13,125,125,9844,5280,0]An[11085,13,125,125,9835,5280,0]An[11085,13,125,125,5242,5280,0]An[11085,13,125,125,9831,5280,0]An[11085,13,125,125,5224,5280,0]Ao[11085,13,125,125,10322,5280,0]Ao[11085,13,125,125,11334,5280,0]An[11085,13,125,125,3468,5280,0]Ba[11085,13,7677,7677,10134,5280,0]Ba[11085,13,7677,7677,10053,5280,0]Ba[11085,13,7677,7677,11065,5280,0]Ba[11085,13,7677,7677,11483,5280,0]Ba[11085,13,7677,7677,11008,5280,0]Ba[11085,13,7677,7677,11066,5280,0]Ba[11085,13,7677,7677,11246,5280,0]Ba[11085,13,7677,7677,10294,5280,0]Ba[11085,13,7677,7677,10130,5280,0]B`[11085,13,7677,7677,7616,5280,0]Ba[11085,13,7677,7677,10764,5280,0]Ba[11085,13,7677,7677,10131,5280,0]Ba[11085,13,7677,7677,10840,5280,0]Ba[11085,13,7677,7677,11469,5280,0]Ba[11085,13,7677,7677,11299,5280,0]B`[11085,13,7677,7677,7624,5280,0]B`[11085,13,7677,7677,4483,5280,0]B`[11085,13,7677,7677,5261,5280,0]Ba[11085,13,7677,7677,11302,5280,0]B`[11085,13,7679,7679,8419,5280,0]Ba[11085,13,7679,7679,11209,5280,0]B`[11085,13,7679,7679,8396,5280,0]Ba[11085,13,7679,7679,10765,5280,0]Ba[11085,13,7679,7679,10140,5280,0]Ba[11085,13,7679,7679,11414,5280,0]Ba[11085,13,7679,7679,11248,5280,0]Bc[11085,13,10864,10864,11249,5280,0]Bc[11085,13,10864,10864,10775,5280,0]Bc[11085,13,10864,10864,11011,5280,0]Bb[11085,13,10864,10864,5274,5280,0]Bb[11085,13,10864,10864,5223,5280,0]Bc[11085,13,10864,10864,10295,5280,0]Ba[11085,13,5147,5147,11250,5280,0]Ba[11085,13,9313,9313,11251,5280,0]Ba[11085,13,9315,9315,10296,5280,0]B`[11085,13,9315,9315,4484,5280,0]B`[11085,13,9888,9888,9838,5280,0]B`[11085,13,9888,9888,9834,5280,0]B`[11085,13,9890,9890,4485,5280,0]B`[11085,13,5357,5357,6173,5280,0]B`[11085,13,5357,5357,5262,5280,0]B`[11085,13,5357,5357,4486,5280,0]Ba[11085,13,5357,5357,10845,5280,0]Ba[11085,13,5357,5357,11017,5280,0]Ba[11085,13,5357,5357,11335,5280,0]B`[11085,13,5357,5357,9580,5280,0]Ba[11085,13,5357,5357,11300,5280,0]Ba[11085,13,5357,5357,10036,5280,0]Ba[11085,13,5357,5357,11010,5280,0]B`[11085,13,5357,5357,5243,5280,0]B`[11085,13,5357,5357,5225,5280,0]B`[11085,13,5357,5357,3469,5280,0]Ba[11085,13,1364,1364,11252,5280,0]B`[11085,13,5171,5171,4487,5280,0]B`[11085,13,5171,5171,4551,5280,0]B`[11085,13,5365,5365,4488,5280,0]B`[11085,13,6247,6247,3518,5280,0]B`[11085,13,4423,4423,4489,5280,0]B`[11085,13,4423,4423,5238,5280,0]B`[11085,13,4423,4423,9591,5280,0]B`[11085,13,4423,4423,4569,5280,0]Ba[11085,13,4423,4423,10050,5280,0]Ba[11085,13,4423,4423,10841,5280,0]Ba[11085,13,4423,4423,10853,5280,0]B`[11085,13,4423,4423,7625,5280,0]Ao[11085,13,4423,4423,803,5280,0]B`[11085,13,9603,9603,4490,5280,0]B`[11085,13,9603,9603,5244,5280,0]B`[11085,13,9603,9603,5226,5280,0]Ba[11085,13,9603,9603,10766,5280,0]B`[11085,13,9603,9603,9574,5280,0]Bb[11085,13,10726,10726,9592,5280,0]Bb[11085,13,10726,10726,4570,5280,0]Bc[11085,13,10726,10726,10051,5280,0]Bc[11085,13,10726,10726,10842,5280,0]Bc[11085,13,10726,10726,10854,5280,0]Bb[11085,13,10726,10726,7626,5280,0]Ba[11085,13,10726,10726,804,5280,0]B`[11085,13,4402,4402,4491,5280,0]B`[11085,13,4402,4402,3470,5280,0]B`[11085,13,5174,5174,4492,5280,0]B`[11085,13,5174,5174,3471,5280,0]B`[11085,13,5176,5176,4493,5280,0]B`[11085,13,5176,5176,3472,5280,0]B`[11085,13,1861,1861,4494,5280,0]B`[11085,13,1861,1861,3473,5280,0]Ba[11085,13,5617,5617,10300,5280,0]Ba[11085,13,5617,5617,10847,5280,0]Ba[11085,13,5617,5617,10133,5280,0]Ba[11085,13,5617,5617,10041,5280,0]B`[11085,13,5617,5617,4495,5280,0]B`[11085,13,5617,5617,3442,5280,0]B`[11085,13,5617,5617,5254,5280,0]B`[11085,13,5180,5180,4496,5280,0]B`[11085,13,5180,5180,3474,5280,0]B`[11085,13,4404,4404,4497,5280,0]Ba[11085,13,8306,8306,11258,5280,0]B`[11085,13,8306,8306,4498,5280,0]B`[11085,13,8306,8306,7613,5280,0]Ba[11085,13,4413,4413,10135,5280,0]Ba[11085,13,4413,4413,10767,5280,0]B`[11085,13,4413,4413,9837,5280,0]B`[11085,13,4413,4413,9586,5280,0]B`[11085,13,4413,4413,4499,5280,0]B`[11085,13,4413,4413,3443,5280,0]B`[11085,13,4413,4413,3459,5280,0]B`[11085,13,6224,6224,4500,5280,0]B`[11085,13,6224,6224,3444,5280,0]B`[11085,13,6224,6224,3460,5280,0]Bc[11085,13,10809,10809,11016,5280,0]B`[11085,13,4416,4416,9582,5280,0]B`[11085,13,4416,4416,9589,5280,0]Ba[11085,13,4416,4416,10292,5280,0]B`[11085,13,4416,4416,3457,5280,0]B`[11085,13,5086,5086,9584,5280,0]Ba[11085,13,5086,5086,10848,5280,0]Ba[11085,13,5086,5086,11067,5280,0]Ba[11085,13,5086,5086,10042,5280,0]Ba[11085,13,5086,5086,11013,5280,0]Ba[11085,13,5086,5086,11210,5280,0]B`[11085,13,4419,4419,3519,5280,0]B`[11085,13,4419,4419,4501,5280,0]B`[11085,13,4419,4419,8410,5280,0]Ba[11085,13,4419,4419,10046,5280,0]B`[11085,13,4419,4419,3475,5280,0]B`[11085,13,5187,5187,4502,5280,0]B`[11085,13,5187,5187,5245,5280,0]B`[11085,13,5187,5187,5227,5280,0]B`[11085,13,5187,5187,5259,5280,0]B`[11085,13,9812,9812,4503,5280,0]B`[11085,13,9812,9812,3476,5280,0]Bb[11085,13,10740,10740,3477,5280,0]Bb[11085,13,10740,10740,4504,5280,0]Ao[11085,13,9523,9523,107,5280,0]An[11085,13,537,537,3478,5280,0]An[11085,13,537,537,6174,5280,0]Ao[11085,13,537,537,10126,5280,0]Ao[11085,13,537,537,10772,5280,0]An[11085,13,537,537,4505,5280,0]Ba[11085,13,6183,6183,10055,5280,0]Ba[11085,13,6183,6183,11487,5280,0]B`[11085,13,2899,2899,6175,5280,0]Ba[11085,13,5359,5359,10139,5280,0]B`[11085,13,5359,5359,4506,5280,0]B`[11085,13,5359,5359,5241,5280,0]Am[11085,13,861,861,819,5280,0]An[11085,13,861,861,5263,5280,0]An[11085,13,861,861,8412,5280,0]Ao[11085,13,861,861,11074,5280,0]Ao[11085,13,861,861,10777,5280,0]Ao[11085,13,861,861,11416,5280,0]Ao[11085,13,861,861,10761,5280,0]Ao[11085,13,861,861,10762,5280,0]Ba[11085,13,9813,9813,11075,5280,0]B`[11085,13,9813,9813,4507,5280,0]Ba[11085,13,9813,9813,10310,5280,0]B`[11085,13,9813,9813,8409,5280,0]Ba[11085,13,9813,9813,11439,5280,0]Ba[11085,13,9813,9813,11475,5280,0]Ao[11085,13,9813,9813,115,5280,0]B`[11085,13,9813,9813,5271,5280,0]Ao[11085,13,9813,9813,820,5280,0]Ba[11085,13,9813,9813,11417,5280,0]Ba[11085,13,9813,9813,11214,5280,0]Ba[11085,13,9813,9813,11212,5280,0]Ba[11085,13,9966,9966,10846,5280,0]Ba[11085,13,9966,9966,11018,5280,0]Ba[11085,13,9966,9966,11426,5280,0]Ba[11085,13,9966,9966,11336,5280,0]Ba[11085,13,9966,9966,11451,5280,0]B`[11085,13,5210,5210,4508,5280,0]Ba[11085,13,5210,5210,10852,5280,0]Ba[11085,13,5210,5210,10049,5280,0]Ba[11085,13,5210,5210,10048,5280,0]B`[11085,13,5623,5623,4509,5280,0]B`[11085,13,5623,5623,3479,5280,0]B`[11085,13,8313,8313,4510,5280,0]Ba[11085,13,8313,8313,11465,5280,0]B`[11085,13,5625,5625,4511,5280,0]B`[11085,13,5625,5625,3480,5280,0]Ba[11085,13,4584,4584,11255,5280,0]B`[11085,13,4584,4584,6158,5280,0]Ba[11085,13,4584,4584,10850,5280,0]Ba[11085,13,4584,4584,11460,5280,0]Ba[11085,13,4584,4584,10776,5280,0]Ba[11085,13,4584,4584,10309,5280,0]B`[11085,13,4584,4584,8401,5280,0]Ba[11085,13,4584,4584,10306,5280,0]Ba[11085,13,4584,4584,10768,5280,0]Ba[11085,13,4584,4584,11393,5280,0]Ba[11085,13,8181,8181,10044,5280,0]B`[11085,13,8181,8181,9853,5280,0]Ba[11085,13,8181,8181,10773,5280,0]Ba[11085,13,8181,8181,10779,5280,0]Ba[11085,13,8181,8181,10144,5280,0]B`[11085,13,4424,4424,3461,5280,0]B`[11085,13,4424,4424,7632,5280,0]B`[11085,13,4424,4424,4512,5280,0]Ao[11085,13,9778,9778,117,5280,0]Ao[11085,13,9778,9778,116,5280,0]Ba[11085,13,9778,9778,11301,5280,0]Ba[11085,13,9778,9778,10289,5280,0]Ba[11085,13,9430,9430,10307,5280,0]Ba[11085,13,9430,9430,10769,5280,0]B`[11085,13,9769,9769,4513,5280,0]B`[11085,13,8316,8316,4514,5280,0]B`[11085,13,9437,9437,4515,5280,0]Ba[11085,13,9437,9437,10839,5280,0]Ba[11085,13,9437,9437,10759,5280,0]Ba[11085,13,9437,9437,10043,5280,0]Ba[11085,13,9437,9437,10308,5280,0]Ba[11085,13,9437,9437,10136,5280,0]Ba[11085,13,9437,9437,10851,5280,0]B`[11085,13,9437,9437,8411,5280,0]Ba[11085,13,9437,9437,11254,5280,0]Ba[11085,13,9437,9437,11211,5280,0]Ba[11085,13,9437,9437,11484,5280,0]B`[11085,13,8319,8319,4516,5280,0]B`[11085,13,8319,8319,9855,5280,0]B`[11085,13,8319,8319,5246,5280,0]Ba[11085,13,8319,8319,10060,5280,0]B`[11085,13,8319,8319,3481,5280,0]An[11085,13,542,542,4517,5280,0]An[11085,13,542,542,3482,5280,0]B`[11085,13,8182,8182,3483,5280,0]B`[11085,13,4425,4425,3484,5280,0]B`[11085,13,2904,2904,4518,5280,0]B`[11085,13,2904,2904,3485,5280,0]B`[11085,13,9514,9514,4519,5280,0]B`[11085,13,9514,9514,5247,5280,0]Ba[11085,13,9514,9514,11333,5280,0]B`[11085,13,8331,8331,4520,5280,0]Ba[11085,13,8331,8331,11070,5280,0]B`[11085,13,8331,8331,3486,5280,0]Ba[11085,13,9457,9457,10035,5280,0]B`[11085,13,9457,9457,4521,5280,0]B`[11085,13,9457,9457,7608,5280,0]B`[11085,13,9457,9457,9832,5280,0]B`[11085,13,9457,9457,5228,5280,0]B`[11085,13,9457,9457,3487,5280,0]Ba[11085,13,8334,8334,11259,5280,0]B`[11085,13,8334,8334,4522,5280,0]An[11085,13,779,779,4523,5280,0]An[11085,13,779,779,3488,5280,0]B`[11085,13,2906,2906,4524,5280,0]Ba[11085,13,2906,2906,10311,5280,0]B`[11085,13,2906,2906,3489,5280,0]B`[11085,13,4418,4418,4525,5280,0]Ba[11085,13,4418,4418,11071,5280,0]B`[11085,13,4418,4418,3490,5280,0]Bb[11085,13,10021,10021,4526,5280,0]Bb[11085,13,10021,10021,3491,5280,0]Bb[11085,13,10245,10245,9600,5280,0]Bc[11085,13,10245,10245,11447,5280,0]Bb[11085,13,11182,11182,8418,5280,0]Bc[11085,13,11182,11182,10318,5280,0]Bb[11085,13,10724,10724,9840,5280,0]Bb[11085,13,11050,11050,4568,5280,0]B`[11085,13,9814,9814,3492,5280,0]Bb[11085,13,10991,10991,3493,5280,0]Bc[11085,13,11186,11186,11466,5280,0]Bb[11085,13,11188,11188,3494,5280,0]Bb[11085,13,11188,11188,5248,5280,0]Bc[11085,13,11188,11188,10061,5280,0]Bb[11085,13,10094,10094,3495,5280,0]Bb[11085,13,10096,10096,9841,5280,0]Bb[11085,13,10247,10247,9842,5280,0]Bb[11085,13,10730,10730,9843,5280,0]Bb[11085,13,11422,11422,3496,5280,0]Bb[11085,13,10993,10993,3497,5280,0]Bb[11085,13,10995,10995,3498,5280,0]Bb[11085,13,11190,11190,3499,5280,0]B`[11085,13,9970,9970,4529,5280,0]Ba[11085,13,9970,9970,10141,5280,0]Ba[11085,13,9970,9970,11427,5280,0]B`[11085,13,4434,4434,4530,5280,0]B`[11085,13,4434,4434,3500,5280,0]Ba[11085,13,4434,4434,10770,5280,0]B`[11085,13,8339,8339,4531,5280,0]B`[11085,13,8339,8339,3501,5280,0]Bc[11085,13,10732,10732,10855,5280,0]Bb[11085,13,10732,10732,4532,5280,0]Bb[11085,13,10732,10732,3502,5280,0]B`[11085,13,5201,5201,4533,5280,0]Ba[11085,13,5643,5643,10054,5280,0]B`[11085,13,5643,5643,3520,5280,0]B`[11085,13,5643,5643,7651,5280,0]B`[11085,13,5643,5643,4534,5280,0]B`[11085,13,5643,5643,3503,5280,0]B`[11085,13,5645,5645,3504,5280,0]B`[11085,13,8347,8347,4535,5280,0]Ba[11085,13,8347,8347,11415,5280,0]Ba[11085,13,8347,8347,11398,5280,0]Bb[11085,13,10825,10825,9585,5280,0]Bb[11085,13,10825,10825,6167,5280,0]Ba[11085,13,9815,9815,10857,5280,0]Bc[11085,13,10078,10078,10301,5280,0]B`[11085,13,9930,9930,9590,5280,0]Bc[11085,13,10243,10243,10045,5280,0]Am[11085,13,786,786,118,5280,0]B`[11085,13,6251,6251,5277,5280,0]B`[11085,13,5213,5213,8416,5280,0]B`[11085,13,5213,5213,9857,5280,0]B`[11085,13,5213,5213,4536,5280,0]B`[11085,13,5213,5213,9601,5280,0]Ba[11085,13,5213,5213,10319,5280,0]B`[11085,13,5213,5213,7646,5280,0]B`[11085,13,5213,5213,3505,5280,0]Bc[11085,13,10827,10827,11260,5280,0]An[11085,13,857,857,8393,5280,0]An[11085,13,857,857,4537,5280,0]Ao[11085,13,857,857,11060,5280,0]Ba[11085,13,5205,5205,11076,5280,0]Ba[11085,13,5205,5205,10047,5280,0]Ba[11085,13,9320,9320,10856,5280,0]B`[11085,13,9320,9320,7647,5280,0]Ba[11085,13,7660,7660,10128,5280,0]Ba[11085,13,7660,7660,11399,5280,0]Ba[11085,13,7660,7660,11015,5280,0]Ba[11085,13,7660,7660,11205,5280,0]Ba[11085,13,7660,7660,10125,5280,0]Ao[11085,13,866,866,11061,5280,0]Ao[11085,13,866,866,10033,5280,0]Ao[11085,13,868,868,10034,5280,0]Ao[11085,13,868,868,10763,5280,0]Ao[11085,13,868,868,11062,5280,0]Bc[11085,13,11400,11400,11489,5280,0]Bc[11085,13,11400,11400,11470,5280,0]B`[11085,13,9502,9502,9827,5280,0]Ba[11085,13,9502,9502,10137,5280,0]Ba[11085,13,9502,9502,10320,5280,0]B`[11085,13,6144,6144,9576,5280,0]Ba[11085,13,6144,6144,11429,5280,0]Ba[11085,13,6144,6144,11215,5280,0]Bc[11085,13,10276,10276,11395,5280,0]Bc[11085,13,10276,10276,11009,5280,0]Bc[11085,13,10276,10276,11303,5280,0]Bc[11085,13,10276,10276,10782,5280,0]Bc[11085,13,10276,10276,11216,5280,0]Bc[11085,13,10276,10276,10143,5280,0]Bc[11085,13,10276,10276,11461,5280,0]Bc[11085,13,10276,10276,11337,5280,0]Bc[11085,13,10276,10276,10843,5280,0]Bb[11085,13,10276,10276,9579,5280,0]Bc[11085,13,10276,10276,11425,5280,0]Bc[11085,13,10276,10276,11207,5280,0]Bc[11085,13,10276,10276,10321,5280,0]Bb[11085,13,10276,10276,7653,5280,0]Bc[11085,13,10276,10276,11394,5280,0]Bc[11085,13,10276,10276,11007,5280,0]Ba[11085,13,5216,5216,11396,5280,0]Ba[11085,13,5216,5216,10052,5280,0]Ba[11085,13,5216,5216,11068,5280,0]Ba[11085,13,5216,5216,11397,5280,0]B`[11085,13,5216,5216,8415,5280,0]Ba[11085,13,5216,5216,10030,5280,0]Ba[11085,13,5216,5216,10297,5280,0]Ba[11085,13,5216,5216,10780,5280,0]Ba[11085,13,5216,5216,11298,5280,0]Ba[11085,13,5216,5216,11217,5280,0]Ao[11085,13,794,794,11449,5280,0]Ao[11085,13,794,794,11058,5280,0]Ao[11085,13,794,794,10031,5280,0]B`[11085,13,8359,8359,4538,5280,0]B`[11085,13,8359,8359,3506,5280,0]B`[11085,13,9510,9510,4539,5280,0]B`[11085,13,9510,9510,3507,5280,0]Bb[11085,13,10006,10006,9839,5280,0]Bb[11085,13,10006,10006,4540,5280,0]Bb[11085,13,10006,10006,7618,5280,0]Bb[11085,13,10006,10006,6160,5280,0]Bb[11085,13,10006,10006,8397,5280,0]Bb[11085,13,10006,10006,3508,5280,0]Bc[11085,13,10006,10006,10132,5280,0]Al[11085,13,93,93,4561,5280,0]Am[11085,13,93,93,11445,5280,0]Al[11085,13,93,93,4541,5280,0]Am[11085,13,93,93,10142,5280,0]Am[11085,13,93,93,11428,5280,0]B`[11085,13,4452,4452,9597,5280,0]B`[11085,13,4452,4452,9851,5280,0]B`[11085,13,4452,4452,9852,5280,0]Ba[11085,13,4452,4452,10781,5280,0]B`[11085,13,4452,4452,8420,5280,0]An[11085,13,797,797,4565,5280,0]Am[11085,13,797,797,121,5280,0]An[11085,13,799,799,4542,5280,0]An[11085,13,799,799,8398,5280,0]An[11085,13,799,799,5249,5280,0]An[11085,13,799,799,3509,5280,0]B`[11085,13,6150,6150,4543,5280,0]B`[11085,13,4426,4426,9825,5280,0]B`[11085,13,4426,4426,9595,5280,0]B`[11085,13,4426,4426,5281,5280,0]Bb[11085,13,10727,10727,9826,5280,0]Bb[11085,13,10727,10727,9596,5280,0]Bb[11085,13,10727,10727,5282,5280,0]Bb[11085,13,10028,10028,7620,5280,0]Bb[11085,13,10028,10028,4562,5280,0]Bb[11085,13,10028,10028,4547,5280,0]Bb[11085,13,10028,10028,5264,5280,0]Bb[11085,13,10028,10028,7631,5280,0]Bb[11085,13,10028,10028,5272,5280,0]B`[11085,13,5084,5084,8434,5280,0]Ba[11085,13,5084,5084,11014,5280,0]Ba[11085,13,5084,5084,10058,5280,0]Ba[11085,13,5084,5084,11012,5280,0]B`[11085,13,5084,5084,6177,5280,0]B`[11085,13,5084,5084,7610,5280,0]Ao[11085,13,869,869,10129,5280,0]Ao[11085,13,869,869,11208,5280,0]Bb[11085,13,11081,11081,7609,5280,0]Ba[11085,13,6201,6201,10138,5280,0]B`[11085,13,6201,6201,7654,5280,0]Ba[11085,13,8329,8329,11069,5280,0]B`[11085,13,8329,8329,6176,5280,0]B`[11085,13,4432,4432,4583,5280,0]Ba[11085,13,9823,9823,10323,5280,0]Ba[11085,13,9823,9823,11261,5280,0]Ba[11085,13,9823,9823,11485,5280,0]B`[11085,13,9823,9823,4544,5280,0]An[11085,13,101,101,4545,5280,0]An[11085,13,101,101,3510,5280,0]Ba[11085,13,10813,10813,801,5280,0]Bb[11085,13,10813,10813,6163,5280,0]B`[11085,13,9968,9968,7621,5280,0]B`[11085,13,9968,9968,4563,5280,0]B`[11085,13,9968,9968,5273,5280,0]Bb[11085,13,11280,11280,8433,5280,0]Am[11085,13,5171,5171,4487,0,0]Ae[11085,7,847,0,0,0,0]B`[11085,13,10864,10864,11249,0,0]Af[11085,7,9313,0,0,0,0]Af[11085,7,1364,0,0,0,0]B`[11085,15,10732,10732,10855,0,0]Af[11085,5,9457,0,0,0,0]Ag[11085,5,11081,0,0,0,0]Af[11085,5,5084,0,0,0,0]Ae[11085,5,849,0,0,0,0]0Af[11085,5,8306,0,0,0,0]Ae[11085,5,856,0,0,0,0]Af[11085,5,7677,0,0,0,0]Ag[11085,18,6150,0,0,0,0]Ag[11085,5,10006,0,0,0,0]Ag[11085,5,10028,0,0,0,0]Af[11085,5,9968,0,0,0,0]Ae[11085,6,849,0,0,0,0]Af[11085,6,7677,0,0,0,0]Af[11085,5,4423,0,0,0,0]Ag[11085,5,10726,0,0,0,0]Ak[11085,15,537,537,6174,0,0]Am[11085,15,2899,2899,6175,0,0]Al[11085,15,9813,9813,820,0,0]8Af[11085,5,4424,0,0,0,0];Ag[11085,10,7679,0,0,0,0]Am[11085,15,9875,9875,8391,0,0]Am[11085,15,9513,9513,8392,0,0]Ak[11085,15,857,857,8393,0,0]B`[11085,15,10732,10732,10855,0,0]Am[11085,15,5357,5357,5262,0,0]Ak[11085,15,861,861,5263,0,0]Ag[11085,18,6150,0,0,0,0]Ag[11085,10,9502,0,0,0,0]Af[11085,5,5213,0,0,0,0]Af[11085,5,9320,0,0,0,0]Aj[11085,4,10993,5643,0,0,0]Aj[11085,4,10995,5643,0,0,0]Ai[11085,4,5645,5643,0,0,0]Af[11085,5,5643,0,0,0,0]Al[11085,15,537,537,10126,0,0]Ag[11085,5,10276,0,0,0,0]Af[11085,5,6201,0,0,0,0]Ao[11085,13,866,866,10033,7644,0]Al[11085,13,868,868,10034,0,0]Bc[11085,13,11400,11400,11470,7644,0]Am[11085,12,9502,9502,7644,0,0]Ba[11085,13,5216,5216,11396,7644,0]Ag[11085,2,10827,0,0,0,0]Am[11085,13,4404,4404,4497,0,0]Aj[11085,14,11247,0,836,0,0]0Am[11085,14,9813,9813,4507,0,0]Af[11085,2,5190,0,0,0,0]B`[11085,13,10827,10827,11260,0,0]Af[11085,4,2899,0,0,0,0]Am[11085,13,9878,9878,4480,0,0]Am[11085,13,5180,5180,4496,0,0]Ak[11085,13,101,101,4545,0,0]5An[11085,14,5216,5216,11217,0,0]An[11085,14,5086,5086,11210,0,0]77Ba[11085,13,9379,9379,10305,7636,0]B`[11085,13,9379,9379,6179,7636,0]Ba[11085,13,3529,3529,11471,7636,0]Ba[11085,13,3529,3529,11253,7636,0]Ba[11085,13,3529,3529,11450,7636,0]B`[11085,13,3529,3529,4474,7636,0]B`[11085,13,3529,3529,3464,7636,0]Ao[11085,13,847,847,11242,7636,0]An[11085,13,849,849,7612,7636,0]Ao[11085,13,849,849,11206,7636,0]Ao[11085,13,849,849,10291,7636,0]Ao[11085,13,849,849,10290,7636,0]An[11085,13,849,849,7623,7636,0]Ao[11085,13,849,849,11256,7636,0]An[11085,13,849,849,4475,7636,0]An[11085,13,849,849,7611,7636,0]An[11085,13,849,849,9575,7636,0]B`[11085,13,5285,5285,8405,7636,0]B`[11085,13,5285,5285,4476,7636,0]An[11085,13,853,853,9854,7636,0]An[11085,13,853,853,4477,7636,0]An[11085,13,853,853,9599,7636,0]Ao[11085,13,853,853,11446,7636,0]B`[11085,13,7666,7666,4478,7636,0]B`[11085,13,7666,7666,8417,7636,0]Ba[11085,13,7666,7666,10317,7636,0]B`[11085,13,5288,5288,4479,7636,0]B`[11085,13,5288,5288,3465,7636,0]B`[11085,13,9875,9875,8391,7636,0]Ba[11085,13,9875,9875,10838,7636,0]Ba[11085,13,9875,9875,10037,7636,0]Ba[11085,13,9875,9875,10758,7636,0]Bc[11085,13,10019,10019,11332,7636,0]Bc[11085,13,10019,10019,11438,7636,0]Bc[11085,13,10019,10019,11392,7636,0]Bc[11085,13,10019,10019,11448,7636,0]Ba[11085,13,9512,9512,11257,7636,0]Ba[11085,13,9512,9512,11243,7636,0]Ba[11085,13,9512,9512,11413,7636,0]Ba[11085,13,9512,9512,11424,7636,0]An[11085,13,856,856,7615,7636,0]Ao[11085,13,856,856,10038,7636,0]An[11085,13,856,856,8395,7636,0]Bc[11085,13,10020,10020,10760,7636,0]Bc[11085,13,10020,10020,11244,7636,0]B`[11085,13,9513,9513,8392,7636,0]Ba[11085,13,9513,9513,10127,7636,0]B`[11085,13,9513,9513,9577,7636,0]Ba[11085,13,9513,9513,11059,7636,0]B`[11085,13,9878,9878,4480,7636,0]B`[11085,13,9878,9878,3466,7636,0]B`[11085,13,5290,5290,3467,7636,0]B`[11085,13,6198,6198,4481,7636,0]An[11085,13,125,125,4482,7636,0]An[11085,13,125,125,5275,7636,0]An[11085,13,125,125,9844,7636,0]An[11085,13,125,125,9835,7636,0]An[11085,13,125,125,5242,7636,0]An[11085,13,125,125,9831,7636,0]An[11085,13,125,125,5224,7636,0]Ao[11085,13,125,125,10322,7636,0]Ao[11085,13,125,125,11334,7636,0]An[11085,13,125,125,3468,7636,0]Ba[11085,13,7677,7677,10134,7636,0]Ba[11085,13,7677,7677,10053,7636,0]Ba[11085,13,7677,7677,11065,7636,0]Ba[11085,13,7677,7677,11483,7636,0]Ba[11085,13,7677,7677,11008,7636,0]Ba[11085,13,7677,7677,11066,7636,0]Ba[11085,13,7677,7677,11246,7636,0]Ba[11085,13,7677,7677,10294,7636,0]Ba[11085,13,7677,7677,10130,7636,0]B`[11085,13,7677,7677,7616,7636,0]Ba[11085,13,7677,7677,10764,7636,0]Ba[11085,13,7677,7677,10131,7636,0]Ba[11085,13,7677,7677,10840,7636,0]Ba[11085,13,7677,7677,11469,7636,0]Ba[11085,13,7677,7677,11299,7636,0]B`[11085,13,7677,7677,7624,7636,0]B`[11085,13,7677,7677,4483,7636,0]B`[11085,13,7677,7677,5261,7636,0]Ba[11085,13,7677,7677,11302,7636,0]B`[11085,13,7679,7679,8419,7636,0]Ba[11085,13,7679,7679,11209,7636,0]B`[11085,13,7679,7679,8396,7636,0]Ba[11085,13,7679,7679,10765,7636,0]Ba[11085,13,7679,7679,10140,7636,0]Ba[11085,13,7679,7679,11414,7636,0]Ba[11085,13,7679,7679,11248,7636,0]Bc[11085,13,10864,10864,11249,7636,0]Bc[11085,13,10864,10864,10775,7636,0]Bc[11085,13,10864,10864,11011,7636,0]Bb[11085,13,10864,10864,5274,7636,0]Bb[11085,13,10864,10864,5223,7636,0]Bc[11085,13,10864,10864,10295,7636,0]Ba[11085,13,5147,5147,11250,7636,0]Ba[11085,13,9313,9313,11251,7636,0]Ba[11085,13,9315,9315,10296,7636,0]B`[11085,13,9315,9315,4484,7636,0]B`[11085,13,9888,9888,9838,7636,0]B`[11085,13,9888,9888,9834,7636,0]B`[11085,13,9890,9890,4485,7636,0]B`[11085,13,5357,5357,6173,7636,0]B`[11085,13,5357,5357,5262,7636,0]B`[11085,13,5357,5357,4486,7636,0]Ba[11085,13,5357,5357,10845,7636,0]Ba[11085,13,5357,5357,11017,7636,0]Ba[11085,13,5357,5357,11335,7636,0]B`[11085,13,5357,5357,9580,7636,0]Ba[11085,13,5357,5357,11300,7636,0]Ba[11085,13,5357,5357,10036,7636,0]Ba[11085,13,5357,5357,11010,7636,0]B`[11085,13,5357,5357,5243,7636,0]B`[11085,13,5357,5357,5225,7636,0]B`[11085,13,5357,5357,3469,7636,0]Ba[11085,13,1364,1364,11252,7636,0]B`[11085,13,5171,5171,4487,7636,0]B`[11085,13,5171,5171,4551,7636,0]B`[11085,13,5365,5365,4488,7636,0]B`[11085,13,6247,6247,3518,7636,0]B`[11085,13,4423,4423,4489,7636,0]B`[11085,13,4423,4423,5238,7636,0]B`[11085,13,4423,4423,9591,7636,0]B`[11085,13,4423,4423,4569,7636,0]Ba[11085,13,4423,4423,10050,7636,0]Ba[11085,13,4423,4423,10841,7636,0]Ba[11085,13,4423,4423,10853,7636,0]B`[11085,13,4423,4423,7625,7636,0]Ao[11085,13,4423,4423,803,7636,0]B`[11085,13,9603,9603,4490,7636,0]B`[11085,13,9603,9603,5244,7636,0]B`[11085,13,9603,9603,5226,7636,0]Ba[11085,13,9603,9603,10766,7636,0]B`[11085,13,9603,9603,9574,7636,0]Bb[11085,13,10726,10726,9592,7636,0]Bb[11085,13,10726,10726,4570,7636,0]Bc[11085,13,10726,10726,10051,7636,0]Bc[11085,13,10726,10726,10842,7636,0]Bc[11085,13,10726,10726,10854,7636,0]Bb[11085,13,10726,10726,7626,7636,0]Ba[11085,13,10726,10726,804,7636,0]B`[11085,13,4402,4402,4491,7636,0]B`[11085,13,4402,4402,3470,7636,0]B`[11085,13,5174,5174,4492,7636,0]B`[11085,13,5174,5174,3471,7636,0]B`[11085,13,5176,5176,4493,7636,0]B`[11085,13,5176,5176,3472,7636,0]B`[11085,13,1861,1861,4494,7636,0]B`[11085,13,1861,1861,3473,7636,0]Ba[11085,13,5617,5617,10300,7636,0]Ba[11085,13,5617,5617,10847,7636,0]Ba[11085,13,5617,5617,10133,7636,0]Ba[11085,13,5617,5617,10041,7636,0]B`[11085,13,5617,5617,4495,7636,0]B`[11085,13,5617,5617,3442,7636,0]B`[11085,13,5617,5617,5254,7636,0]B`[11085,13,5180,5180,4496,7636,0]B`[11085,13,5180,5180,3474,7636,0]B`[11085,13,4404,4404,4497,7636,0]Ba[11085,13,8306,8306,11258,7636,0]B`[11085,13,8306,8306,4498,7636,0]B`[11085,13,8306,8306,7613,7636,0]Ba[11085,13,4413,4413,10135,7636,0]Ba[11085,13,4413,4413,10767,7636,0]B`[11085,13,4413,4413,9837,7636,0]B`[11085,13,4413,4413,9586,7636,0]B`[11085,13,4413,4413,4499,7636,0]B`[11085,13,4413,4413,3443,7636,0]B`[11085,13,4413,4413,3459,7636,0]B`[11085,13,6224,6224,4500,7636,0]B`[11085,13,6224,6224,3444,7636,0]B`[11085,13,6224,6224,3460,7636,0]Bc[11085,13,10809,10809,11016,7636,0]B`[11085,13,4416,4416,9582,7636,0]B`[11085,13,4416,4416,9589,7636,0]Ba[11085,13,4416,4416,10292,7636,0]B`[11085,13,4416,4416,3457,7636,0]B`[11085,13,5086,5086,9584,7636,0]Ba[11085,13,5086,5086,10848,7636,0]Ba[11085,13,5086,5086,11067,7636,0]Ba[11085,13,5086,5086,10042,7636,0]Ba[11085,13,5086,5086,11013,7636,0]Ba[11085,13,5086,5086,11210,7636,0]B`[11085,13,4419,4419,3519,7636,0]B`[11085,13,4419,4419,4501,7636,0]B`[11085,13,4419,4419,8410,7636,0]Ba[11085,13,4419,4419,10046,7636,0]B`[11085,13,4419,4419,3475,7636,0]B`[11085,13,5187,5187,4502,7636,0]B`[11085,13,5187,5187,5245,7636,0]B`[11085,13,5187,5187,5227,7636,0]B`[11085,13,5187,5187,5259,7636,0]B`[11085,13,9812,9812,4503,7636,0]B`[11085,13,9812,9812,3476,7636,0]Bb[11085,13,10740,10740,3477,7636,0]Bb[11085,13,10740,10740,4504,7636,0]Ao[11085,13,9523,9523,107,7636,0]An[11085,13,537,537,3478,7636,0]An[11085,13,537,537,6174,7636,0]Ao[11085,13,537,537,10126,7636,0]Ao[11085,13,537,537,10772,7636,0]An[11085,13,537,537,4505,7636,0]Ba[11085,13,6183,6183,10055,7636,0]Ba[11085,13,6183,6183,11487,7636,0]B`[11085,13,2899,2899,6175,7636,0]Ba[11085,13,5359,5359,10139,7636,0]B`[11085,13,5359,5359,4506,7636,0]B`[11085,13,5359,5359,5241,7636,0]Am[11085,13,861,861,819,7636,0]An[11085,13,861,861,5263,7636,0]An[11085,13,861,861,8412,7636,0]Ao[11085,13,861,861,11074,7636,0]Ao[11085,13,861,861,10777,7636,0]Ao[11085,13,861,861,11416,7636,0]Ao[11085,13,861,861,10761,7636,0]Ao[11085,13,861,861,10762,7636,0]Ba[11085,13,9813,9813,11075,7636,0]B`[11085,13,9813,9813,4507,7636,0]Ba[11085,13,9813,9813,10310,7636,0]B`[11085,13,9813,9813,8409,7636,0]Ba[11085,13,9813,9813,11439,7636,0]Ba[11085,13,9813,9813,11475,7636,0]Ao[11085,13,9813,9813,115,7636,0]B`[11085,13,9813,9813,5271,7636,0]Ao[11085,13,9813,9813,820,7636,0]Ba[11085,13,9813,9813,11417,7636,0]Ba[11085,13,9813,9813,11214,7636,0]Ba[11085,13,9813,9813,11212,7636,0]Ba[11085,13,9966,9966,10846,7636,0]Ba[11085,13,9966,9966,11018,7636,0]Ba[11085,13,9966,9966,11426,7636,0]Ba[11085,13,9966,9966,11336,7636,0]Ba[11085,13,9966,9966,11451,7636,0]B`[11085,13,5210,5210,4508,7636,0]Ba[11085,13,5210,5210,10852,7636,0]Ba[11085,13,5210,5210,10049,7636,0]Ba[11085,13,5210,5210,10048,7636,0]B`[11085,13,5623,5623,4509,7636,0]B`[11085,13,5623,5623,3479,7636,0]B`[11085,13,8313,8313,4510,7636,0]Ba[11085,13,8313,8313,11465,7636,0]B`[11085,13,5625,5625,4511,7636,0]B`[11085,13,5625,5625,3480,7636,0]Ba[11085,13,4584,4584,11255,7636,0]B`[11085,13,4584,4584,6158,7636,0]Ba[11085,13,4584,4584,10850,7636,0]Ba[11085,13,4584,4584,11460,7636,0]Ba[11085,13,4584,4584,10776,7636,0]Ba[11085,13,4584,4584,10309,7636,0]B`[11085,13,4584,4584,8401,7636,0]Ba[11085,13,4584,4584,10306,7636,0]Ba[11085,13,4584,4584,10768,7636,0]Ba[11085,13,4584,4584,11393,7636,0]Ba[11085,13,8181,8181,10044,7636,0]B`[11085,13,8181,8181,9853,7636,0]Ba[11085,13,8181,8181,10773,7636,0]Ba[11085,13,8181,8181,10779,7636,0]Ba[11085,13,8181,8181,10144,7636,0]B`[11085,13,4424,4424,3461,7636,0]B`[11085,13,4424,4424,7632,7636,0]B`[11085,13,4424,4424,4512,7636,0]Ao[11085,13,9778,9778,117,7636,0]Ao[11085,13,9778,9778,116,7636,0]Ba[11085,13,9778,9778,11301,7636,0]Ba[11085,13,9778,9778,10289,7636,0]Ba[11085,13,9430,9430,10307,7636,0]Ba[11085,13,9430,9430,10769,7636,0]B`[11085,13,9769,9769,4513,7636,0]B`[11085,13,8316,8316,4514,7636,0]B`[11085,13,9437,9437,4515,7636,0]Ba[11085,13,9437,9437,10839,7636,0]Ba[11085,13,9437,9437,10759,7636,0]Ba[11085,13,9437,9437,10043,7636,0]Ba[11085,13,9437,9437,10308,7636,0]Ba[11085,13,9437,9437,10136,7636,0]Ba[11085,13,9437,9437,10851,7636,0]B`[11085,13,9437,9437,8411,7636,0]Ba[11085,13,9437,9437,11254,7636,0]Ba[11085,13,9437,9437,11211,7636,0]Ba[11085,13,9437,9437,11484,7636,0]B`[11085,13,8319,8319,4516,7636,0]B`[11085,13,8319,8319,9855,7636,0]B`[11085,13,8319,8319,5246,7636,0]Ba[11085,13,8319,8319,10060,7636,0]B`[11085,13,8319,8319,3481,7636,0]An[11085,13,542,542,4517,7636,0]An[11085,13,542,542,3482,7636,0]B`[11085,13,8182,8182,3483,7636,0]B`[11085,13,4425,4425,3484,7636,0]B`[11085,13,2904,2904,4518,7636,0]B`[11085,13,2904,2904,3485,7636,0]B`[11085,13,9514,9514,4519,7636,0]B`[11085,13,9514,9514,5247,7636,0]Ba[11085,13,9514,9514,11333,7636,0]B`[11085,13,8331,8331,4520,7636,0]Ba[11085,13,8331,8331,11070,7636,0]B`[11085,13,8331,8331,3486,7636,0]Ba[11085,13,9457,9457,10035,7636,0]B`[11085,13,9457,9457,4521,7636,0]B`[11085,13,9457,9457,7608,7636,0]B`[11085,13,9457,9457,9832,7636,0]B`[11085,13,9457,9457,5228,7636,0]B`[11085,13,9457,9457,3487,7636,0]Ba[11085,13,8334,8334,11259,7636,0]B`[11085,13,8334,8334,4522,7636,0]An[11085,13,779,779,4523,7636,0]An[11085,13,779,779,3488,7636,0]B`[11085,13,2906,2906,4524,7636,0]Ba[11085,13,2906,2906,10311,7636,0]B`[11085,13,2906,2906,3489,7636,0]B`[11085,13,4418,4418,4525,7636,0]Ba[11085,13,4418,4418,11071,7636,0]B`[11085,13,4418,4418,3490,7636,0]Bb[11085,13,10021,10021,4526,7636,0]Bb[11085,13,10021,10021,3491,7636,0]Bb[11085,13,10245,10245,9600,7636,0]Bc[11085,13,10245,10245,11447,7636,0]Bb[11085,13,11182,11182,8418,7636,0]Bc[11085,13,11182,11182,10318,7636,0]Bb[11085,13,10724,10724,9840,7636,0]Bb[11085,13,11050,11050,4568,7636,0]B`[11085,13,9814,9814,3492,7636,0]Bb[11085,13,10991,10991,3493,7636,0]Bc[11085,13,11186,11186,11466,7636,0]Bb[11085,13,11188,11188,3494,7636,0]Bb[11085,13,11188,11188,5248,7636,0]Bc[11085,13,11188,11188,10061,7636,0]Bb[11085,13,10094,10094,3495,7636,0]Bb[11085,13,10096,10096,9841,7636,0]Bb[11085,13,10247,10247,9842,7636,0]Bb[11085,13,10730,10730,9843,7636,0]Bb[11085,13,11422,11422,3496,7636,0]Bb[11085,13,10993,10993,3497,7636,0]Bb[11085,13,10995,10995,3498,7636,0]Bb[11085,13,11190,11190,3499,7636,0]B`[11085,13,9970,9970,4529,7636,0]Ba[11085,13,9970,9970,10141,7636,0]Ba[11085,13,9970,9970,11427,7636,0]B`[11085,13,4434,4434,4530,7636,0]B`[11085,13,4434,4434,3500,7636,0]Ba[11085,13,4434,4434,10770,7636,0]B`[11085,13,8339,8339,4531,7636,0]B`[11085,13,8339,8339,3501,7636,0]Bc[11085,13,10732,10732,10855,7636,0]Bb[11085,13,10732,10732,4532,7636,0]Bb[11085,13,10732,10732,3502,7636,0]B`[11085,13,5201,5201,4533,7636,0]Ba[11085,13,5643,5643,10054,7636,0]B`[11085,13,5643,5643,3520,7636,0]B`[11085,13,5643,5643,7651,7636,0]B`[11085,13,5643,5643,4534,7636,0]B`[11085,13,5643,5643,3503,7636,0]B`[11085,13,5645,5645,3504,7636,0]B`[11085,13,8347,8347,4535,7636,0]Ba[11085,13,8347,8347,11415,7636,0]Ba[11085,13,8347,8347,11398,7636,0]Bb[11085,13,10825,10825,9585,7636,0]Bb[11085,13,10825,10825,6167,7636,0]Ba[11085,13,9815,9815,10857,7636,0]Bc[11085,13,10078,10078,10301,7636,0]B`[11085,13,9930,9930,9590,7636,0]Bc[11085,13,10243,10243,10045,7636,0]Am[11085,13,786,786,118,7636,0]B`[11085,13,6251,6251,5277,7636,0]B`[11085,13,5213,5213,8416,7636,0]B`[11085,13,5213,5213,9857,7636,0]B`[11085,13,5213,5213,4536,7636,0]B`[11085,13,5213,5213,9601,7636,0]Ba[11085,13,5213,5213,10319,7636,0]B`[11085,13,5213,5213,7646,7636,0]B`[11085,13,5213,5213,3505,7636,0]Bc[11085,13,10827,10827,11260,7636,0]An[11085,13,857,857,8393,7636,0]An[11085,13,857,857,4537,7636,0]Ao[11085,13,857,857,11060,7636,0]Ba[11085,13,5205,5205,11076,7636,0]Ba[11085,13,5205,5205,10047,7636,0]Ba[11085,13,9320,9320,10856,7636,0]B`[11085,13,9320,9320,7647,7636,0]Ba[11085,13,7660,7660,10128,7636,0]Ba[11085,13,7660,7660,11399,7636,0]Ba[11085,13,7660,7660,11015,7636,0]Ba[11085,13,7660,7660,11205,7636,0]Ba[11085,13,7660,7660,10125,7636,0]Ao[11085,13,866,866,11061,7636,0]Ao[11085,13,866,866,10033,7636,0]Ao[11085,13,868,868,10034,7636,0]Ao[11085,13,868,868,10763,7636,0]Ao[11085,13,868,868,11062,7636,0]Bc[11085,13,11400,11400,11489,7636,0]Bc[11085,13,11400,11400,11470,7636,0]B`[11085,13,9502,9502,9827,7636,0]Ba[11085,13,9502,9502,10137,7636,0]Ba[11085,13,9502,9502,10320,7636,0]B`[11085,13,6144,6144,9576,7636,0]Ba[11085,13,6144,6144,11429,7636,0]Ba[11085,13,6144,6144,11215,7636,0]Bc[11085,13,10276,10276,11395,7636,0]Bc[11085,13,10276,10276,11009,7636,0]Bc[11085,13,10276,10276,11303,7636,0]Bc[11085,13,10276,10276,10782,7636,0]Bc[11085,13,10276,10276,11216,7636,0]Bc[11085,13,10276,10276,10143,7636,0]Bc[11085,13,10276,10276,11461,7636,0]Bc[11085,13,10276,10276,11337,7636,0]Bc[11085,13,10276,10276,10843,7636,0]Bb[11085,13,10276,10276,9579,7636,0]Bc[11085,13,10276,10276,11425,7636,0]Bc[11085,13,10276,10276,11207,7636,0]Bc[11085,13,10276,10276,10321,7636,0]Bb[11085,13,10276,10276,7653,7636,0]Bc[11085,13,10276,10276,11394,7636,0]Bc[11085,13,10276,10276,11007,7636,0]Ba[11085,13,5216,5216,11396,7636,0]Ba[11085,13,5216,5216,10052,7636,0]Ba[11085,13,5216,5216,11068,7636,0]Ba[11085,13,5216,5216,11397,7636,0]B`[11085,13,5216,5216,8415,7636,0]Ba[11085,13,5216,5216,10030,7636,0]Ba[11085,13,5216,5216,10297,7636,0]Ba[11085,13,5216,5216,10780,7636,0]Ba[11085,13,5216,5216,11298,7636,0]Ba[11085,13,5216,5216,11217,7636,0]Ao[11085,13,794,794,11449,7636,0]Ao[11085,13,794,794,11058,7636,0]Ao[11085,13,794,794,10031,7636,0]B`[11085,13,8359,8359,4538,7636,0]B`[11085,13,8359,8359,3506,7636,0]B`[11085,13,9510,9510,4539,7636,0]B`[11085,13,9510,9510,3507,7636,0]Bb[11085,13,10006,10006,9839,7636,0]Bb[11085,13,10006,10006,4540,7636,0]Bb[11085,13,10006,10006,7618,7636,0]Bb[11085,13,10006,10006,6160,7636,0]Bb[11085,13,10006,10006,8397,7636,0]Bb[11085,13,10006,10006,3508,7636,0]Bc[11085,13,10006,10006,10132,7636,0]Al[11085,13,93,93,4561,7636,0]Am[11085,13,93,93,11445,7636,0]Al[11085,13,93,93,4541,7636,0]Am[11085,13,93,93,10142,7636,0]Am[11085,13,93,93,11428,7636,0]B`[11085,13,4452,4452,9597,7636,0]B`[11085,13,4452,4452,9851,7636,0]") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/entry/eec2ce8864ff.js b/network-poc/target-native/doc/search.index/entry/eec2ce8864ff.js deleted file mode 100644 index a8cc6e2..0000000 --- a/network-poc/target-native/doc/search.index/entry/eec2ce8864ff.js +++ /dev/null @@ -1 +0,0 @@ -rd_("B`[11085,13,4452,4452,9852,7636,0]Ba[11085,13,4452,4452,10781,7636,0]B`[11085,13,4452,4452,8420,7636,0]An[11085,13,797,797,4565,7636,0]Am[11085,13,797,797,121,7636,0]An[11085,13,799,799,4542,7636,0]An[11085,13,799,799,8398,7636,0]An[11085,13,799,799,5249,7636,0]An[11085,13,799,799,3509,7636,0]B`[11085,13,6150,6150,4543,7636,0]B`[11085,13,4426,4426,9825,7636,0]B`[11085,13,4426,4426,9595,7636,0]B`[11085,13,4426,4426,5281,7636,0]Bb[11085,13,10727,10727,9826,7636,0]Bb[11085,13,10727,10727,9596,7636,0]Bb[11085,13,10727,10727,5282,7636,0]Bb[11085,13,10028,10028,7620,7636,0]Bb[11085,13,10028,10028,4562,7636,0]Bb[11085,13,10028,10028,4547,7636,0]Bb[11085,13,10028,10028,5264,7636,0]Bb[11085,13,10028,10028,7631,7636,0]Bb[11085,13,10028,10028,5272,7636,0]B`[11085,13,5084,5084,8434,7636,0]Ba[11085,13,5084,5084,11014,7636,0]Ba[11085,13,5084,5084,10058,7636,0]Ba[11085,13,5084,5084,11012,7636,0]B`[11085,13,5084,5084,6177,7636,0]B`[11085,13,5084,5084,7610,7636,0]Ao[11085,13,869,869,10129,7636,0]Ao[11085,13,869,869,11208,7636,0]Bb[11085,13,11081,11081,7609,7636,0]Ba[11085,13,6201,6201,10138,7636,0]B`[11085,13,6201,6201,7654,7636,0]Ba[11085,13,8329,8329,11069,7636,0]B`[11085,13,8329,8329,6176,7636,0]B`[11085,13,4432,4432,4583,7636,0]Ba[11085,13,9823,9823,10323,7636,0]Ba[11085,13,9823,9823,11261,7636,0]Ba[11085,13,9823,9823,11485,7636,0]B`[11085,13,9823,9823,4544,7636,0]An[11085,13,101,101,4545,7636,0]An[11085,13,101,101,3510,7636,0]Ba[11085,13,10813,10813,801,7636,0]Bb[11085,13,10813,10813,6163,7636,0]B`[11085,13,9968,9968,7621,7636,0]B`[11085,13,9968,9968,4563,7636,0]B`[11085,13,9968,9968,5273,7636,0]Bb[11085,13,11280,11280,8433,7636,0]Am[11085,14,5210,5210,4508,0,0]An[11085,14,5086,5086,11210,0,0]B`[11085,14,10276,10276,11425,0,0]An[11085,13,9875,9875,10037,0,0]Al[11085,13,856,856,10038,0,0]B`[11085,14,10020,10020,10760,0,0]An[11085,14,9513,9513,10127,0,0]Am[11085,14,9514,9514,4519,0,0]Af[11085,2,4421,0,0,0,0]Af[11085,2,9454,0,0,0,0]Am[11085,14,5365,5365,4488,0,0]Ao[11085,13,847,847,11242,5260,0]Ao[11085,13,849,849,11206,5260,0]Ao[11085,13,849,849,10291,5260,0]An[11085,13,853,853,9599,5260,0]B`[11085,13,7666,7666,8417,5260,0]B`[11085,13,9875,9875,8391,5260,0]Bc[11085,13,10019,10019,11438,5260,0]Bc[11085,13,10019,10019,11448,5260,0]Bc[11085,13,10020,10020,11244,5260,0]B`[11085,13,9513,9513,8392,5260,0]Ba[11085,13,9513,9513,11059,5260,0]An[11085,13,125,125,5275,5260,0]An[11085,13,125,125,9844,5260,0]An[11085,13,125,125,9835,5260,0]An[11085,13,125,125,5242,5260,0]An[11085,13,125,125,9831,5260,0]An[11085,13,125,125,5224,5260,0]Bc[11085,13,10864,10864,10775,5260,0]Bc[11085,13,10864,10864,11011,5260,0]Bb[11085,13,10864,10864,5223,5260,0]Bc[11085,13,10864,10864,10295,5260,0]Ba[11085,13,5147,5147,11250,5260,0]Ba[11085,13,9313,9313,11251,5260,0]B`[11085,13,9888,9888,9834,5260,0]B`[11085,13,5357,5357,9580,5260,0]Ba[11085,13,5357,5357,11300,5260,0]Ba[11085,13,5357,5357,10036,5260,0]Ba[11085,13,5357,5357,11010,5260,0]B`[11085,13,5357,5357,5243,5260,0]B`[11085,13,5357,5357,5225,5260,0]Ba[11085,13,1364,1364,11252,5260,0]B`[11085,13,4423,4423,5238,5260,0]B`[11085,13,4423,4423,9591,5260,0]B`[11085,13,9603,9603,5244,5260,0]B`[11085,13,9603,9603,5226,5260,0]Ba[11085,13,9603,9603,10766,5260,0]B`[11085,13,9603,9603,9574,5260,0]Bb[11085,13,10726,10726,9592,5260,0]B`[11085,13,8306,8306,7613,5260,0]B`[11085,13,4416,4416,9582,5260,0]Bb[11085,13,10740,10740,3477,5260,0]An[11085,13,861,861,8412,5260,0]Ao[11085,13,861,861,11074,5260,0]Ao[11085,13,861,861,10777,5260,0]Ao[11085,13,861,861,11416,5260,0]Ao[11085,13,861,861,10761,5260,0]Ao[11085,13,861,861,10762,5260,0]B`[11085,13,9813,9813,8409,5260,0]Ao[11085,13,9813,9813,115,5260,0]B`[11085,13,9813,9813,5271,5260,0]Ao[11085,13,9813,9813,820,5260,0]Ba[11085,13,5210,5210,10852,5260,0]Ba[11085,13,5210,5210,10049,5260,0]Ba[11085,13,5210,5210,10048,5260,0]Ba[11085,13,4584,4584,10850,5260,0]Ba[11085,13,8181,8181,10044,5260,0]Ba[11085,13,8181,8181,10779,5260,0]Ba[11085,13,8181,8181,10144,5260,0]Ao[11085,13,9778,9778,116,5260,0]Ba[11085,13,9437,9437,10043,5260,0]Ba[11085,13,9437,9437,10136,5260,0]Ba[11085,13,9437,9437,10851,5260,0]Ba[11085,13,9437,9437,11211,5260,0]B`[11085,13,8319,8319,5246,5260,0]Ba[11085,13,8319,8319,10060,5260,0]Ba[11085,13,9514,9514,11333,5260,0]Ba[11085,13,8331,8331,11070,5260,0]Ba[11085,13,4418,4418,11071,5260,0]Bb[11085,13,10021,10021,3491,5260,0]Bb[11085,13,10245,10245,9600,5260,0]Bb[11085,13,11182,11182,8418,5260,0]Bb[11085,13,11188,11188,5248,5260,0]Bc[11085,13,11188,11188,10061,5260,0]Ba[11085,13,8347,8347,11415,5260,0]Ba[11085,13,8347,8347,11398,5260,0]Bb[11085,13,10825,10825,9585,5260,0]Bb[11085,13,10825,10825,6167,5260,0]Bc[11085,13,10078,10078,10301,5260,0]B`[11085,13,6251,6251,5277,5260,0]B`[11085,13,5213,5213,9601,5260,0]Ba[11085,13,5213,5213,10319,5260,0]B`[11085,13,5213,5213,7646,5260,0]An[11085,13,857,857,8393,5260,0]Ao[11085,13,857,857,11060,5260,0]Ba[11085,13,9320,9320,10856,5260,0]B`[11085,13,9320,9320,7647,5260,0]Ba[11085,13,7660,7660,10125,5260,0]Bc[11085,13,10276,10276,11009,5260,0]Bc[11085,13,10276,10276,10782,5260,0]Bb[11085,13,10006,10006,8397,5260,0]Al[11085,13,93,93,4561,5260,0]Am[11085,13,797,797,121,5260,0]An[11085,13,799,799,5249,5260,0]Bb[11085,13,10028,10028,7620,5260,0]Bb[11085,13,10028,10028,4562,5260,0]Bb[11085,13,10028,10028,4547,5260,0]Bb[11085,13,10028,10028,5264,5260,0]Bb[11085,13,10028,10028,7631,5260,0]Bb[11085,13,10028,10028,5272,5260,0]B`[11085,13,5084,5084,8434,5260,0]Ba[11085,13,5084,5084,11014,5260,0]Ba[11085,13,5084,5084,11012,5260,0]Ba[11085,13,8329,8329,11069,5260,0]B`[11085,13,8329,8329,6176,5260,0]B`[11085,13,9968,9968,7621,5260,0]B`[11085,13,9968,9968,4563,5260,0]B`[11085,13,9968,9968,5273,5260,0]Ao[11085,13,10724,10724,9840,0,0]0Ao[11085,13,10096,10096,9841,0,0]Ao[11085,13,10247,10247,9842,0,0]Ao[11085,13,10730,10730,9843,0,0]Ao[11085,13,11280,11280,8433,0,0]Al[11085,13,9523,9523,107,0,0]Af[11085,7,6247,0,0,0,0]Am[11085,13,6224,6224,4500,0,0]Am[11085,14,4424,4424,4512,0,0]Am[11085,14,5643,5643,4534,0,0]An[11085,14,5086,5086,11210,0,0]Ak[11085,13,542,542,4517,0,0]Af[11085,2,5190,0,0,0,0]Am[11085,14,9813,9813,4507,0,0]Ai[11085,14,114,0,4553,0,0]Ao[11085,14,10732,10732,4532,0,0]33Am[11085,14,4423,4423,4489,0,0]4Af[11085,7,8316,0,0,0,0]5Am[11085,14,5210,5210,4508,0,0]Am[11085,14,5171,5171,4487,0,0]Am[11085,14,5357,5357,4486,0,0]Ak[11085,14,537,537,4505,0,0]158Ai[11085,14,93,93,4541,0,0]Af[11085,2,9570,0,0,0,0];Am[11085,14,5643,5643,3520,0,0]Af[11085,7,4456,0,0,0,0]Af[11085,7,5204,0,0,0,0]0An[11085,14,5617,5617,10847,0,0]An[11085,14,4413,4413,10767,0,0]Af[11085,2,5190,0,0,0,0]B`[11085,13,5365,5365,4488,7645,0]B`[11085,13,5086,5086,9584,7645,0]Ba[11085,13,5086,5086,10848,7645,0]Ba[11085,13,5086,5086,11067,7645,0]Ba[11085,13,5086,5086,10042,7645,0]Ba[11085,13,5086,5086,11013,7645,0]Ba[11085,13,5086,5086,11210,7645,0]An[11085,14,5216,5216,11068,0,0]0Am[11085,14,8347,8347,4535,0,0]9Am[11085,13,5285,5285,4476,0,0]Ao[11085,13,866,866,10033,7644,0]Al[11085,13,868,868,10034,0,0]Bc[11085,13,11400,11400,11470,7644,0]Am[11085,12,9502,9502,7644,0,0]Ba[11085,13,5216,5216,11396,7644,0]Al[11085,13,869,869,10129,0,0]Am[11085,13,6224,6224,4500,0,0]0Am[11085,14,5210,5210,4508,0,0]Ak[11085,14,849,849,4475,0,0]Am[11085,14,5285,5285,4476,0,0]An[11085,14,9512,9512,11243,0,0]Am[11085,14,5171,5171,4487,0,0]Am[11085,14,5086,5086,9584,0,0]An[11085,14,5086,5086,10848,0,0]Am[11085,14,5187,5187,4502,0,0]Am[11085,14,8334,8334,4522,0,0]Am[11085,14,9970,9970,4529,0,0]Ai[11085,14,93,93,4541,0,0]Am[11085,14,4452,4452,9597,0,0]Am[11085,13,5625,5625,4511,0,0]B`[11085,13,10864,10864,11249,0,0]Ae[11085,7,847,0,0,0,0]1Af[11085,7,1364,0,0,0,0]2Af[11085,7,5147,0,0,0,0]Af[11085,7,9313,0,0,0,0]Af[11085,6,9875,0,0,0,0]Af[11085,6,9513,0,0,0,0]Ae[11085,6,857,0,0,0,0]Ag[11085,10,7679,0,0,0,0]Ae[11085,5,856,0,0,0,0]Af[11085,5,7679,0,0,0,0]Ag[11085,5,10006,0,0,0,0]Ae[11085,5,799,0,0,0,0]Af[11085,5,4584,0,0,0,0]Al[11085,15,868,868,10763,0,0]0An[11085,15,5216,5216,10780,0,0]Af[11085,5,5285,0,0,0,0]Ag[11085,18,6150,0,0,0,0]Af[11085,18,786,0,0,0,0]Ag[11085,10,4584,0,0,0,0]Af[11085,5,9813,0,0,0,0]Af[11085,5,4419,0,0,0,0]Af[11085,5,9437,0,0,0,0]Ae[11085,5,861,0,0,0,0]Af[11085,6,5216,0,0,0,0]Af[11085,5,5213,0,0,0,0]Af[11085,5,7666,0,0,0,0]Ag[11085,5,11182,0,0,0,0]Af[11085,5,7679,0,0,0,0]Af[11085,5,4452,0,0,0,0]Ak[11085,4,10245,11280,0,0,0]Ak[11085,4,11182,11280,0,0,0]Ak[11085,4,11050,11280,0,0,0]Ak[11085,4,11184,11280,0,0,0]Ak[11085,4,10991,11280,0,0,0]Ak[11085,4,11186,11280,0,0,0]Ak[11085,4,10094,11280,0,0,0]Ak[11085,4,11422,11280,0,0,0]Ak[11085,4,11190,11280,0,0,0]Aj[11085,4,9970,11280,0,0,0]Ak[11085,4,10727,11280,0,0,0]Ag[11085,5,11280,0,0,0,0]Af[11085,5,5084,0,0,0,0]Am[11085,15,5357,5357,6173,0,0]Aj[11085,15,861,861,819,0,0]An[11085,13,9875,9875,10037,0,0]Al[11085,13,856,856,10038,0,0]B`[11085,14,10020,10020,10760,0,0]An[11085,14,9513,9513,10127,0,0]Ai[11085,14,114,0,4553,0,0]Am[11085,14,5210,5210,4508,0,0]Aj[11085,14,93,93,11445,0,0]B`[11085,14,10276,10276,11007,0,0]Al[11085,14,866,866,11061,0,0]Al[11085,14,868,868,11062,0,0]B`[11085,14,11400,11400,11489,0,0]Am[11085,14,9812,9812,4503,0,0]Ak[11085,14,537,537,4505,0,0]Ba[11085,13,9379,9379,10305,7614,0]B`[11085,13,9379,9379,6179,7614,0]Ba[11085,13,3529,3529,11471,7614,0]Ba[11085,13,3529,3529,11253,7614,0]Ba[11085,13,3529,3529,11450,7614,0]B`[11085,13,3529,3529,4474,7614,0]B`[11085,13,3529,3529,3464,7614,0]Ao[11085,13,847,847,11242,7614,0]An[11085,13,849,849,7612,7614,0]Ao[11085,13,849,849,11206,7614,0]Ao[11085,13,849,849,10291,7614,0]Ao[11085,13,849,849,10290,7614,0]An[11085,13,849,849,7623,7614,0]Ao[11085,13,849,849,11256,7614,0]An[11085,13,849,849,4475,7614,0]An[11085,13,849,849,7611,7614,0]An[11085,13,849,849,9575,7614,0]B`[11085,13,5285,5285,8405,7614,0]B`[11085,13,5285,5285,4476,7614,0]An[11085,13,853,853,9854,7614,0]An[11085,13,853,853,4477,7614,0]An[11085,13,853,853,9599,7614,0]Ao[11085,13,853,853,11446,7614,0]B`[11085,13,7666,7666,4478,7614,0]B`[11085,13,7666,7666,8417,7614,0]Ba[11085,13,7666,7666,10317,7614,0]B`[11085,13,5288,5288,4479,7614,0]B`[11085,13,5288,5288,3465,7614,0]B`[11085,13,9875,9875,8391,7614,0]Ba[11085,13,9875,9875,10838,7614,0]Ba[11085,13,9875,9875,10037,7614,0]Ba[11085,13,9875,9875,10758,7614,0]Bc[11085,13,10019,10019,11332,7614,0]Bc[11085,13,10019,10019,11438,7614,0]Bc[11085,13,10019,10019,11392,7614,0]Bc[11085,13,10019,10019,11448,7614,0]Ba[11085,13,9512,9512,11257,7614,0]Ba[11085,13,9512,9512,11243,7614,0]Ba[11085,13,9512,9512,11413,7614,0]Ba[11085,13,9512,9512,11424,7614,0]An[11085,13,856,856,7615,7614,0]Ao[11085,13,856,856,10038,7614,0]An[11085,13,856,856,8395,7614,0]Bc[11085,13,10020,10020,10760,7614,0]Bc[11085,13,10020,10020,11244,7614,0]B`[11085,13,9513,9513,8392,7614,0]Ba[11085,13,9513,9513,10127,7614,0]B`[11085,13,9513,9513,9577,7614,0]Ba[11085,13,9513,9513,11059,7614,0]B`[11085,13,9878,9878,4480,7614,0]B`[11085,13,9878,9878,3466,7614,0]B`[11085,13,5290,5290,3467,7614,0]B`[11085,13,6198,6198,4481,7614,0]An[11085,13,125,125,4482,7614,0]An[11085,13,125,125,5275,7614,0]An[11085,13,125,125,9844,7614,0]An[11085,13,125,125,9835,7614,0]An[11085,13,125,125,5242,7614,0]An[11085,13,125,125,9831,7614,0]An[11085,13,125,125,5224,7614,0]Ao[11085,13,125,125,10322,7614,0]Ao[11085,13,125,125,11334,7614,0]An[11085,13,125,125,3468,7614,0]Ba[11085,13,7677,7677,10134,7614,0]Ba[11085,13,7677,7677,10053,7614,0]Ba[11085,13,7677,7677,11065,7614,0]Ba[11085,13,7677,7677,11483,7614,0]Ba[11085,13,7677,7677,11008,7614,0]Ba[11085,13,7677,7677,11066,7614,0]Ba[11085,13,7677,7677,11246,7614,0]Ba[11085,13,7677,7677,10294,7614,0]Ba[11085,13,7677,7677,10130,7614,0]B`[11085,13,7677,7677,7616,7614,0]Ba[11085,13,7677,7677,10764,7614,0]Ba[11085,13,7677,7677,10131,7614,0]Ba[11085,13,7677,7677,10840,7614,0]Ba[11085,13,7677,7677,11469,7614,0]Ba[11085,13,7677,7677,11299,7614,0]B`[11085,13,7677,7677,7624,7614,0]B`[11085,13,7677,7677,4483,7614,0]B`[11085,13,7677,7677,5261,7614,0]Ba[11085,13,7677,7677,11302,7614,0]B`[11085,13,7679,7679,8419,7614,0]Ba[11085,13,7679,7679,11209,7614,0]B`[11085,13,7679,7679,8396,7614,0]Ba[11085,13,7679,7679,10765,7614,0]Ba[11085,13,7679,7679,10140,7614,0]Ba[11085,13,7679,7679,11414,7614,0]Ba[11085,13,7679,7679,11248,7614,0]Bc[11085,13,10864,10864,11249,7614,0]Bc[11085,13,10864,10864,10775,7614,0]Bc[11085,13,10864,10864,11011,7614,0]Bb[11085,13,10864,10864,5274,7614,0]Bb[11085,13,10864,10864,5223,7614,0]Bc[11085,13,10864,10864,10295,7614,0]Ba[11085,13,5147,5147,11250,7614,0]Ba[11085,13,9313,9313,11251,7614,0]Ba[11085,13,9315,9315,10296,7614,0]B`[11085,13,9315,9315,4484,7614,0]B`[11085,13,9888,9888,9838,7614,0]B`[11085,13,9888,9888,9834,7614,0]B`[11085,13,9890,9890,4485,7614,0]B`[11085,13,5357,5357,6173,7614,0]B`[11085,13,5357,5357,5262,7614,0]B`[11085,13,5357,5357,4486,7614,0]Ba[11085,13,5357,5357,10845,7614,0]Ba[11085,13,5357,5357,11017,7614,0]Ba[11085,13,5357,5357,11335,7614,0]B`[11085,13,5357,5357,9580,7614,0]Ba[11085,13,5357,5357,11300,7614,0]Ba[11085,13,5357,5357,10036,7614,0]Ba[11085,13,5357,5357,11010,7614,0]B`[11085,13,5357,5357,5243,7614,0]B`[11085,13,5357,5357,5225,7614,0]B`[11085,13,5357,5357,3469,7614,0]Ba[11085,13,1364,1364,11252,7614,0]B`[11085,13,5171,5171,4487,7614,0]B`[11085,13,5171,5171,4551,7614,0]B`[11085,13,5365,5365,4488,7614,0]B`[11085,13,6247,6247,3518,7614,0]B`[11085,13,4423,4423,4489,7614,0]B`[11085,13,4423,4423,5238,7614,0]B`[11085,13,4423,4423,9591,7614,0]B`[11085,13,4423,4423,4569,7614,0]Ba[11085,13,4423,4423,10050,7614,0]Ba[11085,13,4423,4423,10841,7614,0]Ba[11085,13,4423,4423,10853,7614,0]B`[11085,13,4423,4423,7625,7614,0]Ao[11085,13,4423,4423,803,7614,0]B`[11085,13,9603,9603,4490,7614,0]B`[11085,13,9603,9603,5244,7614,0]B`[11085,13,9603,9603,5226,7614,0]Ba[11085,13,9603,9603,10766,7614,0]B`[11085,13,9603,9603,9574,7614,0]Bb[11085,13,10726,10726,9592,7614,0]Bb[11085,13,10726,10726,4570,7614,0]Bc[11085,13,10726,10726,10051,7614,0]Bc[11085,13,10726,10726,10842,7614,0]Bc[11085,13,10726,10726,10854,7614,0]Bb[11085,13,10726,10726,7626,7614,0]Ba[11085,13,10726,10726,804,7614,0]B`[11085,13,4402,4402,4491,7614,0]B`[11085,13,4402,4402,3470,7614,0]B`[11085,13,5174,5174,4492,7614,0]B`[11085,13,5174,5174,3471,7614,0]B`[11085,13,5176,5176,4493,7614,0]B`[11085,13,5176,5176,3472,7614,0]B`[11085,13,1861,1861,4494,7614,0]B`[11085,13,1861,1861,3473,7614,0]Ba[11085,13,5617,5617,10300,7614,0]Ba[11085,13,5617,5617,10847,7614,0]Ba[11085,13,5617,5617,10133,7614,0]Ba[11085,13,5617,5617,10041,7614,0]B`[11085,13,5617,5617,4495,7614,0]B`[11085,13,5617,5617,3442,7614,0]B`[11085,13,5617,5617,5254,7614,0]B`[11085,13,5180,5180,4496,7614,0]B`[11085,13,5180,5180,3474,7614,0]B`[11085,13,4404,4404,4497,7614,0]Ba[11085,13,8306,8306,11258,7614,0]B`[11085,13,8306,8306,4498,7614,0]B`[11085,13,8306,8306,7613,7614,0]Ba[11085,13,4413,4413,10135,7614,0]Ba[11085,13,4413,4413,10767,7614,0]B`[11085,13,4413,4413,9837,7614,0]B`[11085,13,4413,4413,9586,7614,0]B`[11085,13,4413,4413,4499,7614,0]B`[11085,13,4413,4413,3443,7614,0]B`[11085,13,4413,4413,3459,7614,0]B`[11085,13,6224,6224,4500,7614,0]B`[11085,13,6224,6224,3444,7614,0]B`[11085,13,6224,6224,3460,7614,0]Bc[11085,13,10809,10809,11016,7614,0]B`[11085,13,4416,4416,9582,7614,0]B`[11085,13,4416,4416,9589,7614,0]Ba[11085,13,4416,4416,10292,7614,0]B`[11085,13,4416,4416,3457,7614,0]B`[11085,13,5086,5086,9584,7614,0]Ba[11085,13,5086,5086,10848,7614,0]Ba[11085,13,5086,5086,11067,7614,0]Ba[11085,13,5086,5086,10042,7614,0]Ba[11085,13,5086,5086,11013,7614,0]Ba[11085,13,5086,5086,11210,7614,0]B`[11085,13,4419,4419,3519,7614,0]B`[11085,13,4419,4419,4501,7614,0]B`[11085,13,4419,4419,8410,7614,0]Ba[11085,13,4419,4419,10046,7614,0]B`[11085,13,4419,4419,3475,7614,0]B`[11085,13,5187,5187,4502,7614,0]B`[11085,13,5187,5187,5245,7614,0]B`[11085,13,5187,5187,5227,7614,0]B`[11085,13,5187,5187,5259,7614,0]B`[11085,13,9812,9812,4503,7614,0]B`[11085,13,9812,9812,3476,7614,0]Bb[11085,13,10740,10740,3477,7614,0]Bb[11085,13,10740,10740,4504,7614,0]Ao[11085,13,9523,9523,107,7614,0]An[11085,13,537,537,3478,7614,0]An[11085,13,537,537,6174,7614,0]Ao[11085,13,537,537,10126,7614,0]Ao[11085,13,537,537,10772,7614,0]An[11085,13,537,537,4505,7614,0]Ba[11085,13,6183,6183,10055,7614,0]Ba[11085,13,6183,6183,11487,7614,0]B`[11085,13,2899,2899,6175,7614,0]Ba[11085,13,5359,5359,10139,7614,0]B`[11085,13,5359,5359,4506,7614,0]B`[11085,13,5359,5359,5241,7614,0]Am[11085,13,861,861,819,7614,0]An[11085,13,861,861,5263,7614,0]An[11085,13,861,861,8412,7614,0]Ao[11085,13,861,861,11074,7614,0]Ao[11085,13,861,861,10777,7614,0]Ao[11085,13,861,861,11416,7614,0]Ao[11085,13,861,861,10761,7614,0]Ao[11085,13,861,861,10762,7614,0]Ba[11085,13,9813,9813,11075,7614,0]B`[11085,13,9813,9813,4507,7614,0]Ba[11085,13,9813,9813,10310,7614,0]B`[11085,13,9813,9813,8409,7614,0]Ba[11085,13,9813,9813,11439,7614,0]Ba[11085,13,9813,9813,11475,7614,0]Ao[11085,13,9813,9813,115,7614,0]B`[11085,13,9813,9813,5271,7614,0]Ao[11085,13,9813,9813,820,7614,0]Ba[11085,13,9813,9813,11417,7614,0]Ba[11085,13,9813,9813,11214,7614,0]Ba[11085,13,9813,9813,11212,7614,0]Ba[11085,13,9966,9966,10846,7614,0]Ba[11085,13,9966,9966,11018,7614,0]Ba[11085,13,9966,9966,11426,7614,0]Ba[11085,13,9966,9966,11336,7614,0]Ba[11085,13,9966,9966,11451,7614,0]B`[11085,13,5210,5210,4508,7614,0]Ba[11085,13,5210,5210,10852,7614,0]Ba[11085,13,5210,5210,10049,7614,0]Ba[11085,13,5210,5210,10048,7614,0]B`[11085,13,5623,5623,4509,7614,0]B`[11085,13,5623,5623,3479,7614,0]B`[11085,13,8313,8313,4510,7614,0]Ba[11085,13,8313,8313,11465,7614,0]B`[11085,13,5625,5625,4511,7614,0]B`[11085,13,5625,5625,3480,7614,0]Ba[11085,13,4584,4584,11255,7614,0]B`[11085,13,4584,4584,6158,7614,0]Ba[11085,13,4584,4584,10850,7614,0]Ba[11085,13,4584,4584,11460,7614,0]Ba[11085,13,4584,4584,10776,7614,0]Ba[11085,13,4584,4584,10309,7614,0]B`[11085,13,4584,4584,8401,7614,0]Ba[11085,13,4584,4584,10306,7614,0]Ba[11085,13,4584,4584,10768,7614,0]Ba[11085,13,4584,4584,11393,7614,0]Ba[11085,13,8181,8181,10044,7614,0]B`[11085,13,8181,8181,9853,7614,0]Ba[11085,13,8181,8181,10773,7614,0]Ba[11085,13,8181,8181,10779,7614,0]Ba[11085,13,8181,8181,10144,7614,0]B`[11085,13,4424,4424,3461,7614,0]B`[11085,13,4424,4424,7632,7614,0]B`[11085,13,4424,4424,4512,7614,0]Ao[11085,13,9778,9778,117,7614,0]Ao[11085,13,9778,9778,116,7614,0]Ba[11085,13,9778,9778,11301,7614,0]Ba[11085,13,9778,9778,10289,7614,0]Ba[11085,13,9430,9430,10307,7614,0]Ba[11085,13,9430,9430,10769,7614,0]B`[11085,13,9769,9769,4513,7614,0]B`[11085,13,8316,8316,4514,7614,0]B`[11085,13,9437,9437,4515,7614,0]Ba[11085,13,9437,9437,10839,7614,0]Ba[11085,13,9437,9437,10759,7614,0]Ba[11085,13,9437,9437,10043,7614,0]Ba[11085,13,9437,9437,10308,7614,0]Ba[11085,13,9437,9437,10136,7614,0]Ba[11085,13,9437,9437,10851,7614,0]B`[11085,13,9437,9437,8411,7614,0]Ba[11085,13,9437,9437,11254,7614,0]Ba[11085,13,9437,9437,11211,7614,0]Ba[11085,13,9437,9437,11484,7614,0]B`[11085,13,8319,8319,4516,7614,0]B`[11085,13,8319,8319,9855,7614,0]B`[11085,13,8319,8319,5246,7614,0]Ba[11085,13,8319,8319,10060,7614,0]B`[11085,13,8319,8319,3481,7614,0]An[11085,13,542,542,4517,7614,0]An[11085,13,542,542,3482,7614,0]B`[11085,13,8182,8182,3483,7614,0]B`[11085,13,4425,4425,3484,7614,0]B`[11085,13,2904,2904,4518,7614,0]B`[11085,13,2904,2904,3485,7614,0]B`[11085,13,9514,9514,4519,7614,0]B`[11085,13,9514,9514,5247,7614,0]Ba[11085,13,9514,9514,11333,7614,0]B`[11085,13,8331,8331,4520,7614,0]Ba[11085,13,8331,8331,11070,7614,0]B`[11085,13,8331,8331,3486,7614,0]Ba[11085,13,9457,9457,10035,7614,0]B`[11085,13,9457,9457,4521,7614,0]B`[11085,13,9457,9457,7608,7614,0]B`[11085,13,9457,9457,9832,7614,0]B`[11085,13,9457,9457,5228,7614,0]B`[11085,13,9457,9457,3487,7614,0]Ba[11085,13,8334,8334,11259,7614,0]B`[11085,13,8334,8334,4522,7614,0]An[11085,13,779,779,4523,7614,0]An[11085,13,779,779,3488,7614,0]B`[11085,13,2906,2906,4524,7614,0]Ba[11085,13,2906,2906,10311,7614,0]B`[11085,13,2906,2906,3489,7614,0]B`[11085,13,4418,4418,4525,7614,0]Ba[11085,13,4418,4418,11071,7614,0]B`[11085,13,4418,4418,3490,7614,0]Bb[11085,13,10021,10021,4526,7614,0]Bb[11085,13,10021,10021,3491,7614,0]Bb[11085,13,10245,10245,9600,7614,0]Bc[11085,13,10245,10245,11447,7614,0]Bb[11085,13,11182,11182,8418,7614,0]Bc[11085,13,11182,11182,10318,7614,0]Bb[11085,13,10724,10724,9840,7614,0]Bb[11085,13,11050,11050,4568,7614,0]B`[11085,13,9814,9814,3492,7614,0]Bb[11085,13,10991,10991,3493,7614,0]Bc[11085,13,11186,11186,11466,7614,0]Bb[11085,13,11188,11188,3494,7614,0]Bb[11085,13,11188,11188,5248,7614,0]Bc[11085,13,11188,11188,10061,7614,0]Bb[11085,13,10094,10094,3495,7614,0]Bb[11085,13,10096,10096,9841,7614,0]Bb[11085,13,10247,10247,9842,7614,0]Bb[11085,13,10730,10730,9843,7614,0]Bb[11085,13,11422,11422,3496,7614,0]Bb[11085,13,10993,10993,3497,7614,0]Bb[11085,13,10995,10995,3498,7614,0]Bb[11085,13,11190,11190,3499,7614,0]B`[11085,13,9970,9970,4529,7614,0]Ba[11085,13,9970,9970,10141,7614,0]Ba[11085,13,9970,9970,11427,7614,0]B`[11085,13,4434,4434,4530,7614,0]B`[11085,13,4434,4434,3500,7614,0]Ba[11085,13,4434,4434,10770,7614,0]B`[11085,13,8339,8339,4531,7614,0]B`[11085,13,8339,8339,3501,7614,0]Bc[11085,13,10732,10732,10855,7614,0]Bb[11085,13,10732,10732,4532,7614,0]Bb[11085,13,10732,10732,3502,7614,0]B`[11085,13,5201,5201,4533,7614,0]Ba[11085,13,5643,5643,10054,7614,0]B`[11085,13,5643,5643,3520,7614,0]B`[11085,13,5643,5643,7651,7614,0]B`[11085,13,5643,5643,4534,7614,0]B`[11085,13,5643,5643,3503,7614,0]B`[11085,13,5645,5645,3504,7614,0]B`[11085,13,8347,8347,4535,7614,0]Ba[11085,13,8347,8347,11415,7614,0]Ba[11085,13,8347,8347,11398,7614,0]Bb[11085,13,10825,10825,9585,7614,0]Bb[11085,13,10825,10825,6167,7614,0]Ba[11085,13,9815,9815,10857,7614,0]Bc[11085,13,10078,10078,10301,7614,0]B`[11085,13,9930,9930,9590,7614,0]Bc[11085,13,10243,10243,10045,7614,0]Am[11085,13,786,786,118,7614,0]B`[11085,13,6251,6251,5277,7614,0]B`[11085,13,5213,5213,8416,7614,0]B`[11085,13,5213,5213,9857,7614,0]B`[11085,13,5213,5213,4536,7614,0]B`[11085,13,5213,5213,9601,7614,0]Ba[11085,13,5213,5213,10319,7614,0]B`[11085,13,5213,5213,7646,7614,0]B`[11085,13,5213,5213,3505,7614,0]Bc[11085,13,10827,10827,11260,7614,0]An[11085,13,857,857,8393,7614,0]An[11085,13,857,857,4537,7614,0]Ao[11085,13,857,857,11060,7614,0]Ba[11085,13,5205,5205,11076,7614,0]Ba[11085,13,5205,5205,10047,7614,0]Ba[11085,13,9320,9320,10856,7614,0]B`[11085,13,9320,9320,7647,7614,0]Ba[11085,13,7660,7660,10128,7614,0]Ba[11085,13,7660,7660,11399,7614,0]Ba[11085,13,7660,7660,11015,7614,0]Ba[11085,13,7660,7660,11205,7614,0]Ba[11085,13,7660,7660,10125,7614,0]Ao[11085,13,866,866,11061,7614,0]Ao[11085,13,866,866,10033,7614,0]Ao[11085,13,868,868,10034,7614,0]Ao[11085,13,868,868,10763,7614,0]Ao[11085,13,868,868,11062,7614,0]Bc[11085,13,11400,11400,11489,7614,0]Bc[11085,13,11400,11400,11470,7614,0]B`[11085,13,9502,9502,9827,7614,0]Ba[11085,13,9502,9502,10137,7614,0]Ba[11085,13,9502,9502,10320,7614,0]B`[11085,13,6144,6144,9576,7614,0]Ba[11085,13,6144,6144,11429,7614,0]Ba[11085,13,6144,6144,11215,7614,0]Bc[11085,13,10276,10276,11395,7614,0]Bc[11085,13,10276,10276,11009,7614,0]Bc[11085,13,10276,10276,11303,7614,0]Bc[11085,13,10276,10276,10782,7614,0]Bc[11085,13,10276,10276,11216,7614,0]Bc[11085,13,10276,10276,10143,7614,0]Bc[11085,13,10276,10276,11461,7614,0]Bc[11085,13,10276,10276,11337,7614,0]Bc[11085,13,10276,10276,10843,7614,0]Bb[11085,13,10276,10276,9579,7614,0]Bc[11085,13,10276,10276,11425,7614,0]Bc[11085,13,10276,10276,11207,7614,0]Bc[11085,13,10276,10276,10321,7614,0]Bb[11085,13,10276,10276,7653,7614,0]Bc[11085,13,10276,10276,11394,7614,0]Bc[11085,13,10276,10276,11007,7614,0]Ba[11085,13,5216,5216,11396,7614,0]Ba[11085,13,5216,5216,10052,7614,0]Ba[11085,13,5216,5216,11068,7614,0]Ba[11085,13,5216,5216,11397,7614,0]B`[11085,13,5216,5216,8415,7614,0]Ba[11085,13,5216,5216,10030,7614,0]Ba[11085,13,5216,5216,10297,7614,0]Ba[11085,13,5216,5216,10780,7614,0]Ba[11085,13,5216,5216,11298,7614,0]Ba[11085,13,5216,5216,11217,7614,0]Ao[11085,13,794,794,11449,7614,0]Ao[11085,13,794,794,11058,7614,0]Ao[11085,13,794,794,10031,7614,0]B`[11085,13,8359,8359,4538,7614,0]B`[11085,13,8359,8359,3506,7614,0]B`[11085,13,9510,9510,4539,7614,0]B`[11085,13,9510,9510,3507,7614,0]Bb[11085,13,10006,10006,9839,7614,0]Bb[11085,13,10006,10006,4540,7614,0]Bb[11085,13,10006,10006,7618,7614,0]Bb[11085,13,10006,10006,6160,7614,0]Bb[11085,13,10006,10006,8397,7614,0]Bb[11085,13,10006,10006,3508,7614,0]Bc[11085,13,10006,10006,10132,7614,0]Al[11085,13,93,93,4561,7614,0]Am[11085,13,93,93,11445,7614,0]Al[11085,13,93,93,4541,7614,0]Am[11085,13,93,93,10142,7614,0]Am[11085,13,93,93,11428,7614,0]B`[11085,13,4452,4452,9597,7614,0]B`[11085,13,4452,4452,9851,7614,0]B`[11085,13,4452,4452,9852,7614,0]Ba[11085,13,4452,4452,10781,7614,0]B`[11085,13,4452,4452,8420,7614,0]An[11085,13,797,797,4565,7614,0]Am[11085,13,797,797,121,7614,0]An[11085,13,799,799,4542,7614,0]An[11085,13,799,799,8398,7614,0]An[11085,13,799,799,5249,7614,0]An[11085,13,799,799,3509,7614,0]B`[11085,13,6150,6150,4543,7614,0]B`[11085,13,4426,4426,9825,7614,0]B`[11085,13,4426,4426,9595,7614,0]B`[11085,13,4426,4426,5281,7614,0]Bb[11085,13,10727,10727,9826,7614,0]Bb[11085,13,10727,10727,9596,7614,0]Bb[11085,13,10727,10727,5282,7614,0]Bb[11085,13,10028,10028,7620,7614,0]Bb[11085,13,10028,10028,4562,7614,0]Bb[11085,13,10028,10028,4547,7614,0]Bb[11085,13,10028,10028,5264,7614,0]Bb[11085,13,10028,10028,7631,7614,0]Bb[11085,13,10028,10028,5272,7614,0]B`[11085,13,5084,5084,8434,7614,0]Ba[11085,13,5084,5084,11014,7614,0]Ba[11085,13,5084,5084,10058,7614,0]Ba[11085,13,5084,5084,11012,7614,0]B`[11085,13,5084,5084,6177,7614,0]B`[11085,13,5084,5084,7610,7614,0]Ao[11085,13,869,869,10129,7614,0]Ao[11085,13,869,869,11208,7614,0]Bb[11085,13,11081,11081,7609,7614,0]Ba[11085,13,6201,6201,10138,7614,0]B`[11085,13,6201,6201,7654,7614,0]Ba[11085,13,8329,8329,11069,7614,0]B`[11085,13,8329,8329,6176,7614,0]B`[11085,13,4432,4432,4583,7614,0]Ba[11085,13,9823,9823,10323,7614,0]Ba[11085,13,9823,9823,11261,7614,0]Ba[11085,13,9823,9823,11485,7614,0]B`[11085,13,9823,9823,4544,7614,0]An[11085,13,101,101,4545,7614,0]An[11085,13,101,101,3510,7614,0]Ba[11085,13,10813,10813,801,7614,0]Bb[11085,13,10813,10813,6163,7614,0]B`[11085,13,9968,9968,7621,7614,0]B`[11085,13,9968,9968,4563,7614,0]B`[11085,13,9968,9968,5273,7614,0]Bb[11085,13,11280,11280,8433,7614,0]B`[11085,13,10827,10827,11260,0,0]Am[11085,13,9812,9812,4503,0,0]Ak[11085,13,537,537,4505,0,0]B`[11085,13,9379,9379,6179,5278,0]Ba[11085,13,3529,3529,11471,5278,0]Ba[11085,13,3529,3529,11253,5278,0]Ba[11085,13,3529,3529,11450,5278,0]B`[11085,13,3529,3529,4474,5278,0]B`[11085,13,3529,3529,3464,5278,0]An[11085,13,849,849,7623,5278,0]Ao[11085,13,849,849,11256,5278,0]An[11085,13,849,849,4475,5278,0]An[11085,13,849,849,7611,5278,0]An[11085,13,849,849,9575,5278,0]An[11085,13,853,853,9854,5278,0]An[11085,13,853,853,4477,5278,0]An[11085,13,853,853,9599,5278,0]Ao[11085,13,853,853,11446,5278,0]B`[11085,13,7666,7666,4478,5278,0]B`[11085,13,7666,7666,8417,5278,0]Ba[11085,13,7666,7666,10317,5278,0]B`[11085,13,5288,5288,4479,5278,0]B`[11085,13,5288,5288,3465,5278,0]B`[11085,13,9875,9875,8391,5278,0]Ba[11085,13,9875,9875,10838,5278,0]Ba[11085,13,9875,9875,10037,5278,0]Ba[11085,13,9875,9875,10758,5278,0]Bc[11085,13,10019,10019,11332,5278,0]Bc[11085,13,10019,10019,11438,5278,0]Bc[11085,13,10019,10019,11392,5278,0]Bc[11085,13,10019,10019,11448,5278,0]Ba[11085,13,9512,9512,11257,5278,0]Ba[11085,13,9512,9512,11243,5278,0]Ba[11085,13,9512,9512,11413,5278,0]Ba[11085,13,9512,9512,11424,5278,0]An[11085,13,856,856,7615,5278,0]Ao[11085,13,856,856,10038,5278,0]An[11085,13,856,856,8395,5278,0]Bc[11085,13,10020,10020,10760,5278,0]Bc[11085,13,10020,10020,11244,5278,0]B`[11085,13,9513,9513,8392,5278,0]Ba[11085,13,9513,9513,10127,5278,0]B`[11085,13,9513,9513,9577,5278,0]Ba[11085,13,9513,9513,11059,5278,0]B`[11085,13,9878,9878,4480,5278,0]B`[11085,13,9878,9878,3466,5278,0]B`[11085,13,6198,6198,4481,5278,0]An[11085,13,125,125,4482,5278,0]An[11085,13,125,125,5275,5278,0]An[11085,13,125,125,9844,5278,0]An[11085,13,125,125,9835,5278,0]An[11085,13,125,125,5242,5278,0]An[11085,13,125,125,9831,5278,0]An[11085,13,125,125,5224,5278,0]Ao[11085,13,125,125,10322,5278,0]Ao[11085,13,125,125,11334,5278,0]An[11085,13,125,125,3468,5278,0]B`[11085,13,7677,7677,7624,5278,0]B`[11085,13,7677,7677,4483,5278,0]Ba[11085,13,7679,7679,10765,5278,0]Ba[11085,13,7679,7679,10140,5278,0]Ba[11085,13,7679,7679,11414,5278,0]Ba[11085,13,7679,7679,11248,5278,0]B`[11085,13,9315,9315,4484,5278,0]B`[11085,13,9888,9888,9838,5278,0]B`[11085,13,9890,9890,4485,5278,0]B`[11085,13,5357,5357,6173,5278,0]B`[11085,13,5357,5357,5262,5278,0]B`[11085,13,5357,5357,4486,5278,0]Ba[11085,13,5357,5357,10845,5278,0]Ba[11085,13,5357,5357,11017,5278,0]Ba[11085,13,5357,5357,11335,5278,0]B`[11085,13,5357,5357,9580,5278,0]Ba[11085,13,5357,5357,11300,5278,0]Ba[11085,13,5357,5357,10036,5278,0]Ba[11085,13,5357,5357,11010,5278,0]B`[11085,13,5357,5357,5243,5278,0]B`[11085,13,5357,5357,5225,5278,0]B`[11085,13,5171,5171,4487,5278,0]B`[11085,13,5171,5171,4551,5278,0]B`[11085,13,5365,5365,4488,5278,0]B`[11085,13,6247,6247,3518,5278,0]B`[11085,13,4423,4423,4489,5278,0]B`[11085,13,4423,4423,5238,5278,0]B`[11085,13,4423,4423,9591,5278,0]B`[11085,13,4423,4423,4569,5278,0]Ba[11085,13,4423,4423,10050,5278,0]Ba[11085,13,4423,4423,10841,5278,0]Ba[11085,13,4423,4423,10853,5278,0]B`[11085,13,4423,4423,7625,5278,0]Ao[11085,13,4423,4423,803,5278,0]B`[11085,13,9603,9603,4490,5278,0]B`[11085,13,9603,9603,5244,5278,0]B`[11085,13,9603,9603,5226,5278,0]Ba[11085,13,9603,9603,10766,5278,0]B`[11085,13,9603,9603,9574,5278,0]Bb[11085,13,10726,10726,9592,5278,0]Bb[11085,13,10726,10726,4570,5278,0]Bc[11085,13,10726,10726,10051,5278,0]Bc[11085,13,10726,10726,10842,5278,0]Bc[11085,13,10726,10726,10854,5278,0]Bb[11085,13,10726,10726,7626,5278,0]Ba[11085,13,10726,10726,804,5278,0]B`[11085,13,4402,4402,4491,5278,0]B`[11085,13,4402,4402,3470,5278,0]B`[11085,13,5174,5174,4492,5278,0]B`[11085,13,5174,5174,3471,5278,0]B`[11085,13,5176,5176,4493,5278,0]B`[11085,13,5176,5176,3472,5278,0]B`[11085,13,1861,1861,4494,5278,0]B`[11085,13,1861,1861,3473,5278,0]Ba[11085,13,5617,5617,10300,5278,0]Ba[11085,13,5617,5617,10847,5278,0]Ba[11085,13,5617,5617,10133,5278,0]Ba[11085,13,5617,5617,10041,5278,0]B`[11085,13,5617,5617,4495,5278,0]B`[11085,13,5617,5617,3442,5278,0]B`[11085,13,5617,5617,5254,5278,0]B`[11085,13,5180,5180,4496,5278,0]B`[11085,13,5180,5180,3474,5278,0]B`[11085,13,4404,4404,4497,5278,0]Ba[11085,13,8306,8306,11258,5278,0]B`[11085,13,8306,8306,4498,5278,0]B`[11085,13,8306,8306,7613,5278,0]Ba[11085,13,4413,4413,10135,5278,0]Ba[11085,13,4413,4413,10767,5278,0]B`[11085,13,4413,4413,9837,5278,0]B`[11085,13,4413,4413,9586,5278,0]B`[11085,13,4413,4413,4499,5278,0]B`[11085,13,4413,4413,3443,5278,0]B`[11085,13,4413,4413,3459,5278,0]B`[11085,13,6224,6224,4500,5278,0]B`[11085,13,6224,6224,3444,5278,0]B`[11085,13,6224,6224,3460,5278,0]B`[11085,13,5086,5086,9584,5278,0]Ba[11085,13,5086,5086,10848,5278,0]Ba[11085,13,5086,5086,11067,5278,0]Ba[11085,13,5086,5086,10042,5278,0]Ba[11085,13,5086,5086,11013,5278,0]Ba[11085,13,5086,5086,11210,5278,0]B`[11085,13,4419,4419,4501,5278,0]B`[11085,13,4419,4419,8410,5278,0]Ba[11085,13,4419,4419,10046,5278,0]B`[11085,13,4419,4419,3475,5278,0]B`[11085,13,5187,5187,4502,5278,0]B`[11085,13,5187,5187,5245,5278,0]B`[11085,13,5187,5187,5227,5278,0]B`[11085,13,5187,5187,5259,5278,0]B`[11085,13,9812,9812,4503,5278,0]B`[11085,13,9812,9812,3476,5278,0]Bb[11085,13,10740,10740,4504,5278,0]An[11085,13,537,537,6174,5278,0]Ao[11085,13,537,537,10126,5278,0]Ao[11085,13,537,537,10772,5278,0]An[11085,13,537,537,4505,5278,0]B`[11085,13,2899,2899,6175,5278,0]Ba[11085,13,5359,5359,10139,5278,0]B`[11085,13,5359,5359,4506,5278,0]B`[11085,13,5359,5359,5241,5278,0]Am[11085,13,861,861,819,5278,0]An[11085,13,861,861,5263,5278,0]An[11085,13,861,861,8412,5278,0]Ao[11085,13,861,861,11074,5278,0]Ao[11085,13,861,861,10777,5278,0]Ao[11085,13,861,861,11416,5278,0]Ao[11085,13,861,861,10761,5278,0]Ao[11085,13,861,861,10762,5278,0]Ba[11085,13,9813,9813,11075,5278,0]B`[11085,13,9813,9813,4507,5278,0]Ba[11085,13,9813,9813,10310,5278,0]B`[11085,13,9813,9813,8409,5278,0]Ba[11085,13,9813,9813,11439,5278,0]Ba[11085,13,9813,9813,11475,5278,0]Ao[11085,13,9813,9813,115,5278,0]B`[11085,13,9813,9813,5271,5278,0]Ao[11085,13,9813,9813,820,5278,0]Ba[11085,13,9813,9813,11417,5278,0]Ba[11085,13,9813,9813,11214,5278,0]Ba[11085,13,9813,9813,11212,5278,0]Ba[11085,13,9966,9966,10846,5278,0]Ba[11085,13,9966,9966,11018,5278,0]Ba[11085,13,9966,9966,11426,5278,0]Ba[11085,13,9966,9966,11336,5278,0]Ba[11085,13,9966,9966,11451,5278,0]B`[11085,13,5210,5210,4508,5278,0]Ba[11085,13,5210,5210,10852,5278,0]Ba[11085,13,5210,5210,10049,5278,0]Ba[11085,13,5210,5210,10048,5278,0]B`[11085,13,5623,5623,4509,5278,0]B`[11085,13,5623,5623,3479,5278,0]B`[11085,13,8313,8313,4510,5278,0]Ba[11085,13,8313,8313,11465,5278,0]B`[11085,13,5625,5625,4511,5278,0]B`[11085,13,5625,5625,3480,5278,0]B`[11085,13,4424,4424,4512,5278,0]Ba[11085,13,9430,9430,10307,5278,0]Ba[11085,13,9430,9430,10769,5278,0]B`[11085,13,9769,9769,4513,5278,0]B`[11085,13,8316,8316,4514,5278,0]B`[11085,13,9437,9437,4515,5278,0]Ba[11085,13,9437,9437,10839,5278,0]Ba[11085,13,9437,9437,10759,5278,0]Ba[11085,13,9437,9437,10043,5278,0]Ba[11085,13,9437,9437,10308,5278,0]Ba[11085,13,9437,9437,10136,5278,0]Ba[11085,13,9437,9437,10851,5278,0]B`[11085,13,9437,9437,8411,5278,0]Ba[11085,13,9437,9437,11254,5278,0]Ba[11085,13,9437,9437,11211,5278,0]Ba[11085,13,9437,9437,11484,5278,0]B`[11085,13,8319,8319,4516,5278,0]B`[11085,13,8319,8319,9855,5278,0]B`[11085,13,8319,8319,5246,5278,0]Ba[11085,13,8319,8319,10060,5278,0]B`[11085,13,8319,8319,3481,5278,0]An[11085,13,542,542,4517,5278,0]An[11085,13,542,542,3482,5278,0]B`[11085,13,8182,8182,3483,5278,0]B`[11085,13,2904,2904,4518,5278,0]B`[11085,13,2904,2904,3485,5278,0]B`[11085,13,9514,9514,4519,5278,0]B`[11085,13,9514,9514,5247,5278,0]Ba[11085,13,9514,9514,11333,5278,0]B`[11085,13,8331,8331,4520,5278,0]Ba[11085,13,8331,8331,11070,5278,0]B`[11085,13,8331,8331,3486,5278,0]Ba[11085,13,9457,9457,10035,5278,0]B`[11085,13,9457,9457,4521,5278,0]B`[11085,13,9457,9457,7608,5278,0]B`[11085,13,9457,9457,9832,5278,0]B`[11085,13,9457,9457,5228,5278,0]B`[11085,13,9457,9457,3487,5278,0]Ba[11085,13,8334,8334,11259,5278,0]B`[11085,13,8334,8334,4522,5278,0]An[11085,13,779,779,4523,5278,0]An[11085,13,779,779,3488,5278,0]B`[11085,13,2906,2906,4524,5278,0]Ba[11085,13,2906,2906,10311,5278,0]B`[11085,13,2906,2906,3489,5278,0]B`[11085,13,4418,4418,4525,5278,0]Ba[11085,13,4418,4418,11071,5278,0]B`[11085,13,4418,4418,3490,5278,0]Bb[11085,13,10021,10021,4526,5278,0]Bb[11085,13,10021,10021,3491,5278,0]Bb[11085,13,10245,10245,9600,5278,0]Bc[11085,13,10245,10245,11447,5278,0]Bb[11085,13,11182,11182,8418,5278,0]Bc[11085,13,11182,11182,10318,5278,0]Bb[11085,13,10724,10724,9840,5278,0]Bb[11085,13,11050,11050,4568,5278,0]B`[11085,13,9814,9814,3492,5278,0]Bb[11085,13,10991,10991,3493,5278,0]Bc[11085,13,11186,11186,11466,5278,0]Bb[11085,13,11188,11188,5248,5278,0]Bc[11085,13,11188,11188,10061,5278,0]Bb[11085,13,10094,10094,3495,5278,0]Bb[11085,13,10096,10096,9841,5278,0]Bb[11085,13,10247,10247,9842,5278,0]Bb[11085,13,11422,11422,3496,5278,0]Bb[11085,13,10993,10993,3497,5278,0]Bb[11085,13,10995,10995,3498,5278,0]Bb[11085,13,11190,11190,3499,5278,0]B`[11085,13,9970,9970,4529,5278,0]Ba[11085,13,9970,9970,10141,5278,0]Ba[11085,13,9970,9970,11427,5278,0]B`[11085,13,4434,4434,4530,5278,0]B`[11085,13,4434,4434,3500,5278,0]Ba[11085,13,4434,4434,10770,5278,0]B`[11085,13,8339,8339,4531,5278,0]B`[11085,13,8339,8339,3501,5278,0]Bc[11085,13,10732,10732,10855,5278,0]Bb[11085,13,10732,10732,4532,5278,0]Bb[11085,13,10732,10732,3502,5278,0]B`[11085,13,5201,5201,4533,5278,0]B`[11085,13,5643,5643,4534,5278,0]B`[11085,13,5643,5643,3503,5278,0]B`[11085,13,5645,5645,3504,5278,0]B`[11085,13,8347,8347,4535,5278,0]Ba[11085,13,8347,8347,11415,5278,0]Ba[11085,13,8347,8347,11398,5278,0]B`[11085,13,5213,5213,8416,5278,0]B`[11085,13,5213,5213,9857,5278,0]B`[11085,13,5213,5213,4536,5278,0]B`[11085,13,5213,5213,9601,5278,0]Ba[11085,13,5213,5213,10319,5278,0]B`[11085,13,5213,5213,7646,5278,0]B`[11085,13,5213,5213,3505,5278,0]Bc[11085,13,10827,10827,11260,5278,0]An[11085,13,857,857,8393,5278,0]An[11085,13,857,857,4537,5278,0]Ba[11085,13,5205,5205,11076,5278,0]Ba[11085,13,7660,7660,11399,5278,0]Ba[11085,13,7660,7660,11205,5278,0]Ao[11085,13,866,866,11061,5278,0]Ao[11085,13,866,866,10033,5278,0]Ao[11085,13,868,868,10763,5278,0]Ao[11085,13,868,868,11062,5278,0]Bc[11085,13,11400,11400,11489,5278,0]Bc[11085,13,11400,11400,11470,5278,0]B`[11085,13,9502,9502,9827,5278,0]Ba[11085,13,9502,9502,10137,5278,0]Ba[11085,13,9502,9502,10320,5278,0]B`[11085,13,6144,6144,9576,5278,0]Ba[11085,13,6144,6144,11429,5278,0]Bc[11085,13,10276,10276,11395,5278,0]Bc[11085,13,10276,10276,11303,5278,0]Bc[11085,13,10276,10276,11216,5278,0]Bc[11085,13,10276,10276,11461,5278,0]Bc[11085,13,10276,10276,10843,5278,0]Bc[11085,13,10276,10276,11425,5278,0]Bc[11085,13,10276,10276,10321,5278,0]Bc[11085,13,10276,10276,11394,5278,0]Ba[11085,13,5216,5216,10052,5278,0]Ba[11085,13,5216,5216,11068,5278,0]Ba[11085,13,5216,5216,11397,5278,0]B`[11085,13,5216,5216,8415,5278,0]Ba[11085,13,5216,5216,10030,5278,0]Ba[11085,13,5216,5216,10297,5278,0]Ba[11085,13,5216,5216,10780,5278,0]Ba[11085,13,5216,5216,11298,5278,0]Ba[11085,13,5216,5216,11217,5278,0]Ao[11085,13,794,794,11058,5278,0]B`[11085,13,8359,8359,4538,5278,0]B`[11085,13,9510,9510,4539,5278,0]B`[11085,13,9510,9510,3507,5278,0]Bb[11085,13,10006,10006,9839,5278,0]Bb[11085,13,10006,10006,4540,5278,0]Bb[11085,13,10006,10006,7618,5278,0]Bb[11085,13,10006,10006,6160,5278,0]Bb[11085,13,10006,10006,8397,5278,0]Bb[11085,13,10006,10006,3508,5278,0]Al[11085,13,93,93,4561,5278,0]Am[11085,13,93,93,11445,5278,0]Al[11085,13,93,93,4541,5278,0]Am[11085,13,93,93,10142,5278,0]Am[11085,13,93,93,11428,5278,0]B`[11085,13,4452,4452,9597,5278,0]B`[11085,13,4452,4452,9851,5278,0]B`[11085,13,4452,4452,9852,5278,0]Ba[11085,13,4452,4452,10781,5278,0]B`[11085,13,4452,4452,8420,5278,0]An[11085,13,799,799,4542,5278,0]An[11085,13,799,799,8398,5278,0]An[11085,13,799,799,5249,5278,0]An[11085,13,799,799,3509,5278,0]B`[11085,13,6150,6150,4543,5278,0]B`[11085,13,4426,4426,9825,5278,0]B`[11085,13,4426,4426,9595,5278,0]B`[11085,13,4426,4426,5281,5278,0]Bb[11085,13,10727,10727,9826,5278,0]Bb[11085,13,10727,10727,9596,5278,0]Bb[11085,13,10727,10727,5282,5278,0]Bb[11085,13,10028,10028,7620,5278,0]Bb[11085,13,10028,10028,4562,5278,0]Bb[11085,13,10028,10028,4547,5278,0]Bb[11085,13,10028,10028,5264,5278,0]Bb[11085,13,10028,10028,7631,5278,0]Bb[11085,13,10028,10028,5272,5278,0]Ao[11085,13,869,869,11208,5278,0]B`[11085,13,9823,9823,4544,5278,0]An[11085,13,101,101,4545,5278,0]An[11085,13,101,101,3510,5278,0]Ba[11085,13,10813,10813,801,5278,0]Bb[11085,13,10813,10813,6163,5278,0]B`[11085,13,9968,9968,7621,5278,0]B`[11085,13,9968,9968,4563,5278,0]B`[11085,13,9968,9968,5273,5278,0]Bb[11085,13,11280,11280,8433,5278,0]An[11085,14,10813,10813,801,0,0]Ak[11085,13,101,101,4545,0,0]An[11085,13,9813,9813,11214,0,0]Af[11085,2,5190,0,0,0,0]0An[11085,14,5086,5086,11210,0,0]Al[11085,13,125,125,10322,0,0]Ao[11085,14,10006,10006,4540,0,0]Aj[11085,13,786,786,118,0,0]Ag[11085,2,10827,0,0,0,0]Ao[11085,13,10028,10028,7620,0,0]Am[11085,13,9968,9968,7621,0,0]An[11085,13,849,849,7623,8400,0]An[11085,13,849,849,7623,8399,0]0Ao[11085,13,849,849,11256,8399,0]Ao[11085,13,849,849,11256,8400,0]1B`[11085,13,7677,7677,7624,8400,0]B`[11085,13,7677,7677,7624,8399,0]0B`[11085,13,5357,5357,6173,8399,0]0B`[11085,13,5357,5357,6173,8400,0]B`[11085,13,5357,5357,5262,8399,0]0B`[11085,13,5357,5357,5262,8400,0]Ba[11085,13,8306,8306,11258,8400,0]Ba[11085,13,8306,8306,11258,8399,0]0An[11085,13,537,537,6174,8399,0]An[11085,13,537,537,6174,8400,0]1Ao[11085,13,537,537,10126,8399,0]Ao[11085,13,537,537,10126,8400,0]1Ao[11085,13,537,537,10772,8399,0]Ao[11085,13,537,537,10772,8400,0]1B`[11085,13,2899,2899,6175,8399,0]0B`[11085,13,2899,2899,6175,8400,0]Ba[11085,13,5359,5359,10139,8399,0]Ba[11085,13,5359,5359,10139,8400,0]1Am[11085,13,861,861,819,8400,0]Am[11085,13,861,861,819,8399,0]0An[11085,13,861,861,5263,8400,0]An[11085,13,861,861,5263,8399,0]0Ba[11085,13,9813,9813,11075,8399,0]Ba[11085,13,9813,9813,11075,8400,0]1Ba[11085,13,8334,8334,11259,8399,0]0Ba[11085,13,8334,8334,11259,8400,0]Ao[11085,13,868,868,10763,8399,0]0Ao[11085,13,868,868,10763,8400,0]An[11085,13,9813,9813,11214,0,0]Aj[11085,13,93,93,10142,0,0]Ak[11085,14,125,125,4482,0,0]Am[11085,14,5359,5359,4506,0,0]An[11085,14,6144,6144,11429,0,0]Al[11085,13,125,125,11334,0,0]Ag[11085,2,11086,0,0,0,0]An[11085,14,5205,5205,11076,0,0]Ak[11085,14,849,849,4475,0,0]Ak[11085,14,853,853,9854,0,0]Am[11085,14,7666,7666,4478,0,0]B`[11085,14,10019,10019,11332,0,0]An[11085,14,9512,9512,11243,0,0]Am[11085,14,7677,7677,4483,0,0]Am[11085,14,4402,4402,4491,0,0]Am[11085,14,5180,5180,4496,0,0]Am[11085,14,8306,8306,4498,0,0]Am[11085,14,5623,5623,4509,0,0]Am[11085,14,2904,2904,4518,0,0]Am[11085,14,8334,8334,4522,0,0]Am[11085,14,2906,2906,4524,0,0]Ao[11085,14,10021,10021,4526,0,0]Ao[11085,14,10245,10245,9856,0,0]Ao[11085,14,11182,11182,4528,0,0]Am[11085,14,4434,4434,4530,0,0]Am[11085,14,8339,8339,4531,0,0]Am[11085,14,8347,8347,4535,0,0]Am[11085,14,5213,5213,8416,0,0]Am[11085,14,5213,5213,9857,0,0]Ak[11085,14,799,799,4542,0,0]Am[11085,14,9823,9823,4544,0,0]Am[11085,14,6224,6224,4500,0,0]An[11085,14,5086,5086,11210,0,0]Ak[11085,14,853,853,9854,0,0]An[11085,14,9875,9875,10838,0,0]B`[11085,14,10019,10019,11332,0,0]Ak[11085,14,856,856,8395,0,0]B`[11085,14,10020,10020,10760,0,0]An[11085,14,5086,5086,11067,0,0]An[11085,14,9430,9430,10769,0,0]Ao[11085,14,10021,10021,4526,0,0]Ao[11085,14,10245,10245,9856,0,0]=Am[11085,14,2906,2906,4524,0,0]Am[11085,14,4434,4434,4530,0,0]Am[11085,14,8339,8339,4531,0,0]Ao[11085,14,10732,10732,4532,0,0]An[11085,14,7679,7679,11209,0,0]<;984Am[11085,13,8359,8359,4538,0,0]Am[11085,14,9603,9603,4490,0,0]Aj[11085,14,11247,0,836,0,0]Al[11085,14,11247,0,10303,0,0]Am[11085,13,4424,4424,4512,0,0]An[11085,13,9813,9813,11439,0,0]An[11085,13,9813,9813,11417,0,0]5An[11085,14,5216,5216,11217,0,0]Am[11085,13,5285,5285,4476,0,0]00Af[11085,2,5190,0,0,0,0]Al[11085,14,866,866,11061,0,0]B`[11085,14,11400,11400,11489,0,0]Al[11085,13,853,853,11446,0,0]B`[11085,13,10245,10245,11447,0,0]Am[11085,14,9457,9457,4521,0,0]Am[11085,14,9457,9457,3487,0,0]8Aj[11085,13,786,786,118,0,0]Am[11085,14,5617,5617,3442,0,0]Am[11085,14,4413,4413,3443,0,0]Am[11085,14,6224,6224,3444,0,0]7Af[11085,2,9875,0,0,0,0]Ae[11085,2,856,0,0,0,0]Af[11085,2,5635,0,0,0,0]9Am[11085,14,4418,4418,3490,0,0]>Af[11085,6,5216,0,0,0,0]Ae[11085,5,794,0,0,0,0]Ae[11085,5,866,0,0,0,0]Ae[11085,5,868,0,0,0,0]Af[11085,5,9457,0,0,0,0]Af[11085,5,5357,0,0,0,0]Af[11085,6,9875,0,0,0,0]Ae[11085,6,856,0,0,0,0]Al[11085,15,868,868,10763,0,0]0Af[11085,5,5617,0,0,0,0]Af[11085,5,5086,0,0,0,0]Af[11085,5,9437,0,0,0,0]Af[11085,5,8181,0,0,0,0]Ag[11085,5,10243,0,0,0,0]Af[11085,5,4419,0,0,0,0]Af[11085,5,5205,0,0,0,0]Af[11085,5,5210,0,0,0,0]0Af[11085,5,4423,0,0,0,0]Ag[11085,5,10726,0,0,0,0]Af[11085,6,5216,0,0,0,0]Af[11085,5,7677,0,0,0,0]Af[11085,5,5643,0,0,0,0]Af[11085,5,6183,0,0,0,0]Am[11085,15,5357,5357,6173,0,0]Aj[11085,15,861,861,819,0,0]Af[11085,5,5084,0,0,0,0]Ag[11085,10,7679,0,0,0,0]Af[11085,5,8319,0,0,0,0]Ag[11085,5,11188,0,0,0,0]Ao[11085,14,10006,10006,4540,0,0]Am[11085,14,5086,5086,9584,0,0]An[11085,14,5086,5086,10848,0,0]An[11085,14,5086,5086,10042,0,0]Am[11085,14,9457,9457,4521,0,0]Am[11085,14,9457,9457,3487,0,0]Al[11085,14,866,866,11061,0,0]Al[11085,14,868,868,11062,0,0]B`[11085,14,11400,11400,11489,0,0]Ak[11085,14,125,125,4482,0,0]Am[11085,14,5357,5357,4486,0,0]Am[11085,14,5210,5210,4508,0,0]6Am[11085,13,4416,4416,3457,0,0]An[11085,13,9379,9379,10305,0,0]Am[11085,13,9769,9769,4513,0,0]Ag[11085,2,10825,0,0,0,0]Am[11085,14,4416,4416,3457,0,0]7Am[11085,14,9812,9812,4503,0,0]8An[11085,14,9457,9457,10035,0,0]Am[11085,13,8359,8359,4538,0,0]Am[11085,13,5187,5187,4502,0,0]Am[11085,14,5171,5171,4487,0,0]Am[11085,13,4584,4584,6158,0,0]An[11085,13,4584,4584,10776,0,0]An[11085,13,4584,4584,10309,0,0]An[11085,13,9778,9778,11301,0,0]An[11085,13,9778,9778,10289,0,0]Am[11085,13,8313,8313,4510,0,0]Af[11085,2,5190,0,0,0,0]0Am[11085,14,5359,5359,4506,0,0]0Am[11085,14,5643,5643,4534,0,0]B`[11085,14,10276,10276,11395,0,0]B`[11085,14,10276,10276,11303,0,0]B`[11085,14,10276,10276,11216,0,0]B`[11085,14,10276,10276,11461,0,0]B`[11085,14,10276,10276,10843,0,0]B`[11085,14,10276,10276,10321,0,0]Ak[11085,14,125,125,4482,0,0]Am[11085,14,5357,5357,4486,0,0]Ao[11085,14,10740,10740,4504,0,0]Am[11085,14,7677,7677,4483,0,0]An[11085,14,5205,5205,11076,0,0]An[11085,12,7679,7679,10059,0,0]Am[11085,14,9813,9813,4507,0,0]Al[11085,14,868,868,11062,0,0]Ak[11085,14,853,853,4477,0,0]An[11085,14,9875,9875,10838,0,0]Ak[11085,14,856,856,8395,0,0]An[11085,14,5086,5086,10042,0,0]An[11085,14,9430,9430,10769,0,0]Am[11085,14,8319,8319,4516,0,0]Am[11085,14,8331,8331,4520,0,0]Am[11085,14,4418,4418,4525,0,0]Ao[11085,14,10245,10245,4527,0,0]Am[11085,14,5213,5213,4536,0,0]Af[11085,5,7660,0,0,0,0]Ae[11085,6,537,0,0,0,0]Af[11085,5,9513,0,0,0,0]2Ae[11085,5,869,0,0,0,0]Af[11085,5,7677,0,0,0,0]0Ag[11085,5,10006,0,0,0,0]Af[11085,6,5617,0,0,0,0]2Af[11085,6,4413,0,0,0,0]Af[11085,5,9437,0,0,0,0]Af[11085,6,9502,0,0,0,0]Af[11085,5,6201,0,0,0,0]Af[11085,6,5359,0,0,0,0]Af[11085,6,7679,0,0,0,0]Af[11085,5,9970,0,0,0,0]Ad[11085,5,93,0,0,0,0]Ag[11085,5,10276,0,0,0,0]Af[11085,5,8181,0,0,0,0]B`[11085,14,10276,10276,11395,0,0]B`[11085,14,10276,10276,10843,0,0]Am[11085,14,4402,4402,4491,0,0]Am[11085,14,5174,5174,4492,0,0]Am[11085,14,5176,5176,4493,0,0]Am[11085,14,5180,5180,4496,0,0]Am[11085,14,2904,2904,4518,0,0]Ao[11085,14,10732,10732,4532,0,0]Am[11085,14,5357,5357,4486,0,0]0Am[11085,13,7679,7679,8396,0,0]Am[11085,13,5171,5171,4551,0,0]Am[11085,13,4402,4402,3470,0,0]Am[11085,13,5174,5174,3471,0,0]Am[11085,13,5176,5176,3472,0,0]Am[11085,13,5180,5180,3474,0,0]Am[11085,13,9812,9812,3476,0,0]Am[11085,13,5623,5623,3479,0,0]An[11085,13,8313,8313,11465,0,0]Am[11085,13,2904,2904,3485,0,0]Am[11085,13,8331,8331,3486,0,0]Am[11085,13,9457,9457,5228,0,0]Ak[11085,13,779,779,3488,0,0]Am[11085,13,2906,2906,3489,0,0]Am[11085,13,4418,4418,3490,0,0]Am[11085,13,9814,9814,3492,0,0]Ao[11085,13,10991,10991,3493,0,0]B`[11085,13,11186,11186,11466,0,0]An[11085,13,9970,9970,10141,0,0]An[11085,13,9970,9970,11427,0,0]Am[11085,13,4434,4434,3500,0,0]An[11085,13,4434,4434,10770,0,0]Am[11085,13,8339,8339,3501,0,0]Am[11085,13,9510,9510,3507,0,0]Aj[11085,13,93,93,10142,0,0]Aj[11085,13,93,93,11428,0,0]Am[11085,13,5623,5623,4509,0,0]0Am[11085,14,4423,4423,4489,0,0]B`[11085,14,10276,10276,11461,0,0]Am[11085,14,5187,5187,4502,0,0]Am[11085,14,4452,4452,9597,0,0]Am[11085,14,6150,6150,4543,0,0]An[11085,14,5086,5086,11210,0,0]0Am[11085,14,7677,7677,4483,0,0]42Am[11085,13,4402,4402,3470,0,0]Am[11085,13,5623,5623,3479,0,0]Am[11085,13,5290,5290,3467,0,0]Aj[11085,13,786,786,118,0,0]:Am[11085,14,5171,5171,4487,0,0]Am[11085,14,4418,4418,3490,0,0]Ak[11085,14,849,849,4475,0,0]Ak[11085,14,853,853,9854,0,0]Am[11085,14,7666,7666,4478,0,0]An[11085,13,9875,9875,10037,0,0]B`[11085,14,10019,10019,11332,0,0]An[11085,14,9512,9512,11243,0,0]An[11085,14,6144,6144,11429,0,0]Al[11085,14,794,794,11058,0,0]An[11085,14,5643,5643,10054,0,0]Af[11085,2,5190,0,0,0,0]Am[11085,14,9437,9437,4515,0,0]Ao[11085,14,10740,10740,4504,0,0]Ag[11085,2,11086,0,0,0,0]Am[11085,13,8331,8331,4520,0,0]Am[11085,13,5213,5213,9857,0,0]1003Ao[11085,13,10021,10021,4526,0,0]Am[11085,14,7677,7677,4483,0,0]An[11085,14,7679,7679,11209,0,0]An[11085,14,5216,5216,11217,0,0]99Am[11085,13,8359,8359,4538,0,0]Al[11085,14,866,866,11061,0,0]B`[11085,14,11400,11400,11489,0,0]Am[11085,14,5357,5357,4486,0,0]Ak[11085,13,856,856,8395,0,0]B`[11085,13,10020,10020,10760,0,0]An[11085,13,9513,9513,10127,0,0]Am[11085,13,9514,9514,4519,0,0]Ak[11085,13,857,857,4537,0,0]Af[11085,5,9875,0,0,0,0]Af[11085,6,9437,0,0,0,0]Af[11085,5,7677,0,0,0,0]Af[11085,5,4423,0,0,0,0]Ag[11085,5,10726,0,0,0,0]Ag[11085,5,10276,0,0,0,0]An[11085,15,5216,5216,10030,0,0]Af[11085,5,5357,0,0,0,0]Af[11085,5,9966,0,0,0,0]Af[11085,5,5617,0,0,0,0]Af[11085,5,5086,0,0,0,0]Ag[11085,18,6150,0,0,0,0]Af[11085,5,4584,0,0,0,0]Af[11085,5,9437,0,0,0,0]Af[11085,5,5210,0,0,0,0];:Ag[11085,6,10732,0,0,0,0]Af[11085,5,9320,0,0,0,0]Af[11085,5,9815,0,0,0,0]B`[11085,14,10019,10019,11332,0,0]Am[11085,14,5171,5171,4487,0,0]Am[11085,14,4452,4452,9597,0,0]Am[11085,14,9437,9437,4515,0,0]Am[11085,14,4416,4416,3457,0,0]2Af[11085,2,5190,0,0,0,0]An[11085,14,5643,5643,10054,0,0]Am[11085,14,9970,9970,4529,0,0]Ai[11085,14,93,93,4541,0,0]An[11085,13,9513,9513,11059,0,0]Al[11085,13,857,857,11060,0,0]An[11085,13,9875,9875,10758,0,0]Ak[11085,13,856,856,7615,0,0]An[11085,13,9430,9430,10307,0,0]Am[11085,13,5213,5213,3505,0,0];Am[11085,14,4402,4402,4491,0,0]Am[11085,14,5174,5174,4492,0,0]Am[11085,14,5176,5176,4493,0,0]Ao[11085,14,10732,10732,4532,0,0]Am[11085,14,5086,5086,9584,0,0]An[11085,14,5086,5086,10042,0,0]Am[11085,14,4418,4418,4525,0,0]Ak[11085,14,849,849,4475,0,0]B`[11085,14,10019,10019,11332,0,0]An[11085,14,9512,9512,11243,0,0]Am[11085,14,7677,7677,4483,0,0]Am[11085,14,5171,5171,4487,0,0]Am[11085,14,8306,8306,4498,0,0]Am[11085,14,8334,8334,4522,0,0]6Ak[11085,14,853,853,9854,0,0]Am[11085,14,7666,7666,4478,0,0]An[11085,13,9875,9875,10037,0,0]87Al[11085,13,856,856,10038,0,0]B`[11085,14,10020,10020,10760,0,0]An[11085,14,9513,9513,10127,0,0]9Am[11085,14,4402,4402,4491,0,0]Am[11085,14,5174,5174,4492,0,0]Am[11085,14,5176,5176,4493,0,0]An[11085,14,5617,5617,10041,0,0]Am[11085,14,5617,5617,4495,0,0]Am[11085,14,5180,5180,4496,0,0]=Am[11085,14,4413,4413,9586,0,0]Am[11085,14,4413,4413,4499,0,0]Am[11085,14,5086,5086,9584,0,0]An[11085,14,5086,5086,10848,0,0]An[11085,14,5086,5086,11067,0,0]Am[11085,14,9812,9812,4503,0,0]Am[11085,14,5623,5623,4509,0,0]Am[11085,14,9437,9437,4515,0,0]Am[11085,14,2904,2904,4518,0,0]Am[11085,14,9514,9514,4519,0,0]Am[11085,14,8334,8334,4522,0,0]Am[11085,14,2906,2906,4524,0,0]Ao[11085,14,10021,10021,4526,0,0]Ao[11085,14,10245,10245,9856,0,0]Ao[11085,14,11182,11182,4528,0,0]Am[11085,14,4434,4434,4530,0,0]Am[11085,14,8339,8339,4531,0,0]Ao[11085,14,10732,10732,4532,0,0]Am[11085,14,5643,5643,4534,0,0]Am[11085,14,5213,5213,8416,0,0]Am[11085,14,5213,5213,9857,0,0]Ao[11085,14,10006,10006,4540,0,0]Ak[11085,14,799,799,4542,0,0]Am[11085,14,9823,9823,4544,0,0]Am[11085,14,5288,5288,4479,0,0]Am[11085,14,9878,9878,4480,0,0]Am[11085,14,1861,1861,4494,0,0]Am[11085,13,4418,4418,3490,0,0]An[11085,14,5216,5216,11217,0,0]=Am[11085,14,5210,5210,4508,0,0]=B`[11085,14,10276,10276,11216,0,0]987Ag[11085,7,10827,0,0,0,0]Am[11085,14,5290,5290,3467,0,0]Am[11085,14,5187,5187,4502,0,0]Am[11085,14,9457,9457,4521,0,0]Am[11085,14,9457,9457,3487,0,0]Am[11085,14,9970,9970,4529,0,0]Ai[11085,14,93,93,4541,0,0]Am[11085,14,4452,4452,9597,0,0]Af[11085,7,5365,0,0,0,0]Aj[11085,13,786,786,118,0,0]Ak[11085,13,853,853,4477,0,0]Am[11085,14,5086,5086,9584,0,0]Ak[11085,14,853,853,4477,0,0]Ao[11085,14,10245,10245,4527,0,0]An[11085,14,9875,9875,10838,0,0]Ak[11085,14,856,856,8395,0,0]Am[11085,14,7677,7677,4483,0,0]An[11085,14,6144,6144,11429,0,0]6An[11085,14,5216,5216,11217,0,0]Af[11085,7,4457,0,0,0,0]Am[11085,14,5176,5176,4493,0,0]Ag[11085,5,10019,0,0,0,0]Af[11085,5,9514,0,0,0,0]Ae[11085,5,125,0,0,0,0]Af[11085,5,5357,0,0,0,0]Af[11085,5,9966,0,0,0,0]Ag[11085,5,10276,0,0,0,0]Af[11085,7,6198,0,0,0,0]Am[11085,14,5187,5187,4502,0,0]Am[11085,14,4452,4452,9597,0,0]Am[11085,14,6150,6150,4543,0,0]20Am[11085,14,5174,5174,4492,0,0];Al[11085,13,847,847,11242,0,0]An[11085,13,5147,5147,11250,0,0]An[11085,13,1364,1364,11252,0,0]Ak[11085,14,849,849,4475,0,0]Am[11085,14,5285,5285,4476,0,0]Am[11085,14,7666,7666,4478,0,0]An[11085,14,9512,9512,11243,0,0]An[11085,14,9513,9513,10127,0,0]Am[11085,14,7677,7677,4483,0,0]An[11085,14,7679,7679,11209,0,0]Am[11085,14,4402,4402,4491,0,0];Am[11085,14,5176,5176,4493,0,0]An[11085,14,5617,5617,10041,0,0]Am[11085,14,5617,5617,4495,0,0]Am[11085,14,5180,5180,4496,0,0]Am[11085,14,8306,8306,4498,0,0]Am[11085,14,4413,4413,9586,0,0]Am[11085,14,4413,4413,4499,0,0]Am[11085,14,5086,5086,9584,0,0]An[11085,14,5086,5086,10848,0,0]Am[11085,14,5187,5187,4502,0,0]Am[11085,14,5623,5623,4509,0,0]Am[11085,14,9437,9437,4515,0,0]Am[11085,14,2904,2904,4518,0,0]Am[11085,14,9514,9514,4519,0,0]An[11085,14,9457,9457,10035,0,0]Am[11085,14,8334,8334,4522,0,0]Am[11085,14,2906,2906,4524,0,0]Ao[11085,14,11182,11182,4528,0,0]Am[11085,14,4434,4434,4530,0,0]Am[11085,14,8339,8339,4531,0,0]Am[11085,14,5213,5213,8416,0,0]Ak[11085,14,857,857,4537,0,0]Ao[11085,14,10006,10006,4540,0,0]Am[11085,14,4452,4452,9597,0,0]Am[11085,14,9823,9823,4544,0,0]Ag[11085,7,10813,0,0,0,0]Am[11085,14,4419,4419,4501,0,0]Ak[11085,14,849,849,4475,0,0]An[11085,14,9512,9512,11243,0,0]Am[11085,14,8306,8306,4498,0,0]5Af[11085,7,5204,0,0,0,0]00Ag[11085,5,10019,0,0,0,0]Af[11085,5,4584,0,0,0,0]Ag[11085,5,10276,0,0,0,0]0Af[11085,5,5216,0,0,0,0]0Af[11085,5,8347,0,0,0,0]Af[11085,5,7660,0,0,0,0]Ag[11085,2,10827,0,0,0,0]Am[11085,14,5288,5288,4479,0,0]Am[11085,14,9878,9878,4480,0,0]Am[11085,14,1861,1861,4494,0,0]Am[11085,14,4424,4424,4512,0,0]Am[11085,14,5086,5086,9584,0,0]Af[11085,7,8316,0,0,0,0]Am[11085,14,5171,5171,4487,0,0]Ao[11085,13,10021,10021,3491,0,0]??Am[11085,13,8331,8331,3486,0,0]Af[11085,5,9512,0,0,0,0]Af[11085,5,7679,0,0,0,0]=Ae[11085,5,861,0,0,0,0]Af[11085,5,9813,0,0,0,0]<;:Am[11085,14,5210,5210,4508,0,0]Af[11085,2,5190,0,0,0,0]5Ag[11085,5,10276,0,0,0,0]Af[11085,5,9966,0,0,0,0]Af[11085,5,9970,0,0,0,0]Ad[11085,5,93,0,0,0,0]Af[11085,5,6144,0,0,0,0]B`[11085,13,10020,10020,10760,0,0]Am[11085,13,5623,5623,4509,0,0]An[11085,14,5216,5216,11217,0,0]>Am[11085,14,9437,9437,4515,0,0]Af[11085,7,9769,0,0,0,0]Am[11085,14,5086,5086,9584,0,0]Ag[11085,18,6150,0,0,0,0]Ag[11085,5,10019,0,0,0,0]?Am[11085,14,4452,4452,9597,0,0]Af[11085,7,9890,0,0,0,0]Al[11085,13,857,857,11060,0,0]Af[11085,7,4457,0,0,0,0]An[11085,14,5086,5086,10042,0,0]>Ae[11085,5,853,0,0,0,0]Ag[11085,5,10245,0,0,0,0]7Ae[11085,5,794,0,0,0,0]Af[11085,5,3529,0,0,0,0]Af[11085,5,9966,0,0,0,0]An[11085,14,9512,9512,11243,0,0]Am[11085,14,7677,7677,4483,0,0]Am[11085,14,9823,9823,4544,0,0]Af[11085,7,5357,0,0,0,0]Ag[11085,7,10813,0,0,0,0]B`[11085,14,10276,10276,11461,0,0]B`[11085,14,10276,10276,11425,0,0]B`[11085,14,10276,10276,11394,0,0]Af[11085,5,4584,0,0,0,0]Ag[11085,5,10276,0,0,0,0]Am[11085,14,5288,5288,4479,0,0]Am[11085,14,9878,9878,4480,0,0]Am[11085,14,1861,1861,4494,0,0]Af[11085,5,8313,0,0,0,0]Ag[11085,5,11186,0,0,0,0]Ai[11085,14,93,93,4541,0,0]An[11085,14,5086,5086,10042,0,0]Af[11085,5,7677,0,0,0,0]Ag[11085,5,11400,0,0,0,0]Af[11085,5,3529,0,0,0,0]4Am[11085,14,8339,8339,4531,0,0]Am[11085,14,4452,4452,9597,0,0]Af[11085,5,9813,0,0,0,0]Ak[11085,13,799,799,4542,0,0]Aj[11085,14,11247,0,836,0,0]An[11085,14,5617,5617,10847,0,0]An[11085,14,4413,4413,10767,0,0]Am[11085,14,5187,5187,4502,0,0]Am[11085,13,4402,4402,3470,0,0]An[11085,13,6144,6144,11215,0,0]=Ao[\"{c{{BCKh{EIFj}}}DLMb}\",[\"D\"]]") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/generic_inverted_index/7bc61006812d.js b/network-poc/target-native/doc/search.index/generic_inverted_index/7bc61006812d.js deleted file mode 100644 index 777c77e..0000000 --- a/network-poc/target-native/doc/search.index/generic_inverted_index/7bc61006812d.js +++ /dev/null @@ -1 +0,0 @@ -rb_("T2UAOzAAAAEAANcDAgA5CesBfQvrATswAAABAABEBQQAVwUbAHQFzwFsGGwBxRvrATswAAABAADDBQMAPw/rAesR6wHZGesBOzAAAAEAAHQCBAAAHusBbCQvAIwlVwDkLAAAOzAAAAEAAGIDBgBTAAAAwQIAAOQCAACcIAYAASHrAfAibAECNg8AAOslAAAGGwIAAEcHAABIBwAASQcAAGkgAADNJAAAAhICAAB2LAAAADowAAABAAAAAAAHABAAAAAXAl4R8x1lIGYgaCDsJS0sAmcgAAD8JAAAAe0iAAADZRgAANgrAAC/LAAAAAAAAAAB6hQAAEFiAAAAOzAAAAEAAOsBAQDZGesB") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/name/f5d573e6cbf7.js b/network-poc/target-native/doc/search.index/name/f5d573e6cbf7.js deleted file mode 100644 index 77aa7a2..0000000 --- a/network-poc/target-native/doc/search.index/name/f5d573e6cbf7.js +++ /dev/null @@ -1 +0,0 @@ -rd_("ak00ap0aqavaxayb()b->bSub[]ba0ba1ba2bb00bb10bb20bb30bb4bb5bb6bb7bchbeq000000000000000000000000000000000000000000000bhfbhsbm0bm1bm2bm3bm4bm5bppbrebs0bs10bs20bs3bs4bt50bt8bu8bv1bv200byi0cAll0cAnycArccBPEcBh1cBh2cBoxcCLScDimcFa2cMlp00cQkvcSamcSincVeccVggccfg0ccoscdac0cdev0cdim0cendceps0cetacf32cf64cfmt00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cgetcgpt0cimgciouckvscmpt0cmutcnew00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cphi0cpos00crhocs12csam0csincstrct12ctxtcu32cu64cvae0cveccvgg0cvit0dBboxdConvdFlux0dFromdFuncdGelu0000dHanddHashdIntodItemdMEANdNone0dNorm0dPathdReaddRelu00dRopedSeekdSpandText0dTopK0dTopP0dVZipdYarn00dZerodattndattodb1g4db2g4db3g4dbase0dbeit0dbert0dbias0dblip0dbooldclip0000dconv0dd_ffdd_kvddatadddim0dddpm000ddrop00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000deva20dflux0dfrom000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dglm400dhash00dheaddhuge0dinit00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dinto00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dload0000000000000000000000000000000000000dlstmdma36dmask0dmci0dmci1dmci2dmimi0dnanodnorm0dolmo0dphi30dpicodsa12dsa24dsa36dsdxl0dsizedspan0dstep00000000000000dtiny0dtopkdunitdv0_1dv1_500dv2_10dvzip00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dworddxmaxdxmindymaxdymineAlibi0eAsRefeCache00eCloneeDTYPE00000eDTypeeDebugeErroreFloat0eLLaVAeLargeeLlama0eMMDiTeModel000000000000000000000000000000000000000000000000eN_FFTeRegexeShapeeSmalleState00000eValueeVgg13eVgg16eVgg19ealibiearrayeaudio0ebased0ebuild000eclip2eclone0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000edepth00ederef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000edtype00eembedefemtoegatedegemma0ehiera00eindexeisizeelabelelarge00ellama00ellava00emamba0emmdit0emodel00000000eprior0eqwen20eranksescore0esdxl2esetupesliceesmall00espan1espan2esplitessd1b0estartethetaetrocr0etupleeusizeeutils00000ewidthfArgMaxfBorrowfConfig00000000000000000000000000000000000000000000000000000000000000000000000000000000fConv1dfConv2dfDevicefDim256fDim768fFalconfFnOncefGating0fHasherfKarrasfLinear000000fLlama3fModelsfModulefOptionfQLlamafQkNorm0fResult00fSamplefSingle0fStringfSwiglufTensorfTypeIdfVision0fWPriorfblocks000fborrow00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fcandlefcausal00fcommon0fconfig0000000000000000000000000fconv2dfdecode0000000000000000000fdepthsfdevice000000000000fdinov20fencode0000000000000000fentityffactor000ffalcon0fgatingfgemma20fgemma30fgroupsfheightfhelium0finterpflayersflinear00fmarian0fmediumfmodels0fmscalefn_embdfn_head0fnew_v20foffsetfout_chfratiosfrepvgg00fresnet000fsample0fseanet00fsiglip0fssd1b2funi_pc0funpackfvaluesfxlargegContent0gDPTHeadgDecoder0000gDefault00gDim1024gDim2048gDim4096gDim6144gDim8192gDynamicgEmbedNdgEnabled0gEncodecgEncoder0000000gEpsilongGeluErfgGeluNewgGranite0gHashMapgHashSetgLeadinggLearnedgMTModelgModuleTgNERItemgPadMode0gQMatMulgQTensorgRMSNormgReflect0gRmsNorm0000gScratchgSnake1dgSplitOpgTinyViTgToOwnedgTryFromgTryIntogWhisper0gbase_8bgbias_ffgbigcode0gch_multgchatglm0gcolpali0gcontextgd_model00000gdecoder000000gdefault000000000000000000000000000000000000000000000000gdenoisegdropoutgencodec00gencoder0000gfastvit00gffn_dimgforward000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000gglm3_6bggranite0gimg_idsgindicesglinear1glinear2gmistral0gmixtral0gmodulesgn_headsgn_innergn_layer00gnonzerogoverlapgpixtral0gpointergprev_xsgresnetsgrmsnorm00grwkv_v50grwkv_v60gschnell0gseq_lengstridesgtxt_idsgtype_id00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000gunet_2d0gupblock0gv2_basegvariantgwhisper0hAbsolute000hConstant0hDiTBlockhDisabledhEmbedDimhId2Label0hKeyPointhLabel2IdhLinspace0hMlpBlockhMultiple0hN_FRAMEShNoGating0hNormType00hPaellaVQhResBlockhSampling0hSigmaMinhToStringhTrailinghadapters0haxes_dimhbeta_end00hbincounthc1024_20hc1536_20hchannels0hclip_qkvhcompress0hconv_acthconvnext00hdiffnext0hfalcon7bhfrom_archgeneratehhead_dim00000000hid2label00hinit_stdhlabel2id0hlinear_b0hlinspacehllama2_c0hmlp_biashn_layershnew_tinyhnorm_eps000hopenclip0hpad_mode0hpad_with00hqkv_bias0hresamplehresnet18hresnet34hresnet50hsample_fhsampling0htiny_15mhtiny_42mhtiny_vit0hto_owned0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000htry_from00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000htry_into00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000hvalidatehvit_base000iAttention00iAttnBlockiBertLayeriBertModel0iBorrowMutiClipModeliConvLayeriEOT_TOKENiEmbedHeadiEmbedding00iFormatteriHiddenAct0iLastLayer0iLayerNorm0000iMMDiTCoreiN_SAMPLESiNonZeroOpiPartialEqiPointableiQuickGelu00iRecurrentiReplicate0iSOT_TOKENiScheduleriSerializeiTextModeliTimestepsiTokenizer000iTorchAttniUpBlock2DiWDiffNeXtiadd_noise0000iattention0ibase_plusibeta_fastibeta_slowibias_attniblip_text0ibuild_vaeicandle_nnicodegeex4iconfig_2biconfig_6biconvmixer0icorrectoricrop_sizeidebertav20ideepseek20ideref_mut00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000idimensionido_resizeidownblockiembed_dim0000iembedding000iexp_ratioiforward_t0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ifrom_ggmlifrom_gguf0000ifrom_jsoniget_noiseihead_size00iimage_stdiis_causalijina_bert0ikv_repeatilinear_inilru_widthimetavoice0imixformer0imlp_ratioimobileone00imoondream0in_filtersin_head_kvinorm_type0inormalizeinum_heads00ipaella_vq0ipaligemma0iper_layeripersimmon0ipipelines0iquantizeriqwen2_moe0ireferenceirepeat_kviresnet101iresnet152irope_type0isegformer0iserialize000000isigma_maxisigma_minisr_ratiosistable_lm0istarcoderitimesteps00000itiny_110mitiny_260kitrue_skipiuse_cache0000000000iv0_1_8x7bivit_giantivit_large00ivit_small00jActivation000jBincountOpjClipConfigjDeepSeekV2jEmbeddings0jEquivalent0jFinalLayerjFixedLargejFixedSmalljFromSigmasjGPTBigCodejHOP_LENGTHjIMAGE_SIZEjJointBlockjLayerScalejMambaBlockjModernBertjNormConv1djSequentialjSerializerjSolverTypejTextConfigjTextPooler0jTopKOutputjTrOCRModeljVarBuilder000000000000jWLayerNormjWeightNorm0jactivation000000jattentionsjbeta_start00jblock_size0jborrow_mut00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000jbuild_unetjcfg1b_v0_10jclone_into0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000jconfidencejconfig_34bjcopy_statejdinov2reg40jdistilbert0jdo_rescalejembed_codejembed_headjembeddings0000jequivalent00000000000000000000000000000000000000000000000jforward_cajforward_dtjframe_rate0jfreq_shiftjfrom_codesjgeneration0jgroups_outjhidden_act0000000000000000000000jhidden_dimjimage_meanjimage_size0000000000jis_decoder00jlatent_dimjlayer_norm0jlinear_outjlm_forwardjmax_length0jmax_periodjmlp_ratiosjmobileclip0jmodel_type0000jmodernbert0jn_kv_headsjnorm_firstjnum_groups0jnum_layers0000000000jnvembed_v20joutput_dimjparler_tts0jpatch_size000000000jpcm_to_meljphi_configjpreprocessjresnet_eps00000jresolutionjrope_ratio0jrope_theta00000000000000000000jschedulers0jsd3_mediumjsdxl_turbojseq_length00jskip_stepsjstarcoder20jtext_model0000000000jtokenizers0junpatchifyjvec_in_dimjvocab_size000000000000000000000000000000000000000000jwuerstchen00jz_channelskAutoEncoderkBertEncoderkBlockConfigkClipEncoderkDeserializekDownBlock2DkEncodecLSTMkExponentialkIdentityMapkInterpolatekLLaVAConfigkLayerNorm2dkLlamaConfigkMAX_SEQ_LEN0kMMProjectorkMaskDecoderkMlpEmbedder0kRelativeKeykSAMPLE_RATEkTextDecoder0kTrOCRConfigkVPredictionkVisionModel00kWithForwardkautoencoder0kblock_typeskclip_samplekcls_dropoutkcontext_dimkconv_groupskconv_layoutkdecode_codekdecode_stepkdeserialize000000000000000000000000000000000000000000000000000000000000000000000000000000000000000kdiv_l2_norm00kencode_slow0kencode_stepkend_of_textkfrom_reader0khidden_size000000000000000000000000000000000000000000kin_channels000kin_featureskinto_config0kkernel_size0kkv_channels00klayer_scaleklkc_use_actkmax_seq_len0kmobilenetv400kmulti_query0knum_expertsknum_filtersknum_patcheskpatch_sizeskprojections0krenormalizekreset_state000000000krmsnorm_epsksample_rateksd3_5_largeksolver_typektemperature000ktext_config00000000ktiny_vit_5mktorch_dtype00ktransformer00000000kvar_builderkvocab_sizeskxlm_roberta0lAudioEncoder0lBetaSchedulelCHUNK_LENGTHlConv1dConfiglConv2dConfiglDecoderBlocklDecoderLayerlDeserializerlEfficientNetlEncoderBlocklIntoIteratorlLlamaEosTokslMBConvConfiglModelVariantlModelWeights000lResidualUnitlScaledLinearlSpectralNormlStreamTensorlTEMPERATURESlTopKThenTopP0lTrOCRDecoderlTrOCREncoderlUnpatchifierlVisionConfig000ladd_qkv_bias00ladd_upsample0lbos_token_id00000000000lchinese_clip0lcodebook_dimlcodegeex4_9b0lconfig_7b_v1lconfig_7b_v2lcontains_keylconv1d_widthldecode_bytesldecode_codesldo_normalizeldropout_ratelefficientnet0lefficientvit00lembed_tokens00lencode_byteslencode_imageleos_token_id00000000000000lfeed_forwardlfinal_linear0lforward_difflforward_normlforward_textlfrom_qtensorlfrom_weights000lget_dense_pelget_no_shapelget_schedulelhidden_sizeslhybrid_largelignore_indexlmask_decoder0lmm_projectorlnew_1_5_b_v5lnew_400_m_v5lnorm_rel_ebdlnum_channels00000lnum_mel_binslout_channels00lout_featureslpad_token_id0000000000000000lpos_att_typelqk_layernormlquantization0lquantized_nn0lquantized_t50lrms_norm_eps000000000000000lrope_scaling00000lrotary_ndimslscale_factorlscaling_type0lsd3_5_mediumlset_kv_cache0lshift_factorlsolver_orderlstarcoder_1blstarcoder_3blstarcoder_7blstella_en_v50lsteps_offset0ltext_decoder0ltext_encoder0lthresholdinglunpreprocessluse_kv_cache00lvision_model0000000lvision_towerlwith_tracing0mAlgorithmTypemAutoEncoderKLmCloneToUninitmDDIMSchedulermDDPMSchedulermDecoderConfigmEncodecConv1dmEncoderConfig0mFixedLargeLogmFixedSmallLogmGraniteConfigmHFLLaVAConfigmModernBertMLPmPatchEmbeddermPromptEncodermResidualBlockmResnetBlock2DmSeaNetDecodermSeaNetEncodermSelfAttention0mSigmaSchedulemStableDropoutmStatePerLayermTiltedEncodecmTimeGroupNorm0mTimestepBlockmTopKLastDimOpmVisionEncoder0mactivation_fnmarchitectures00maudio_encoder0mbeta_schedule00mcodebook_size0mdilation_basemembed_promptsmencode_imagesmfrom_samplingmhybrid_mediummimage_encoder0mimage_newlinemmodel_bitratemn_local_headsmnum_codebooks0mnum_kv_groupsmopus_mt_fr_enmparallel_attnmpre_attention0000mpuffin_phi_v2mquantized_mpt0mquantized_phi0mquantizer_dimmquantizer_n_qmrescale_everymresnet_groups00000msampling_rate00mshare_att_keymtemb_channelsmtopk_unsortedmuse_conv_biasmvariance_typemvision_config000000000nAttentionBlocknAttnKernelTypenClipTextConfignCrossAttentionnDDPMWSchedulernDebertaV2LayernDebertaV2ModelnEmbeddingModelnGraniteEosToksnHiddenActLayernLlama3RopeTypenModernBertHeadnPredictionTypenResBlockStageBnResampleMethodnScaledRopeTypenT5EncoderModel0nUNetMidBlock2DnVectorEmbeddernadd_downsample0nattention_bias00000naudio_channelsnchunk_length_snclear_kv_cache0000000000000000000000000nconfig_7b_v0_1nconfig_chat_mlncontext_in_dimncross_attn_dimndecoder_layers00ndo_center_cropndo_convert_rgbnembedding_sizenencoder_layers0nforward_embeds0nforward_imagesngenerate_masksnguidance_embednhidden_dropoutnlanguage_modelnlayer_norm_eps0000000000000000nlinear_no_bias00nmel_n_channelsnmm_hidden_sizenmscale_all_dimnmusicgen_smallnnorm_topk_probnnum_res_blocksnpooler_dropoutnpost_attention00nprojection_dim000000000000nprompt_encoder0nquantized_blip0nquantized_phi30nquantizer_binsnrescale_factornreset_kv_cache00000000000000000nscaling_factornsigma_schedulensliding_window0000nunet_2d_blocks0nuse_conv_blocknuse_cross_attnnuse_flash_attn000nuse_quant_convnvision_encoder000oAttnProjectionsoBertForMaskedLMoBertOnlyMLMHeadoClipVisionToweroConvTranspose1doDebertaV2OutputoDepthAnythingV2oDistilBertModeloFinalSigmasTypeoGeluApproximate0oGraniteRopeTypeoImageEncoderViToLayerNormConfigoLinearOrDynamic0oLogitsProcessoroMMDiTJointBlockoMobileClipModeloModernBertLayeroQkvOnlyDiTBlockoRotaryEmbedding0oRotatingKvCacheoSchedulerConfigoSquaredcosCapV2oStreamingModuleoTRANSLATE_TOKENoTextLMHeadModel0oTextTransformeroTimestepSpacingoUpBlock2DConfigoVectorQuantizeroXLMRobertaModeloadd_bias_linear00oadm_in_channelsobuild_scheduleroclone_to_uninit0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ocross_attentionodecoder_ffn_dim0odim_feedforwardoembed_utteranceoenc_to_dec_projoencoder_ffn_dimoffn_hidden_size00oflip_sin_to_cosogen_r_embeddingolatent_channelsolocal_attentionologits_soft_capolow_freq_factor0omel_window_stepomm_vision_toweronorm_num_groups0onum_lstm_layersophi_hermes_1_3bopost_layer_norm00oprediction_type000oquantized_llama0oquantized_model000oquantized_qwen20orecurrent_gemma0oresample_methodorope_embeddingsoscale_embedding00ospeaker_emb_dimospeaker_encoder0ospk_emb_on_textosuppress_tokensotext_generationoto_llama_configoto_llava_configotrain_timesteps00otype_vocab_size00000ouse_causal_convouse_in_shortcutA`ChineseClipModelA`ClassifierConfigA`ClipVisionConfigA`ConvDownsample1dA`ConvTrUpsample1dA`DDPMVarianceTypeA`DebertaV2EncoderA`DeepSeekV2ConfigA`DiagonalGaussianA`Llama3RopeConfigA`MMDiTXJointBlockA`MobileClipConfigA`ModelForCausalLMA`NO_SPEECH_TOKENSA`NonLinearityTypeA`PositionEmbedderA`RelativeKeyQueryA`ResidualConvUnitA`SelfAttnDiTBlockA`StreamableConv1dA`TRANSCRIBE_TOKENA`TimestepEmbedderA`TimestepScheduleA`TrOCRForCausalLMA`UpDecoderBlock2DA`apply_rotary_embA`attn_kernel_typeA`base_patch16_224A`byte_pair_encodeA`conv_kernel_size0A`encode_very_slowA`final_activationA`forward_with_img0A`from_gguf_bufferA`high_freq_factor0A`image_seq_lengthA`init_noise_sigma00000A`kv_cache_enabledA`last_kernel_size0A`layers_per_block0A`linear_attentionA`llama2_c_weights0A`local_rope_thetaA`model_num_layersA`object_detection0A`paligemma_3b_2240A`paligemma_3b_4480A`paligemma_3b_896A`partial_n_framesA`pixtral_12b_2409A`position_bucketsA`qk_rope_head_dimA`sample_max_valueA`segment_anything0A`stable_diffusion0A`stablelm_3b_4e1tA`timestep_spacing0A`trim_right_ratioA`vit_base_patch32000A`wuerstchen_priorAaChineseClipConfigAaClassifierPoolingAaDebertaV2NERModelAaDoubleStreamBlock0AaDownBlock2DConfigAaDpmSolverPlusPlusAaEuclideanCodebook0AaGraniteRopeConfigAaHFLLaVATextConfigAaLOGPROB_THRESHOLDAaLayerNormNoAffineAaModernBertDecoderAaSeaNetResnetBlockAaSingleStreamBlock0AaTemporalBlockTypeAaTimestepEmbeddingAaTwoWayTransformerAaattention_dropout00Aaclassifier_configAaclip_vision_towerAadecoder_layerdropAadepth_anything_v20Aaextract_key_valueAafeed_forward_proj0Aaforward_with_mask0Aaget_text_features000Aaglobal_rope_thetaAahidden_activation000Aaimage_token_index00Aainitializer_range000000Aaintermediate_size0000000000000000000000000000000000000000Aalayernorm_epsilon00Aalm_forward_embedsAalower_order_finalAamax_window_layers0Aamel_window_lengthAamm_projector_typeAamodel_hidden_sizeAan_residual_layersAanonlinearity_typeAanum_head_channelsAanum_hidden_layers000000000000000000000000000000000000000000Aapadded_vocab_size00Aapooler_hidden_actAaquantized_mistral0Aaquantized_rwkv_v50Aaquantized_rwkv_v60Aascale_model_input00000Aatarget_bandwidthsAatimestep_scheduleAaupsampling_ratiosAause_conv_shortcutAbCrossAttnUpBlock2DAbDebertaV2AttentionAbDownEncoderBlock2DAbEncodecResnetBlockAbFeatureFusionBlockAbGlobalResponseNormAbHFGenerationConfigAbLayerNormNoWeightsAbSpatialTransformerAbTransformerWeightsAbVectorQuantization0Abactivation_dropoutAbattention_head_dimAbblock_out_channelsAbclassifier_dropoutAbclassifier_poolingAbcontext_embed_sizeAbconv1d_weight_normAbdecoder_vocab_size0Abdownsample_padding00Abget_image_features000Abimage_aspect_ratioAbinitializer_factor00Abis_encoder_decoder0Ablayer_norm_epsilon000Ablayer_norm_no_biasAbnum_decoder_layersAbnum_encoder_blocksAbpooler_hidden_sizeAbpos_embed_max_sizeAbquantized_llama2_c0Abrelative_attentionAbset_use_flash_attnAbswiglu_multiple_ofAbtarget_vocab_sizesAbuse_sliding_window0AcAutoEncoderKLConfigAcClipTextTransformer0AcDDIMSchedulerConfigAcDDPMSchedulerConfigAcDEFAULT_MAX_SEQ_LEN0AcDebertaV2EmbeddingsAcDebertaV2SelfOutputAcHFLLaVAVisionConfigAcKarrasSigmaScheduleAcMixingResidualBlockAcMultiModalProjector0AcNO_SPEECH_THRESHOLDAcNO_TIMESTAMPS_TOKENAcNormConvTranspose1dAcPositionalEmbeddingAcResnetBlock2DConfigAcactivation_function00Acattention_head_sizeAcattention_processor0Acbias_dropout_fusion00Accandle_transformersAccenter_input_sampleAccross_attention_dim00Acdecoder_hidden_sizeAcdecoder_sparse_stepAcdepth_single_blocksAcencode_pre_quantizeAcencoder_hidden_size0Acforced_eos_token_idAcforward_input_embedAchidden_dropout_prob000Acmm_patch_merge_typeAcmm_use_im_start_endAcnum_attention_heads0000000000000000000000000000000000000000000000Acnum_experts_per_tokAcnum_key_value_heads00000000000000000000Acnum_residual_layersAcoutput_scale_factor000000Acquantized_blip_text0Acquantized_metavoice0Acquantized_mixformer0Acquantized_moondream0Acquantized_stable_lm0Acreplit_code_v1_5_3bActie_word_embeddings0000000000Acuse_post_quant_convAdAttentionBlockConfigAdBertLMPredictionHeadAdCrossAttnDownBlock2DAdDDPMWSchedulerConfigAdDeepSeekV2RopeConfigAdHFPreProcessorConfigAdModernBertClassifierAdProjectedTransformerAdSdeDpmSolverPlusPlusAdStreamingTransformerAdUNet2DConditionModelAdUNetMidBlock2DConfigAdUniPCSchedulerConfigAdapply_repeat_penaltyAdapply_rotary_emb_qkvAdaspect_ratio_settingAddilation_growth_rateAdhiera_no_final_layerAdimage_grid_pinpoints0Adlog_mel_spectrogram_Admax_source_positionsAdmax_target_positionsAdmodel_embedding_sizeAdnum_patches_per_sideAdopus_mt_tc_big_fr_enAdoutput_hidden_states000Adpositional_embeddingAdprojector_hidden_act0Adresidual_kernel_size0Advision_feature_layerAdvit_base_patch16_224AeBeitVisionTransformerAeChineseClipTextConfigAeClipVisionTransformerAeConvTranspose1dConfigAeDebertaV2IntermediateAeDeepSeekV2RopeScaling0AeDepthAnythingV2ConfigAeDinoVisionTransformer0AeEVA2VisionTransformerAeLinearAttentionConfigAeModernBertForMaskedLMAeModulateIntermediatesAePositionEmbeddingType000AeStableDiffusionConfigAeXLMRobertaForMaskedLMAeattention_hidden_sizeAeattention_window_sizeAeclip_vit_base_patch1600Aeget_cropped_pos_embedAeimage_crop_resolutionAemoe_intermediate_sizeAemulti_modal_projectorAemulti_query_attention00Aemulti_query_group_num00Aepartial_rotary_factor0Aeposition_biased_inputAequantized_var_builder0Aequery_pre_attn_scalar0Aerepvgg_no_final_layerAerescale_output_factorAesliced_attention_size0000Aeto_clip_vision_configAeuse_linear_projection0000AfCorrectorConfiguration0AfDebertaV2ContextPoolerAfEncodecConvTranspose1dAfQkvOnlyAttnProjectionsAfTextClassificationItemAfUpDecoderBlock2DConfigAfattn_logit_softcapping0Afattn_num_head_channels000Afbuild_clip_transformerAfcustom_text_projectionAfdecoder_start_token_id00000Affastvit_no_final_layerAfforward_for_embeddingsAfimage_captioning_largeAfimage_split_resolutionAfimage_text_hidden_size0Aflogit_scale_init_value0Afmax_relative_positionsAfmid_block_scale_factorAfmm_vision_select_layerAfnum_training_timestepsAfselect_best_resolutionAfsliding_window_patternAgChineseClipVisionConfigAgOpenClipTextTransformerAgResidualVectorQuantizer00AgUNetMidBlock2DCrossAttnAgconvnext_no_final_layerAgdecoder_attention_heads00Agencoder_attention_heads0Agfinal_logit_softcapping0Agget_intermediate_layers00Agmax_position_embeddings000000000000000000000000000000000Agnon_maximum_suppressionAgpad_vocab_size_multipleAgposition_embedding_type000Agresnet18_no_final_layerAgresnet34_no_final_layerAgresnet50_no_final_layerAhChineseClipVisionEncoderAhContextQkvOnlyJointBlockAhCrossAttnUpBlock2DConfigAhDownEncoderBlock2DConfigAhEdmDpmMultistepSchedulerAhExponentialSigmaScheduleAhImageClassificationModelAhSpatialTransformerConfigAheuler_ancestral_discrete0Ahfp32_residual_connection00Ahfrequency_embedding_sizeAhmm_vision_select_featureAhmobileone_no_final_layerAhnew_decoder_architectureAhposition_ids_in_meshgridAhresnet101_no_final_layerAhresnet152_no_final_layerAhsetup_without_projectionAiChineseClipTextEmbeddingsAiDeepSeekV2RotaryEmbeddingAiSemanticSegmentationModelAiStreamableConvTranspose1dAiStreamingTransformerLayerAiattention_softmax_in_fp3200Aidisable_norm_outer_blocksAiquantized_recurrent_gemma0AjChineseClipTextTransformerAjCrossAttnDownBlock2DConfigAjResidualVectorQuantizationAjT5ForConditionalGeneration0AjUNet2DConditionModelConfigAjclip_vit_large_patch14_336Ajconfig_amazon_mistral_liteAjdynamic_thresholding_ratioAjforward_without_projectionAjglobal_attn_every_n_layersAjmobilenetv4_no_final_layerAjtokenizer_model_max_lengthAkCOMPRESSION_RATIO_THRESHOLDAkChineseClipVisionEmbeddingsAkStreamingMultiheadAttentionAkcross_attention_hidden_sizeAkefficientvit_no_final_layerAkforward_until_encoder_layerAkget_anyres_image_grid_shapeAkuse_image_newline_parameterAlActivationWithOptionalGatingAlBlipForConditionalGeneration0AlChineseClipVisionTransformerAlDiagonalGaussianDistributionAlSlidingWindowAttentionConfigAlSplitResidualVectorQuantizerAlattention_probs_dropout_prob00Alconv_transpose1d_weight_normAlsoft_non_maximum_suppressionAltransformer_layers_per_block00AmSelfAttnModulateIntermediatesAmUNetMidBlock2DCrossAttnConfigAmapply_query_key_layer_scaling00AnMixFormerSequentialForCausalLM0Anrelative_attention_num_bucketsAnvision_feature_select_strategyAoDebertaV2SeqClassificationModelAoEulerAncestralDiscreteSchedulerAoLinearAttentionFeatureMapConfigAorelative_attention_max_distanceAoshared_expert_intermediate_sizeAouse_learned_position_embeddingsB`StreamingMultiheadCrossAttentionB`microsoft_trocr_base_handwrittenB`original_max_position_embeddings00B`share_encoder_decoder_embeddingsBaforward_embeds_without_projectionBaforward_with_additional_residualsBbDebertaV2DisentangledSelfAttentionBcModernBertForSequenceClassificationBcXLMRobertaForSequenceClassificationBcnum_cross_attention_key_value_headsBdFlattenedInterleavedEncodec2CodebookBdprepare_inputs_labels_for_multimodalBeEulerAncestralDiscreteSchedulerConfigBhapply_residual_connection_post_layernorm00Bhdeserialize_feed_forward_proj_activation") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/normalizedName/fbbf00e58a46.js b/network-poc/target-native/doc/search.index/normalizedName/fbbf00e58a46.js deleted file mode 100644 index bc24e6d..0000000 --- a/network-poc/target-native/doc/search.index/normalizedName/fbbf00e58a46.js +++ /dev/null @@ -1 +0,0 @@ -rd_("ak00ap0aqavaxayb()b->bsub[]ba0ba1ba2bb00bb10bb20bb30bb4bb5bb6bb7bchbeq000000000000000000000000000000000000000000000bhfbhsbm0bm1bm2bm3bm4bm5bppbrebs0bs10bs20bs3bs4bt50bt8bu8bv1bv200byi0call0canycarccbpecbh1cbh2cboxcclscdimcfa2cmlp00cqkvcsamcsincveccvggccfg0ccoscdac0cdev0;;cendceps0cetacf32cf64cfmt00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cgetcgpt0cimgciouckvscmpt0cmutcnew00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cphi0cpos00crhocs12csam0csincstrct12ctxtcu32cu64cvae0cveccvgg0cvit0dbboxdconvdflux0dfromdfuncdgelu0000dhanddhashdintoditemdmeandnone0dnorm0dpathdreaddrelu00dropedseekdspandtext0dtopk0dtopp0dvzipdyarn00dzerodattndattodb1g4db2g4db3g4dbase0dbeit0dbert0dbias0dblip0dbooldclip0000dconv0cdffcdkvddatadddim0dddpm000ddrop00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000deva20dflux0dfrom000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dglm400dhash00dheaddhuge0dinit00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dinto00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dload0000000000000000000000000000000000000dlstmdma36dmask0dmci0dmci1dmci2dmimi0dnanodnorm0dolmo0dphi30dpicodsa12dsa24dsa36dsdxl0dsizedspan0dstep00000000000000dtiny0dtopkdunitcv01cv1500cv210dvzip00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dworddxmaxdxmindymaxdyminealibi0easrefecache00ecloneedtype000000edebugeerrorefloat0ellavaelargeellama0emmditemodel000000000000000000000000000000000000000000000000dnffteregexeshapeesmallestate00000evalueevgg13evgg16evgg19ealibiearrayeaudio0ebased0ebuild000eclip2eclone0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000edepth00ederef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000edtype00eembedefemtoegatedegemma0ehiera00eindexeisizeelabelelarge00ellama00ellava00emamba0emmdit0emodel00000000eprior0eqwen20eranksescore0esdxl2esetupesliceesmall00espan1espan2esplitessd1b0estartethetaetrocr0etupleeusizeeutils00000ewidthfargmaxfborrowfconfig00000000000000000000000000000000000000000000000000000000000000000000000000000000fconv1dfconv2dfdevicefdim256fdim768ffalconffnoncefgating0fhasherfkarrasflinear000000fllama3fmodelsfmodulefoptionfqllamafqknorm0fresult00fsamplefsingle0fstringfswigluftensorftypeidfvision0fwpriorfblocks000fborrow00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fcandlefcausal00fcommon0fconfig0000000000000000000000000fconv2dfdecode0000000000000000000fdepthsfdevice000000000000fdinov20fencode0000000000000000fentityffactor000ffalcon0fgatingfgemma20fgemma30fgroupsfheightfhelium0finterpflayersflinear00fmarian0fmediumfmodels0fmscaleenembdenhead0enewv20foffseteoutchfratiosfrepvgg00fresnet000fsample0fseanet00fsiglip0fssd1b2eunipc0funpackfvaluesfxlargegcontent0gdptheadgdecoder0000gdefault00gdim1024gdim2048gdim4096gdim6144gdim8192gdynamicgembedndgenabled0gencodecgencoder0000000gepsilonggeluerfggelunewggranite0ghashmapghashsetgleadingglearnedgmtmodelgmoduletgneritemgpadmode0gqmatmulgqtensorgrmsnormgreflect011111gscratchgsnake1dgsplitopgtinyvitgtoownedgtryfromgtryintogwhisper0fbase8bfbiasffgbigcode0fchmultgchatglm0gcolpali0gcontextfdmodel00000gdecoder000000gdefault000000000000000000000000000000000000000000000000gdenoisegdropoutgencodec00gencoder0000gfastvit00fffndimgforward000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fglm36bggranite0fimgidsgindicesglinear1glinear2gmistral0gmixtral0gmodulesfnheadsfninnerfnlayer00gnonzerogoverlapgpixtral0gpointerfprevxsgresnetsgrmsnorm00frwkvv50frwkvv60gschnell0fseqlengstridesftxtidsftypeid00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000funet2d0gupblock0fv2basegvariantgwhisper0habsolute000hconstant0hditblockhdisabledhembeddimhid2label0hkeypointhlabel2idhlinspace0hmlpblockhmultiple0gnframeshnogating0hnormtype00hpaellavqhresblockhsampling0hsigmaminhtostringhtrailinghadapters0gaxesdimgbetaend00hbincountgc102420gc153620hchannels0gclipqkvhcompress0gconvacthconvnext00hdiffnext0hfalcon7bgfromarchgenerategheaddim00000000hid2label00ginitstdhlabel2id0glinearb0hlinspacegllama2c0gmlpbiasgnlayersgnewtinygnormeps000hopenclip0gpadmode0gpadwith00gqkvbias0hresamplehresnet18hresnet34hresnet50gsamplefhsampling0gtiny15mgtiny42mgtinyvit0gtoowned0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000gtryfrom00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000gtryinto00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000hvalidategvitbase000iattention00iattnblockibertlayeribertmodel0iborrowmuticlipmodeliconvlayerheottokeniembedheadiembedding00iformatterihiddenact0ilastlayer0ilayernorm0000immditcorehnsamplesinonzeroopipartialeqipointableiquickgelu00irecurrentireplicate0hsottokenischeduleriserializeitextmodelitimestepsitokenizer000itorchattniupblock2diwdiffnexthaddnoise0000iattention0hbaseplushbetafasthbetaslowhbiasattnhbliptext0hbuildvaehcandlennicodegeex4hconfig2bhconfig6biconvmixer0icorrectorhcropsizeidebertav20ideepseek20hderefmut00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000idimensionhdoresizeidownblockhembeddim0000iembedding000hexpratiohforwardt0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000hfromggmlhfromgguf0000hfromjsonhgetnoisehheadsize00himagestdhiscausalhjinabert0hkvrepeathlinearinhlruwidthimetavoice0imixformer0hmlpratioimobileone00imoondream0hnfiltersgnheadkvhnormtype0inormalizehnumheads00hpaellavq0ipaligemma0hperlayeripersimmon0ipipelines0iquantizerhqwen2moe0ireferencehrepeatkviresnet101iresnet152hropetype0isegformer0iserialize000000hsigmamaxhsigmaminhsrratioshstablelm0istarcoderitimesteps00000htiny110mhtiny260khtrueskiphusecache0000000000gv018x7bhvitgianthvitlarge00hvitsmall00jactivation000jbincountopjclipconfigjdeepseekv2jembeddings0jequivalent0jfinallayerjfixedlargejfixedsmalljfromsigmasjgptbigcodeihoplengthiimagesizejjointblockjlayerscalejmambablockjmodernbertjnormconv1djsequentialjserializerjsolvertypejtextconfigjtextpooler0jtopkoutputjtrocrmodeljvarbuilder000000000000jwlayernormjweightnorm0jactivation000000jattentionsibetastart00iblocksize0iborrowmut00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ibuildunethcfg1bv010icloneinto0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000jconfidenceiconfig34bicopystatejdinov2reg40jdistilbert0idorescaleiembedcodeiembedheadjembeddings0000jequivalent00000000000000000000000000000000000000000000000iforwardcaiforwarddtiframerate0ifreqshiftifromcodesjgeneration0igroupsoutihiddenact0000000000000000000000ihiddendimiimagemeaniimagesize0000000000iisdecoder00ilatentdimilayernorm0ilinearoutilmforwardimaxlength0imaxperiodimlpratiosjmobileclip0imodeltype0000jmodernbert0hnkvheadsinormfirstinumgroups0inumlayers0000000000invembedv20ioutputdimiparlertts0ipatchsize000000000hpcmtomeliphiconfigjpreprocessiresneteps00000jresolutioniroperatio0iropetheta00000000000000000000jschedulers0isd3mediumisdxlturboiseqlength00iskipstepsjstarcoder20itextmodel0000000000jtokenizers0junpatchifyhvecindimivocabsize000000000000000000000000000000000000000000jwuerstchen00izchannelskautoencoderkbertencoderkblockconfigkclipencoderkdeserializekdownblock2dkencodeclstmkexponentialkidentitymapkinterpolatekllavaconfigklayernorm2dkllamaconfigimaxseqlen0kmmprojectorkmaskdecoderkmlpembedder0krelativekeyjsampleratektextdecoder0ktrocrconfigkvpredictionkvisionmodel00kwithforwardkautoencoder0jblocktypesjclipsamplejclsdropoutjcontextdimjconvgroupsjconvlayoutjdecodecodejdecodestepkdeserialize000000000000000000000000000000000000000000000000000000000000000000000000000000000000000idivl2norm00jencodeslow0jencodestepiendoftextjfromreader0jhiddensize000000000000000000000000000000000000000000jinchannels000jinfeaturesjintoconfig0jkernelsize0jkvchannels00jlayerscaleilkcuseactimaxseqlen0kmobilenetv400jmultiquery0jnumexpertsjnumfiltersjnumpatchesjpatchsizeskprojections0krenormalizejresetstate000000000jrmsnormepsjsamplerateisd35largejsolvertypektemperature000jtextconfig00000000itinyvit5mjtorchdtype00ktransformer00000000jvarbuilderjvocabsizesjxlmroberta0laudioencoder0lbetaschedulekchunklengthlconv1dconfiglconv2dconfigldecoderblockldecoderlayerldeserializerlefficientnetlencoderblocklintoiteratorlllamaeostokslmbconvconfiglmodelvariantlmodelweights000lresidualunitlscaledlinearlspectralnormlstreamtensorltemperaturesltopkthentopp0ltrocrdecoderltrocrencoderlunpatchifierlvisionconfig000jaddqkvbias00kaddupsample0jbostokenid00000000000kchineseclip0kcodebookdimkcodegeex49b0jconfig7bv1jconfig7bv2kcontainskeykconv1dwidthkdecodebyteskdecodecodeskdonormalizekdropoutratelefficientnet0lefficientvit00kembedtokens00kencodebyteskencodeimagejeostokenid00000000000000kfeedforwardkfinallinear0kforwarddiffkforwardnormkforwardtextkfromqtensorkfromweights000jgetdensepejgetnoshapekgetschedulekhiddensizeskhybridlargekignoreindexkmaskdecoder0kmmprojectorhnew15bv5inew400mv5jnormrelebdknumchannels00000jnummelbinskoutchannels00koutfeaturesjpadtokenid0000000000000000jposatttypekqklayernormlquantization0kquantizednn0kquantizedt50jrmsnormeps000000000000000kropescaling00000krotaryndimskscalefactorkscalingtype0jsd35mediumjsetkvcache0kshiftfactorksolverorderkstarcoder1bkstarcoder3bkstarcoder7bjstellaenv50kstepsoffset0ktextdecoder0ktextencoder0lthresholdinglunpreprocessjusekvcache00kvisionmodel0000000kvisiontowerkwithtracing0malgorithmtypemautoencoderklmclonetouninitmddimschedulermddpmschedulermdecoderconfigmencodecconv1dmencoderconfig0mfixedlargelogmfixedsmalllogmgraniteconfigmhfllavaconfigmmodernbertmlpmpatchembeddermpromptencodermresidualblockmresnetblock2dmseanetdecodermseanetencodermselfattention0msigmaschedulemstabledropoutmstateperlayermtiltedencodecmtimegroupnorm0mtimestepblockmtopklastdimopmvisionencoder0lactivationfnmarchitectures00laudioencoder0lbetaschedule00lcodebooksize0ldilationbaselembedpromptslencodeimageslfromsamplinglhybridmediumlimageencoder0limagenewlinelmodelbitrateknlocalheadslnumcodebooks0knumkvgroupsjopusmtfrenlparallelattnlpreattention0000kpuffinphiv2lquantizedmpt0lquantizedphi0lquantizerdimkquantizernqlrescaleeverylresnetgroups00000lsamplingrate00kshareattkeyltembchannelsltopkunsortedkuseconvbiaslvariancetypelvisionconfig000000000nattentionblocknattnkerneltypencliptextconfigncrossattentionnddpmwschedulerndebertav2layerndebertav2modelnembeddingmodelngraniteeostoksnhiddenactlayernllama3ropetypenmodernbertheadnpredictiontypenresblockstagebnresamplemethodnscaledropetypent5encodermodel0nunetmidblock2dnvectorembeddermadddownsample0mattentionbias00000maudiochannelslchunklengthslclearkvcache0000000000000000000000000kconfig7bv01lconfigchatmllcontextindimlcrossattndimmdecoderlayers00ldocentercropldoconvertrgbmembeddingsizemencoderlayers0mforwardembeds0mforwardimagesmgeneratemasksmguidanceembedmhiddendropoutmlanguagemodelllayernormeps0000000000000000llinearnobias00lmelnchannelslmmhiddensizelmscalealldimmmusicgensmalllnormtopkproblnumresblocksmpoolerdropoutmpostattention00mprojectiondim000000000000mpromptencoder0mquantizedblip0mquantizedphi30mquantizerbinsmrescalefactorlresetkvcache00000000000000000mscalingfactormsigmaschedulemslidingwindow0000lunet2dblocks0luseconvblocklusecrossattnluseflashattn000lusequantconvmvisionencoder000oattnprojectionsobertformaskedlmobertonlymlmheadoclipvisiontoweroconvtranspose1dodebertav2outputodepthanythingv2odistilbertmodelofinalsigmastypeogeluapproximate0ograniteropetypeoimageencodervitolayernormconfigolinearordynamic0ologitsprocessorommditjointblockomobileclipmodelomodernbertlayeroqkvonlyditblockorotaryembedding0orotatingkvcacheoschedulerconfigosquaredcoscapv2ostreamingmodulentranslatetokenotextlmheadmodel0otexttransformerotimestepspacingoupblock2dconfigovectorquantizeroxlmrobertamodelmaddbiaslinear00madminchannelsnbuildschedulermclonetouninit0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ncrossattentionmdecoderffndim0ndimfeedforwardnembedutterancelenctodecprojmencoderffndimmffnhiddensize00lflipsintocosmgenrembeddingnlatentchannelsnlocalattentionmlogitssoftcapmlowfreqfactor0mmelwindowstepmmmvisiontowermnormnumgroups0mnumlstmlayerslphihermes13bmpostlayernorm00npredictiontype000nquantizedllama0nquantizedmodel000nquantizedqwen20nrecurrentgemma0nresamplemethodnropeembeddingsnscaleembedding00mspeakerembdimnspeakerencoder0lspkembontextnsuppresstokensntextgenerationmtollamaconfigmtollavaconfigntraintimesteps00mtypevocabsize00000musecausalconvmuseinshortcutA`chineseclipmodelA`classifierconfigA`clipvisionconfigA`convdownsample1dA`convtrupsample1dA`ddpmvariancetypeA`debertav2encoderA`deepseekv2configA`diagonalgaussianA`llama3ropeconfigA`mmditxjointblockA`mobileclipconfigA`modelforcausallmnnospeechtokensA`nonlinearitytypeA`positionembedderA`relativekeyqueryA`residualconvunitA`selfattnditblockA`streamableconv1dotranscribetokenA`timestepembedderA`timestepscheduleA`trocrforcausallmA`updecoderblock2dnapplyrotaryembnattnkerneltypenbasepatch16224nbytepairencodenconvkernelsize0nencodeveryslowofinalactivationnforwardwithimg0nfromggufbuffernhighfreqfactor0nimageseqlengthninitnoisesigma00000nkvcacheenablednlastkernelsize0nlayersperblock0olinearattentionnllama2cweights0nlocalropethetanmodelnumlayersoobjectdetection0npaligemma3b2240npaligemma3b4480npaligemma3b896npartialnframesnpixtral12b2409opositionbucketsmqkropeheaddimnsamplemaxvalueosegmentanything0ostablediffusion0nstablelm3b4e1totimestepspacing0ntrimrightrationvitbasepatch32000owuerstchenpriorAachineseclipconfigAaclassifierpoolingAadebertav2nermodelAadoublestreamblock0Aadownblock2dconfigAadpmsolverplusplusAaeuclideancodebook0AagraniteropeconfigAahfllavatextconfigA`logprobthresholdAalayernormnoaffineAamodernbertdecoderAaseanetresnetblockAasinglestreamblock0AatemporalblocktypeAatimestepembeddingAatwowaytransformerA`attentiondropout00A`classifierconfigoclipvisiontowerA`decoderlayerdropodepthanythingv20oextractkeyvalueofeedforwardproj0oforwardwithmask0ogettextfeatures000oglobalropethetaA`hiddenactivation000oimagetokenindex00A`initializerrange000000A`intermediatesize0000000000000000000000000000000000000000A`layernormepsilon00olmforwardembedsolowerorderfinalomaxwindowlayers0omelwindowlengthommprojectortypeomodelhiddensizeonresiduallayersA`nonlinearitytypeonumheadchannelsonumhiddenlayers000000000000000000000000000000000000000000opaddedvocabsize00opoolerhiddenactA`quantizedmistral0oquantizedrwkvv50oquantizedrwkvv60oscalemodelinput00000A`targetbandwidthsA`timestepscheduleA`upsamplingratiosouseconvshortcutAbcrossattnupblock2dAbdebertav2attentionAbdownencoderblock2dAbencodecresnetblockAbfeaturefusionblockAbglobalresponsenormAbhfgenerationconfigAblayernormnoweightsAbspatialtransformerAbtransformerweightsAbvectorquantization0AaactivationdropoutA`attentionheaddimA`blockoutchannelsAaclassifierdropoutAaclassifierpoolingA`contextembedsizeA`conv1dweightnormA`decodervocabsize0Aadownsamplepadding00A`getimagefeatures000A`imageaspectratioAainitializerfactor00A`isencoderdecoder0A`layernormepsilon000olayernormnobiasA`numdecoderlayersA`numencoderblocksA`poolerhiddensizeoposembedmaxsizeA`quantizedllama2c0AarelativeattentionosetuseflashattnA`swiglumultipleofA`targetvocabsizesA`useslidingwindow0AcautoencoderklconfigAccliptexttransformer0AcddimschedulerconfigAcddpmschedulerconfigA`defaultmaxseqlen0Acdebertav2embeddingsAcdebertav2selfoutputAchfllavavisionconfigAckarrassigmascheduleAcmixingresidualblockAcmultimodalprojector0AanospeechthresholdAanotimestampstokenAcnormconvtranspose1dAcpositionalembeddingAcresnetblock2dconfigAbactivationfunction00AaattentionheadsizeAbattentionprocessor0Aabiasdropoutfusion00AbcandletransformersAacenterinputsampleAacrossattentiondim00AadecoderhiddensizeAadecodersparsestepAadepthsingleblocksAaencodeprequantizeAaencoderhiddensize0A`forcedeostokenidAaforwardinputembedAahiddendropoutprob000A`mmpatchmergetypeommuseimstartendAanumattentionheads0000000000000000000000000000000000000000000000A`numexpertspertokA`numkeyvalueheads00000000000000000000AanumresiduallayersAaoutputscalefactor000000Aaquantizedbliptext0Abquantizedmetavoice0Abquantizedmixformer0Abquantizedmoondream0Aaquantizedstablelm0oreplitcodev153bAatiewordembeddings0000000000A`usepostquantconvAdattentionblockconfigAdbertlmpredictionheadAdcrossattndownblock2dAdddpmwschedulerconfigAddeepseekv2ropeconfigAdhfpreprocessorconfigAdmodernbertclassifierAdprojectedtransformerAdsdedpmsolverplusplusAdstreamingtransformerAdunet2dconditionmodelAdunetmidblock2dconfigAdunipcschedulerconfigAbapplyrepeatpenaltyAaapplyrotaryembqkvAbaspectratiosettingAbdilationgrowthrateAahieranofinallayerAbimagegridpinpoints0AalogmelspectrogramAbmaxsourcepositionsAbmaxtargetpositionsAbmodelembeddingsizeAanumpatchespersideoopusmttcbigfrenAboutputhiddenstates000AcpositionalembeddingAbprojectorhiddenact0Abresidualkernelsize0AbvisionfeaturelayerAavitbasepatch16224AebeitvisiontransformerAechinesecliptextconfigAeclipvisiontransformerAeconvtranspose1dconfigAedebertav2intermediateAedeepseekv2ropescaling0Aedepthanythingv2configAedinovisiontransformer0Aeeva2visiontransformerAelinearattentionconfigAemodernbertformaskedlmAemodulateintermediatesAepositionembeddingtype000AestablediffusionconfigAexlmrobertaformaskedlmAcattentionhiddensizeAcattentionwindowsizeAbclipvitbasepatch1600AbgetcroppedposembedAcimagecropresolutionAcmoeintermediatesizeAcmultimodalprojectorAcmultiqueryattention00Abmultiquerygroupnum00Acpartialrotaryfactor0AcpositionbiasedinputAcquantizedvarbuilder0Abquerypreattnscalar0AbrepvggnofinallayerAcrescaleoutputfactorAcslicedattentionsize0000AbtoclipvisionconfigAcuselinearprojection0000Afcorrectorconfiguration0Afdebertav2contextpoolerAfencodecconvtranspose1dAfqkvonlyattnprojectionsAftextclassificationitemAfupdecoderblock2dconfigAdattnlogitsoftcapping0Acattnnumheadchannels000AdbuildcliptransformerAdcustomtextprojectionAcdecoderstarttokenid00000AcfastvitnofinallayerAdforwardforembeddingsAdimagecaptioninglargeAdimagesplitresolutionAcimagetexthiddensize0Aclogitscaleinitvalue0AdmaxrelativepositionsAcmidblockscalefactorAcmmvisionselectlayerAdnumtrainingtimestepsAdselectbestresolutionAdslidingwindowpatternAgchineseclipvisionconfigAgopencliptexttransformerAgresidualvectorquantizer00Agunetmidblock2dcrossattnAdconvnextnofinallayerAedecoderattentionheads00Aeencoderattentionheads0Aefinallogitsoftcapping0Aegetintermediatelayers00Aemaxpositionembeddings000000000000000000000000000000000AenonmaximumsuppressionAdpadvocabsizemultipleAepositionembeddingtype000Adresnet18nofinallayerAdresnet34nofinallayerAdresnet50nofinallayerAhchineseclipvisionencoderAhcontextqkvonlyjointblockAhcrossattnupblock2dconfigAhdownencoderblock2dconfigAhedmdpmmultistepschedulerAhexponentialsigmascheduleAhimageclassificationmodelAhspatialtransformerconfigAfeulerancestraldiscrete0Affp32residualconnection00AffrequencyembeddingsizeAemmvisionselectfeatureAemobileonenofinallayerAfnewdecoderarchitectureAepositionidsinmeshgridAeresnet101nofinallayerAeresnet152nofinallayerAfsetupwithoutprojectionAichinesecliptextembeddingsAideepseekv2rotaryembeddingAisemanticsegmentationmodelAistreamableconvtranspose1dAistreamingtransformerlayerAfattentionsoftmaxinfp3200AfdisablenormouterblocksAgquantizedrecurrentgemma0AjchinesecliptexttransformerAjcrossattndownblock2dconfigAjresidualvectorquantizationAjt5forconditionalgeneration0Ajunet2dconditionmodelconfigAfclipvitlargepatch14336AgconfigamazonmistralliteAhdynamicthresholdingratioAhforwardwithoutprojectionAfglobalattneverynlayersAgmobilenetv4nofinallayerAgtokenizermodelmaxlengthAicompressionratiothresholdAkchineseclipvisionembeddingsAkstreamingmultiheadattentionAhcrossattentionhiddensizeAhefficientvitnofinallayerAhforwarduntilencoderlayerAggetanyresimagegridshapeAhuseimagenewlineparameterAlactivationwithoptionalgatingAlblipforconditionalgeneration0AlchineseclipvisiontransformerAldiagonalgaussiandistributionAlslidingwindowattentionconfigAlsplitresidualvectorquantizerAiattentionprobsdropoutprob00Aiconvtranspose1dweightnormAisoftnonmaximumsuppressionAitransformerlayersperblock00AmselfattnmodulateintermediatesAmunetmidblock2dcrossattnconfigAiapplyquerykeylayerscaling00Anmixformersequentialforcausallm0AkrelativeattentionnumbucketsAkvisionfeatureselectstrategyAodebertav2seqclassificationmodelAoeulerancestraldiscreteschedulerAolinearattentionfeaturemapconfigAlrelativeattentionmaxdistanceAlsharedexpertintermediatesizeAluselearnedpositionembeddingsB`streamingmultiheadcrossattentionAmmicrosofttrocrbasehandwrittenAmoriginalmaxpositionembeddings00AmshareencoderdecoderembeddingsAnforwardembedswithoutprojectionAnforwardwithadditionalresidualsBbdebertav2disentangledselfattentionBcmodernbertforsequenceclassificationBcxlmrobertaforsequenceclassificationAnnumcrossattentionkeyvalueheadsBdflattenedinterleavedencodec2codebookB`prepareinputslabelsformultimodalBeeulerancestraldiscreteschedulerconfigBdapplyresidualconnectionpostlayernorm00Bddeserializefeedforwardprojactivation") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/path/b9a82bfdb43f.js b/network-poc/target-native/doc/search.index/path/b9a82bfdb43f.js deleted file mode 100644 index 62778c8..0000000 --- a/network-poc/target-native/doc/search.index/path/b9a82bfdb43f.js +++ /dev/null @@ -1 +0,0 @@ -rd_("f[1,\"\"]00Ba[2,\"candle_transformers::models\"]10C`[15,\"candle_transformers::generation::Sampling\"]A`[10,\"core::any\"]Ao[5,\"alloc::sync\",\"alloc::sync\"]Fm[5,\"candle_transformers::models::metavoice::tokenizers\",\"candle_transformers::models::metavoice::tokenizers\"]Ba[5,\"alloc::boxed\",\"alloc::boxed\"]Bn[10,\"candle_core::shape\",\"candle_core::shape\"]Cd[2,\"candle_transformers::models::mimi::transformer\"]Fe[6,\"candle_transformers::models::mimi::transformer\",\"candle_transformers::models::mimi::transformer\"]Fg[5,\"candle_transformers::models::mmdit::projections\",\"candle_transformers::models::mmdit::projections\"]0Fm[5,\"candle_transformers::models::segment_anything::sam\",\"candle_transformers::models::segment_anything::sam\"]Am[5,\"alloc::vec\",\"alloc::vec\"]Di[5,\"candle_transformers::models::vgg\",\"candle_transformers::models::vgg\"]<==Bl[2,\"candle_transformers::models::metavoice\"]=f[0,\"\"]>Cc[2,\"candle_transformers::models::segment_anything\"]f[1,\"\"]00Cc[2,\"candle_transformers::models::stable_diffusion\"]Ba[2,\"candle_transformers::models\"]0Ec[5,\"candle_transformers::object_detection\",\"candle_transformers::object_detection\"]Ei[5,\"candle_transformers::models::flux::model\",\"candle_transformers::models::flux::model\"]Fm[5,\"candle_transformers::models::flux::quantized_model\",\"candle_transformers::models::flux::quantized_model\"]Ad[10,\"core::convert\"]Bg[5,\"candle_nn::func\",\"candle_nn::func\"]Aa[10,\"core::hash\"]2g[17,\"\"]Eg[6,\"candle_transformers::models::mimi::conv\",\"candle_transformers::models::mimi::conv\"]Fe[6,\"candle_transformers::models::mimi::transformer\",\"candle_transformers::models::mimi::transformer\"]Ak[5,\"std::path\",\"std::path\"]Ah[10,\"std::io\",\"std::io\"]0Bc[5,\"tracing::span\",\"tracing::span\"]C`[15,\"candle_transformers::generation::Sampling\"]0Ah[10,\"ppv_lite86::types\"]Dd[15,\"candle_transformers::models::deepseek2::DeepSeekV2RopeScaling\"]???f[1,\"\"]Ba[2,\"candle_transformers::models\"]Cc[2,\"candle_transformers::models::stable_diffusion\"]Bg[2,\"candle_transformers::models::mimi\"]11Bm[2,\"candle_transformers::models::wuerstchen\"]3333334Bd[10,\"core::convert\",\"core::convert\"]Ea[5,\"candle_transformers::models::granite\",\"candle_transformers::models::granite\"]Dm[5,\"candle_transformers::models::llama\",\"candle_transformers::models::llama\"]Ec[5,\"candle_transformers::models::llama2_c\",\"candle_transformers::models::llama2_c\"]Ab[10,\"core::clone\"]Bm[6,\"candle_core::dtype\",\"candle_core::dtype\"]A`[10,\"core::fmt\"]Bm[6,\"candle_core::error\",\"candle_core::error\"]F`[10,\"candle_transformers::models::whisper::audio\",\"candle_transformers::models::whisper::audio\"]Dm[5,\"candle_transformers::models::llava\",\"candle_transformers::models::llava\"]76Ek[5,\"candle_transformers::models::mmdit::model\",\"candle_transformers::models::mmdit::model\"]Dm[5,\"candle_transformers::models::based\",\"candle_transformers::models::based\"]Ea[5,\"candle_transformers::models::chatglm\",\"candle_transformers::models::chatglm\"]Ek[5,\"candle_transformers::models::codegeex4_9b\",\"candle_transformers::models::codegeex4_9b\"]Ea[5,\"candle_transformers::models::colpali\",\"candle_transformers::models::colpali\"]Di[5,\"candle_transformers::models::dac\",\"candle_transformers::models::dac\"]Ea[5,\"candle_transformers::models::encodec\",\"candle_transformers::models::encodec\"]Dm[5,\"candle_transformers::models::gemma\",\"candle_transformers::models::gemma\"]Do[5,\"candle_transformers::models::gemma2\",\"candle_transformers::models::gemma2\"]Do[5,\"candle_transformers::models::gemma3\",\"candle_transformers::models::gemma3\"]Dk[5,\"candle_transformers::models::glm4\",\"candle_transformers::models::glm4\"]Do[5,\"candle_transformers::models::helium\",\"candle_transformers::models::helium\"]Dm[5,\"candle_transformers::models::mamba\",\"candle_transformers::models::mamba\"]Fo[5,\"candle_transformers::models::metavoice::transformer\",\"candle_transformers::models::metavoice::transformer\"]Gg[5,\"candle_transformers::models::metavoice::speaker_encoder\",\"candle_transformers::models::metavoice::speaker_encoder\"]Eo[5,\"candle_transformers::models::metavoice::gpt\",\"candle_transformers::models::metavoice::gpt\"]Ea[5,\"candle_transformers::models::mistral\",\"candle_transformers::models::mistral\"]Ea[5,\"candle_transformers::models::mixtral\",\"candle_transformers::models::mixtral\"]Ee[5,\"candle_transformers::models::moondream\",\"candle_transformers::models::moondream\"]Di[5,\"candle_transformers::models::mpt\",\"candle_transformers::models::mpt\"]Fm[5,\"candle_transformers::models::nvembed_v2::embedding\",\"candle_transformers::models::nvembed_v2::embedding\"]Fe[5,\"candle_transformers::models::nvembed_v2::model\",\"candle_transformers::models::nvembed_v2::model\"]Dk[5,\"candle_transformers::models::olmo\",\"candle_transformers::models::olmo\"]Ee[5,\"candle_transformers::models::paligemma\",\"candle_transformers::models::paligemma\"]Eg[5,\"candle_transformers::models::parler_tts\",\"candle_transformers::models::parler_tts\"]Di[5,\"candle_transformers::models::phi\",\"candle_transformers::models::phi\"]Dk[5,\"candle_transformers::models::phi3\",\"candle_transformers::models::phi3\"]Eo[5,\"candle_transformers::models::pixtral::llava\",\"candle_transformers::models::pixtral::llava\"]Fm[5,\"candle_transformers::models::pixtral::vision_model\",\"candle_transformers::models::pixtral::vision_model\"]Hc[5,\"candle_transformers::models::quantized_metavoice::transformer\",\"candle_transformers::models::quantized_metavoice::transformer\"]Fe[5,\"candle_transformers::models::quantized_mistral\",\"candle_transformers::models::quantized_mistral\"]Fi[5,\"candle_transformers::models::quantized_moondream\",\"candle_transformers::models::quantized_moondream\"]Em[5,\"candle_transformers::models::quantized_mpt\",\"candle_transformers::models::quantized_mpt\"]Ge[5,\"candle_transformers::models::quantized_recurrent_gemma\",\"candle_transformers::models::quantized_recurrent_gemma\"]Fe[5,\"candle_transformers::models::quantized_rwkv_v5\",\"candle_transformers::models::quantized_rwkv_v5\"]Fe[5,\"candle_transformers::models::quantized_rwkv_v6\",\"candle_transformers::models::quantized_rwkv_v6\"]Fi[5,\"candle_transformers::models::quantized_stable_lm\",\"candle_transformers::models::quantized_stable_lm\"]Dm[5,\"candle_transformers::models::qwen2\",\"candle_transformers::models::qwen2\"]Ee[5,\"candle_transformers::models::qwen2_moe\",\"candle_transformers::models::qwen2_moe\"]Fa[5,\"candle_transformers::models::recurrent_gemma\",\"candle_transformers::models::recurrent_gemma\"]Ea[5,\"candle_transformers::models::rwkv_v5\",\"candle_transformers::models::rwkv_v5\"]Ea[5,\"candle_transformers::models::rwkv_v6\",\"candle_transformers::models::rwkv_v6\"]Do[5,\"candle_transformers::models::siglip\",\"candle_transformers::models::siglip\"]Ee[5,\"candle_transformers::models::stable_lm\",\"candle_transformers::models::stable_lm\"]Eg[5,\"candle_transformers::models::starcoder2\",\"candle_transformers::models::starcoder2\"]Ek[5,\"candle_transformers::models::stella_en_v5\",\"candle_transformers::models::stella_en_v5\"]Di[5,\"candle_transformers::models::vit\",\"candle_transformers::models::vit\"]Dg[5,\"candle_transformers::models::yi\",\"candle_transformers::models::yi\"]Ao[5,\"fancy_regex\",\"fancy_regex\"]Bm[5,\"candle_core::shape\",\"candle_core::shape\"]Eo[5,\"candle_transformers::models::flux::sampling\",\"candle_transformers::models::flux::sampling\"]Dm[5,\"candle_transformers::models::mamba\",\"candle_transformers::models::mamba\"];Bk[6,\"serde_json::value\",\"serde_json::value\"]f[1,\"\"]Bj[2,\"candle_transformers::models::whisper\"]Ba[2,\"candle_transformers::models\"]00200Bj[2,\"candle_transformers::models::pixtral\"]11Bg[2,\"candle_transformers::models::flux\"]Bh[2,\"candle_transformers::models::mmdit\"]Bm[2,\"candle_transformers::models::nvembed_v2\"]5Bm[2,\"candle_transformers::models::wuerstchen\"]57577Ai[2,\"candle_transformers\"]Bh[2,\"candle_transformers::models::llava\"]Cc[2,\"candle_transformers::models::stable_diffusion\"]Ac[10,\"core::borrow\"]Dm[5,\"candle_transformers::models::based\",\"candle_transformers::models::based\"]Dk[5,\"candle_transformers::models::bert\",\"candle_transformers::models::bert\"]Ea[5,\"candle_transformers::models::bigcode\",\"candle_transformers::models::bigcode\"]Dk[5,\"candle_transformers::models::blip\",\"candle_transformers::models::blip\"]Ee[5,\"candle_transformers::models::blip_text\",\"candle_transformers::models::blip_text\"]Ea[5,\"candle_transformers::models::chatglm\",\"candle_transformers::models::chatglm\"]Ek[5,\"candle_transformers::models::codegeex4_9b\",\"candle_transformers::models::codegeex4_9b\"]Ec[5,\"candle_transformers::models::convnext\",\"candle_transformers::models::convnext\"]Di[5,\"candle_transformers::models::dac\",\"candle_transformers::models::dac\"]Ee[5,\"candle_transformers::models::debertav2\",\"candle_transformers::models::debertav2\"]Eg[5,\"candle_transformers::models::distilbert\",\"candle_transformers::models::distilbert\"]Ek[5,\"candle_transformers::models::efficientvit\",\"candle_transformers::models::efficientvit\"]Ea[5,\"candle_transformers::models::encodec\",\"candle_transformers::models::encodec\"]Do[5,\"candle_transformers::models::falcon\",\"candle_transformers::models::falcon\"]Ea[5,\"candle_transformers::models::fastvit\",\"candle_transformers::models::fastvit\"]Ei[5,\"candle_transformers::models::flux::model\",\"candle_transformers::models::flux::model\"]Fe[5,\"candle_transformers::models::flux::autoencoder\",\"candle_transformers::models::flux::autoencoder\"]Dm[5,\"candle_transformers::models::gemma\",\"candle_transformers::models::gemma\"]Do[5,\"candle_transformers::models::gemma2\",\"candle_transformers::models::gemma2\"]Do[5,\"candle_transformers::models::gemma3\",\"candle_transformers::models::gemma3\"]Dk[5,\"candle_transformers::models::glm4\",\"candle_transformers::models::glm4\"]Ea[5,\"candle_transformers::models::granite\",\"candle_transformers::models::granite\"]Do[5,\"candle_transformers::models::helium\",\"candle_transformers::models::helium\"]Dm[5,\"candle_transformers::models::hiera\",\"candle_transformers::models::hiera\"]Ee[5,\"candle_transformers::models::jina_bert\",\"candle_transformers::models::jina_bert\"]Dm[5,\"candle_transformers::models::llama\",\"candle_transformers::models::llama\"]Ec[5,\"candle_transformers::models::llama2_c\",\"candle_transformers::models::llama2_c\"]Dm[5,\"candle_transformers::models::mamba\",\"candle_transformers::models::mamba\"]Do[5,\"candle_transformers::models::marian\",\"candle_transformers::models::marian\"]Fo[5,\"candle_transformers::models::metavoice::transformer\",\"candle_transformers::models::metavoice::transformer\"]Gg[5,\"candle_transformers::models::metavoice::speaker_encoder\",\"candle_transformers::models::metavoice::speaker_encoder\"]Eo[5,\"candle_transformers::models::metavoice::gpt\",\"candle_transformers::models::metavoice::gpt\"]Em[5,\"candle_transformers::models::mimi::encodec\",\"candle_transformers::models::mimi::encodec\"]Fe[5,\"candle_transformers::models::mimi::transformer\",\"candle_transformers::models::mimi::transformer\"]Ek[5,\"candle_transformers::models::mimi::seanet\",\"candle_transformers::models::mimi::seanet\"]Ea[5,\"candle_transformers::models::mistral\",\"candle_transformers::models::mistral\"]Ee[5,\"candle_transformers::models::mixformer\",\"candle_transformers::models::mixformer\"]Ea[5,\"candle_transformers::models::mixtral\",\"candle_transformers::models::mixtral\"]Ek[5,\"candle_transformers::models::mmdit::model\",\"candle_transformers::models::mmdit::model\"]Ei[5,\"candle_transformers::models::mobilenetv4\",\"candle_transformers::models::mobilenetv4\"]Ee[5,\"candle_transformers::models::mobileone\",\"candle_transformers::models::mobileone\"]Eg[5,\"candle_transformers::models::modernbert\",\"candle_transformers::models::modernbert\"]Ee[5,\"candle_transformers::models::moondream\",\"candle_transformers::models::moondream\"]Di[5,\"candle_transformers::models::mpt\",\"candle_transformers::models::mpt\"]Dk[5,\"candle_transformers::models::olmo\",\"candle_transformers::models::olmo\"]Fk[5,\"candle_transformers::models::openclip::text_model\",\"candle_transformers::models::openclip::text_model\"]Ee[5,\"candle_transformers::models::paligemma\",\"candle_transformers::models::paligemma\"]Eg[5,\"candle_transformers::models::parler_tts\",\"candle_transformers::models::parler_tts\"]Ee[5,\"candle_transformers::models::persimmon\",\"candle_transformers::models::persimmon\"]Di[5,\"candle_transformers::models::phi\",\"candle_transformers::models::phi\"]Dk[5,\"candle_transformers::models::phi3\",\"candle_transformers::models::phi3\"]Eo[5,\"candle_transformers::models::pixtral::llava\",\"candle_transformers::models::pixtral::llava\"]Fm[5,\"candle_transformers::models::pixtral::vision_model\",\"candle_transformers::models::pixtral::vision_model\"]Eo[8,\"candle_transformers::models::quantized_blip\",\"candle_transformers::models::quantized_blip\"]Fi[8,\"candle_transformers::models::quantized_blip_text\",\"candle_transformers::models::quantized_blip_text\"]Ek[5,\"candle_transformers::models::quantized_t5\",\"candle_transformers::models::quantized_t5\"]Dm[5,\"candle_transformers::models::qwen2\",\"candle_transformers::models::qwen2\"]Ee[5,\"candle_transformers::models::qwen2_moe\",\"candle_transformers::models::qwen2_moe\"]Fa[5,\"candle_transformers::models::recurrent_gemma\",\"candle_transformers::models::recurrent_gemma\"]Do[5,\"candle_transformers::models::repvgg\",\"candle_transformers::models::repvgg\"]Ea[5,\"candle_transformers::models::rwkv_v5\",\"candle_transformers::models::rwkv_v5\"]Ee[5,\"candle_transformers::models::segformer\",\"candle_transformers::models::segformer\"]Do[5,\"candle_transformers::models::siglip\",\"candle_transformers::models::siglip\"]Fo[5,\"candle_transformers::models::stable_diffusion::clip\",\"candle_transformers::models::stable_diffusion::clip\"]Ee[5,\"candle_transformers::models::stable_lm\",\"candle_transformers::models::stable_lm\"]Eg[5,\"candle_transformers::models::starcoder2\",\"candle_transformers::models::starcoder2\"]Ek[5,\"candle_transformers::models::stella_en_v5\",\"candle_transformers::models::stella_en_v5\"]Dg[5,\"candle_transformers::models::t5\",\"candle_transformers::models::t5\"]Di[5,\"candle_transformers::models::vit\",\"candle_transformers::models::vit\"]Ea[5,\"candle_transformers::models::whisper\",\"candle_transformers::models::whisper\"]Ei[5,\"candle_transformers::models::xlm_roberta\",\"candle_transformers::models::xlm_roberta\"]Dg[5,\"candle_transformers::models::yi\",\"candle_transformers::models::yi\"]Bg[5,\"candle_nn::conv\",\"candle_nn::conv\"]Ek[5,\"candle_transformers::models::with_tracing\",\"candle_transformers::models::with_tracing\"]Bo[6,\"candle_core::device\",\"candle_core::device\"]Do[5,\"candle_transformers::models::falcon\",\"candle_transformers::models::falcon\"]Al[10,\"core::ops\",\"core::ops\"]Cj[15,\"candle_transformers::models::mimi::transformer::Mlp\"]An[10,\"core::hash\",\"core::hash\"]Bk[5,\"candle_nn::linear\",\"candle_nn::linear\"]<6Dk[5,\"candle_transformers::quantized_nn\",\"candle_transformers::quantized_nn\"]Di[6,\"candle_transformers::models::vgg\",\"candle_transformers::models::vgg\"]Ab[10,\"candle_core\"]Ba[6,\"core::option\",\"core::option\"]Fg[5,\"candle_transformers::models::quantized_llama2_c\",\"candle_transformers::models::quantized_llama2_c\"]Ei[5,\"candle_transformers::models::flux::model\",\"candle_transformers::models::flux::model\"]Fm[5,\"candle_transformers::models::flux::quantized_model\",\"candle_transformers::models::flux::quantized_model\"]Ak[8,\"core::fmt\",\"core::fmt\"]Ba[6,\"core::result\",\"core::result\"]Bm[8,\"candle_core::error\",\"candle_core::error\"]Bc[5,\"alloc::string\",\"alloc::string\"]Bo[5,\"candle_core::tensor\",\"candle_core::tensor\"]Ak[5,\"core::any\",\"core::any\"]Fe[5,\"candle_transformers::models::wuerstchen::prior\",\"candle_transformers::models::wuerstchen::prior\"]Bh[2,\"candle_transformers::models::mmdit\"]Bm[2,\"candle_transformers::models::wuerstchen\"]Bh[2,\"candle_transformers::models::llava\"]Ba[2,\"candle_transformers::models\"]00000Ai[2,\"candle_transformers\"]11Cc[2,\"candle_transformers::models::stable_diffusion\"]Bg[2,\"candle_transformers::models::mimi\"]31Dk[5,\"candle_core::quantized::ggml_file\",\"candle_core::quantized::ggml_file\"]Dk[5,\"candle_core::quantized::gguf_file\",\"candle_core::quantized::gguf_file\"]Fe[5,\"candle_transformers::models::depth_anything_v2\",\"candle_transformers::models::depth_anything_v2\"]Di[5,\"candle_transformers::models::dac\",\"candle_transformers::models::dac\"]Ea[5,\"candle_transformers::models::encodec\",\"candle_transformers::models::encodec\"]Fe[5,\"candle_transformers::models::flux::autoencoder\",\"candle_transformers::models::flux::autoencoder\"]Do[5,\"candle_transformers::models::marian\",\"candle_transformers::models::marian\"]Eg[5,\"candle_transformers::models::parler_tts\",\"candle_transformers::models::parler_tts\"]Ad[10,\"core::default\"]Ei[5,\"candle_transformers::models::flux::model\",\"candle_transformers::models::flux::model\"]Ed[15,\"candle_transformers::models::stable_diffusion::uni_pc::CorrectorConfiguration\"]Em[5,\"candle_transformers::models::mimi::encodec\",\"candle_transformers::models::mimi::encodec\"]8765Ee[5,\"candle_transformers::models::moondream\",\"candle_transformers::models::moondream\"]Fk[5,\"candle_transformers::models::openclip::text_model\",\"candle_transformers::models::openclip::text_model\"]Fi[5,\"candle_transformers::models::quantized_moondream\",\"candle_transformers::models::quantized_moondream\"]Di[5,\"candle_transformers::models::vit\",\"candle_transformers::models::vit\"]Ea[5,\"candle_transformers::models::granite\",\"candle_transformers::models::granite\"]Co[5,\"std::collections::hash::map\",\"std::collections::hash::map\"]Co[5,\"std::collections::hash::set\",\"std::collections::hash::set\"]Dm[6,\"candle_transformers::models::llama\",\"candle_transformers::models::llama\"]Eg[5,\"candle_transformers::models::modernbert\",\"candle_transformers::models::modernbert\"]Gk[6,\"candle_transformers::models::stable_diffusion::schedulers\",\"candle_transformers::models::stable_diffusion::schedulers\"]Fk[5,\"candle_transformers::models::wuerstchen::diffnext\",\"candle_transformers::models::wuerstchen::diffnext\"]Em[6,\"candle_transformers::models::mimi::encodec\",\"candle_transformers::models::mimi::encodec\"]Ee[6,\"candle_transformers::models::deepseek2\",\"candle_transformers::models::deepseek2\"]Ek[5,\"candle_transformers::models::quantized_t5\",\"candle_transformers::models::quantized_t5\"]Dg[5,\"candle_transformers::models::t5\",\"candle_transformers::models::t5\"]Hc[5,\"candle_transformers::models::stable_diffusion::unet_2d_blocks\",\"candle_transformers::models::stable_diffusion::unet_2d_blocks\"]Fc[5,\"candle_transformers::models::mmdit::embedding\",\"candle_transformers::models::mmdit::embedding\"]Cc[2,\"candle_transformers::models::segment_anything\"]Ba[2,\"candle_transformers::models\"]0Cc[2,\"candle_transformers::models::stable_diffusion\"]Fg[5,\"candle_transformers::models::mmdit::projections\",\"candle_transformers::models::mmdit::projections\"]Dk[5,\"candle_transformers::models::bert\",\"candle_transformers::models::bert\"]0Dm[5,\"candle_transformers::models::llava\",\"candle_transformers::models::llava\"]Bg[5,\"candle_nn::conv\",\"candle_nn::conv\"]Ee[5,\"candle_transformers::models::debertav2\",\"candle_transformers::models::debertav2\"]Fe[5,\"candle_transformers::models::depth_anything_v2\",\"candle_transformers::models::depth_anything_v2\"]Eg[5,\"candle_transformers::models::distilbert\",\"candle_transformers::models::distilbert\"]Gc[6,\"candle_transformers::models::stable_diffusion::uni_pc\",\"candle_transformers::models::stable_diffusion::uni_pc\"]Ea[6,\"candle_transformers::models::granite\",\"candle_transformers::models::granite\"]Ha[5,\"candle_transformers::models::segment_anything::image_encoder\",\"candle_transformers::models::segment_anything::image_encoder\"]Cc[5,\"candle_nn::layer_norm\",\"candle_nn::layer_norm\"]Dd[15,\"candle_transformers::models::deepseek2::DeepSeekV2RopeScaling\"]Dg[5,\"candle_transformers::generation\",\"candle_transformers::generation\"]Em[5,\"candle_transformers::models::mmdit::blocks\",\"candle_transformers::models::mmdit::blocks\"]Eg[5,\"candle_transformers::models::mobileclip\",\"candle_transformers::models::mobileclip\"]Eg[5,\"candle_transformers::models::modernbert\",\"candle_transformers::models::modernbert\"]2Fe[5,\"candle_transformers::models::mimi::transformer\",\"candle_transformers::models::mimi::transformer\"]Dk[5,\"candle_transformers::models::phi3\",\"candle_transformers::models::phi3\"]Bo[5,\"candle_nn::kv_cache\",\"candle_nn::kv_cache\"]Gl[10,\"candle_transformers::models::stable_diffusion::schedulers\",\"candle_transformers::models::stable_diffusion::schedulers\"]Am[10,\"candle_core::streaming\"]Ee[5,\"candle_transformers::models::blip_text\",\"candle_transformers::models::blip_text\"]Fi[5,\"candle_transformers::models::quantized_blip_text\",\"candle_transformers::models::quantized_blip_text\"]Do[5,\"candle_transformers::models::siglip\",\"candle_transformers::models::siglip\"]Gk[6,\"candle_transformers::models::stable_diffusion::schedulers\",\"candle_transformers::models::stable_diffusion::schedulers\"]Hc[5,\"candle_transformers::models::stable_diffusion::unet_2d_blocks\",\"candle_transformers::models::stable_diffusion::unet_2d_blocks\"]Di[5,\"candle_transformers::models::dac\",\"candle_transformers::models::dac\"]Ei[5,\"candle_transformers::models::xlm_roberta\",\"candle_transformers::models::xlm_roberta\"]Ba[2,\"candle_transformers::models\"]Bg[2,\"candle_transformers::models::flux\"]Bj[2,\"candle_transformers::models::whisper\"]22Bl[2,\"candle_transformers::models::metavoice\"]Ek[5,\"candle_transformers::models::chinese_clip\",\"candle_transformers::models::chinese_clip\"]Eg[5,\"candle_transformers::models::modernbert\",\"candle_transformers::models::modernbert\"]Fg[5,\"candle_transformers::models::clip::vision_model\",\"candle_transformers::models::clip::vision_model\"]Eg[5,\"candle_transformers::models::mimi::conv\",\"candle_transformers::models::mimi::conv\"]0Fo[6,\"candle_transformers::models::stable_diffusion::ddpm\",\"candle_transformers::models::stable_diffusion::ddpm\"]Ee[5,\"candle_transformers::models::debertav2\",\"candle_transformers::models::debertav2\"]Ee[5,\"candle_transformers::models::deepseek2\",\"candle_transformers::models::deepseek2\"]Fe[5,\"candle_transformers::models::flux::autoencoder\",\"candle_transformers::models::flux::autoencoder\"]Dm[5,\"candle_transformers::models::llama\",\"candle_transformers::models::llama\"]Em[5,\"candle_transformers::models::mmdit::blocks\",\"candle_transformers::models::mmdit::blocks\"]Eg[5,\"candle_transformers::models::mobileclip\",\"candle_transformers::models::mobileclip\"]Dm[5,\"candle_transformers::models::qwen2\",\"candle_transformers::models::qwen2\"]Eo[6,\"candle_transformers::models::metavoice::gpt\",\"candle_transformers::models::metavoice::gpt\"]Fc[5,\"candle_transformers::models::mmdit::embedding\",\"candle_transformers::models::mmdit::embedding\"]Fe[5,\"candle_transformers::models::depth_anything_v2\",\"candle_transformers::models::depth_anything_v2\"]5;1Gc[6,\"candle_transformers::models::stable_diffusion::uni_pc\",\"candle_transformers::models::stable_diffusion::uni_pc\"]Dm[5,\"candle_transformers::models::trocr\",\"candle_transformers::models::trocr\"]Hc[5,\"candle_transformers::models::stable_diffusion::unet_2d_blocks\",\"candle_transformers::models::stable_diffusion::unet_2d_blocks\"]Ba[2,\"candle_transformers::models\"]Ai[2,\"candle_transformers\"]11Ek[5,\"candle_transformers::models::chinese_clip\",\"candle_transformers::models::chinese_clip\"]Eg[6,\"candle_transformers::models::modernbert\",\"candle_transformers::models::modernbert\"]Ee[5,\"candle_transformers::models::debertav2\",\"candle_transformers::models::debertav2\"]Ei[5,\"candle_transformers::models::flux::model\",\"candle_transformers::models::flux::model\"]Fm[5,\"candle_transformers::models::flux::quantized_model\",\"candle_transformers::models::flux::quantized_model\"]7Ea[5,\"candle_transformers::models::encodec\",\"candle_transformers::models::encodec\"]Fg[5,\"candle_transformers::models::mimi::quantization\",\"candle_transformers::models::mimi::quantization\"]Ea[5,\"candle_transformers::models::granite\",\"candle_transformers::models::granite\"]Em[5,\"candle_transformers::models::llava::config\",\"candle_transformers::models::llava::config\"]Em[5,\"candle_transformers::models::mmdit::blocks\",\"candle_transformers::models::mmdit::blocks\"]Eg[5,\"candle_transformers::models::modernbert\",\"candle_transformers::models::modernbert\"]Ek[5,\"candle_transformers::models::mimi::seanet\",\"candle_transformers::models::mimi::seanet\"]87Fa[6,\"candle_transformers::models::recurrent_gemma\",\"candle_transformers::models::recurrent_gemma\"]Gk[5,\"candle_transformers::models::stable_diffusion::embeddings\",\"candle_transformers::models::stable_diffusion::embeddings\"]Gm[5,\"candle_transformers::models::segment_anything::transformer\",\"candle_transformers::models::segment_anything::transformer\"]Ba[2,\"candle_transformers::models\"]000Hc[5,\"candle_transformers::models::stable_diffusion::unet_2d_blocks\",\"candle_transformers::models::stable_diffusion::unet_2d_blocks\"]>0;Fe[5,\"candle_transformers::models::depth_anything_v2\",\"candle_transformers::models::depth_anything_v2\"]Fg[5,\"candle_transformers::models::wuerstchen::common\",\"candle_transformers::models::wuerstchen::common\"]:0Gi[5,\"candle_transformers::models::stable_diffusion::attention\",\"candle_transformers::models::stable_diffusion::attention\"]Fc[5,\"candle_transformers::models::llama2_c_weights\",\"candle_transformers::models::llama2_c_weights\"]?>5Fm[5,\"candle_transformers::models::stable_diffusion::vae\",\"candle_transformers::models::stable_diffusion::vae\"]Fc[5,\"candle_transformers::models::clip::text_model\",\"candle_transformers::models::clip::text_model\"]Fo[5,\"candle_transformers::models::stable_diffusion::clip\",\"candle_transformers::models::stable_diffusion::clip\"]Fo[5,\"candle_transformers::models::stable_diffusion::ddim\",\"candle_transformers::models::stable_diffusion::ddim\"]Fo[5,\"candle_transformers::models::stable_diffusion::ddpm\",\"candle_transformers::models::stable_diffusion::ddpm\"]Ee[5,\"candle_transformers::models::debertav2\",\"candle_transformers::models::debertav2\"]0Em[5,\"candle_transformers::models::llava::config\",\"candle_transformers::models::llava::config\"]Gc[5,\"candle_transformers::models::stable_diffusion::uni_pc\",\"candle_transformers::models::stable_diffusion::uni_pc\"]Fm[5,\"candle_transformers::models::wuerstchen::paella_vq\",\"candle_transformers::models::wuerstchen::paella_vq\"]Ee[5,\"candle_transformers::models::paligemma\",\"candle_transformers::models::paligemma\"]Eo[5,\"candle_transformers::models::pixtral::llava\",\"candle_transformers::models::pixtral::llava\"]Eg[5,\"candle_transformers::models::mimi::conv\",\"candle_transformers::models::mimi::conv\"]Fe[6,\"candle_transformers::models::mimi::transformer\",\"candle_transformers::models::mimi::transformer\"]Gc[5,\"candle_transformers::models::stable_diffusion::resnet\",\"candle_transformers::models::stable_diffusion::resnet\"]Bm[2,\"candle_transformers::models::wuerstchen\"]f[3,\"\"]Ba[2,\"candle_transformers::models\"]0000Gi[5,\"candle_transformers::models::stable_diffusion::attention\",\"candle_transformers::models::stable_diffusion::attention\"]Dk[5,\"candle_transformers::models::bert\",\"candle_transformers::models::bert\"]Hc[5,\"candle_transformers::models::stable_diffusion::unet_2d_blocks\",\"candle_transformers::models::stable_diffusion::unet_2d_blocks\"]Fc[5,\"candle_transformers::models::wuerstchen::ddpm\",\"candle_transformers::models::wuerstchen::ddpm\"]Ee[5,\"candle_transformers::models::deepseek2\",\"candle_transformers::models::deepseek2\"]?Eg[5,\"candle_transformers::models::modernbert\",\"candle_transformers::models::modernbert\"]Fe[5,\"candle_transformers::models::mimi::transformer\",\"candle_transformers::models::mimi::transformer\"]0Ge[5,\"candle_transformers::models::stable_diffusion::unet_2d\",\"candle_transformers::models::stable_diffusion::unet_2d\"]5Gc[5,\"candle_transformers::models::stable_diffusion::uni_pc\",\"candle_transformers::models::stable_diffusion::uni_pc\"]Dk[5,\"candle_transformers::models::beit\",\"candle_transformers::models::beit\"]Gc[5,\"candle_transformers::models::chinese_clip::text_model\",\"candle_transformers::models::chinese_clip::text_model\"]Fg[5,\"candle_transformers::models::clip::vision_model\",\"candle_transformers::models::clip::vision_model\"]Bg[5,\"candle_nn::conv\",\"candle_nn::conv\"]Ee[5,\"candle_transformers::models::debertav2\",\"candle_transformers::models::debertav2\"]Bl[2,\"candle_transformers::models::deepseek2\"]Ee[6,\"candle_transformers::models::deepseek2\",\"candle_transformers::models::deepseek2\"]Fe[5,\"candle_transformers::models::depth_anything_v2\",\"candle_transformers::models::depth_anything_v2\"]Do[5,\"candle_transformers::models::dinov2\",\"candle_transformers::models::dinov2\"]Eg[5,\"candle_transformers::models::dinov2reg4\",\"candle_transformers::models::dinov2reg4\"]Dk[5,\"candle_transformers::models::eva2\",\"candle_transformers::models::eva2\"]Dm[5,\"candle_transformers::models::based\",\"candle_transformers::models::based\"]?Em[5,\"candle_transformers::models::mmdit::blocks\",\"candle_transformers::models::mmdit::blocks\"]Dk[6,\"candle_transformers::models::bert\",\"candle_transformers::models::bert\"]Gc[6,\"candle_transformers::models::chinese_clip::text_model\",\"candle_transformers::models::chinese_clip::text_model\"]Ee[6,\"candle_transformers::models::jina_bert\",\"candle_transformers::models::jina_bert\"]Ee[6,\"candle_transformers::models::persimmon\",\"candle_transformers::models::persimmon\"]Fc[5,\"candle_transformers::models::stable_diffusion\",\"candle_transformers::models::stable_diffusion\"]Ei[5,\"candle_transformers::models::xlm_roberta\",\"candle_transformers::models::xlm_roberta\"]Ai[2,\"candle_transformers\"]Ck[2,\"candle_transformers::models::stable_diffusion::uni_pc\"]Gc[6,\"candle_transformers::models::stable_diffusion::uni_pc\",\"candle_transformers::models::stable_diffusion::uni_pc\"]Ee[5,\"candle_transformers::models::debertav2\",\"candle_transformers::models::debertav2\"]Ea[5,\"candle_transformers::models::encodec\",\"candle_transformers::models::encodec\"]Fg[5,\"candle_transformers::models::mmdit::projections\",\"candle_transformers::models::mmdit::projections\"]2Hc[5,\"candle_transformers::models::stable_diffusion::unet_2d_blocks\",\"candle_transformers::models::stable_diffusion::unet_2d_blocks\"]Gg[5,\"candle_transformers::models::chinese_clip::vision_model\",\"candle_transformers::models::chinese_clip::vision_model\"]Fk[5,\"candle_transformers::models::openclip::text_model\",\"candle_transformers::models::openclip::text_model\"]Di[5,\"candle_transformers::models::dac\",\"candle_transformers::models::dac\"]5Fg[5,\"candle_transformers::models::mimi::quantization\",\"candle_transformers::models::mimi::quantization\"]43Em[5,\"candle_transformers::models::mmdit::blocks\",\"candle_transformers::models::mmdit::blocks\"]55Gc[5,\"candle_transformers::models::stable_diffusion::uni_pc\",\"candle_transformers::models::stable_diffusion::uni_pc\"]0Ee[5,\"candle_transformers::models::segformer\",\"candle_transformers::models::segformer\"]Gi[5,\"candle_transformers::models::stable_diffusion::attention\",\"candle_transformers::models::stable_diffusion::attention\"]Cc[2,\"candle_transformers::models::stable_diffusion\"]Gc[5,\"candle_transformers::models::chinese_clip::text_model\",\"candle_transformers::models::chinese_clip::text_model\"]Ee[5,\"candle_transformers::models::deepseek2\",\"candle_transformers::models::deepseek2\"]4Eg[5,\"candle_transformers::models::mimi::conv\",\"candle_transformers::models::mimi::conv\"]Fe[5,\"candle_transformers::models::mimi::transformer\",\"candle_transformers::models::mimi::transformer\"]Ba[2,\"candle_transformers::models\"]4>:Ek[5,\"candle_transformers::models::quantized_t5\",\"candle_transformers::models::quantized_t5\"]Dg[5,\"candle_transformers::models::t5\",\"candle_transformers::models::t5\"]Ge[5,\"candle_transformers::models::stable_diffusion::unet_2d\",\"candle_transformers::models::stable_diffusion::unet_2d\"]Gg[5,\"candle_transformers::models::chinese_clip::vision_model\",\"candle_transformers::models::chinese_clip::vision_model\"]52Dk[5,\"candle_transformers::models::blip\",\"candle_transformers::models::blip\"]Eo[5,\"candle_transformers::models::quantized_blip\",\"candle_transformers::models::quantized_blip\"]2Fm[5,\"candle_transformers::models::stable_diffusion::vae\",\"candle_transformers::models::stable_diffusion::vae\"]Dm[5,\"candle_transformers::models::based\",\"candle_transformers::models::based\"]Fg[5,\"candle_transformers::models::mimi::quantization\",\"candle_transformers::models::mimi::quantization\"]Em[5,\"candle_transformers::models::mmdit::blocks\",\"candle_transformers::models::mmdit::blocks\"]Hc[5,\"candle_transformers::models::stable_diffusion::unet_2d_blocks\",\"candle_transformers::models::stable_diffusion::unet_2d_blocks\"]Ee[5,\"candle_transformers::models::mixformer\",\"candle_transformers::models::mixformer\"]Fi[5,\"candle_transformers::models::quantized_mixformer\",\"candle_transformers::models::quantized_mixformer\"]Ee[5,\"candle_transformers::models::debertav2\",\"candle_transformers::models::debertav2\"]Ig[5,\"candle_transformers::models::stable_diffusion::euler_ancestral_discrete\",\"candle_transformers::models::stable_diffusion::euler_ancestral_discrete\"]7Fe[5,\"candle_transformers::models::mimi::transformer\",\"candle_transformers::models::mimi::transformer\"]2Eg[5,\"candle_transformers::models::modernbert\",\"candle_transformers::models::modernbert\"]Ei[5,\"candle_transformers::models::xlm_roberta\",\"candle_transformers::models::xlm_roberta\"]Fi[5,\"candle_transformers::models::metavoice::adapters\",\"candle_transformers::models::metavoice::adapters\"]4") \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/root.js b/network-poc/target-native/doc/search.index/root.js deleted file mode 100644 index e11109d..0000000 --- a/network-poc/target-native/doc/search.index/root.js +++ /dev/null @@ -1 +0,0 @@ -rr_('{"normalizedName":{"I":"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","N":"BLNe","E":"OjAAAAAAAAA=","H":"+78A5YpG"},"crateNames":{"N":"a","E":"OjAAAAAAAAA=","H":"0a79StuG"},"name":{"N":"BLNe","E":"OjAAAAAAAAA=","H":"9dVz5sv3"},"path":{"N":"C@j","E":"OzAAAAEAANopBgEAAAgACwAAAA0ATgBdAAEAYAADAGUAAABnAAAAawABAG4AAABwAAAAdgAAAHkAAgB9AAgAiACPARkCAwAeAgAAIALpAAsDBQASAwEAFQMBABoDAQAdAwAAHwMAACEDAAAmAwUALwMCADYDAwA8AwEAPwMAAEEDAABEAwkATwMAAFEDAgBVAwAAWQMCAF0DAwBiAwAAZQPtAVQFAABWBe0BRQcMBFMLAwBYCwAAWgsbAHcL+AF1DQUAfw0AAIENAACFDQEAtg0AALkNAwDBDQMAxw0AAMkNZwMyEQAANBECADgRAwA9EQEAQBEAAEMRAABFEQAAShEEAFARAABSEQUAWREJAGQRAABqEQQAcBEIAMQRAQDJEQAAyxEAAM0RAgDTEQAA3RECAOERAADkEQEA6BHyAdwTAADeEzsAGxQWADMUAQA2FAAAOBQCADwUBQBDFAEARhQJAFEUAQBVFAMAWhQBAF0UAQBgFAMAbRQHAHcUAACBFAMAiBQBAJEUBACiFAEApRQBAKgUAACqFEEA7RQAAO8UBAD1FPoA8RUEAPcVAAD5FQgAAxYAAAUWBAALFgAADRbxAQAYBAAGGAYADhgAABEYAAATGAIAFxgCABsYAAAjGAAAJRgAACcYDQA2GAEAORgVAFAYBwBZGAwAZxgCAGsYSwXAHQAAyx0CANAdAADUHQYA3x0CAOMdAADmHQQA7B0EAPIdBQD5HQIA/R0AAP8d9AH2H3oAciADAHcgAAB5IAEAfCABAH8gCACJIAAAiyABAI4gAACQIAEAkyAAAJUgBACbIAoApyAdANEgAgDVIAEA5SAKAPIgbQNhJAAAYyQDAGgkOQCjJDEA1iQFAN0kDwDuJAEA8SQrAB4lBgAmJQAAKiUHADMlLQBiJQIAbCUAAG4lAAByJQEAeCUBAH0lAACDJaQAKSYHADImIABXJgYAXyYAAGMmAAB0JgEAdyYAAHkmAACBJhAAkyYBAJYmCACgJgAAoiYmAMomIgDuJgAA8CYAAPImIgAWJwsAJScFACwnAAA2JwEARycBAE0nDwBeJw4AbicAAHAnGwCgJ2EAAygAAAUoAAAHKBsAJCgLADkoAQA/KAAASSgAAEsoAABTKI8B5CkAAOcpAQDqKQAA7CkGAPQpEAASKgAAFSoAABkqAAAeKhkAOSoCAD0qCgBJKgAASyoJAFsqAABgKgAAaSoFAHAqfQDvKgAA8SoAAPMqCgAKKx4AKisGADYrAQA/KwEARCsDAEkrAwBOK14ArisAALArAACyKwAAtCsAALYrDQDMKwAA0SsXAP0rEQAQLA8AJywbAEksNQCILAsAmSwDAJ4sAAClLAcArywEALssBwDFLAIAyiwBAM8sAgDTLAYA3SwAAN8sAADhLAMA","H":"uagr/bQ/"},"entry":{"N":"AOAdLLa","E":"OjAAAAEAAAAAAA8BEAAAAAkACgAMAFwAXwBkAGYAaABpAG0AbwBxAHcAfACGAIcAGAIdAh8CCgMRAxQDFwMYAxkDHAMeAyQDJQMsAy0DLgM0AzUDOgM7Az4DQANCA0MDTgNQA1QDVgNXA1gDXANhA2MDZANTBVUFRAdSC1cLWQt2C3ANdA17DXwNfQ1+DbcNuA3ADcUNxg3IDTERMxE3ETwRPxFCEUQRRhFHEUgRSRFPEVERWBFjEWURZhFnEWgRaRFvEcERwxHHEcgRyhHMEdUR1hHaEdsR3BHgEeIR4xHnEdsT3RMaFDIUNRQ3FDsUQhRFFFAUUxRUFFkUXBRfFGQUZRRsFHYUhhSHFIsUkBSdFJ4UnxSkFKcUqRTsFPQU8BX2FfgVAhYEFgoWDBb/FwUYEBgaGCEYJBgmGDUYOBhPGFgYZhhqGL0dwh3FHcod0h3THdwd6x3xHfgd/B3+HfQf9R9xIHYgeCB7IH4giCCKII0gjyCSIJQgmiCmIMUgziDPINwg3SDkIGAkYiRnJKIk1STcJO0k8CQdJSUlJyUoJSklMiVhJWklgiUoJjEmUyZUJlUmViZeJmQmZSZoJmsmdiZ4JpImlSafJqEmySbtJu8m8SYVJyInIyckJysnLyddJ20nbycCKAQoBigjKDQoPSg+KEcoSijjKeUp5inpKesp8yk4KjwqSCpKKm8q7irwKvIqKStIK60rryuxK7MrtSvsK+4rDywgLIcsnSw=","H":"ZqEYPrCP7sLOiGT/"},"desc":{"N":"DJb","E":"OzAAAAEAAEIorwAAAFwAXgAGAGYAFgB+AAQAhAAAAIYAlAEcAgEAHwK5ANoCMAAMAw0AGwMBAB4DAAAhAy0AUAMAAFIDAgBWAwIAWwMGAGMD8AFVBQAAcwUAAEQHAABGB/IBJQstAFQLAwBZCwAAWwsRAG4LAABwCwQAdgtSAsoNZwMzEQAANREHAD4RAQBBEQEARBEAAEYRCwBTERAAZREEAGsRMgCfES8A0BE3AgkUEQAcFA0AKxQHADQUAQA3FAAAOhQBAD0UBQBEFAEARxQJAFIUAgBXFAUAXhQBAGEUQwCmFAEAqRQAAKsUQQDuFAYA9hT6APIVBAD4FQAA+hUIAAQWBgAMFgAADhbxAQEYBAAHGAcAEBgEABYYEgAsGAkANxgEAD0YEgBRGAcAWhgHAGQYdgXcHQ8A7R0EAPMdBQD7HXYCcyADAHggAAB6IAEAfSABAIAgCgCMIAEAjyADAJQgAACWIAQAnCAKAKggFAC+IBQA1CAnAP8gYQNiJAAAZCQ+AKQkMQDXJAUA3iQPAO8kAQDyJCsAHyUGACclAgAsJQEALyUyAGMlIQCGJaIAKiY3AGMmEAB1Jh0AlCYBAJcmCAChJgAAoyYYAL0mBwDGJgUAziYIANgmFwDxJgAA8yYdABInAwAZJwMAHicHACgnBwAxJyEAVicXAG8nAABxJw0AgCcAAIInggAGKAAACCgUAB4oBQAlKAAAJyghAEooBABQKI4B4ykAAOUpBADrKQAA7SkMAP0pBgAFKjMAOioCAD4qCABIKgAASioAAEwqAABPKiAAcSpEALcqNwDwKgAA8ioAAPcqAQD6KgAA/CotACsrBgA1Kw0ARCthAKcrBgCvKwAAsSsAALMrAAC1KwAAtysMAMUrMgD5KwUAAiwNABEsJAA3LAwARSxCAIksFACfLAcAqCwkAM4sEQDhLAMA","H":"FxNogt0I"},"function":{"N":"BHIm","E":"OzAAAAEAAEcEpgAJAAMAXAABAF8AAABkABQAfAABAIYAAQAYAgEAHQICAAoDAQARAwEAFAMAABcDAwAcAyoATgMDAFQDBgBcAwEAYQMFAFMFAwBEBwEAPwsAAFILAQBXCwMAdgsAAG4NBgB7DToAtw0MAMUNBAAxEQMANxEAADwRAQA/EQoASxEHAFgRAABjEQkAbhF5AOkRAADXEwAA2xMCAOETAAAaFAEAMhQBADUUAwA7FAEAQhQBAEUUAQBQFAEAUxQDAFkUAQBcFAEAXxQBAGQUPQCkFAEApxQDAOwUAgD0FAEA8BUBAPYVAwACFgIAChYDAP8XAQAFGBMAGhgNADUYAQA4GAEATxgBAFgYAQBmGAEAahgBALYdCQDBHQ4A0R0IANsdCgDrHQEA8R0BAPQdAAD4HQEA/B0DAPQfAwBxIAEAdiADAHsgAQB+IAEAiCADAI0gAwCSIAIAmiABAKYgAQDFIA8A1yAcAGAkAwBnJAAAaSQAAKIkAQDVJAEA3CQBAO0kAQDwJAEAHSUBACUlBgAuJQAAMiUBAGElAQBlJQwAdCUEAHolCQAoJgEAMSYBAFMmBQBaJgEAXiYEAGQmEgB4JggAkiYBAJUmAQCfJgMAySYBAO0mBQAVJwEAIicCACYnAgArJyEAXScBAG0nAwCMJxMAAigFACMoAQAwKBoATCgGAOMpCQDzKQEA9ykAAAUqDAATKgUAGioDADgqAQA8KgEASCoDAFUqCgBhKgcAbyoBAO4qBQD+KgsAKSsBADErBAA4KwYAQSsCAEgrAQBNKwAArSsJAMQrDADpKxMADywBACAsBgBDLAUAfywJAJQsBACdLAcArSwBALQsBgDDLAEAyCwBAMwsAgDSLAAA2iwCAN4sAADgLAAA","H":"Q+JWbjHB"},"type":{"N":"BDi","E":"OzAAAAEAAJsqgQAAAAgACwAAAA0AUQBgAAUAZwABAGsAAQBuAAAAcAABAHYAAAB5AAwAiACWASAC8wAVAwEAGQMGACEDAAAkAwAAJgMGAC8DAgA2AwMAPAMBAD8DAABBAwEARAMRAFcDHgh3C/gBdQ0FAH8NAACBDQAAhQ0BALYNAAC5DQMAwQ0DAMYNcAM4ER8AWRELAGcREQDEEQEAyREAAMsRAADNEQIA0xEAANURAADdEQIA4REAAOQRAQDnEXwCbBQIAHcUAACBFAMAiBQBAIsUAACRFAQAnRQCAKIUYQEFFgcCDhgAABEYAAATGAIAFxgCABsYAAAhGAAAIxgAACUYkQW9HQAAwB0AAMsdAgDQHQAA0h0IANwdAADfHQIA4x0AAOYdrQKVIC8AziABANEgAgDVIAEA5SAKAPIgcgRpJQAAbCUAAG4lAAByJQEAeCUBAH0lAACCJd0AYyYAAHQmAQB3JgAAeSYAAIEmqwAvJwAANicBAEcnAQBNJz4AlScAAKAnjwA5KAEAPygAAEkoAgBTKLEBEioAABUqAAAZKgAAHio2AFsqAABgKgAAaSqUAAorJgA2KwEAPysBAEQrfwDMKwAA0SsXAO4rAAD9KyMAJywbAEksNQCHLAwAmSwFAKUsBwCvLAQAuywHAMUsAgDKLAEAzywCANMsBgDdLAAA3ywAAOEsAwA=","H":"jIuUSCES"},"alias":{"N":"`","E":"OzAAAAEAAOQsAQAAAOQs","H":"p2IVDFMs"},"generic_inverted_index":{"N":"b","E":"OjAAAAAAAAA=","H":"e8YQBoEt"}}') \ No newline at end of file diff --git a/network-poc/target-native/doc/search.index/type/8c8b94482112.js b/network-poc/target-native/doc/search.index/type/8c8b94482112.js deleted file mode 100644 index eb22616..0000000 --- a/network-poc/target-native/doc/search.index/type/8c8b94482112.js +++ /dev/null @@ -1 +0,0 @@ -rd_("AGo[\"AAAAAAAAAAABxSYAAAFNAgAAAALLAgAAQSwAAAGyLAAAAAHfLAAAAa0VAAAChQIAAMIVAAABNiwAAAGsFQAAAcMVAAAAAALoFQAA6RUAAA==\",\"AAA7MAAAAQAA6wEBAGcD6wEAOzAAAAEAADYABACxHQAANCYJAKonGQAKKBEAOzAAAAEAANwCBADwImwBDicBAFgobAEsKwAAAARHBwAASAcAAEkHAABfJAAAAXYsAAAABQoVAABzFQAAshUAAGcnAACxLAAABCMVAABoJwAA0isAAEEsAAA6MAAAAQAAAAAABwAQAAAA/hP/E2cVahVrFakVwBWyLAG/LAAAAAOrFQAArRUAAMEVAAABBRUAAAE2LAAAAawVAAA=\"]Ao[\"AAAAAAAAAAAAAAAAAAFlGAAA\",\"\"]ABk[\"AAAAAAAAAAQHFAAAmyYAACEqAAAoKgAABDYCAACnJgAA0SsAAHYsAAADOAIAAH8CAADMAgAAAV4RAAAEPwIAAD0UAAD8JAAAQSwAAAb+EwAA/xMAAFEsAABSLAAAUywAALIsAAADZRgAANgrAAC/LAAAA3EVAADJKQAA3ywAAAGtFQAABYUCAADNAgAAcBUAAMIVAADZLAAAAskCAAA2LAAAAALqFAAAwxUAAA==\",\"AAAAAAA7MAAAAQAABQABAKkgBQAAAAAAAAAAAAAAAAJ3JgAAEioAAAHoEQAA\"]Dg[\"AAAAAAA7MAAAAQAAbAEBAFgobAEAAiEqAAAoKgAAAacmAAA=\",\"AAAAAAAAAAGbJgAA\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAAUImAAA=\",\"\"]Dm[\"AAAAAAHBJgAAAAJEAgAAOxgAAAAAAngCAAB9AgAA\",\"AAAAAAAAAAHEJgAAAAABFwIAAA==\",1]Ec[\"AAAAAAAAAAIhFAAAISoAAAAAAAAAAAAAAAAEVAAAAFMRAABNFAAA6iUAAA==\",\"AAAAAAABaiAAAA==\"]Bm[\"\",\"AAAAAAAABcoNAADLDQAAzA0AAM0NAABXKAAA\",1]Ak[\"AAAAAAAAAAAAAAFeEQAA\",\"\"]Cg[\"AAAAAXkOAAAAAAI3AQAAWxUAAA==\",\"AAAAAXkOAAAAAXoCAAA=\"]Bg[\"AAAAAAAAAXIVAAA=\",\"AAAAAAABmgIAAA==\"]Eo[\"AAAAAAAAAAAAAAAAAAAAAAAAAwIAAAAFAAAABgAAAA==\",\"AAAAAAAAAmonAABrJwAAAAFpJwAAAAFnJwAAAWgnAAA=\"]Eo[\"AAAAAAAABJ4BAABoJAAA/iQAAB4nAAAAAAAAAAHTJwAAAAABrRUAAAABNiwAAA==\",\"AAAAAVMYAAAAAAAAAAHMAgAA\"]AFg[\"AAAAAAABUwIAAAFHAgAAAAF2LAAAAAABPwIAAAH+EwAAAb8sAAA=\",\"AAA6MAAAAQAAAAAABwAQAAAAEAASABQAFgAYABkAGgAbAAAAAAEsGAAAByEUAAApFAAAURUAAJsmAAAhKgAA3ysAAOArAAADYBUAAKcmAADFJgAAAANeEQAA3isAAOErAAACPRQAAPwkAAAE/hMAAP8TAADAFQAA0ycAAAHYKwAAAAHBFQAAAAA6MAAAAQAAAAAAIAAQAAAATAAcAuoRDBQ+FE8UphQFFgYWERYoGG8gjCClIPsgvSTUJIQlMCZdJsYm6yZOJ08nUCf2Kfoq/CoMKy4riSvWK9crAAGGFQAA\"]Bk[\"AAAAAAAAAfABAAABVCAAAA==\",\"AAAAAAHvAgAA\"]Mo[\"AAAAAAABewIAAAABdgIAAALRKwAAdiwAAAAAAAACZRgAAL8sAAABySkAAA==\",\"AAAAAAAAAAEbAgAAAAAAAAAAAAAAADowAAABAAAAAAAmABAAAAAHAAgATgtqDWsNbA1tDVQRVREuFDAUMRRHFO4d7x1dJAglDCUNJQ8lECURJRIl+yb8Ju0nCSjUKdUpKSoqKmkqgyobK1srXSs7LDwsvSw=\"]B@c[\"AAACPAIAAIwCAAAAA9QCAAD1AgAAviYAAAd3AgAAxgIAAPYCAAAJAwAAThgAAM4kAAAkKwAAASACAAAAAcUmAAACcgsAALsVAAAAAT0UAAAB0ycAAAFgAgAAAckpAAABrRUAAAHZLAAAATYsAAAAAeoUAAA=\",\"AAAAOzAAAAEAAAYAAgDaJwAALCoFAAABriAAAAAAAcUmAAAAAAE9FAAAAAAAAAADYCoAAD8rAACsLAAAOzAAAAEAAHwAMAADAAEAgwACAA8DAAAvFAAA6xQAACkYAgBJGAAAVBgDAHogAACjIAEA/CACAJ8kAQD/JAUACSUCAA4lAAATJQkAPiYBAEImAwCeJgAA8yYHAP0mBQAKJwAAECcAANUnAADXJwIA2ycMABwoAADTKQAAOioAAEcqAABPKgAAaioBAG4qAAB6KgAAgioAAIQqBACyKgIACisAABwrAQAgKwMAWisAAFwrAACmKwYADCwBABQsAAA+LAAApywAALssAQA=\"]BLk[\"AAAAADswAAABAAA1AAMANCYJAKonGQAKKBEAOzAAAAEAAMgEBQABIesB8CJsAQ4nAQBYKGwBLCsAADswAAABAACXAQoAiACJARMCAwBNCwAAsxQAALYUAADwFAEALCUAAC8lAADrJQAAGScBADowAAABAAAAAAAlABAAAABHB0gHSQdkC2ULZgtnC2gLaQtqC2sLbAsAFCIUKBQrFFcUAxUPFTMVQRVfFWUVfRWFFYcVkhWVFZ0VyhVfJNAkiyXpJb0mtSpVK6gsOjAAAAEAAAAAAB0AEAAAABIC+BT/FCIVPhU/FUAVQxVNFWAVZBVmFYAViBWOFZEVlhWXFZgVmRWcFaAVoRWiFcQVxRXSFdQV6xV2LDowAAABAAAAAAASABAAAABXEQYUCRQCFUsVTBWNFZoVmxWeFaMVpBXHFcgVyxWdJLwm0ieTLDowAAABAAAAAAAWABAAAABtC28LcAtxC/0TChRCFUUVRhVKFU8VWRV+FY8VkBXTFdUVZSBmIGggnCTsJVkrOjAAAAEAAAAAAAgAEAAAAH8VnxU8GGcg0CfRJyYqJyrYLAAGThUAAF4VAADMFQAAzhUAAGUYAAC/LAAAAAAAAAAAAYYVAAA=\",\"AAAAADswAAABAADrAQEAAB7rATswAAABAADrAQEAASHrATowAAABAAAAAAAHABAAAACzFLYU8BTxFCwlLyUZJxon\"]Ck[\"AAAAAAABmSYAAAADIRQAACkUAADEJgAAAUALAAABZAIAAAEXAgAA\",\"\"]Oo[\"AAACbQIAAG4CAAAAAAABLBgAAAIHFAAAmyYAAAHRKwAAAAABQSwAAAP+EwAA/xMAALIsAAAAAd8sAAA=\",\"AAAAAAAAASwYAAAEIRQAACkUAABXFAAAISoAAAGnJgAAAAABQSwAAAP+EwAA/xMAALIsAAABZRgAAAAAAAA6MAAAAQAAAAAAFgAQAAAAYRieJIYmiSaQJqkmrCaxJrUmtybhJuIm5CblJucm6iZgJ3onWCsvLDAsMSw0LA==\"]Ak[\"AAAAAVsnAAAAAAEgAgAA\",\"\"]Gg[\"AAAAAAAAATYPAAABGwIAAAISAgAAdiwAAAAAAAABvywAAAAAAAFgAwAABWoNAABrDQAAbA0AAG0NAABdJAAA\",\"AAAAAAAAATYPAAAAAAAAAAHTJwAA\"]Dg[\"AAAAASYOAAAAAAHkAAAAAAAAAAAAAAAAAAAAATcVAAA=\",\"AAAAASYOAAAAAVQCAAA=\"]Dg[\"AAAAATIOAAAAAAHwAAAAAAAAAAAAAAAAAAAAAT0VAAA=\",\"AAAAATIOAAAAAVkCAAA=\"]Ic[\"\",\"AAAABXwsAAB9LAAAfiwAAJEsAACSLAAAOzAAAAEAAAYAAwAtGAEAYhgCAJYgAQAH1SsAABMsAAA1LAAASSwAAI4sAACqLAAAsCwAAAc1EQAAUhQAAPYUAAA3GAAAfSAAAComAACjJgAA\"]Be[\"AAAAAAAAAAHNJAAAAAABFwIAAA==\",\"\",1]Ag[\"AAAAAAAB5AIAAA==\",\"\"]Fo[\"AAAAAWsOAAAAAS4AAAABKQEAAAAAAAABcAIAAAJxAgAAcwIAAAABcgIAAAABhQIAAA==\",\"AAAAAWsOAAAAAAAAAAAAAAAAAAAAAAFWCwAA\"]Cg[\"AAAAAXsOAAAAAAI5AQAAXRUAAA==\",\"AAAAAXsOAAAAAAF8AgAA\"]Cc[\"AAAAAAABwQIAAAABaSAAAAAAAvMdAAAtLAAAAAHtIgAA\",\"\"]Cg[\"AAAAAAAAAeslAAAAAAAEZSAAAGYgAABoIAAA7CUAAAFnIAAA\",\"\"]Bo[\"AAAAAAAAAAAAAANlIAAAZiAAAGggAAABZyAAAA==\",\"\"]Cg[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAABGILAABjCwAAXBEAAF0RAAA=\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAgAAAABDJgAA\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAgMAAABEJgAA\",\"\"]Dg[\"AAAAAAAAAAAAAAAAAAAAAAAABy4UAABHFAAA7h0AAO8dAAALJwAA7ScAANQsAAA=\",\"\"]CBg[\"AAA6MAAAAQAAAAAABwAQAAAA9h29IJcmmCbEJ8UnTCqmLAIdJgAAHiYAAAJXAgAA1AIAAAEsKwAAOjAAAAEAAAAAAAwAEAAAAFoCWwJcAmMCkAKRApICmALOAvACPxRMGE0YOzAAAAEAAG4ABAB0AgEA2gIAAP4CAAD5H2oAOjAAAAEAAAAAAAcAEAAAAF4CYgLWAt4C/ALSFdQVviwCmQIAAOACAAAG4gIAAAADAAADAwAAzxUAANMVAADVFQAABT8CAABwAgAAgwIAANUCAABnIAAABnECAABzAgAA7SIAAFEsAABSLAAAUywAAAHYKwAAAXICAAACqxUAAK0VAAABhQIAAALJAgAANiwAAA==\",\"AAAAAXAgAAA7MAAAAQAALwABAGwkLwA7MAAAAQAALgACAB0ALQCZJgAAAAAAAAAAAAAAAAAAOzAAAAEAAIYAQQBLAAAARwMAAFIDAQDEDQAAMBEAANgTAgCjFAAABxYCAFEYAABfGAEA8B0AAO0fAACEIAAAsSALAGQkAADJJAIA3yQAAIUlAACJJQAAJSYAACsmAQAzJgAAgSYEAJ0mAADsJgAAHScAAB8nAgBmJwAAgCcAAKAnBwDLJwEA1CcAAO8nAAAlKAAAJygEAFMoAgDFKQAAzykAANwpAgDuKQMA9SkAAAMqAAAyKgAAtioAAP0qAAAeKwEAKysAAC8rAQBKKwIATisAAF8rAAC4KwAAuisAALwrBwAGLAIADiwAABssBACJLAIAjywAAJksAgCzLAAAxSwCANEsAADXLAAA4SwCAA==\"]Ic[\"\",\"AAA7MAAAAQAA6wEBAGcD6wEAOzAAAAEAADYABACxHQAANCYJAKonGQAKKBEAOzAAAAEAANwCBADwImwBDicBAFgobAEsKwAAAARHBwAASAcAAEkHAABfJAAAAXYsAAAAAAAAAb8sAAA=\"]8Do[\"AAAAAUAOAAAAAAH+AAAAAAAAAUIVAAAAAAAAAAAAAR8nAAA=\",\"AAAAAUAOAAAAAAAAAV4CAAA=\"]Ek[\"AAAAAU0OAAAAAAELAQAAAAAAA0UVAABKFQAAWSsAAAAAAAAAAAABICcAAA==\",\"AAAAAU0OAAAAAAAAAWICAAA=\"]Fg[\"AAAAAVAOAAAAAAIOAQAATQsAAAAAAAJGFQAAjxUAAAAAAAAAAAAEewAAABwCAAATAwAAIScAAA==\",\"AAAAAVAOAAAAAAFjAgAA\"]Bg[\"AAAAAAAAATYPAAA=\",\"AAAAAAAAATYPAAA=\"]Hk[\"AAAAAAAAAAI+AgAAqgIAAANeAgAAYgIAAGUCAAABnSQAAAN+FQAA8x0AAC0sAAAAAe0iAAA=\",\"AAAAASsRAAAAAAAAAAAAAAAAAAAAOzAAAAEAAAUAAQB1DQUAAiwRAAAtEQAA\"]Ak[\"AAAAAAAAAAABEgIAAA==\",\"\"]Bk[\"\",\"AAAAAAAAADswAAABAABpAAIA+R9aAFUgDgA=\"]Dg[\"AAAAAAAAAAAAAAAB/CQAAAAB2CsAAA==\",\"AAAAAAAAAAAAAAAB/CQAAAAB2CsAAA==\"]Eg[\"AAAAAAAAAVonAAAAAAABShUAAAAAAAHfLAAAAAAABD4RAADLJgAAXycAAG0qAAA=\",\"AAAAAAAAAAE+CwAA\"]Eo[\"AAAAAU4OAAAAAAIMAQAALhEAAAAAAAJFFQAAWSsAAA==\",\"AAAAAU4OAAAAATsLAAAAAAAAAAAAAAAAAAABPhEAAA==\"]Dk[\"AAAAAVEOAAAAAAEPAQAAAAAAAUYVAAAAAAAAAAAAAeATAAA=\",\"AAAAAVEOAAABPAsAAA==\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAFwFQAA\",\"AAAAAAAAAZgCAAA=\"]Cg[\"AAAAAdQNAAAAAAGNAAAAAAH4FAAA\",\"AAAAAdQNAAAAASECAAA=\"]Ck[\"AAAAAeINAAABDCgAAAABmwAAAAEDFQAA\",\"AAAAAeINAAAAASYCAAA=\"]Ck[\"AAAAAfkNAAABDSgAAAABsgAAAAEPFQAA\",\"AAAAAfkNAAAAATECAAA=\"]Dg[\"AAAAAAAAAAG9JgAAAAHSJwAAAAAAAAAAAAACShEAAC4sAAA=\",\"AAAAAAABMgIAAA==\"]Fo[\"AAAAAQQOAAAAAAK8AAAAnCYAAAAAAAAAAAAAAAAAA7IUAADvFAAAkSAAAA==\",\"AAAAAQQOAAAAATsCAAAAAAAAAAAAAAAAAAABUicAAA==\"]Cc[\"AAAAAAAAA9YAAAD7EwAAHxQAAA==\",\"AAAAAAABUAIAAA==\"]Ec[\"AAAAATQOAAACpCYAAKwnAAAAAfIAAAAAAT4VAAAAAALQJwAA2CwAAA==\",\"AAAAATQOAAAAAAFaAgAA\"]Co[\"AAAAATYOAAABrScAAAAB9AAAAAABPxUAAA==\",\"AAAAATYOAAAAAAFbAgAA\"]Co[\"AAAAATgOAAABricAAAAB9gAAAAABQBUAAA==\",\"AAAAATgOAAAAAAFcAgAA\"]Ck[\"AAAAAToOAAABDigAAAAB+AAAAAFBFQAA\",\"AAAAAToOAAAAAV0CAAA=\"]Dc[\"AAAAAUMOAAACpSYAAK8nAAAAAQEBAAAAAUMVAAA=\",\"AAAAAUMOAAAAAV8CAAA=\"]Co[\"AAAAAlsOAAArEQAAAAABGQEAAAAAAUwVAAA=\",\"AAAAAVsOAAAAAWgCAAA=\"]Co[\"AAAAAWEOAAABsCcAAAABHwEAAAAAAAFPFQAA\",\"AAAAAWEOAAAAAWoCAAA=\"]Cc[\"AAAAAAAAAVAVAAAAAAAAAAAAAckpAAA=\",\"AAAAAAFrAgAA\"]Bk[\"AAAAAAHjEwAAAAABURUAAA==\",\"AAAAAAFsAgAA\"]Fc[\"AAAAAYkOAAACpiYAALEnAAAAAUcBAAAAAWQVAAAAAAHRJwAA\",\"AAAAAYkOAAAAAYgCAAAAAAAAAAAAAAAAAAAB1icAAA==\"]Cg[\"AAAAAY0OAAAAAAFLAQAAAAFmFQAA\",\"AAAAAY0OAAAAAYoCAAA=\"]Eg[\"AAAAAaIOAAABLCgAAAACVwEAACwlAAAAAAAAAAAAAAAAAAItJQAALSgAAA==\",\"AAAAAaIOAAAAAZ8CAAA=\"]Cg[\"AAAAAaQOAAAAAAFZAQAAAX0VAAA=\",\"AAAAAaQOAAAAAaACAAA=\"]Dk[\"AAAAAaUOAAAAAAFaAQAAAAAAAX4VAAAAAAAAAAAAAXoAAAA=\",\"AAAAAaUOAAAAAaECAAA=\"]Dc[\"AAAAAAAAAVsBAAAAAAAAAX8VAAAAAAAAAAACLBEAABQUAAA=\",\"AAAAAaICAAA=\"]Co[\"AAAAAacOAAABsycAAAABXQEAAAABgBUAAA==\",\"AAAAAacOAAAAAaMCAAA=\"]Fg[\"AAAAAa0OAAABtCcAAAABYwEAAAKFFQAAqCwAAAACVxEAAJMsAAA=\",\"AAAAAa0OAAAAAaYCAAAAAAAAAAAAAAAAAAABShEAAA==\"]Fk[\"AAAAAbMOAAAAAAFpAQAAAAAAAAE8GAAAAAAAAAAAB7UUAADlJgAAHCcAAFInAABZJwAAyikAADEsAAA=\",\"AAAAAbMOAAAAAagCAAA=\"]Cg[\"AAAAAbcOAAABticAAAAAAYcVAAA=\",\"AAAAAbcOAAAAAakCAAA=\"]Co[\"AAAAAboOAAABtycAAAABbwEAAAABiBUAAA==\",\"AAAAAboOAAAAAasCAAA=\"]Gg[\"AAAAAb0OAAABuCcAAAACcgEAAKgmAAAC0CQAALUqAAAAAAAAAAAAAAAABg0DAAAtEQAA9yQAAConAADWJwAABSwAAA==\",\"AAAAAb0OAAAAAa0CAAA=\"]Eg[\"AAAAAb8OAAAAAAJ0AQAAihUAAAABkCwAAA==\",\"AAAAAb8OAAAAAa4CAAAAAAAAAAAAAAAAAAABKicAAA==\"]Co[\"AAAAAcYOAAABuScAAAABewEAAAAAAAGQFQAA\",\"AAAAAcYOAAAAAbICAAA=\"]Co[\"AAAAAccOAAABuicAAAABfAEAAAABkRUAAA==\",\"AAAAAccOAAAAAbMCAAA=\"]Dg[\"AAAAAAEuKAAAAAEvJQAAAAAAAAAAAAAAAAACMCUAAC8oAAA=\",\"AAAAAAABtQIAAA==\"]Cg[\"AAAAAcsOAAAAAAGAAQAAAZUVAAA=\",\"AAAAAcsOAAAAAbcCAAA=\"]Cg[\"AAAAAc4OAAAAAAGDAQAAAAGZFQAA\",\"AAAAAc4OAAAAAbgCAAA=\"]Ck[\"AAAAAc8OAAAAAAGEAQAAAAABmhUAAA==\",\"AAAAAc8OAAAAAbkCAAA=\"]Ck[\"AAAAAdAOAAAAAAGFAQAAAAABmxUAAA==\",\"AAAAAdAOAAAAAboCAAA=\"]Cg[\"AAAAAdEOAAAAAAGGAQAAAAGcFQAA\",\"AAAAAdEOAAAAAbsCAAA=\"]Dc[\"AAAAAdYOAAABvicAAAABiwEAAAAAAAABnxUAAA==\",\"AAAAAdYOAAAAAbwCAAA=\"]Co[\"AAAAAdkOAAABwCcAAAABjgEAAAABoRUAAA==\",\"AAAAAdkOAAAAAb4CAAA=\"]Cg[\"AAAAAdwOAAAAAAGRAQAAAAGiFQAA\",\"AAAAAdwOAAAAAb8CAAA=\"]Ck[\"AAAAAd8OAAAAAAGTAQAAAAABoxUAAA==\",\"AAAAAd8OAAAAAcICAAA=\"]Ck[\"AAAAAeAOAAAAAAGUAQAAAAABpBUAAA==\",\"AAAAAeAOAAAAAcMCAAA=\"]Dg[\"AAAAAeoOAAAAAAOmAQAAeSoAABkrAAAAAAABshUAAA==\",\"AAAAAeoOAAAAAdACAAA=\"]Bo[\"AAAAAAAAAdwBAAAAAcQVAAA=\",\"AAAAAAAB5wIAAA==\"]Co[\"AAAAARAPAAABwScAAAAB3gEAAAABxRUAAA==\",\"AAAAARAPAAAAAegCAAA=\"]Ck[\"AAAAARYPAAAAAAHkAQAAAAABxxUAAA==\",\"AAAAARYPAAAAAeoCAAA=\"]Cg[\"AAAAASQPAAAAAAL0AQAA0RUAAA==\",\"AAAAASQPAAAAAAHyAgAA\"]Cg[\"AAAAATUPAAAAAAERAgAAAAHrFQAA\",\"AAAAATUPAAAAAQcDAAA=\"]Bg[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAVQAAAA=\"]Ak[\"AAAAAAAAAAAAAAEXAgAA\",\"\"]Eo[\"AAAAAR0OAAAAAAHbAAAAAAAAAAAAAAAAAAAFGgIAABYDAAAbAwAA8hUAABIWAAA=\",\"AAAAAR0OAAAAAAAAAVICAAA=\"]Do[\"AAAAAAAAAAAAAksVAABMFQAAAAAAAAAAAAADTAAAAAwDAAAFFgAA\",\"AAAAAAAAAAABZQIAAA==\"]Ec[\"AAAAAAAAAAAABJoVAACbFQAAoxUAAKQVAAAAAAAAAAAAAAIOAwAAjCAAAA==\",\"AAAAAAAAAAHAAgAA\"]Ag[\"AAAAAAABaiAAAA==\",\"\"]Dk[\"AAAAAAAAAAAAAAABPwIAAA==\",\"AAAAAAAAAAAAAAAAAAAAAAACdyYAABIqAAAB6BEAAA==\"]Eo[\"AAAAAAAAAAAAAWQCAAABsSwAAA==\",\"AAAAAAAAAAAAAAAAAAAAAAAABsgmAAB/KgAAgCoAAOcrAAA9LAAAPywAAA==\"]A@c[\"AAAAAAAAAAQHFAAAmyYAACEqAAAoKgAABDYCAACnJgAA0SsAAHYsAAADOAIAAH8CAADMAgAAAV4RAAADPRQAAPwkAABBLAAABv4TAAD/EwAAUSwAAFIsAABTLAAAsiwAAANlGAAA2CsAAL8sAAADcRUAAMkpAADfLAAAAa0VAAAFhQIAAM0CAABwFQAAwhUAANksAAACyQIAADYsAAAAAuoUAADDFQAA\",\"AAAAAAA7MAAAAQAABQABAKkgBQA=\"]A@i[\"AAAAAAAAAAABxSYAAAFNAgAAAALLAgAAQSwAAAGyLAAAAAHfLAAAAa0VAAAChQIAAMIVAAABNiwAAAGsFQAAAcMVAAAAAALoFQAA6RUAAA==\",\"AAAAAAAAAAAAAAUKFQAAcxUAALIVAABnJwAAsSwAAAQjFQAAaCcAANIrAABBLAAAOjAAAAEAAAAAAAcAEAAAAP4T/xNnFWoVaxWpFcAVsiwAAAOrFQAArRUAAMEVAAABBRUAAAE2LAAAAawVAAA=\",1]GEo[\"AAA7MAAAAQAA6wEBAGcD6wE7MAAAAQAA7gEDAPcCAQB3CwAAPw/rATswAAABAAD+AQ4AMwIAAFcCAACUAgAA1AIAANgCAQDjAgAA+gIAAP0CAADzEwAALRgBAGIYAgAAHusBZCAAAJUgAgA6MAAAAQAAAAAAJgAQAAAANAI1AlMCdwJ7AoACiwKNAo4ClgKXApoCmwKcAsYC0gLTAtcC5ALzAvQC9gL5AgEDCAMJA3ULQBRBFE4YaiDOJH8n6CfpJ+on9Sr5KiQrOjAAAAEAAAAAADAAEAAAACICNwI5AkUCRgJHAksCUQJmAmcCfAKPApACkQKSApMClQLEAsUCxwLbAtwC5gLyAvsC/wIGA00Lyg3LDcwNzQ01ET8UUhRhFPYUNxhMGE0YfSAqJqMmVyj0KvYq9yr4KgIsOjAAAAEAAAAAABcAEAAAADoCQQJ0AnUCdgKBAsACyALKAtoC3QL+Al8LeQt7C18R9xNrIM0kICUeKnQqdSoQKzowAAABAAAAAAApABAAAAA2AmUCggLWAt4C3wL8AkAL+BT/FCIVPhU/FUAVQxVNFWQVZhWAFYgVjhWRFZYVlxWYFZkVnBWgFaEVohXEFcUV6xXmHecd6B3pHeodNCXFJpAsviw6MAAAAQAAAAAABwAQAAAAOAJNAn8CmQLMAuAC4QJuCzowAAABAAAAAAAUABAAAABMAoQC4gIAAwMDbQtvC3ALcQteEf0TChRCFUUVRhVKFU8VjxWQFVkrsSw6MAAAAQAAAAAACwAQAAAAPwJwAoMCywLVAiMVnxU8GNAn0SfSK9gsB3ECAABzAgAA7SIAANMnAABRLAAAUiwAAFMsAAAFYAIAAE4VAADMFQAAzhUAANgrAAACcgIAAHEVAAAABIUCAADNAgAAcBUAAMIVAAACyQIAADYsAAAAAcMVAAABhhUAAA==\",\"ADswAAABAADrAQEATQfrAQA6MAAAAQAAAAAAEAAQAAAAQhhFGO8f8B9sIC8mCSdkJ4wqjyrDKsYqZStoK5MrlyvcKwHvJAAABakgAACqIAAAqyAAAKwgAACtIAAAAAAAAAAAAAAAAAA6MAAAAQAAAAAACgAQAAAAtg0ZGNAd1SDWIHIlcyV5JWMmNis3KzswAAABAAAvAokAAAABABwAAACAAAIADAMCAF4DAQBLCwAAPA8CADYRAABhEQEAbREAADkUAQBIFAIATRQBAKsUBgD3FAAA+xUAAP0VAgAQFgAALxgBADIYAQA9GAMARBgAAFIYAADsHwAA8R8CAPgfAABtIAEAcyAAAIAgAACFIAIA/yABALwkAAC+JAoAzCQAANEkAgDeJAAA4CQMAPIkCQAFJQIAISUCADUlKwBkJQAA6iUAAO0lLwAfJgQAJiYBAC0mAQCMJgIAkSYAAJomAACvJgEAsiYAALQmAAC2JgAAzyYHANgmAwDdJgMA4yYAAOYmAADoJgEAEScAABcnAQBWJwIAYicBAHEnBAB4JwEAeycBAKgnAADGJwQAzicBAOsnAQDwJwAA9ScMAAgoAAAfKAAAISgBAFYoAADGKQIAyykDANEpAQDWKQAA2CkCAPIpAAD6KQgAIyoAACsqAAAzKgMAOyoAAEMqAABGKgAAgSoAAIkqAgCNKgEAkCoOAKAqCwCtKgQAtyoCALsqAQC/KgMAxCoBAMcqJQALKwAADysAABMrAgAmKwAAKCsAAE8rBQBWKwEAYCsEAGYrAQBpKx8AiisIAJUrAQCZKwQAnysGANQrAADZKwIA5SsBAP0rAQADLAEACSwCABEsAQAqLAIAOCwCAEAsAABCLAAASiwEAFQsIQB3LAAAjCwAAJwsAACpLAAArywAAMAsAgDKLAAAzywBANQsAgA=\"]Cg[\"AAAAAdMNAAAAASECAAABjAAAAA==\",\"AAAAAdMNAAABjyUAAA==\"]Ik[\"AAAAAdcNAAAAOzAAAAEAAAUAAgAgAAAAJQsEAAGRAAAAAAAAAAAAAAAAAAA6MAAAAQAAAAAADwAQAAAAsiClJNckNiXtJdom1yf9KYIqiSq/Kg0rWitgK1QseCw=\",\"AAG6FAAAAAHXDQAAAZIlAAA=\"]Gk[\"AAAAAAEqCwAAAAGSAAAAAAAAAAAAAAAAAAA6MAAAAQAAAAAACAAQAAAA/BWzIDcl7iUrJsAqICthK1Us\",\"AASoIAAAEicAABMnAAAUJwAAAAAB3hMAAA==\"]Eo[\"AAAAAdsNAAAAASMCAAABlAAAAAAAAAAAAAAAAAAABEYmAACCJwAA9icAADksAAA=\",\"AAE3LAAAAAHbDQAAAZQlAAA=\"]Ig[\"AAAAAd4NAAAAAiQCAAAlAgAAAZcAAAAAAAAAAAAAAAAAADowAAABAAAAAAAKABAAAACnJMkkOCXwJdkn9yeLKsIqVitjK1Ys\",\"AAAAAd4NAAABlSUAAAAAAAAAAAAAAAAAAAACRiYAAE0mAAA=\"]Hg[\"AAAAAeENAAAAASYCAAABmgAAAAAAAAAAAAAAAAAAOjAAAAEAAAAAABIAEAAAAAcW4iQhJfElISaBJlMozCncKbIq6ipKK2QrBiwJLIksmSzFLOEs\",\"AAHvFQAAAAHhDQAA\"]Ig[\"AAAAAfgNAAAAATECAAABsQAAAAAAAAAAAAAAAAAAOjAAAAEAAAAAABMAEAAAAAgW4yQGJSIl9CUiJoImVCjNKd0psyrrKksraysHLAosiiyaLMYs4iw=\",\"AAK9FAAA9R0AAAAB+A0AAAGWJQAA\"]Eo[\"AAAAAfoNAAAAAUksAAABNxgAAA==\",\"ADowAAABAAAAAAAJABAAAABIA0wDSwdUC1sLcwsvETkRWRFjFAAB+g0AAA==\"]Go[\"AAAAAfsNAAAAATsCAAABswAAAAAAAAAAAAAAAAAABp4kAADMJAAAVicAAGAnAABiJwAAeicAAA==\",\"AAAAAfsNAAABlyUAAAAAAAAAAAAAAAAAAAABUScAAA==\"]Lo[\"AAAAAQYOAAAAOzAAAAEAAAsAAwAiAAAAKwsJADcLAAABvgAAAAI1CwAANgsAAAAAAAAAAAAAAAA6MAAAAQAAAAAAHgAQAAAANBhGGEoYqiQ7JYYliCX1Jc4m3CbrJn0nzSfdJ/En/ykiKkUqhSqSKskq7SonKysrRytcK2wrDiw9LFksvCw=\",\"AAAAAQYOAAABmSUAAA==\"]Co[\"AAAAAQsOAAAAAiMAAAA4CwAAAccAAAA=\",\"AAG+FAAAAAELDgAAAZ0lAAA=\"]Dc[\"AAAAAQ0OAAAAAbAsAAABoyYAAA==\",\"ADswAAABAAAFAAEATQAFAAABDQ4AAA==\"]Lc[\"AAAAARAOAAAAOzAAAAEAAAYAAwAmAAAASAICAE4CAgACzAAAAEsCAAAAAAFNAgAAAUwCAAAAAAAAAAAAOjAAAAEAAAAAABYAEAAAAAEWMhhaGIIghCD2JR8mLiaUJlcneyeoJ6kn2ikDKjMqTyr6Kvwq/SqlK9Qr5Ss=\",\"AAG/FAAAAAEQDgAAAaAlAAA=\"]Ik[\"AAAAARoOAAACOQsAALEdAAAAAdgAAAAAAAAAAAAAAAAAADowAAABAAAAAAAQABAAAABSA8QNgSC1IDwl9yUsJoYmqSZmJ9UnaiqGKsoqISttK48s\",\"AALAFAAAOhgAAAABGg4AAALfEwAAoSUAAA==\"]Jo[\"AAAAARwOAAAAApwgAAA1LAAAAtoAAAD2FAAAAAAAAAAAAAAAAAAFRwMAAOgRAAD4HwAAGCYAACUmAAA=\",\"ADowAAABAAAAAAAJABAAAABeABADFQNMC08LUAtRC1wLXQteCwABHA4AAAGiJQAAAAAAAAAAAAAAAAAAAAGGJwAA\"]Hc[\"AAAAAR4OAAAAAlQCAABZAgAAAdwAAAAAAAAAAAAAAAAAADowAAABAAAAAAALABAAAAA8D2IRKBhfGHoghSA1JfglGSbGJ9QnVCs=\",\"AAJ+AAAADhYAAAABHg4AAA==\"]Go[\"AAAAAScOAAAAA1UCAABWAgAAWAIAAAHlAAAAAAAAAAAAAAAAAAA6MAAAAQAAAAAACAAQAAAAHABOFKYUBSVkJRomCicQJ/An\",\"AAJ/AAAADxYAAAABJw4AAA==\"]Ic[\"AAAAATMOAAAAAALxAAAAWgIAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAAwAEAAAAD0YqyQJJT0l+SXzJqIneyqTKssqbiuQK1ss\",\"AAAAATMOAAABoyUAAAAAAAAAAAAAAAAAAAABSyYAAA==\"]Hc[\"AAAAATUOAAAAAALzAAAAWwIAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAA8AEAAAAD4YCiU+Jfol9CajJx4ofCqUKswqbyuRKxEsJyxPLFws\",\"AAAAATUOAAABpCUAAA==\"]Hg[\"AAAAATcOAAAAAAL1AAAAXAIAAAAAAAAAAAAAAAAAOjAAAAEAAAAAABAAEAAAAD8YCyU/Jfsl9SakJx8ofSqVKs0qcCuSKxIsKCxCLFAsXSw=\",\"AAAAATcOAAABpSUAAA==\"]Ig[\"AAAAATkOAAAAAV0CAAAB9wAAAAAAAAAAAAAAAAAAOjAAAAEAAAAAABMAEAAAAAkW5CQHJSMl/CUjJoMmVSjOKd4ptCrsKkwrcSsILAssiyybLMcs4yw=\",\"AAJGBwAAwRQAAAABOQ4AAAGmJQAA\"]Go[\"AAAAAT8OAAAAAToLAAAB/QAAAAABXgIAAAAAAAAAAAAAADowAAABAAAAAAAMABAAAAANJUEl/iWIJqsm9yYFJycolyrPKnMrlStfLA==\",\"AAAAAj8OAAAdJgAA\"]Hk[\"AAAAAUIOAAAAAV8CAAABAAEAAAAAAAAAAAAAAAAAOjAAAAEAAAAAABAAEAAAAEAYURisJA4lQiX/JYkmrCb4JqUnKCiYKtAqdCuWK7grYCw=\",\"AAAB9h0AAAFCDgAAAaslAAA=\"]Ek[\"AAAAAUQOAAAAAdUrAAACAgEAADURAAA=\",\"AAZNAwAATAcAAHQLAAA6EQAAWhEAAO0dAAAAAUQOAAABrCUAAA==\"]Ic[\"AAAAAUYOAAAAAigAAABhAgAAAQQBAAAAAAAAAAAAAAAAADowAAABAAAAAAALABAAAACtJEMlACbdJt4nACqHKpkq0Sp1K2Eseiw=\",\"AAEDGAAAAAFGDgAAAa4lAAAAAAAAAAAAAAFgAgAA\"]Ho[\"AAAAAUwOAAAAATsLAAABCgEAAAABYgIAAAAAAAAAAAAAADowAAABAAAAAAANABAAAAAQJUUlAiaLJq4m+iYHJykomyrTKncrmSu6K2Ms\",\"AAAClyYAAJgmAAADTA4AAB4mAAD4KQAA\"]Kk[\"AAAAAk8OAABsIAAAAjwLAABECwAAAAINAQAAYwIAAAABXCYAAAAB7CUAAAAAAAAAAAA6MAAAAQAAAAAABwAQAAAAgAD7FRAWUhhUGLwk3iRGJQ==\",\"AARoGAAAaRgAAK8gAACwIAAAAAFPDgAAAAAB6yUAAAAAAAAAAAAAAAAAAuATAADlEwAA\"]Fk[\"AAAAAVgOAAAAAWgCAAADFgEAAGYCAABnAgAAAAFlAgAAAAAAAAAAAAAABKwUAAD9FQAASyUAAHcsAAA=\",\"AAAAAVgOAAABuSUAAA==\"]Ic[\"AAAAAVwOAAAAAWkCAAABGgEAAAAAAAAAAAAAAAAAOjAAAAEAAAAAABIAEAAAAK0UuCBMJbEm4SbIJ84nxinLKe8pESseK0QrWCsvLEosTSxmLNcs\",\"AAJlJwAA3SsAAAABXA4AAAG6JQAA\"]Gk[\"AAAAAWAOAAAAAmoCAACyAgAAAR4BAAAAAAAAAAAAAAAAADowAAABAAAAAAAIABAAAACBAEkU/hVVGP8gTSVhJ/Ipnyo=\",\"AAHuIgAAAAFgDgAAAbslAAA=\"]Gc[\"AAAAAWIOAAABawIAAAABIAEAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAAcAEAAAAHwn6yfWKTsqQyq5Krsq2ys=\",\"AAF5AAAAAAFiDgAAAbwlAAA=\"]Hg[\"AAAAAWYOAAABbAIAAAABJAEAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAA4AEAAAAFMD2BNIFEoU/xWDIAAhPiZdJvUpHyoyKr0qLSsuKw==\",\"AAHvIgAAAAFmDgAAAeMTAAA=\"]Gg[\"AAAAAWkOAAABbwIAAAABJwEAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAAkAEAAAAFsULxifJDMmPyZZJnEncicIKO0p\",\"AAAAAncLAABpDgAAAeQTAAA=\"]Lc[\"AAAAAXQOAAAAA3kCAAB6AgAAfgIAAAIyAQAAfAIAAAAAA3gCAAB9AgAAfwIAAAAAAAAAAAAAOjAAAAEAAAAAABQAEAAAAFUL2RM0FKMUqxSuFPAdcyCGINMk3yTlJIklJCYmJoAnJSjFKcgpIyriKw==\",\"AAAAAXQOAAAAAAAAAAAAAAAAAAAAAAFZJgAA\"]Io[\"AAAAAYQOAAAAAoYCAACHAgAAAUIBAAAAAAAAAAAAAAAAADowAAABAAAAAAARABAAAABLC1YL2hNPFDAYMxhbGOwfgCCxIPkgICZYJyUqNCq8KuYrnCw=\",\"AAAAAYQOAAAAAAAAAAAAAAAAAAAAAAFbFAAA\"]Kg[\"AAAAAYgOAAAABDEAAACIAgAAoQIAALMCAAABRgEAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAAwAEAAAAEEYriQTJU4lBib9JiAoKiigKtcqeyucK2cs\",\"AAADxCcAAMUnAACmLAAAAYgOAAABvSUAAAAAAAAAAAAAAAAAAAACegAAAEwmAAA=\"]Gk[\"AAAAAYoOAAAABTIAAACJAgAAtAIAAEsUAABMFAAAAUgBAAA=\",\"AAVgAAAAYQAAAHgLAABsJwAA2ykAAAABig4AAAG+JQAAAAAAAAAAAAAAAAAAAAH9JAAA\"]Co[\"AAAAAYwOAAAAAjMAAACKAgAAAUoBAAA=\",\"AAABvSAAAAGMDgAAAb8lAAA=\"]Gk[\"AAAAAY4OAAAAAAJMAQAAmAIAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAAgAEAAAAD0PbSD2JBsm1iZWKA8rKCuMLA==\",\"AAMfJQAAQCYAAA0nAAAAAY4OAAA=\"]Do[\"AAAAAZEOAAAAAaosAAACTwEAAComAAA=\",\"AAU7EQAAWxEAAEQUAADHJgAAXCcAAAABkQ4AAA==\"]Dk[\"AAAAAZIOAAAAAY4sAAABfSAAAA==\",\"AAVVAAAAVwAAAFkAAABaAAAAWwAAAAABkg4AAA==\"]Hk[\"AAAAAZMOAAAABDQAAABBCwAAQgsAAEMLAAABUAEAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAAwAEAAAAE8lBybiJt8n0ik6KmwqeiqhKtgqfCtoLKks\",\"AAAAAZMOAAABwCUAAA==\"]Ek[\"AAAAAZ4OAAAAAp8CAAC1AgAAAVMBAAAAAAAAAAAAAAAAAAL9JAAAhycAAA==\",\"AAFiAAAAAAGeDgAAAcMlAAA=\"]Dc[\"AAAAAqMOAABwIAAAAAM4AAAAoAIAALcCAAABWAEAAA==\",\"AAG3KwAAAAGjDgAA\"]Gk[\"AAAAAaYOAAAAAaMCAAABXAEAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAAsAEAAAADEYryQUJVAlCCamJ6Iq2Sp9K50rvCtpLA==\",\"AAAAAaYOAAABxSUAAA==\"]Hk[\"AAAAAagOAAAAAqQCAAClAgAAAV4BAAAAAAAAAAAAAAAAADowAAABAAAAAAAHABAAAABdGPMfUSX9J6Mq2ip+K2os\",\"AAFTKgAAAAGoDgAAAAAAAAAAAAAAAAAAAAABSiYAAA==\"]Fc[\"AAAAAasOAAAAAjICAACmAgAAAWEBAAAAAAAAAAAAAAAAAANLJgAAiCcAAP4nAAA=\",\"AAI+KgAAQCoAAAABqw4AAAHGJQAA\"]Fg[\"AAAAAa8OAAAAAagCAAABZQEAAAAAAAAAAAAAAAAABrQUAABTJQAA5CYAABsnAABRJwAAMCwAAA==\",\"AAAAAa8OAAAByCUAAA==\"]Hg[\"AAAAAbUOAAAAAToAAAABawEAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAA8AEAAAALkgsCQWJVQlCibsJv4m4CeIKqQq3CqAK58rvisMLGws\",\"AAGiFAAAAAG1DgAAAcolAAA=\"]Ck[\"AAAAAbYOAAAAAjsAAACpAgAAAWwBAAA=\",\"AAAAAbYOAAAByyUAAA==\"]Hg[\"AAAAArgOAABCGAAAAAGrAgAAAW0BAAABqgIAAAAAAAAAAAAAAAA6MAAAAQAAAAAADAAQAAAAsSQXJVUlCyaPJrMm/yYIJ6Uq3SqBK6ArbSw=\",\"AAAAAbgOAAABzCUAAA==\"]Fg[\"AAAAAbsOAAAAAqwCAACtAgAAAXABAAAAAAAAAAAAAAAAAAVMJgAAiScAACsqAACBKgAA5CsAAA==\",\"AAAAAbsOAAABzSUAAA==\"]Ho[\"AAAAAb4OAAAAAa4CAAABcwEAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAAkAEAAAAEMYsiTFJPgkGCUMJtEmpireKoIr\",\"AAFEKgAAAAG+DgAAAc4lAAAAAAAAAAAAAAAAAAAAAYknAAA=\"]Ck[\"AAAAAAABrwIAAAAAAAAAAAAAAAAAAARNJgAAiicAAAAoAAA6LAAA\",\"\"]Eo[\"AAAAAAACsAIAALECAAAAAAAAAAAAAAAAAAA6MAAAAQAAAAAACgAQAAAAtCTKJFYlDibiJwEoqCrgKlcrhCtuLA==\",\"\"]Fo[\"AAAAAdIOAAAAAzwAAABFCwAARgsAAAGHAQAAAAAAAAAAAAAAAAAFuiAAALQmAADmJgAAcioAADIsAAA=\",\"AAHHFAAAAAHSDgAAAc8lAAA=\"]Hk[\"AAAAAdUOAAAAAz0AAAC8AgAAvQIAAAGKAQAAAAAAAAAAAAAAAAA6MAAAAQAAAAAADQAQAAAAtSQZJVclDyYAJyEoqSq3KuEqLyuFK6ErvytvLA==\",\"AAAAAdUOAAAB0CUAAA==\"]Ic[\"AAAAAdgOAAAAAj4AAAC+AgAAAY0BAAAAAAAAAAAAAAAAADowAAABAAAAAAATABAAAAC2JBolWCUQJi0mASfvJyIoqiq4KuIqMCtTK4YrjyuiK8ArBCxwLNAs\",\"AAAAAdgOAAAB0SUAAA==\"]Ho[\"AAAAAdsOAAAAArgCAAC/AgAAAZABAAAAAAAAAAAAAAAAADowAAABAAAAAAARABAAAABEGHUgGyVZJYQlESYnJpomAienJ9MpfiqrKuMqhyujK/4rDSw=\",\"AAAAAdsOAAAB0yUAAA==\"]Eo[\"AAAAAd0OAAAAARMsAAABUhQAAA==\",\"ADowAAABAAAAAAAJABAAAAANAA4ADwARABMAFQAXAEkDSgNLAwAB3Q4AAA==\"]Hg[\"AAAAAd4OAAAABLkCAAC6AgAAwgIAAMMCAAABkgEAAAHAAgAAAAAAAAAAAAAAADowAAABAAAAAAAIABAAAABuIFolEiZzJ6wq5CoiK4gr/Ss=\",\"AAAAAd4OAAAB1CUAAA==\"]Hg[\"AAAAAeEOAAAAAT8AAAADlQEAAMQCAADFAgAAAAAAAAAAAAAAAAA6MAAAAQAAAAAADAAQAAAADBQRFkgYpSC3JNQkMCbGJtIm4ycmK1IriSs=\",\"AAAAAeEOAAAB1SUAAA==\"]Ec[\"AAAAAeYOAAAAAdACAAABogEAAAAAAAAAAAAAAAAAAk4mAACLJwAA\",\"AAEgKgAAAAHmDgAAAdglAAA=\"]Ic[\"AAAAAe0OAAAAAdECAAABqQEAAAAAAAEtLAAAAAAAAAAAAAJeGAAAciwAAA==\",\"ADowAAABAAAAAAAHABAAAABgC3oLfAtWEWARXhRjJVQqAAHtDgAAAAAAAAAAAAAAAAAAAAABWwMAAA==\"]Ek[\"AAAABA4PAABFGAAACScAAGQnAAAABEEAAAC7AgAA5wIAACwrAAAB2wEAAA==\",\"AAABTCoAAAEODwAAAdklAAA=\"]Cg[\"AAAAAQ8PAAAAAegCAAAB3QEAAA==\",\"AAAAAQ8PAAAB2iUAAA==\"]Io[\"AAAAARIPAAAAA0MAAADpAgAA6gIAAALgAQAA6wIAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAA0AEAAAAAQYVxhmJBwlXCUVJk0nHCgBKq8q5yqMK6Qrcyw=\",\"AAHjFAAAAswmAADNJgAAARIPAAAB3CUAAA==\"]Kk[\"AAAAARkPAAAAA0YAAABHCwAASAsAAAHoAQAAAAAAAAAAAAAAAAA6MAAAAQAAAAAAEwAQAAAAXgNfA68UhyC7IMsk7CRdJZ4mtiboJnMqHSsfKyMrJSvBKzMsyizPLA==\",\"AALnFAAA7icAAAABGQ8AAAHfJQAAAAAAAAAAAAAAAAAAAAEbJwAA\"]Ic[\"AAAAASEPAAAAAuwCAADxAgAAA/EBAADwAgAA8gIAAAHuAgAAAAAAAAAAAAAAADowAAABAAAAAAAJABAAAABgGLokyCT7JBYm1CbmJ7Aq6CqNKw==\",\"AALoKwAA0ywAAAABIQ8AAAHhJQAA\"]Io[\"AAAAASUPAAAAA0gAAABJCwAASgsAAAH1AQAAAAAAAAH8JAAAAAAAAAAAOjAAAAEAAAAAAAkAEAAAALEUXyXVJsonzyf2Kdkr2itMLE4s\",\"AAAAASUPAAAB4iUAAAAAAAAAAAAAAAAAAAAC9BMAAPUTAAA=\"]Hg[\"AAAAATMPAAAAAgQDAAAFAwAAAg8CAAAGAwAAAAAAAAAAAAAAAAA6MAAAAQAAAAAADAAQAAAAuyRgJRcm6ibnJwIqsSrpKl0rjit1LHssvSw=\",\"AAAAATMPAAAB4yUAAA==\"]Co[\"AAAAATQPAAAAAkkAAAAHAwAAARACAAA=\",\"AAL3HQAAXiQAAAABNA8AAA==\"]Ag[\"\",\"AAAAAAAAAAEQKwAA\"]Ck[\"AAAAAS4PAAAAAAL+AQAA2BUAAA==\",\"AAAAAS4PAAAAAAAB9xMAAA==\"]Mk[\"AAAAAAAAAAc+AgAAdgIAAKoCAADAAgAAaSAAAGsgAAAoKgAABl4CAABiAgAAZQIAAEALAABcJgAAkCwAAAAG8x0AAGUgAABmIAAAaCAAAOwlAAAtLAAAAWcgAAAB7SIAAAABySkAAA==\",\"AAAAAAUVFAAAFhQAABcUAAAYFAAAGRQAAAAAAAAAAAAAAAAAAAA7MAAAAQAABwABAA0UBwA=\"]Dc[\"AAAAARsOAAAC3xMAAKsnAAAAAdkAAAABMxUAAA==\",\"AAAAARsOAAABOQsAAA==\"]Ao[\"AAAAAAAAAAAAAAAAAAFlGAAA\",\"\"]Cg[\"AAAAAAAAAAAAAAAAAAAAAAAABGMLAAB0IAAA+CAAAM8kAAA=\",\"\"]Bc[\"AAAAAAAAAANHBwAASAcAAEkHAAA=\",\"\"]Dc[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAABkoHAAD0FQAA9RUAAHQgAADPJAAALiwAAA==\"]Cg[\"AAAAARcPAAAAAALmAQAAyRUAAA==\",\"AAAAARcPAAAAAegnAAA=\"]Do[\"AAAAAS0PAAAAAAL9AQAA1xUAAA==\",\"AAAAAS0PAAABwCYAAAJAFAAA6ScAAAI/FAAATBgAAA==\"]Do[\"AAAAATkPAAAAAAIVAgAA7RUAAA==\",\"AAAAATkPAAABwiYAAAJBFAAA6icAAAI7GAAATRgAAA==\"]Ac[\"AAAAAAHvAgAA\",\"\"]BNi[\"AAAAAXcLAAACwCYAAMImAAAAAiACAAA7GAAAOjAAAAEAAAAAAAkAEAAAAIEC3QI1CzYLPgtfC3kLewtfESAlBYICAADeAgAA3wIAAEALAADFJgAAOjAAAAEAAAAAAA0AEAAAAGQCeAJ9AuAC4QIHFQ0VtRW4FbkVvhXgFeMVnSQ6MAAAAQAAAAAACQAQAAAAhALiAh4VHxUgFVkVzxWcJN4r4Ss6MAAAAQAAAAAACQAQAAAAcAKDAtUC+hT9FFoVnxXQJ9En2CwGcQIAAHMCAAAJFQAAvxUAAMAVAAB2KgAABk4VAABeFQAAzBUAAM4VAADkFQAAvywAAANyAgAAHRUAAHEVAAABwRUAAAWFAgAABRUAAHAVAADCFQAA2SwAAAEYFQAAAawVAAAFFxUAADQVAAA3FQAAPRUAAMMVAAABhhUAAAAC6BUAAOkVAAA=\",\"AAAAAAAAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAFoAEAAAAM4NNBT8FQEWMRg0GEEYQxhGGEoYXBhdGF4YdSCBIKQkqyTXJIYlhyWIJSQmhyaIJoomiyaPJpQmqiarJq0mriazJs4m1ybcJgMnBCcFJwYnBycIJ2Endid3J30nfiepJ80n8SceKCAoJijKKdcpBCoiKiUqRSpsKnsqnyqsKr4q7SoNKxErEislKycrLStHK5QrmCueK7kruysVLBYsFywYLBksJywoLCksMiwzLE8sUCyrLN0s\",1]Dk[\"AAAAAcUOAAAAAAF6AQAAAAAAAY8VAAAAAAAAAAAAAeUTAAA=\",\"AAAAAcUOAAABRAsAAA==\"]Bg[\"AAAAASEOAAAAAAHfAAAA\",\"AAAAASEOAAA=\"]Bg[\"AAAAAS0OAAAAAAHrAAAA\",\"AAAAAS0OAAA=\"]Cc[\"\",\"AAAAAAAAOzAAAAEAAI0BAgCIAIkBEwIDAAABEgIAAA==\"]Gm[\"\",\"AAA7MAAAAQAA6wEBAMUb6wE7MAAAAQAA6wEBANkZ6wE7MAAAAQAAWAACAIwlVwDkLAAAOzAAAAEAAAYAAQCcIAYAADswAAABAABpAAIA+R9aAFUgDgA=\",1]HFo[\"\",\"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\"]Gg[\"AAABcwUAAA==\",\"AAAAAAAAAAEHFAAAAAAAAAAAAAAAADowAAABAAAAAAARABAAAABpDTgRLRTYJNkk2iTbJFAmUSZSJroqGiteK9Mr4yt7LI0syyw=\"]JDk[\"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\"]Ao[\"\",\"AAA7MAAAAQAA6wEBABMW6wE=\"]Ck[\"AAAAAAAAAg4CAADQKQAAAAAAAecVAAA=\",\"AAAAAAAAAAAAAAEDAwAA\"]Ac[\"AAAAAAFkIAAA\",\"\"]Bo[\"AAAAAAAAAAAAAANlIAAAZiAAAGggAAABZyAAAA==\",\"\"]Bg[\"AAAAAAAAASYVAAA=\",\"AAAAAAABQwIAAA==\"]Do[\"AAAAAQEOAAAAAAK5AAAAFRUAAA==\",\"AAAAAQEOAAAAAAAAAAE4AgAAAAAAAAAAAAABshQAAA==\"]Cg[\"AAAAARkOAAAAAALVAAAAMRUAAA==\",\"AAAAARkOAAAAAU8CAAA=\"]Cg[\"AAAAASkOAAAAAALnAAAAORUAAA==\",\"AAAAASkOAAAAAVYCAAA=\"]Dc[\"AAAAAV4OAAABECgAAAABHAEAAAAAAAAAAAFOFQAA\",\"AAAAAV4OAAAAAAGzFAAA\"]Fg[\"AAAAAbIOAAABtScAAAABaAEAAAAAAAAAAAAAAAAAAAABhhUAAA==\",\"AAAAAbIOAAAAAacCAAAAAAAAAAAAAAAAAAABtRQAAA==\"]Cg[\"AAAAAR8OAAAAAALdAAAANRUAAA==\",\"AAAAAR8OAAAAAVMCAAA=\"]Bg[\"AAAAAAAAAAAAAAAAAAAAAAAAASQlAAA=\",\"\"]Eo[\"AAAAAWoOAAAC5BMAADQmAAAAASgBAAAFABQAACIUAACLJQAA6SUAAFUrAAA=\",\"AAAAAWoOAAABbwIAAAAAAAFACwAA\"]Do[\"AAAAAf8NAAAAAAK3AAAAExUAAA==\",\"AAAAAf8NAAAAAAAAATYCAAAAAAAAAAAAAAAB7xQAAA==\"]Cg[\"AAAAARgOAAAAAALUAAAAMBUAAA==\",\"AAAAARgOAAAAAU4CAAA=\"]Cg[\"AAAAASgOAAAAAALmAAAAOBUAAA==\",\"AAAAASgOAAAAAVUCAAA=\"]Co[\"AAAAAV0OAAABDygAAAABGwEAAAABTRUAAA==\",\"AAAAAV0OAAAAAAHwFAAA\"]Bo[\"AAAAAaAOAAAAAAJVAQAAexUAAA==\",\"AAAAAaAOAAA=\"]Cg[\"AAAAAakOAAAAAAJfAQAAgRUAAA==\",\"AAAAAakOAAAAAaQCAAA=\"]Bo[\"AAAAAckOAAAAAAJ+AQAAkxUAAA==\",\"AAAAAckOAAA=\"]Cg[\"AAAAASMPAAAAAALzAQAA0BUAAA==\",\"AAAAASMPAAAAAfECAAA=\"]Ck[\"AAAAAUEOAAAAAAH/AAAAAAAAAUIVAAA=\",\"AAAAAUEOAAAAAToLAAA=\"]Dc[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAABmELAABTEQAARxgAAEgYAABLGAAA+x0AAA==\"]Bg[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAASQlAAA=\"]Dk[\"AAAAAV8OAAABESgAAAADHQEAALMUAADwFAAAAAAAAf0TAAA=\",\"AAAAAV8OAAAAAWkCAAA=\"]Dg[\"AAAAAAAAAb8AAAAAAAAAAAAAAAAAAAaCAAAAaQ0AADYRAABUEQAAYREAAC0UAAA=\",\"\"]Do[\"AAAAAQ8OAAAAASUAAAABywAAAA==\",\"AAAAAQ8OAAABnyUAAAAAAAAAAAAAAAAAAAABWhgAAA==\"]Eo[\"AAAAAWwOAAAAAS8AAAABKgEAAAAAAAAAAAABcgIAAAABhQIAAA==\",\"AAAAAWwOAAAAAAAAAAAAAAAAAAAAAAFbGAAA\"]Co[\"AAAAAS8PAAABwiYAAAAC/wEAANkVAAA=\",\"AAAAAS8PAAABwSYAAAH0AgAA\"]Co[\"AAAAAAK+JgAAwSYAAAABOxgAAA==\",\"AAAAAAAAAAHEJgAAAAABFwIAAA==\"]Cg[\"AAAAAXoOAAAAAAI4AQAAXBUAAA==\",\"AAAAAXoOAAAAAXsCAAA=\"]Ck[\"AAAAATEPAAAAAAMBAgAA2xUAALsmAAA=\",\"AAAAATEPAAAAAfYCAAA=\"]Ck[\"AAAAAToPAAAAAAIWAgAA7hUAAA==\",\"AAAAAToPAAABviYAAAEJAwAA\"]Ag[\"\",\"AAAAAAABQgIAAA==\"]Cg[\"AAAAAfwNAAAAAAK0AAAAEBUAAA==\",\"AAAAAfwNAAABMwIAAA==\"]Ak[\"AAAAAAAAAAAAAAFeEQAA\",\"\"]Co[\"AAAAAAAAAp8BAACuFQAA\",\"AAAAAU8mAAAAAAAAAAAAAAAAAAABzQIAAA==\"]Eg[\"AAAAASgPAAABGCgAAAAB+AEAAAAAAAAAAAAAAAAAA/QTAAC3FAAA8hQAAA==\",\"AAAAASgPAAAAAUkLAAA=\"]Eg[\"AAAAASsPAAABGygAAAAB+wEAAAAAAAAAAAAAAAAAA/UTAAC4FAAA8xQAAA==\",\"AAAAASsPAAAAAUoLAAA=\"]Be[\"AAAAAAA7MAAAAQAAbAEBAFgobAE=\",\"\",1]Cc[\"AAAAAAAAAAAAAAJnJwAA8icAAA==\",\"AAAAAAABiwIAAA==\"]Ck[\"AAACzCYAAM0mAAABFA8AAAHzEwAAAAHiAQAA\",\"AAHlFAAAAAEUDwAA\"]Ao[\"AAAAAAAAAAI1CwAANgsAAA==\",\"\"]Do[\"AAAAATcPAAAAAUoAAAABEwIAAAAAAAAAAAAAAAAAAwcAAAAIAAAATgsAAA==\",\"AAAAATcPAAA=\"]Bk[\"AAAAAAAAApkBAACoFQAA\",\"AAAAAAAAAccCAAA=\"]Ck[\"AAAAAAAAAAAAAAAAAAAAAAAABWILAABcEQAAXREAAPQVAAD1FQAA\",\"\"]Do[\"AAAAAQ4OAAAAASQAAAABygAAAA==\",\"AAAAAQ4OAAABniUAAAAAAAAAAAAAAAAAAAABgiAAAA==\"]Dk[\"AAAAAWMOAAAAASkAAAABIQEAAAFHBwAA\",\"AAAAAWMOAAAAAAAAAAAAAAAAAAAAAAGDIAAA\"]Dg[\"AAAAAWcOAAAAASwAAAABJQEAAA==\",\"AAAAAWcOAAAAAAAAAAAAAAAAAAAAAAFVCwAA\"]Cc[\"AAAAAAAABA0CAAALFAAALBQAAOYVAAA=\",\"AAAAAQIDAAA=\"]Bo[\"AAAAAAAAAQYCAAAAAAHgFQAA\",\"AAAAAAAAAfsCAAA=\"]Cc[\"AAAAAs8NAABbJwAAAAEdAAAAAYgAAAA=\",\"AAAAAc8NAAA=\"]Ag[\"AAAAAAABUwAAAA==\",\"\"]Bg[\"AAAAAbAOAAAAAAFmAQAA\",\"AAAAAbAOAAA=\"]Bo[\"AAAAAAAAAQkCAAAAAeIVAAA=\",\"AAAAAAAAAAH+AgAA\"]Cc[\"AAAAAAAAAQcCAAAAAeEVAAA=\",\"AAAAAAAAAAAB/AIAAA==\"]Ao[\"AAAAAdgNAAA=\",\"AAAAAdgNAAA=\"]Ck[\"AAAAAAAAAAAAAAAB+hQAAAAAAAAAAAENFAAA\",\"AAAAAAABJQsAAA==\"]Dk[\"AAAAAUcOAAAAAAIFAQAARBUAAAAAAAAAAAAAAAAAARMUAAA=\",\"AAAAAUcOAAAAAWECAAA=\"]Dg[\"AAAAAe8NAAAAAAOoAAAAdyoAABcrAAAAAAABChUAAA==\",\"AAAAAe8NAAAAAS0CAAA=\"]Bk[\"AAAAAAAAAAAAAAEcFQAA\",\"AAAAAAABMgsAAA==\"]Fo[\"AAAAARMPAAAAAUQAAAAB4QEAAAAAAAAAAAAAAAAAAhwmAADZJgAA\",\"AAHkFAAAAAETDwAAAvMTAADdJQAAAAAAAAAAAAAAAAAAAAFmJAAA\"]Cg[\"\",\"AAAAAAOkJgAApSYAAKYmAAAAAAAAAAAAAAAAAAAAAVknAAA=\"]Co[\"AAAAASwPAAABaiQAAAAC/AEAANYVAAA=\",\"AAAAAiwPAAC/JgAAAAHzAgAA\"]Ck[\"AAAAATgPAAABayQAAAACFAIAAOwVAAA=\",\"AAAAATgPAAAAAQgDAAA=\"]Cc[\"AAAAAAAAOzAAAAEAAI0BAgCIAIkBEwIDAAABEgIAAA==\",\"\"]Do[\"AAAAAdUNAAAAAR4AAAABjwAAAA==\",\"AAAAAdUNAAABkCUAAAAAAAAAAAAAAAAAAAABpSQAAA==\"]Do[\"AAAAAQUOAAAAASEAAAABvQAAAA==\",\"AAAAAQUOAAABmCUAAAAAAAAAAAAAAAAAAAABqiQAAA==\"]Bg[\"AAAAASUOAAAAAAHjAAAA\",\"AAAAASUOAAA=\"]Bg[\"AAAAATEOAAAAAAHvAAAA\",\"AAAAATEOAAA=\"]Ak[\"\",\"AAAAAAACziQAACQrAAA=\"]Co[\"AAAAATAPAAAAAAIAAgAA2hUAAA==\",\"AAAAATAPAAAB9QIAAAAAAc0kAAA=\"]Cg[\"AAAAAAAAAAAAAAAAAAABcRUAAA==\",\"AAAAAAAAAAAAAZkCAAA=\"]Ac[\"AAAAAAEAFgAA\",\"\"]Eg[\"AAAAAS8qAAAAAawgAAAB9yoAAAAB6R0AAAABcAsAAA==\",\"AAAAAAAABcoNAADLDQAAzA0AAM0NAABXKAAA\"]Dk[\"AAAAAekOAAAAAAKlAQAAsRUAAAAAAAAAAAAAAAAAATElAAA=\",\"AAAAAekOAAAAAc8CAAA=\"]Bg[\"AAAAAAAAAq4BAAC3FQAA\",\"AAAAAAHUAgAA\"]Ck[\"AAAAAAAAAAMHFAAAKRQAAJsmAAABpyYAAA==\",\"AAAAAAABwQIAAA==\"]Ek[\"AAAAAAAAAc0BAAAAAAAAAAAAAAABwhUAAAAC8BMAAAYWAAA=\",\"AAAAAAAAAAAAAeECAAAAAAAAAAAAAAECGAAA\"]Ck[\"AAAAAAAAAQsCAAAAAAAAAAAB5BUAAA==\",\"AAAAAAAAAAAAAAEAAwAA\"]IJm[\"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\",1]Hg[\"AAAAAAAAAkACAADHAgAAAUECAAAAAAAAAAFgAgAAAAABhQIAAA==\",\"AAAAAAAAAAAAAAAAAAAAAAAAOzAAAAEAABwABwD4IAIApiQBAKwkDwBNJwAAfCoCAEQrAgDkKwAA\"]Eg[\"AAAAAeMNAAAAAAKcAAAABBUAAA==\",\"AAABcwUAAALjDQAA9CAAAAAAAAAAAAAAAAAAAAAAAqgkAACpJAAA\"]Ec[\"AAAAAfQNAAAAAAKtAAAADBUAAA==\",\"AAAAAvQNAAD1IAAAAAAAAAAAAAAAAAAAAAAC9iAAAPcgAAA=\"]Bo[\"AAAAAewOAAAAAAKoAQAAsxUAAA==\",\"AAAAAewOAAA=\"]Ag[\"AAAAAAAAASwYAAA=\",\"\"]Eg[\"AAAAAfENAAAAAS0CAAABqgAAAAAAAAAAAAAAAAAABMEkAABIJgAAhCcAADwsAAA=\",\"AAFQKgAAAAHxDQAA\"]Bo[\"AAAAAAGqJwAAAAAAASIVAAA=\",\"AAAAAAABPQIAAA==\"]Cg[\"AAAAARUPAAAAAALjAQAAxhUAAA==\",\"AAAAARUPAAAAAekCAAA=\"]Ck[\"AAAAASIPAAAAAAHyAQAAAAAAAc8VAAA=\",\"AAAAASIPAAAAAAHwAgAA\"]Bk[\"AAAAAAAAAAABaRUAAA==\",\"AAAAAAAAAY8CAAA=\"]Bk[\"AAAAAAHeEwAAAAAAAf8UAAA=\",\"AAAAAAEqCwAA\"]Ao[\"AAAAAAAAAAAAAAAAAWcVAAA=\",\"\"]Cg[\"AAAAAXYOAAAAAAI0AQAAWBUAAA==\",\"AAAAAXYOAAAAAXcCAAA=\"]Ck[\"AAAAAVkOAAAAAAEXAQAAAAABSxUAAA==\",\"AAAAAVkOAAAAAAFmAgAA\"]Cc[\"AAAAAZoOAAAAAAAAAXcVAAA=\",\"AAAAAZoOAAAAAUELAAA=\"]Co[\"AAAAAW0OAAAAAAIrAQAAUhUAAA==\",\"AAAAAW0OAAAAAAAAAAAAAXACAAA=\"]Bg[\"\",\"AAAAAAAAAAAAAAAAAAAAAAAAAfoVAAA=\"]Bc[\"AAAAAAA7MAAAAQAABgABAJwgBgA=\",\"\"]Dg[\"AAAAAQcPAAAAAAHTAQAA\",\"AAHcFAAAAAEHDwAAAAAAAAAAAAAAAAAAAAABQSYAAA==\"]Ho[\"AAAAAeQOAAAAAc8CAAABoAEAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAAoAEAAAALgkWyUTJpAmtSbnJuQnrSrlKoorcSw=\",\"AAAAAeQOAAAB1iUAAAAAAAAAAAAAAAAAAAABTiYAAA==\"]Cg[\"AAAAAd8NAAAAAAKYAAAAARUAAA==\",\"AAAAAd8NAAAAASQCAAA=\"]Cg[\"AAAAAcIOAAAAAAJ3AQAAjBUAAA==\",\"AAAAAcIOAAAAAbACAAA=\"]Co[\"AAAAAAAAAAAAAAAAAAAAAAAAAmIUAADzFQAA\",\"AAAAAAACdQsAAH8nAAA=\"]Do[\"AAAAASAPAAABFigAAAAD7wEAALYUAADxFAAAAAAAAQoUAAA=\",\"AAAAASAPAAAAAAAB7gIAAA==\"]CEg[\"AAAAOjAAAAEAAAAAAA8AEAAAAKICAgNTGLIdtB21Hb8gwSDDIMQgTyZ8LH0sfiyRLJIsOjAAAAEAAAAAAA8AEAAAADMCawJsAm8C7wL6AioLOQs8Cy0YLhhiGGMYZBiWIJcgOzAAAAEAAIgANgAhAgAAIwIPADQCAQA7AgAAPQIAAEICAQBIAgIATgICAFQCAgBYAgAAXQIAAF8CAABhAgAAaAICAHcCAAB5AgIAfgIAAIACAACGAgUAjQIBAJYCAQCaAgcAowIGAKsCAwC8AgMAwgIBAMYCAADPAgQA1wIAAOcCAwDsAgEA8QIAAPMCAAD2AgAA+QIAAAEDAAAEAwEABwMAACULBAArCwkANwsBADoLAQBBCwIARwsCAEAUAABLFAAA6CcBANUrAAATLAAANSwAAEksAACOLAAAqiwAALAsAAA6MAAAAQAAAAAALgAQAAAAIgI3AjkCQAJEAkUCRgJHAksCUQJaAlsCXAJjAmYCZwJ8Ao8CkAKRApICkwKVApgCxALFAscCzgLbAtwC5gLrAvAC8gL7Av8CBgM9CzURPxRSFPYUNxhMGH0gKiajJjowAAABAAAAAAAQABAAAAA6AkECdAJ1AoECyALKAtoC3QLuAv4CNQs2Cz4L9xPNJBArBzYCAACCAgAA1gIAAN4CAADfAgAA/AIAAL4sAAA6MAAAAQAAAAAACQAQAAAAOAJNAmQCeAJ9An8CmQLMAuAC4QIFTAIAAIQCAADiAgAAAAMAAAMDAAAEcAIAAIMCAADLAgAA1QIAAAJxAgAAcwIAAAABcgIAAAAChQIAAM0CAAAByQIAAA==\",\"AAAAAAAAAAABXCYAAA==\"]Jk[\"AAAAATsPAAACRAsAABkUAAA7MAAAAQAAGgANAFMAAABZAgAArwIMAPQCAAAIAwEARQsBAEoLAABBFAAATBQAAM4kAACZJgAA6icAACQrAAABTRgAAAHEJgAAAAABFwIAAA==\",\"AAAAATsPAAAAAVMAAAAAAmkgAAAoKgAA\"]Bg[\"AAAAAAAAAgICAADcFQAA\",\"AAAAAfcCAAA=\"]Co[\"AAAAASsOAAAAAATpAAAA/BMAACAUAAA7FQAA\",\"AAAAASsOAAAAAVgCAAA=\"]Dg[\"AAAAAdkNAAAAAAAAAf4UAAAAAAAAAAAAAAABPhQAAA==\",\"AAAAAdkNAAAAASkLAAA=\"]Dg[\"AAAAAfoOAAAAAAG9AQAAAAAAAAAAAAAAAAAD2CYAACYoAAALKwAA\",\"AAAAAfoOAAA=\"]Co[\"AAAAAfYNAAAAAAGvAAAAAAABDRUAAAHhKwAA\",\"AAAAAfYNAAAAAS8CAAA=\"]Dg[\"AAAAAAAAAckBAAAAAAAAAAHAFQAAAAAAAAAB7hMAAA==\",\"AAAAAAAAAAAB3wIAAA==\"]Cg[\"AAAAARQOAAAAAALQAAAALBUAAA==\",\"AAAAARQOAAAAAAFLAgAA\"]Ag[\"AAAAAAAAAUcVAAA=\",\"\"]Lc[\"AAAAAlIOAAD4KQAAAAGdIAAAAhABAAA9CwAAAT4LAAAAAAAAAAAAAAAAOjAAAAEAAAAAAB4AEAAAAEsAtiDYJBElRyUDJlAmjCavJt4m+yZOJ+wn1yl/KpwquirUKhorXitfK3grmiu7K9YrAyw4LD8sZCyNLKss\",\"AAAAAVIOAAABsyUAAAAAAfkpAAA=\"]Bk[\"AAAAAAAAApgBAACnFQAA\",\"AAAAAAABxgIAAA==\"]Hc[\"AAAAA0sOAAAeJgAAlysAAAAAAQkBAAAAAAAAAAAAAAAAADowAAABAAAAAAAMABAAAAAPJUQlASaKJq0m+SYGJ5oq0ip2K5gruStiLA==\",\"AAAAAUsOAAABsiUAAA==\"]Do[\"AAAAAAAAAUgVAAAAAAAAAAAAAAAAAAH6FQAA\",\"AAAAAAAAAT0LAAAAAAAAAAAAAAAAAAHLJgAA\"]Cg[\"AAAAAAAAAZwBAAAAAAAAAAAAAAGrFQAA\",\"AAAAAAAAAAHKAgAA\"]Bo[\"AAAAASAOAAAAAALeAAAANhUAAA==\",\"AAAAASAOAAA=\"]Bo[\"AAAAASwOAAAAAALqAAAAPBUAAA==\",\"AAAAASwOAAA=\"]Eg[\"AAAAAScPAAABFygAAAAC9wEAALkmAAAAAAAB0xUAAA==\",\"AAAAAScPAAAAAAAAAAAAAAAAAAAAAAG3FAAA\"]Eg[\"AAAAASoPAAABGigAAAAC+gEAALomAAAAAAAB1RUAAA==\",\"AAAAASoPAAAAAAAAAAAAAAAAAAAAAAG4FAAA\"]Jc[\"AAAAARwPAAAAAkcAAADtAgAAAesBAAAB7gIAAAAAAAAAAAAAAAA6MAAAAQAAAAAAFQAQAAAAsBTrFEkYvCBeJZEmtybpJsknxynxKWsqbioKKxIrRivCKzQsSyx0LK8s0Sw=\",\"AAHoFAAAAAEcDwAAAeAlAAA=\"]Cg[\"AAAAAdwNAAAAAAKVAAAAABUAAA==\",\"AAAAAdwNAAABJScAAA==\"]Cg[\"AAAAAcAOAAAAAAJ1AQAAixUAAA==\",\"AAAAAcAOAAABKScAAA==\"]Cg[\"AAAAAecOAAAAAAKjAQAArxUAAA==\",\"AAAAAecOAAAAAAHOAgAA\"]Bo[\"AAAAAAAAAAAAAAAAAAAAAAAAAALqFAAANBUAAA==\",\"\"]Dg[\"AAAAASYPAAAAAAH2AQAAAAHSFQAA\",\"AAAAASYPAAAAAAAAAAAAAAAAAAAAAAHyFAAA\"]Do[\"AAAAASkPAAABGSgAAAAB+QEAAAAB1BUAAA==\",\"AAAAASkPAAAAAAAAAAAAAAAAAAAAAAHzFAAA\"]Dk[\"AAAAAfcOAAAAAAG6AQAA\",\"AAAAAfcOAAAAAAAAAAAAAAAAAAAAAANTJwAAVCcAAFUnAAA=\"]Bc[\"AAAAAAAAAAEQKwAAAAAAAXACAAA=\",\"\"]Ag[\"AAAAAAAAAAH3EwAA\",\"\"]Cg[\"AAAAAQAOAAAAAAK4AAAAFBUAAA==\",\"AAAAAQAOAAAAAAE3AgAA\"]Bg[\"AAAAAbEOAAAAAAFnAQAA\",\"AAAAAbEOAAA=\"]Bg[\"AAAAADswAAABAABYAAIAjCVXAOQsAAA=\",\"\"]Bk[\"AAAAAAAAAskAAAArFQAA\",\"AAAAAAAAAUcCAAA=\"]Cg[\"AAAAAf4NAAAAAAK2AAAAEhUAAA==\",\"AAAAAf4NAAAAATUCAAA=\"]Ag[\"AAAAAAAB5AIAAA==\",\"\"]Bo[\"AAAAAUoOAAAAAAEIAQAA\",\"AAAAAUoOAAABsSUAAA==\"]Eg[\"AAAAAQwOAAAAAALIAAAARwIAAA==\",\"AAA6MAAAAQAAAAAABwAQAAAAEAASABQAFgAYABkAGgAbAAEMDgAA\"]Ec[\"AAAAAREPAAAAAUIAAAAB3wEAAA==\",\"AAHiFAAAAAERDwAAAdslAAAAAAAAAAAAAAAAAAAAAQQYAAA=\"]Dc[\"AAAAAcQOAAAAAAF5AQAAAAGOFQAA\",\"AAAAAcQOAAABZCAAAAAAAAAAAWUgAAA=\"]Co[\"AAAAAcwOAAAAAAGBAQAAAAGWFQAA\",\"AAAAAcwOAAAAAAAAAAABZiAAAA==\"]Co[\"AAAAAc0OAAAAAAGCAQAAAAGXFQAA\",\"AAAAAc0OAAAAAAAAAAAAAWcgAAA=\"]Bo[\"AAAAAAAAAAABmBUAAA==\",\"AAAAAAAAAAAAAAFoIAAA\"]Cg[\"AAAAAf0NAAAAAAK1AAAAERUAAA==\",\"AAAAAf0NAAAAATQCAAA=\"]Eg[\"AAAAAAAAADswAAABAAAKAAMAZAsIAIslAADpJQAA\",\"AAAAAAAAADswAAABAAAKAAMAZAsIAIslAADpJQAA\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAAwEAAAAEAAAARSYAAA==\",\"\"]Cg[\"AAAAAR0PAAAAAAHsAQAAAAAAAAAAAcwVAAA=\",\"AAAAAR0PAAA=\"]Co[\"AAAAAR4PAAAAAALtAQAAzRUAAA==\",\"AAAAAR4PAAAAAewCAAAB8RQAAA==\"]Bg[\"AAAAAAAAAAABNCUAAA==\",\"AAAAAAGUAgAA\"]Hg[\"AAAAAdoNAAAAAAGTAAAAAAAAAAAAAAAAAAA6MAAAAQAAAAAACAAQAAAApiS+JPIk7yXYJ/UniirBKmIr\",\"AAAAAdoNAAABkyUAAAAAAAAAAAAAAAAAAAACgicAAIonAAA=\"]Ek[\"AAAAAZ8OAAAAAzcAAACeAgAAtgIAAAFUAQAA\",\"AAFjAAAAAAGfDgAAAcQlAAAAAAAAAAAAAAAAAAAAAYcnAAA=\"]Do[\"AAAAAAAAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAAgAEAAAALMkxiT5JA0m4Sf/J6cq3yqDKw==\",\"\"]Jc[\"AAAAAuUOAAAvJgAAAAACoQEAAM4CAAAAAAAAAAAAAAAAADowAAABAAAAAAAIABAAAAC5JMck+iQUJtMm5SeuKuYqiys=\",\"AAM/KgAAQSoAAEIqAAAAAeUOAAAB1yUAAAAAAAAAAAAAAAAAAAACiCcAAIsnAAA=\"]Bk[\"AAAAAQgPAAAAAAHUAQAA\",\"AAHdFAAAAAEIDwAA\"]Ec[\"AAAAAAAAA9oBAAAIFAAAKhQAAAAAAAAAAAAAAAAAAfITAAA=\",\"AAAAAAAAAeYCAAAAAAAB8x0AAA==\"]Eg[\"AAAAAvIOAAAsKgAAAAGpIAAAArUBAAD0KgAAAAHmHQAAAAFtCwAAAAAAAAAAAAHnEwAA\",\"AAAAAfIOAAA=\"]Do[\"AAAAAS0qAAAAAqogAAD1KgAAAAAB5x0AAAFuCwAAAAAAAAAAAAAB6BMAAA==\",\"AAAAAAHYAgAA\"]Io[\"AAAAAa4OAAAAAacCAAABZAEAAAAAAAAAAAAAAAAAOjAAAAEAAAAAABAAEAAAAPcUFSVSJQkmjiayJuMmYyfuKfAp2ypFK38rniu9K2ss3Sw=\",\"AAAAAa4OAAABxyUAAAAAAAAAAAAAAAAAAAABtBQAAA==\"]Co[\"AAAAARYOAAAAAALSAAAALhUAAA==\",\"AAAAARYOAAAAAAAAAAABTAIAAA==\"]Do[\"AAAAB+UNAADvHwAA9CAAANonAACMKgAAwyoAAGUrAAAAASkCAAABngAAAA==\",\"AAAAAeUNAAA=\"]Dg[\"AAAABvANAADwHwAA9SAAAI8qAADGKgAAaCsAAAABLwIAAAGpAAAA\",\"AAAAAfANAAA=\"]Go[\"AAAAAz4OAAAdJgAAkysAAAAAAfwAAAAAAAAAAAAAAAAAADowAAABAAAAAAALABAAAAAMJUAl/SWHJqom9iYEJ5YqzipyK5QrXiw=\",\"AAAAAT4OAAABqiUAAA==\"]Hg[\"AAAAAlUOAAAaLAAAAAGgIAAAARMBAAAB+SkAAAAAAAAAAAAAAAA6MAAAAQAAAAAADAAQAAAA2yRKJUkmUibIJlAnhSeAKtcr4yvnK7Msyyw=\",\"AAAAAVUOAAABtiUAAA==\"]Bg[\"AAAAAZYOAAAAAAF0FQAA\",\"AAAAAZYOAAA=\"]Bg[\"AAAAAAAAAW0VAAA=\",\"AAAAAAAAAZMCAAA=\"]Dk[\"AAAAAAHDJgAAAAGdAQAAAAAAAAAAAAAAAAABrBUAAA==\",\"AAAAAAAAAAAAAAABywIAAA==\"]Bo[\"AAAAAVoOAAAAAAEYAQAA\",\"AAAAAVoOAAAAAAFnAgAA\"]Bo[\"AAAAAAAAAawBAAAAAAG1FQAA\",\"AAAAAAAB0gIAAA==\"]Dc[\"AAAAAYcOAAABPSYAAAACRQEAAGMVAAABbAsAAA==\",\"AAAAAYcOAAAAAYcCAAA=\"]Dc[\"AAAAAYYOAAABPCYAAAACRAEAAGIVAAABawsAAA==\",\"AAAAAYYOAAAAAYYCAAA=\"]Bg[\"AAAAASIOAAAAAAHgAAAA\",\"AAAAASIOAAA=\"]Bg[\"AAAAAS4OAAAAAAHsAAAA\",\"AAAAAS4OAAA=\"]Dg[\"AAAAAQQPAAAAAAHQAQAA\",\"AAHZFAAAAAEEDwAAAAAAAAAAAAAAAAAAAAABHSgAAA==\"]Bc[\"AAAAAAAAARYVAAA=\",\"AAABPAIAAA==\"]Cc[\"AAAAAAAAAAAAAAAAAAAAAAAAA7gmAAA3KgAAcSoAAA==\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAf4TAAA=\",\"AAABbQIAAA==\"]Bo[\"AAAAAAAAAQQCAAAAAd4VAAA=\",\"AAAAAAAB+QIAAA==\"]Ak[\"AAAAAAACdQsAAH8nAAA=\",\"\"]Ec[\"AAAAAaEOAAAAAAJWAQAAfBUAAA==\",\"AAAAAaEOAAABLCgAAAGeAgAAAAAAAAAAAAAAAAAAAS0oAAA=\"]Ec[\"AAAAAcoOAAAAAAJ/AQAAlBUAAA==\",\"AAAAAcoOAAABLigAAAG2AgAAAAAAAAAAAAAAAAAAAS8oAAA=\"]Bk[\"AAAAAAAAArMBAAC6FQAA\",\"AAAAAAAB1wIAAA==\"]Dk[\"AAAAAWQOAAAAASoAAAABIgEAAAFIBwAA\",\"AAAAAWQOAAAAAAAAAAAAAAAAAAAAAAEfKgAA\"]Hk[\"AAAAAfUNAAAAATACAAABrgAAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAAgAEAAAAFwY8h/3IDol+yeRKsgqaitYLA==\",\"AAFSKgAAAAH1DQAAAAAAAAAAAAAAAAAAAAABSCYAAA==\"]Cg[\"AAAAAAAAAa8BAAAAAAG4FQAA\",\"AAAAAAAAAAAAAAAB1QIAAA==\"]Dg[\"AAAAATEqAAAAAq4gAAD5KgAAAAAAAXILAAAAAAAAAAAAAAH2EwAA\",\"AAAAAAH9AgAA\"]Ag[\"\",\"AAAAAAABMQsAAA==\"]Ck[\"AAAAAAAAAAAAAAEeFQAAAAAAAAAAAAEPFAAA\",\"AAAAAAABNAsAAA==\"]Cg[\"AAAAAAAAAeUBAAAAAALIFQAAvCYAAA==\",\"AAAAAAAAAesCAAA=\"]Bo[\"AAAAAT0OAAAAAAH7AAAA\",\"AAAAAT0OAAABqSUAAA==\"]Dk[\"AAAAAUgOAAAAAAEGAQAA\",\"AAHEFAAAAAFIDgAAAa8lAAAAAAAAAAAAAAAAAAAAAZkgAAA=\"]Bg[\"AAAAAZgOAAAAAAF1FQAA\",\"AAAAAZgOAAA=\"]Do[\"AAAAAfgOAAAAAAG7AQAA\",\"AAAAAfgOAAAAAAAAAAAAAAAAAAAAAATfKQAA4CkAAOEpAADiKQAA\"]Bo[\"AAAAAAAAAQoCAAAAAAHjFQAA\",\"AAAAAAAAAf8CAAA=\"]Dg[\"AAAAAWgOAAAAAS0AAAABJgEAAA==\",\"AAAAAWgOAAAAAAAAAAAAAAAAAAAAAAHtKQAA\"]Dk[\"AAAAAQgOAAAAAAHCAAAA\",\"AAAAAQgOAAABmyUAAAAAAAAAAAAAAAAAAAACCycAAAwnAAA=\"]Dc[\"AAAAAdMOAAACFRQAALwnAAAAAYgBAAABnRUAAA==\",\"AAAAAdMOAAAAAUULAAA=\"]Fc[\"AAAAARoPAAACFxQAAMInAAAAAekBAAAByhUAAAABnSQAAA==\",\"AAAAARoPAAAAAUcLAAAAAAAAAAAAAAAAAAABHCcAAA==\"]Dc[\"AAAAAAAAAcUBAAAAAAG+FQAAAAAAAAAAAAAB7BMAAA==\",\"AAAAAAAAAAHdAgAA\"]Bg[\"AAAAAAAAAW8VAAA=\",\"AAAAAAABlwIAAA==\"]Bk[\"AAAAAAAAAmsnAAD0JwAA\",\"AAAAAAABnAIAAA==\"]Bo[\"AAAAAAAAAAAAAAAB/RQAAA==\",\"AAAAAAABKAsAAA==\"]Bg[\"AAAAAAAAAfwUAAA=\",\"AAAAAAABJwsAAA==\"]Eg[\"AAAAAdwrAAAAAAFJFQAAAAAAAAAAAAAAAAAB4hMAAA==\",\"AAAAAAAAAAAAAWQCAAAAAAAAAAAAAAFtKgAA\"]Ak[\"\",\"AAAAAAAAAAABviwAAA==\"]Bk[\"AAAAAAAAAAABGxUAAA==\",\"AAAAAAABMAsAAA==\"]Bg[\"AAAAAAAAAScVAAA=\",\"AAAAAAAAAUQCAAA=\"]Ck[\"AAAAAAAAAAABKhUAAAAAAAAAAAAAAAESFAAA\",\"AAAAAAABOAsAAA==\"]Bk[\"AAAAAQkPAAAAAAHVAQAA\",\"AAHeFAAAAAEJDwAA\"]Dk[\"AAAAATsOAAAAAAH5AAAA\",\"AAHCFAAAAAE7DgAAAaclAAAAAAAAAAAAAAAAAAAAAZggAAA=\"]Ck[\"AAAAAAAAApsBAACqFQAA\",\"AAAAAAAAAAAAAAAAAAAAAAAByQIAAA==\"]Ag[\"AAAAAAAAAAHNJAAA\",\"\"]Bk[\"AAAAAAAAAAAAAAAAAAAAAAAAAi8UAAAMJwAA\",\"\"]Co[\"AAAAAAAAAAFXFAAAAAAAATwYAAAAAWUYAAA=\",\"AAAAAVsnAAAAAAEgAgAA\"]Bo[\"AAAAAAAAAAAAAAAAAWoVAAA=\",\"AAAAAAAAAZACAAA=\"]Dg[\"AAAAAY8OAAAAAANNAQAAeCoAABgrAAAAAAABcxUAAA==\",\"AAAAAY8OAAAAAZ0CAAA=\"]Ao[\"AAAAAZcOAAA=\",\"AAAAAZcOAAA=\"]Bk[\"AAAAAAAAAAABaScAAA==\",\"AAAAAAABjgIAAA==\"]Dg[\"AAAAAXUOAAAAAAEzAQAAAR4qAAAAAngCAAB9AgAA\",\"AAAAAXUOAAAAAAABdgIAAA==\"]Co[\"AAAAAbkOAAAAAAFuAQAAAAAAAAHSKwAA\",\"AAAAAbkOAAAAAAABqgIAAA==\"]Ak[\"AAAAAAACDicAAA8nAAA=\",\"\"]Ag[\"AAAAAAAAAcwNAAA=\",\"\"]Dg[\"AAAAAeANAAABCygAAAABmQAAAAAAAQIVAAA=\",\"AAAAAeANAAAAASUCAAABGScAAA==\"]Dg[\"AAAAAcMOAAABFSgAAAABeAEAAAAAAY0VAAA=\",\"AAAAAcMOAAAAAbECAAABGicAAA==\"]Ek[\"AAAAAegOAAAAAAKkAQAAsBUAAAAAAAAAAAAAAAAAAUoHAAA=\",\"AAAAAegOAAAAAAAAAAAAAAAAAAAAAAExJQAA\"]Dk[\"AAAAAfkOAAAAAAG8AQAA\",\"AAHPFAAAAAH5DgAAAAAAAAAAAAAAAAAAAAACTSoAAE4qAAA=\"]Gk[\"AAAAAQIPAAAAAAHMAQAAAAAB4QIAAAAAAAAAAAAABeskAAAEJQAAhSYAAHknAACsKwAA\",\"AAHXFAAAAAECDwAAAAAAAAAAAAAAAAAAAAAC8BMAAAEYAAA=\"]Ck[\"AAAAAQIOAAAAAAO6AAAAZSQAAIolAAA=\",\"AAAAAQIOAAAAAAE5AgAA\"]Ck[\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHoFQAA\",\"AAAAAAABBAMAAA==\"]Do[\"AAAAAeYNAAAAAAKfAAAAFisAAAAAAAAAAXYqAAAAAAABBRUAAA==\",\"AAAAAeYNAAAAAScCAAA=\"]Eg[\"AAAAAZUOAAAAATYAAAABUgEAAAAAAAAAAAAAAAAAA0cYAABLGAAADisAAA==\",\"AAAAAZUOAAABwiUAAA==\"]Jc[\"AAAAAfINAAAAAS4CAAABqwAAAAE+CwAAAAFkAgAAAAAAAAAAAAA6MAAAAQAAAAAACAAQAAAA8R/2IMIk9CTQJvonkCrHKmkr\",\"AAJRKgAApSwAAAAC8g0AABosAAAAAAAAAAAAAAAAAAAAAALiEwAAhCcAAA==\"]Dg[\"AAAAAXEOAAABNyYAAAACLwEAAFYVAAABZgsAAA==\",\"AAAAAXEOAAAAAAABdAIAAA==\"]Dg[\"AAAAAXIOAAABOCYAAAACMAEAAFcVAAABZwsAAA==\",\"AAAAAXIOAAAAAAABdQIAAA==\"]Do[\"AAAAAfMOAAAAAUAAAAABtgEAAA==\",\"AAHMFAAAAAHzDgAAAAAAAAAAAAAAAAAAAAABgScAAA==\"]Cc[\"AAAAAAAAAAAAAAAAAAABHRUAAA==\",\"AAAAAAABMwsAAA==\"]Cg[\"AAAAAQcOAAAAAT0CAAABwQAAAA==\",\"AAAAAQcOAAABmiUAAA==\"]Cg[\"AAAAASoOAAAAAALoAAAAOhUAAA==\",\"AAAAASoOAAABVwIAAA==\"]Eo[\"AAAAAUkOAAAAAAEHAQAAAAAAAAAAAAAAAAAFMRQAAJkgAADVKQAAKioAANYsAAA=\",\"AAHFFAAAAAFJDgAAAbAlAAA=\"]Bo[\"AAAAAAAAAAAAAAAAAWsVAAA=\",\"AAAAAAAAAZECAAA=\"]Ek[\"AAAAAZAOAAAAAZ0CAAABTgEAAAAAAAAAAAAAAAAAA8QkAABKJgAAhicAAA==\",\"AAJWAAAAWAAAAAABkA4AAA==\"]Co[\"AAAAAdcOAAABvycAAAABjAEAAAABoBUAAA==\",\"AAAAAdcOAAAAAb0CAAA=\"]Dk[\"AAAAAWUOAAAAASsAAAABIwEAAAFJBwAA\",\"AAAAAWUOAAAAAAAAAAAAAAAAAAAAAAG9KgAA\"]Bg[\"AAAAAAAAAQIsAAA=\",\"AAAAAAAAAZUCAAA=\"]Bg[\"AAAAAAAAASQVAAA=\",\"AAAAAAAAAUACAAA=\"]Cc[\"AAAAAAAAAAAAAAABaCcAAAHzJwAA\",\"AAAAAAABjQIAAA==\"]Do[\"AAAAAW8OAAABNSYAAAACLQEAAFQVAAABZAsAAA==\",\"AAAAAW8OAAAAAAAAAAAAAAAAAXICAAA=\"]Bg[\"AAAAAAAAAW4VAAA=\",\"AAAAAAABlgIAAA==\"]Co[\"AAAAAQoPAAAAAAHWAQAA\",\"AAAAAQoPAAAAAAAAAAAAAAAAAAAAAAH7KgAA\"]Dg[\"AAAAAR8PAAAAAAHuAQAAAAAAAAAAAc4VAAA=\",\"AAAAAR8PAAAAAe0CAAABthQAAA==\"]Dc[\"AAAAAAAAAsMBAAC9FQAAAAAAAAAAAAAAAAAB6xMAAA==\",\"AAAAAAAAAdwCAAA=\"]Ek[\"AAAAAeQNAAAAAScCAAABnQAAAAAAAAAAAAAAAAAABb8kAABHJgAAgycAAPgnAAA7LAAA\",\"AAH/KwAAAAHkDQAA\"]Ec[\"AAAAAZQOAAAAATUAAAABUQEAAA==\",\"AAHGFAAAAAGUDgAAAcElAAAAAAAAAAAAAAAAAAAAAQ4rAAA=\"]Ck[\"AAAAAAAAAAAAAAEfFQAAAAAAAAAAAAEQFAAA\",\"AAAAAAAAAAE1CwAA\"]Bg[\"AAAAASMOAAAAAAHhAAAA\",\"AAAAASMOAAA=\"]Bg[\"AAAAAS8OAAAAAAHtAAAA\",\"AAAAAS8OAAA=\"]Hc[\"AAAAAQAPAAAAAAHIAQAAAAHfAgAAAAAAAAAAAAAABuokAAADJQAAeCcAAKEnAAAVKwAAqysAAA==\",\"AAHVFAAAAAEADwAAAAAAAAAAAAAAAAAAAAAC7hMAAO4fAAA=\"]Co[\"AAAAAREOAAAAAATNAAAA+BMAABwUAADnJQAA\",\"AAAAAREOAAAAAUgCAAA=\"]Dg[\"AAAAAX8OAAAAAAU9AQAAARQAACMUAADoJQAAJCoAAA==\",\"AAAAAX8OAAAAAYACAAA=\"]Eo[\"AAAAATwOAAAAAAH6AAAAAAAAAAAAAAAAAAAFMBQAAJggAADUKQAAKSoAANUsAAA=\",\"AAHDFAAAAAE8DgAAAaglAAA=\"]Ik[\"AAAAAVMOAAAAAZ4gAAABEQEAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAA4AEAAAALcg0STZJBIlSCUEJlEm3yb8Jk8nnSrVKnkrmytlLA==\",\"AAAAAVMOAAABtCUAAAAAAAAAAAAAAAAAAAABSSYAAA==\"]Bc[\"AAAAAAAAAWgVAAA=\",\"AAABjAIAAA==\"]Bg[\"AAAAAZkOAAAAAAF2FQAA\",\"AAAAAZkOAAA=\"]Ec[\"AAAAAYUOAAABOyYAAAACQwEAAGEVAAABagsAAA==\",\"AAAAAYUOAAAAAAAAAAAAAAAAAAABhQIAAA==\"]Bg[\"AAAAASQOAAAAAAHiAAAA\",\"AAAAASQOAAA=\"]Bg[\"AAAAATAOAAAAAAHuAAAA\",\"AAAAATAOAAA=\"]Bo[\"AAAAAdoOAAAAAAGPAQAA\",\"AAAAAdoOAAAB0iUAAA==\"]Bk[\"AAAAAAAAAq0BAAC2FQAA\",\"AAAAAAAB0wIAAA==\"]Cc[\"AAAAAAAAAZoBAAAAAAAAAAGpFQAA\",\"AAAAAAAAAAHIAgAA\"]Ec[\"AAAAAAAAAc8BAAAAAAAAAAAAAAAAAAPxEwAAAhgAAPsgAAABwxUAAA==\",\"AAAAAAAAAAAAAAHiAgAA\"]Ag[\"\",\"AAAAAAABLQsAAA==\"]Dc[\"AAAAAAAAAsEBAAC8FQAAAAAAAAAAAAAAAAAB6hMAAA==\",\"AAAAAAAAAdsCAAA=\"]Ck[\"AAAAARcOAAAAAALTAAAALxUAAA==\",\"AAAAARcOAAAAAAAAAAFNAgAA\"]Bg[\"AAAAAAAAASUVAAA=\",\"AAAAAAAAAAFBAgAA\"]Bg[\"AAAAAAAAAgUCAADfFQAA\",\"AAAAAAH6AgAA\"]Eo[\"AAAAAVYOAAAAAaEgAAABFAEAAAH5KQAAAAAAAAAAAAAAAATSJAAAjSYAALAmAADgJgAA\",\"AAAAAVYOAAABtyUAAA==\"]Bg[\"AAAAAAAAAgMCAADdFQAA\",\"AAAAAfgCAAA=\"]Dg[\"AAAAAAAAAbEBAAAAAAG5FQAAAAAAAAAAAAAB5hMAAA==\",\"AAAAAAAAAAAB1gIAAA==\"]Bo[\"AAAAAAAAAAABXCYAAA==\",\"AAAAAAAAAAAAAAHsJQAA\"]Ck[\"AAAAARIOAAAAAAPOAAAA+RMAAB0UAAA=\",\"AAAAARIOAAAAAUkCAAA=\"]Co[\"AAAAAYAOAAAAAAM+AQAAAhQAACQUAAA=\",\"AAAAAYAOAAAAAAABgQIAAA==\"]Go[\"AAAAAQ0PAAAAAALZAQAA5gIAAAAAAAAAAAAAAAAABisoAADRKQAA2SkAADYqAAAMKwAAwysAAA==\",\"AAHhFAAAAAENDwAAAAAAAAAAAAAAAAAAAAAB8hMAAA==\"]Ck[\"AAAAAfcNAAAAAAKwAAAADhUAAAF0KgAA\",\"AAAAAfcNAAAAATACAAA=\"]Dg[\"AAAAAAAAAqoBAAC0FQAAAXUqAAAAAAGxLAAA\",\"AAAAAAAB0QIAAAAAAAABLSwAAA==\"]Hg[\"AAAAAfEOAAAAAAK0AQAAyg0AAAAAAAAAAAAAAAAAOjAAAAEAAAAAAAcAEAAAAIUAKRj8IBcnUyffKfopTSo=\",\"AAHLFAAAAAHxDgAAAAAAAAAAAAAAAAAAAAAB5xMAAA==\"]Hc[\"AAAAAfQOAAAB2AIAAAABtwEAAAAAAAAAAAAAAAAAByoYAAD9IAAAhSUAAFQnAACBJwAA4CkAAPspAAA=\",\"AAHNFAAAAAH0DgAAAAAAAAAAAAAAAAAAAAAB6BMAAA==\"]Cg[\"AAAAAAAAAAAAAAAAAAAAAAAAAAEXFQAA\",\"AAAAAAABKwsAAA==\"]Bk[\"AAAAAAAAAAABGRUAAA==\",\"AAAAAAABLgsAAA==\"]Hk[\"AAAAAVQOAAAAAZ8gAAABEgEAAAAAAAAAAAAAAAAAOjAAAAEAAAAAAAgAEAAAAMMk2iT1JEklBSb8J54q1ip6Kw==\",\"AAAAAVQOAAABtSUAAAAAAAAAAAAAAAAAAAABhScAAA==\"]Dk[\"AAAAAQUPAAAAAAHRAQAAAAAAAAAAAAAAAAADDwMAAKMgAACkIAAA\",\"AAHaFAAAAAEFDwAA\"]Bk[\"AAAAAAAAAgwCAADlFQAA\",\"AAAAAAABAQMAAA==\"]Bo[\"AAAAAawOAAAAAAJiAQAAhBUAAA==\",\"AAAAAawOAAA=\"]Do[\"AAAAAbwOAAAAAAJxAQAAiRUAAA==\",\"AAAAAbwOAAAAAawCAAAAAAAAAAAAAAAAAAABBSwAAA==\"]Co[\"AAAAAW4OAAAAAAIsAQAAUxUAAA==\",\"AAAAAW4OAAAAAAAAAAAAAAFxAgAA\"]Dg[\"AAAAAXMOAAAAATAAAAABMQEAAA==\",\"AAAAAXMOAAAAAAAAAAAAAAAAAAAAAAHiKwAA\"]Fg[\"AAAAAe4OAAAAAdICAAABqwEAAAAAAAAAAAAAAAAAB4MAAAA5FAAApCQAANcmAAB+JwAABCoAAKYrAAA=\",\"AAHIFAAAAAHuDgAA\"]Eg[\"AAAAAfAOAAAAAdcCAAABsgEAAAAAAAAAAAAAAAAABIQAAADhJAAAvioAABQsAAA=\",\"AAHKFAAAAAHwDgAA\"]Bg[\"AAAAAAAAAfsUAAA=\",\"AAAAAAABJgsAAA==\"]Dg[\"AAAAAAAAAcsBAAAAAAAAAAAAAAHBFQAAAAAB7xMAAA==\",\"AAAAAAAAAAAAAeACAAA=\"]Do[\"AAAAATIPAAAB/QIAAAABCAIAAA==\",\"AAHpFAAAAAEyDwAAAAAAAAAAAAAAAAAAAAAB9hMAAA==\"]Ck[\"AAAAAAAAAAE+AgAAAAAAAAAAAAAAAAQIJQAAAycAAEYqAABaLAAA\",\"\"]Go[\"AAAAAVcOAAAAAaIgAAABFQEAAAH5KQAAAAAAAAAAAAAAADowAAABAAAAAAALABAAAABhC2EY+x3tH28gZCS9JJ0myyfMJwko0ys=\",\"AAAAAVcOAAABuCUAAA==\"]Bg[\"AAAAAZwOAAAAAAF5FQAA\",\"AAAAAZwOAAA=\"]Dg[\"AAAAAX4OAAABOiYAAAABPAEAAAFpCwAAAWAVAAA=\",\"AAAAAX4OAAAAAAAAAAF/AgAA\"]Do[\"AAAAAX0OAAABOSYAAAABOwEAAANoCwAAXxUAAF8kAAAAAAGcJAAA\",\"AAAAAX0OAAAAAX4CAAA=\"]Dk[\"AAAAAAAAAb8BAAAAAAG7FQAAAAAAAAAAAdksAAA=\",\"AAAAAAAAAAHaAgAAAAAAAAHtIgAA\"]Gg[\"AAAAAf4OAAAAAAHEAQAAAd0CAAAAAAAAAAAAAAAABegkAAABJQAAdicAAKkrAAApLAAA\",\"AAHTFAAAAAH+DgAAAAAAAAAAAAAAAAAAAAAB7BMAAA==\"]Gg[\"AAAAAQwPAAAB4wIAAAAC2AEAAM0NAAAAAAAAAAAAAAAAADowAAABAAAAAAAKABAAAAD6HUEmEScdJx0o4ilHKrYq+ypALKcs\",\"AAHgFAAAAAEMDwAA\"]Dg[\"AAAAAAAAAo4AAAD5FAAAAAAAAAABUSwAAA==\",\"AAAAArIdAAC/IAAAAAABIgIAAA==\"]Jg[\"AAAAAewNAAAAAisCAAAsAgAAAaUAAAAAAAAAAAAAAAAAADowAAABAAAAAAAPABAAAAC0IKkkOSXzJdsm3Cf+KYQqjirFKhwrWytnK1cseSy7LA==\",\"AAK8FAAAASwAAAAB7A0AAAAAAAAAAAAAAAAAAAAAAUcmAAA=\"]Ck[\"AAAAAfMNAAAAAAKsAAAACxUAAAHgKwAA\",\"AAAAAfMNAAAAAS4CAAA=\"]Ak[\"AAAAAAAAAAABviwAAA==\",\"\"]Bg[\"AAAAAAAAARoVAAA=\",\"AAAAAAABLwsAAA==\"]Bo[\"AAAAAQoOAAAAAAHEAAAA\",\"AAAAAQoOAAABnCUAAA==\"]Ek[\"AAAAAAACQgIAAEMCAAACQAIAAEQCAAABQQIAAA==\",\"AASzHQAAviAAAMAgAADCIAAAAAAAAAAAAAAAAT8CAAA=\"]Dc[\"AAAAAAAAA8UAAABEAgAAKBUAAAAAAAAAAVIsAAA=\",\"AAAAAcMgAAAAAAFFAgAA\"]Cg[\"AAAAAAAAAsYAAAApFQAA\",\"AAAAArQdAADEIAAAAAABRgIAAA==\"]Dg[\"AAAAAAAAAtcAAAAyFQAAAAAAAAABUywAAA==\",\"AAAAArUdAADBIAAAAAABUQIAAA==\"]Bo[\"AAAAAdENAAAAAAGKAAAA\",\"AAAAAdENAAABjSUAAA==\"]Cc[\"AAAAAZsOAAAAAAAAAXgVAAA=\",\"AAAAAZsOAAAAAUILAAA=\"]Bo[\"AAAAAAAAAAAAAAHyJwAA\",\"AAAAAAAAAAAAAAFnJwAA\"]Ec[\"AAAAAdYNAAAAAR8AAAABkAAAAA==\",\"AAG5FAAAAAHWDQAAAZElAAAAAAAAAAAAAAAAAAAAAXgsAAA=\"]Co[\"AAAAAesNAAAAAAGkAAAA\",\"AAAAAesNAAAAAAAAAAAAAAAAAAAAAAF5LAAA\"]Ek[\"AAAAAUUOAAAAAScAAAABAwEAAAAAAAAAAAFgAgAA\",\"AAAAAUUOAAABrSUAAAAAAAAAAAAAAAAAAAABeiwAAA==\"]Cg[\"AAAAAbQOAAAAATkAAAABagEAAA==\",\"AAAAAbQOAAABySUAAA==\"]Go[\"AAAAAesOAAAAAAKnAQAAVygAAAAAAAHzHQAAAAHtIgAAAAAAAAAEWwMAAM4NAABtEQAAOhQAAA==\",\"AAAAAesOAAAAAAAFXwsAAHkLAAB7CwAAXxEAACAlAAA=\"]Ck[\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHpFQAA\",\"AAAAAAABBQMAAA==\"]Dk[\"AAAAAQsPAAAAAAHXAQAA\",\"AAHfFAAAAAELDwAAAAHkAgAAAAAAAAAAAAAAAAAAAfodAAA=\"]Bk[\"AAAAAAHvJAAAAAEhFQAA\",\"AAAAAAABNwsAAA==\"]Bo[\"AAAAARUOAAAAAALRAAAALRUAAA==\",\"AAAAARUOAAA=\"]Bg[\"AAAAAAAAAWonAAA=\",\"AAAAAAABmwIAAA==\"]Cc[\"AAAAAAAAAcAAAAAAAAAAAAAAAAAAAAI4EQAAVREAAA==\",\"\"]Gg[\"AAAAAf0OAAAAAALCAQAA3AIAAAAAAAAAAAAAAAAABeckAAAAJQAAhCYAAHUnAACoKwAA\",\"AAHSFAAAAAH9DgAAAAAAAAAAAAAAAAAAAAAB6xMAAA==\"]Io[\"AAAAAecNAAAAAigCAAAqAgAAAaAAAAAAAAAAAAAAAAAAADowAAABAAAAAAAMABAAAACoJMAk8yTyJc8m2yf5J2kqgyqNKsQqGytmKw==\",\"AAK7FAAAACwAAAAB5w0AAAAAAAAAAAAAAAAAAAAAAYMnAAA=\"]Ck[\"AAAAAaoOAAAAAANgAQAAghUAAIMVAAA=\",\"AAAAAaoOAAAAAaUCAAA=\"]Do[\"AAAAAQMOAAAAAAK7AAAAoSQAAA==\",\"AAAAAQMOAAAAAAABOgIAAAAAAAAAAAAAAAABkSAAAA==\"]Ck[\"AAAAARMOAAAAAAPPAAAA+hMAAB4UAAA=\",\"AAAAARMOAAAAAUoCAAA=\"]Dc[\"AAAAAYIOAAAAAANAAQAABBQAACYUAAA=\",\"AAAAAYIOAAAAAAAAAAAAAYMCAAA=\"]Dg[\"AAAAAAAAAccBAAAAAAAAAAG/FQAAAAAAAAAB7RMAAA==\",\"AAAAAAAAAAAB3gIAAA==\"]Co[\"AAAAAekNAAAAAAGiAAAAAAABBxUAAAHeKwAA\",\"AAAAAekNAAAAASkCAAA=\"]Bk[\"AAAAAAAAAAAAAAFsFQAA\",\"AAAAAAAAAZICAAA=\"]Go[\"AAAAAQMPAAAAAAHOAQAAAAAAAeICAAAAAAAAAAAABgEYAABRKwAAGSwAAB8sAAAsLAAAwiwAAA==\",\"AAHYFAAAAAEDDwAAAAAAAAAAAAAAAAAAAAAB8RMAAA==\"]Go[\"AAAAAfwOAAAAAALAAQAA2wIAAAAAAAAAAAAAAAAABuYkAAD/JAAAdCcAAKAnAAAUKwAApysAAA==\",\"AAHRFAAAAAH8DgAAAAAAAAAAAAAAAAAAAAAB6hMAAA==\"]Co[\"AAAAATAqAAAAAa0gAAAB+CoAAAAB6h0AAAABcQsAAA==\",\"AAAAAAHjAgAA\"]Bk[\"AAAAAQYPAAAAAAHSAQAA\",\"AAHbFAAAAAEGDwAA\"]Cg[\"AAAAAeMOAAAAAAKXAQAAphUAAA==\",\"AAAAAeMOAAAAAAHFAgAA\"]Gg[\"AAAAAe8OAAAAAAGwAQAAAAHWAgAAAAAAAAAAAAAABT4PAADgJAAAhyUAABUsAAAbLAAA\",\"AAHJFAAAAAHvDgAAAAAAAAAAAAAAAAAAAAAB5hMAAA==\"]Bo[\"AAAAAe0NAAAAAAGmAAAA\",\"AAAAAe0NAAAAASsCAAA=\"]Co[\"AAAAAQkOAAAAAAHDAAAAAAAAAAEjFQAA\",\"AAAAAQkOAAAAAAABPgIAAA==\"]Cg[\"AAAAAeIOAAAAAAKWAQAApRUAAA==\",\"AAAAAeIOAAAAAAHEAgAA\"]Dk[\"AAAAAXAOAAABNiYAAAACLgEAAFUVAAABZQsAAA==\",\"AAAAAXAOAAAAAAAAAAAAAAFzAgAA\"]Do[\"AAAAAXwOAAABEygAAAEPJwAAAToBAAAAAAAAAAABXhUAAA==\",\"AAAAAXwOAAAAAAAAAAF9AgAA\"]Dk[\"AAAAAe4NAAAAAAGnAAAAAAAAAAABCRUAAAAAAAAAAQ4UAAA=\",\"AAAAAe4NAAAAASwCAAA=\"]Go[\"AAAAAQEPAAAAAAHKAQAAAAAB4AIAAAAAAAAAAAAABu4fAABQKwAAGCwAAB4sAAArLAAAwSwAAA==\",\"AAHWFAAAAAEBDwAAAAAAAAAAAAAAAAAAAAAB7xMAAA==\"]Co[\"AAAAAYEOAAAAAAM/AQAAAxQAACUUAAA=\",\"AAAAAYEOAAAAAAAAAYICAAA=\"]Do[\"AAAAAdQOAAACFhQAAL0nAAAAAYkBAAABKBQAAAACBhQAAJ4VAAA=\",\"AAAAAdQOAAAAAUYLAAA=\"]Do[\"AAAAARsPAAACGBQAAMMnAAAAAeoBAAABKxQAAAACCRQAAMsVAAA=\",\"AAAAARsPAAAAAUgLAAA=\"]Gg[\"AAAAAfsOAAAAAAG+AQAAAdoCAAAAAAAAAAAAAAAAOjAAAAEAAAAAAAsAEAAAAOoRVhigJM8p2Ck1KhMrTitPKxYsHCw+LA==\",\"AAHQFAAAAAH7DgAA\"]Cg[\"AAAAAegNAAAAAAKhAAAABhUAAA==\",\"AAAAAegNAAAAASgCAAA=\"]Dk[\"AAAAAXcOAAABEigAAAEOJwAAATUBAAAAAAABWRUAAA==\",\"AAAAAXcOAAAAAAAAAAF4AgAA\"]Gg[\"AAAAARgPAAAAAUUAAAAB5wEAAAAAAAAAAAAAAAAAAjARAAD6IAAA\",\"AAHmFAAAAAEYDwAAAt4lAADkLAAAAAAAAAAAAAAAAAAAAAJyKgAAcyoAAA==\"]Co[\"AAAAAd0NAAACJScAAAooAAAAApYAAAAZJwAA\",\"AAAAAd0NAAAAASMCAAA=\"]Co[\"AAAAAcEOAAACKScAABQoAAAAAnYBAAAaJwAA\",\"AAAAAcEOAAAAAa8CAAA=\"]Ck[\"AAAAAeoNAAAAAAKjAAAACBUAAAHfKwAA\",\"AAAAAeoNAAAAASoCAAA=\"]Bg[\"AAAAAAFYFAAA\",\"AAAAAAHlAgAAAAEqFAAA\"]Bo[\"AAAAAdINAAAAAAGLAAAA\",\"AAAAAdINAAABjiUAAA==\"]Dc[\"AAAAAYMOAAAAAANBAQAABRQAACcUAAA=\",\"AAAAAYMOAAAAAAAAAAABhAIAAA==\"]Cg[\"AAAAAAAAAAAAAAAAAfMnAAA=\",\"AAAAAAAAAAAAAAABaCcAAA==\"]Hk[\"AAAAAf8OAAAAAAHGAQAAAAHeAgAAAAAAAAAAAAAAOjAAAAEAAAAAAAgAEAAAAOkkAiV3J8cnqisXLB0sKizALA==\",\"AAHUFAAAAAH/DgAAAAAAAAAAAAAAAAAAAAAB7RMAAA==\"]Fg[\"AAAAAYsOAAABsicAAAABSQEAAAFlFQAAAAAAASYqAAA=\",\"AAAAAYsOAAAAAokCAABLFAAAASwlAAAAAAAAAAAAAAAAAAEtJQAA\"]Fg[\"AAAAAcgOAAABuycAAAABfQEAAAGSFQAAAAAAAScqAAA=\",\"AAAAAcgOAAAAArQCAABMFAAAAS8lAAAAAAAAAAAAAAAAAAEwJQAA\"]Ck[\"AAAAAAAAAAAAAAEgFQAAAAAAAAAAAAERFAAA\",\"AAAAAAAAAAE2CwAA\"]Eo[\"AAAAAvYOAAAuKgAAAAGrIAAAArkBAAD2KgAAAAHoHQAAAAFvCwAAAAAAAAAAAAHpEwAA\",\"AAAAAfYOAAAB2QIAAA==\"]Bo[\"AAAAAdANAAAAAAGJAAAA\",\"AAAAAdANAAABjCUAAA==\"]Ck[\"AAAAAXgOAAAAAAE2AQAAAAAAAAFaFQAA\",\"AAAAAXgOAAAAAXkCAAA=\"]Cg[\"AAAAAAAAAAAAAAAAAAAAAAABGBUAAA==\",\"AAAAAAABLAsAAA==\"]Cc[\"AAAAAZ0OAAAAAAAAAXoVAAA=\",\"AAAAAZ0OAAAAAUMLAAA=\"]Bk[\"AAAAAAAAAAAAAAHqFQAA\",\"AAAAAAAAAQYDAAA=\"]Bk[\"AAAAAAAAAAAAAAAAAf8TAAA=\",\"AAABbgIAAA==\"]Hg[\"AAAAAfUOAAAB2QIAAAACuAEAAMsNAAAAAAAAAAAAAAAAAAcrGAAA/iAAABgnAABVJwAA4SkAAPwpAABOKgAA\",\"AAHOFAAAAAH1DgAAAAAAAAAAAAAAAAAAAAAB6RMAAA==\"]") \ No newline at end of file diff --git a/network-poc/target-native/doc/settings.html b/network-poc/target-native/doc/settings.html deleted file mode 100644 index e05b601..0000000 --- a/network-poc/target-native/doc/settings.html +++ /dev/null @@ -1 +0,0 @@ -Settings

All

Rustdoc settings

Back
\ No newline at end of file diff --git a/network-poc/target-native/doc/src-files.js b/network-poc/target-native/doc/src-files.js deleted file mode 100644 index 2d5ae83..0000000 --- a/network-poc/target-native/doc/src-files.js +++ /dev/null @@ -1,2 +0,0 @@ -createSrcSidebar('[["candle_transformers",["",[["generation",[],["mod.rs"]],["models",[["chinese_clip",[],["mod.rs","text_model.rs","vision_model.rs"]],["clip",[],["mod.rs","text_model.rs","vision_model.rs"]],["flux",[],["autoencoder.rs","mod.rs","model.rs","quantized_model.rs","sampling.rs"]],["llava",[],["config.rs","mod.rs","utils.rs"]],["mimi",[],["conv.rs","encodec.rs","mod.rs","quantization.rs","seanet.rs","transformer.rs"]],["mmdit",[],["blocks.rs","embedding.rs","mod.rs","model.rs","projections.rs"]],["nvembed_v2",[],["embedding.rs","mod.rs","model.rs"]],["openclip",[],["mod.rs","text_model.rs"]],["pixtral",[],["llava.rs","mod.rs","vision_model.rs"]],["segment_anything",[],["image_encoder.rs","mask_decoder.rs","mod.rs","prompt_encoder.rs","sam.rs","tiny_vit.rs","transformer.rs"]],["stable_diffusion",[],["attention.rs","clip.rs","ddim.rs","ddpm.rs","embeddings.rs","euler_ancestral_discrete.rs","mod.rs","resnet.rs","schedulers.rs","unet_2d.rs","unet_2d_blocks.rs","uni_pc.rs","utils.rs","vae.rs"]],["whisper",[],["audio.rs","mod.rs","model.rs","quantized_model.rs"]],["wuerstchen",[],["attention_processor.rs","common.rs","ddpm.rs","diffnext.rs","mod.rs","paella_vq.rs","prior.rs"]]],["based.rs","beit.rs","bert.rs","bigcode.rs","blip.rs","blip_text.rs","chatglm.rs","codegeex4_9b.rs","colpali.rs","convmixer.rs","convnext.rs","dac.rs","debertav2.rs","deepseek2.rs","depth_anything_v2.rs","dinov2.rs","dinov2reg4.rs","distilbert.rs","efficientnet.rs","efficientvit.rs","encodec.rs","eva2.rs","falcon.rs","fastvit.rs","gemma.rs","gemma2.rs","gemma3.rs","glm4.rs","granite.rs","helium.rs","hiera.rs","jina_bert.rs","llama.rs","llama2_c.rs","llama2_c_weights.rs","mamba.rs","marian.rs","metavoice.rs","mistral.rs","mixformer.rs","mixtral.rs","mobileclip.rs","mobilenetv4.rs","mobileone.rs","mod.rs","modernbert.rs","moondream.rs","mpt.rs","olmo.rs","paligemma.rs","parler_tts.rs","persimmon.rs","phi.rs","phi3.rs","quantized_blip.rs","quantized_blip_text.rs","quantized_llama.rs","quantized_llama2_c.rs","quantized_metavoice.rs","quantized_mistral.rs","quantized_mixformer.rs","quantized_moondream.rs","quantized_mpt.rs","quantized_phi.rs","quantized_phi3.rs","quantized_qwen2.rs","quantized_recurrent_gemma.rs","quantized_rwkv_v5.rs","quantized_rwkv_v6.rs","quantized_stable_lm.rs","quantized_t5.rs","qwen2.rs","qwen2_moe.rs","recurrent_gemma.rs","repvgg.rs","resnet.rs","rwkv_v5.rs","rwkv_v6.rs","segformer.rs","siglip.rs","stable_lm.rs","starcoder2.rs","stella_en_v5.rs","t5.rs","trocr.rs","vgg.rs","vit.rs","with_tracing.rs","xlm_roberta.rs","yi.rs"]],["pipelines",[],["mod.rs","text_generation.rs"]]],["lib.rs","object_detection.rs","quantized_nn.rs","quantized_var_builder.rs","utils.rs"]]]]'); -//{"start":19,"fragment_lengths":[2694]} \ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/generation/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/generation/mod.rs.html deleted file mode 100644 index eed984a..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/generation/mod.rs.html +++ /dev/null @@ -1,156 +0,0 @@ -mod.rs - source

candle_transformers/generation/
mod.rs

1//! Logit Processing and Sampling
-2//!
-3//! Functionality for modeling sampling strategies and logits processing in text generation
-4//! with support for temperature-based sampling, top-k filtering, nucleus sampling (top-p),
-5//! and combinations thereof.
-6use candle::{Context, DType, Error, Result, Tensor};
-7use rand::{distr::Distribution, SeedableRng};
-8
-9#[derive(Clone, PartialEq, Debug)]
-10pub enum Sampling {
-11    ArgMax,
-12    All { temperature: f64 },
-13    TopK { k: usize, temperature: f64 },
-14    TopP { p: f64, temperature: f64 },
-15    TopKThenTopP { k: usize, p: f64, temperature: f64 },
-16}
-17
-18pub struct LogitsProcessor {
-19    rng: rand::rngs::StdRng,
-20    sampling: Sampling,
-21}
-22
-23impl LogitsProcessor {
-24    pub fn from_sampling(seed: u64, sampling: Sampling) -> Self {
-25        let rng = rand::rngs::StdRng::seed_from_u64(seed);
-26        Self { rng, sampling }
-27    }
-28
-29    pub fn new(seed: u64, temperature: Option<f64>, top_p: Option<f64>) -> Self {
-30        let temperature = temperature.and_then(|v| if v < 1e-7 { None } else { Some(v) });
-31        let sampling = match temperature {
-32            None => Sampling::ArgMax,
-33            Some(temperature) => match top_p {
-34                None => Sampling::All { temperature },
-35                Some(p) => Sampling::TopP { p, temperature },
-36            },
-37        };
-38        Self::from_sampling(seed, sampling)
-39    }
-40
-41    fn sample_argmax(&mut self, logits: Tensor) -> Result<u32> {
-42        let logits_v: Vec<f32> = logits.to_vec1()?;
-43        let next_token = logits_v
-44            .iter()
-45            .enumerate()
-46            .max_by(|(_, u), (_, v)| u.total_cmp(v))
-47            .map(|(i, _)| i as u32)
-48            .context("empty logits")?;
-49        Ok(next_token)
-50    }
-51
-52    fn sample_multinomial(&mut self, prs: &Vec<f32>) -> Result<u32> {
-53        let distr = rand::distr::weighted::WeightedIndex::new(prs).map_err(Error::wrap)?;
-54        let next_token = distr.sample(&mut self.rng) as u32;
-55        Ok(next_token)
-56    }
-57
-58    /// top-p sampling (or "nucleus sampling") samples from the smallest set of tokens that exceed
-59    /// probability top_p. This way we never sample tokens that have very low probabilities and are
-60    /// less likely to go "off the rails".
-61    fn sample_topp(&mut self, prs: &mut Vec<f32>, top_p: f32) -> Result<u32> {
-62        let mut argsort_indices = (0..prs.len()).collect::<Vec<_>>();
-63
-64        // Sort by descending probability.
-65        argsort_indices.sort_by(|&i, &j| prs[j].total_cmp(&prs[i]));
-66
-67        // Clamp smaller probabilities to zero.
-68        let mut cumsum = 0.;
-69        for index in &argsort_indices {
-70            if cumsum >= top_p {
-71                prs[*index] = 0.0;
-72            } else {
-73                cumsum += prs[*index];
-74            }
-75        }
-76        // Sample with clamped probabilities.
-77        self.sample_multinomial(prs)
-78    }
-79
-80    // top-k sampling samples from the k tokens with the largest probabilities.
-81    fn sample_topk(&mut self, prs: &mut Vec<f32>, top_k: usize) -> Result<u32> {
-82        if top_k >= prs.len() {
-83            self.sample_multinomial(prs)
-84        } else {
-85            let mut argsort_indices = (0..prs.len()).collect::<Vec<_>>();
-86            let (indices, _, _) =
-87                argsort_indices.select_nth_unstable_by(top_k, |&i, &j| prs[j].total_cmp(&prs[i]));
-88            let prs = indices.iter().map(|&i| prs[i]).collect::<Vec<_>>();
-89            let index = self.sample_multinomial(&prs)?;
-90            Ok(indices[index as usize] as u32)
-91        }
-92    }
-93
-94    // top-k sampling samples from the k tokens with the largest probabilities.
-95    // then top-p sampling.
-96    fn sample_topk_topp(&mut self, prs: &mut Vec<f32>, top_k: usize, top_p: f32) -> Result<u32> {
-97        if top_k >= prs.len() {
-98            self.sample_topp(prs, top_p)
-99        } else {
-100            let mut argsort_indices = (0..prs.len()).collect::<Vec<_>>();
-101            let (indices, _, _) =
-102                argsort_indices.select_nth_unstable_by(top_k, |&i, &j| prs[j].total_cmp(&prs[i]));
-103            let mut prs = indices.iter().map(|&i| prs[i]).collect::<Vec<_>>();
-104            let sum_p = prs.iter().sum::<f32>();
-105            let index = if top_p <= 0.0 || top_p >= sum_p {
-106                self.sample_multinomial(&prs)?
-107            } else {
-108                self.sample_topp(&mut prs, top_p)?
-109            };
-110            Ok(indices[index as usize] as u32)
-111        }
-112    }
-113
-114    pub fn sample(&mut self, logits: &Tensor) -> Result<u32> {
-115        self.sample_f(logits, |_| {})
-116    }
-117
-118    pub fn sample_f(&mut self, logits: &Tensor, f: impl FnOnce(&mut [f32])) -> Result<u32> {
-119        let logits = logits.to_dtype(DType::F32)?;
-120        let prs = |temperature: f64| -> Result<Vec<f32>> {
-121            let logits = (&logits / temperature)?;
-122            let prs = candle_nn::ops::softmax_last_dim(&logits)?;
-123            let mut prs = prs.to_vec1()?;
-124            f(&mut prs);
-125            Ok(prs)
-126        };
-127
-128        let next_token = match &self.sampling {
-129            Sampling::ArgMax => self.sample_argmax(logits)?,
-130            Sampling::All { temperature } => {
-131                let prs = prs(*temperature)?;
-132                self.sample_multinomial(&prs)?
-133            }
-134            Sampling::TopP { p, temperature } => {
-135                let mut prs = prs(*temperature)?;
-136                if *p <= 0.0 || *p >= 1.0 {
-137                    // simply sample from the predicted probability distribution
-138                    self.sample_multinomial(&prs)?
-139                } else {
-140                    // top-p (nucleus) sampling, clamping the least likely tokens to zero
-141                    self.sample_topp(&mut prs, *p as f32)?
-142                }
-143            }
-144            Sampling::TopK { k, temperature } => {
-145                let mut prs = prs(*temperature)?;
-146                self.sample_topk(&mut prs, *k)?
-147            }
-148            Sampling::TopKThenTopP { k, p, temperature } => {
-149                let mut prs = prs(*temperature)?;
-150                self.sample_topk_topp(&mut prs, *k, *p as f32)?
-151            }
-152        };
-153        Ok(next_token)
-154    }
-155}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/lib.rs.html b/network-poc/target-native/doc/src/candle_transformers/lib.rs.html deleted file mode 100644 index ae24029..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/lib.rs.html +++ /dev/null @@ -1,8 +0,0 @@ -lib.rs - source

candle_transformers/
lib.rs

1pub mod generation;
-2pub mod models;
-3pub mod object_detection;
-4pub mod pipelines;
-5pub mod quantized_nn;
-6pub mod quantized_var_builder;
-7pub mod utils;
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/based.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/based.rs.html deleted file mode 100644 index c73924a..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/based.rs.html +++ /dev/null @@ -1,589 +0,0 @@ -based.rs - source

candle_transformers/models/
based.rs

1//! Based from the Stanford Hazy Research group.
-2//!
-3//! See "Simple linear attention language models balance the recall-throughput tradeoff", Arora et al. 2024
-4//! - Simple linear attention language models balance the recall-throughput tradeoff. [Arxiv](https://arxiv.org/abs/2402.18668)
-5//! - [Github Rep](https://github.com/HazyResearch/based)
-6//! - [Blogpost](https://hazyresearch.stanford.edu/blog/2024-03-03-based)
-7
-8use candle::{DType, Device, IndexOp, Module, Result, Tensor, D};
-9use candle_nn::{
-10    conv1d_no_bias, linear, linear_no_bias, ops::softmax_last_dim, rms_norm, Conv1d, Conv1dConfig,
-11    Func, Linear, RmsNorm, VarBuilder,
-12};
-13use std::sync::Arc;
-14
-15#[derive(Debug, Clone, serde::Deserialize)]
-16pub struct LinearAttentionFeatureMapConfig {
-17    input_dim: usize,
-18}
-19
-20#[derive(Debug, Clone, serde::Deserialize)]
-21pub struct LinearAttentionConfig {
-22    num_heads: usize,
-23    feature_dim: usize,
-24    feature_map: LinearAttentionFeatureMapConfig,
-25}
-26
-27#[derive(Debug, Clone, serde::Deserialize)]
-28pub struct SlidingWindowAttentionConfig {
-29    num_heads: usize,
-30    window_size: usize,
-31}
-32
-33#[derive(Debug, Clone, serde::Deserialize)]
-34pub struct Config {
-35    vocab_size: usize,
-36    #[serde(rename = "n_embd")]
-37    hidden_size: usize,
-38    #[serde(rename = "n_inner")]
-39    intermediate_size: usize,
-40    #[serde(rename = "n_layer")]
-41    num_hidden_layers: usize,
-42    #[serde(rename = "n_head")]
-43    num_attention_heads: usize,
-44
-45    layer_norm_epsilon: f64,
-46    #[serde(default = "default_rope", rename = "rotary_emb_base")]
-47    rope_theta: f64,
-48
-49    alt_mixer_layers: Vec<usize>,
-50    alt_mixer_2_layers: Vec<usize>,
-51    #[serde(rename = "alt_mixer")]
-52    la: LinearAttentionConfig,
-53    #[serde(rename = "alt_mixer_2")]
-54    swa: SlidingWindowAttentionConfig,
-55}
-56
-57fn default_rope() -> f64 {
-58    10_000.0
-59}
-60
-61#[derive(Debug, Clone)]
-62#[allow(clippy::upper_case_acronyms)]
-63struct MLP {
-64    fc1: Linear,
-65    fc2: Linear,
-66}
-67
-68impl MLP {
-69    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-70        let fc1 = linear_no_bias(cfg.hidden_size, cfg.hidden_size * 4, vb.pp("fc1"))?;
-71        let fc2 = linear_no_bias(cfg.intermediate_size, cfg.hidden_size, vb.pp("fc2"))?;
-72        Ok(Self { fc1, fc2 })
-73    }
-74}
-75
-76// Swiglu implementation.
-77// Not using Activation::Swiglu because this has the gate and y arguments switched compared to the version in candle-nn/src/ops.rs
-78fn swiglu(xs: &Tensor) -> Result<Tensor> {
-79    let xs = xs.chunk(2, D::Minus1)?;
-80    &xs[1].silu()? * &xs[0]
-81}
-82
-83impl Module for MLP {
-84    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-85        let xs = xs.apply(&self.fc1)?;
-86        let xs = swiglu(&xs)?;
-87        let xs = xs.apply(&self.fc2)?;
-88        Ok(xs)
-89    }
-90}
-91
-92// A gated convolutional block.
-93#[derive(Debug, Clone)]
-94struct BasedConv {
-95    in_proj: Linear,
-96    out_proj: Linear,
-97    conv: Conv1d,
-98    state: Tensor,
-99}
-100
-101impl BasedConv {
-102    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-103        let dim = cfg.hidden_size * 2;
-104
-105        let conv1d_cfg = Conv1dConfig {
-106            groups: dim,
-107            padding: 2,
-108            ..Default::default()
-109        };
-110
-111        let in_proj = linear(cfg.hidden_size, cfg.hidden_size * 4, vb.pp("in_proj"))?;
-112        let out_proj = linear(dim, cfg.hidden_size, vb.pp("out_proj"))?;
-113        let conv = conv1d_no_bias(dim, dim, 3, conv1d_cfg, vb.pp("conv.conv"))?;
-114        let state = Tensor::zeros((1, dim, 3), vb.dtype(), vb.device())?;
-115        Ok(Self {
-116            in_proj,
-117            out_proj,
-118            conv,
-119            state,
-120        })
-121    }
-122
-123    fn step(&mut self, xs: &Tensor) -> Result<Tensor> {
-124        self.state = self.state.roll(-1, D::Minus1)?;
-125        let (_, _, l) = self.state.dims3()?;
-126        self.state = self.state.narrow(D::Minus1, 0, l - 1)?;
-127        self.state = Tensor::cat(&[&self.state, &xs.transpose(1, 2)?], 2)?;
-128
-129        let xs = (&self.state * self.conv.weight().permute((1, 0, 2))?)?
-130            .sum_keepdim(0)?
-131            .sum(D::Minus1)?;
-132
-133        let xs = xs.unsqueeze(1)?;
-134
-135        Ok(xs)
-136    }
-137
-138    fn forward(&mut self, xs: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-139        let xs = xs.apply(&self.in_proj)?;
-140        let us = xs.chunk(2, D::Minus1)?;
-141        let (_b, l, _d) = us[0].dims3()?;
-142        let u_conv = if seqlen_offset > 0 {
-143            self.step(&us[0])?
-144        } else {
-145            let k = std::cmp::min(3, l);
-146            self.state = self.state.narrow(D::Minus1, 0, 3 - k)?;
-147            let xs = us[0].narrow(1, l - k, k)?.transpose(1, 2)?;
-148            self.state = Tensor::cat(&[&self.state, &xs], 2)?;
-149
-150            us[0]
-151                .transpose(1, 2)?
-152                .apply(&self.conv)?
-153                .narrow(D::Minus1, 0, l)?
-154                .transpose(1, 2)?
-155        };
-156
-157        let u_conv = u_conv.silu()?;
-158        let v = u_conv.broadcast_mul(&us[1])?;
-159        let xs = v.apply(&self.out_proj)?;
-160
-161        Ok(xs)
-162    }
-163}
-164
-165// Linear attention approximating softmax using second order Taylor polynomials.
-166#[derive(Debug, Clone)]
-167struct LinearAttention {
-168    proj_q: Linear,
-169    proj_k: Linear,
-170    proj_v: Linear,
-171    out_proj: Linear,
-172    feature_dim: usize,
-173    num_heads: usize,
-174    input_dim: usize,
-175    k_state: Tensor,
-176    kv_state: Tensor,
-177}
-178
-179impl LinearAttention {
-180    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-181        let input_dim = cfg.la.feature_map.input_dim;
-182        let out_proj = linear_no_bias(cfg.hidden_size, cfg.hidden_size, vb.pp("out_proj"))?;
-183        let proj_k = linear_no_bias(
-184            cfg.hidden_size,
-185            cfg.la.num_heads * cfg.la.feature_dim,
-186            vb.pp("proj_k"),
-187        )?;
-188        let proj_q = linear_no_bias(
-189            cfg.hidden_size,
-190            cfg.la.num_heads * cfg.la.feature_dim,
-191            vb.pp("proj_q"),
-192        )?;
-193
-194        let proj_v = linear_no_bias(cfg.hidden_size, cfg.hidden_size, vb.pp("proj_v"))?;
-195        let expanded_size = cfg.la.feature_dim.pow(2) + cfg.la.feature_dim + 1;
-196        let k_state = Tensor::zeros(
-197            (1, cfg.la.num_heads, 1, 1, expanded_size),
-198            vb.dtype(),
-199            vb.device(),
-200        )?;
-201        let kv_state = Tensor::zeros(
-202            (1, cfg.la.num_heads, cfg.la.feature_dim, expanded_size),
-203            vb.dtype(),
-204            vb.device(),
-205        )?;
-206
-207        Ok(Self {
-208            proj_q,
-209            proj_k,
-210            proj_v,
-211            out_proj,
-212            feature_dim: cfg.la.feature_dim,
-213            num_heads: cfg.la.num_heads,
-214            input_dim,
-215            k_state,
-216            kv_state,
-217        })
-218    }
-219
-220    fn taylor_expansion(&self) -> Result<Func<'static>> {
-221        let r2 = std::f64::consts::SQRT_2;
-222        let rd = (self.input_dim as f64).sqrt();
-223        let rrd = rd.sqrt();
-224
-225        Ok(Func::new(move |xs| {
-226            let dims = xs.dims();
-227            let mut d = dims.to_vec();
-228            if let Some(last) = d.last_mut() {
-229                *last = 1;
-230            };
-231
-232            let x = xs
-233                .unsqueeze(D::Minus1)?
-234                .broadcast_mul(&xs.unsqueeze(D::Minus2)?)?;
-235            let x = (x.flatten_from(D::Minus2)? / r2)?;
-236            let o = Tensor::ones(d, xs.dtype(), xs.device())?;
-237            let x = Tensor::cat(&[o, (xs / rrd)?, (&x / rd)?], D::Minus1)?;
-238
-239            Ok(x)
-240        }))
-241    }
-242
-243    fn forward(&mut self, xs: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-244        let eps = 1e-12;
-245
-246        let feature_map = self.taylor_expansion()?;
-247
-248        let (b, l, d) = xs.dims3()?;
-249        let q = xs.apply(&self.proj_q)?;
-250        let k = xs.apply(&self.proj_k)?;
-251        let v = xs.apply(&self.proj_v)?;
-252
-253        let q = q
-254            .reshape((b, l, self.num_heads, self.feature_dim))?
-255            .transpose(1, 2)?
-256            .contiguous()?;
-257        let k = k
-258            .reshape((b, l, self.num_heads, self.feature_dim))?
-259            .transpose(1, 2)?
-260            .contiguous()?;
-261        let v = v
-262            .reshape((b, l, self.num_heads, d / self.num_heads))?
-263            .transpose(1, 2)?
-264            .contiguous()?;
-265
-266        let q = feature_map.forward(&q)?;
-267        let k = feature_map.forward(&k)?;
-268
-269        let y = if seqlen_offset > 0 {
-270            let (_b, _h, l, _d) = k.dims4()?;
-271            let q = q.unsqueeze(D::Minus2)?;
-272            let k = k.unsqueeze(D::Minus2)?;
-273            let v = v.unsqueeze(D::Minus1)?;
-274            let kn = k.narrow(D::Minus1, l - 1, 1)?;
-275            let vn = v.narrow(D::Minus1, l - 1, 1)?;
-276
-277            self.k_state = self.k_state.broadcast_add(&kn)?;
-278            self.kv_state = self.kv_state.broadcast_add(&kn.broadcast_mul(&vn)?)?;
-279
-280            let num = q.broadcast_mul(&self.kv_state)?.sum(D::Minus1)?;
-281            let den = (q.broadcast_mul(&self.k_state)?.sum(D::Minus1)? + eps)?;
-282            num.broadcast_div(&den)?
-283        } else {
-284            self.k_state = k.sum(2)?.unsqueeze(2)?.unsqueeze(3)?;
-285            self.kv_state = k
-286                .transpose(2, 3)?
-287                .matmul(&v)?
-288                .transpose(2, 3)?
-289                .unsqueeze(2)?;
-290            let aqk = q.matmul(&k.transpose(D::Minus1, D::Minus2)?)?;
-291            let tril = Tensor::tril2(l, aqk.dtype(), aqk.device())?;
-292            let aqk = aqk.broadcast_mul(&tril)?.matmul(&v)?;
-293
-294            let z = (1f64 / (q.mul(&k.cumsum(2)?)?.sum(D::Minus1)? + eps)?)?;
-295            aqk.broadcast_mul(&z.unsqueeze(D::Minus1)?)?
-296        };
-297
-298        let (b, h, l, d) = y.dims4()?;
-299        let y = y.permute((0, 2, 1, 3))?.reshape((b, l, h * d))?;
-300        let y = self.out_proj.forward(&y)?;
-301
-302        Ok(y)
-303    }
-304}
-305
-306// Rotary embeddings used in local attention.
-307#[derive(Debug, Clone)]
-308struct RotaryEmbedding {
-309    sin: Tensor,
-310    cos: Tensor,
-311}
-312
-313impl RotaryEmbedding {
-314    fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-315        let dim = cfg.hidden_size / cfg.num_attention_heads;
-316        let max_seq_len = 2048; // Hardcoded, missing from config.
-317        let inv_freq: Vec<_> = (0..dim)
-318            .step_by(2)
-319            .map(|i| 1f32 / cfg.rope_theta.powf(i as f64 / dim as f64) as f32)
-320            .collect();
-321        let inv_freq_len = inv_freq.len();
-322        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-323        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-324            .to_dtype(dtype)?
-325            .reshape((max_seq_len, 1))?;
-326        let freqs = t.matmul(&inv_freq)?;
-327        Ok(Self {
-328            sin: freqs.sin()?,
-329            cos: freqs.cos()?,
-330        })
-331    }
-332
-333    fn apply_rotary_emb_qkv(
-334        &self,
-335        q: &Tensor,
-336        k: &Tensor,
-337        seqlen_offset: usize,
-338    ) -> Result<(Tensor, Tensor)> {
-339        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-340        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-341        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-342        let q_embed = candle_nn::rotary_emb::rope(&q.contiguous()?, &cos, &sin)?;
-343        let k_embed = candle_nn::rotary_emb::rope(&k.contiguous()?, &cos, &sin)?;
-344        Ok((q_embed, k_embed))
-345    }
-346}
-347
-348// Local attention using a small sliding window.
-349#[derive(Debug, Clone)]
-350struct SlidingWindowAttention {
-351    wqkv: Linear,
-352    out_proj: Linear,
-353    num_heads: usize,
-354    head_dim: usize,
-355    hidden_size: usize,
-356    rotary_emb: Arc<RotaryEmbedding>,
-357    kv_cache: Option<(Tensor, Tensor)>,
-358}
-359
-360impl SlidingWindowAttention {
-361    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-362        let hidden_size = cfg.hidden_size;
-363        let num_heads = cfg.swa.num_heads;
-364        let head_dim = hidden_size / num_heads;
-365        let out_proj = linear_no_bias(hidden_size, hidden_size, vb.pp("out_proj"))?;
-366        let wqkv = linear_no_bias(hidden_size, hidden_size * 3, vb.pp("Wqkv"))?;
-367        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb.device())?);
-368        Ok(Self {
-369            wqkv,
-370            out_proj,
-371            hidden_size,
-372            num_heads,
-373            head_dim,
-374            rotary_emb,
-375            kv_cache: None,
-376        })
-377    }
-378
-379    fn forward(
-380        &mut self,
-381        xs: &Tensor,
-382        attention_mask: Option<&Tensor>,
-383        seqlen_offset: usize,
-384    ) -> Result<Tensor> {
-385        let (b_sz, q_len, _) = xs.dims3()?;
-386
-387        let qkv = xs.apply(&self.wqkv)?;
-388        let qkv = qkv.reshape((b_sz, q_len, 3, (), self.head_dim))?;
-389
-390        let q = qkv.i((.., .., 0))?;
-391        let k = qkv.i((.., .., 1))?;
-392        let v = qkv.i((.., .., 2))?;
-393
-394        let q = q
-395            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-396            .transpose(1, 2)?;
-397        let k = k
-398            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-399            .transpose(1, 2)?;
-400        let v = v
-401            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-402            .transpose(1, 2)?;
-403
-404        let (q, k) = self
-405            .rotary_emb
-406            .apply_rotary_emb_qkv(&q, &k, seqlen_offset)?;
-407
-408        let (k, v) = match &self.kv_cache {
-409            None => (k, v),
-410            Some((prev_k, prev_v)) => {
-411                let k = Tensor::cat(&[prev_k, &k], 2)?;
-412                let v = Tensor::cat(&[prev_v, &v], 2)?;
-413                (k, v)
-414            }
-415        };
-416        self.kv_cache = Some((k.clone(), v.clone()));
-417
-418        let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-419        let attn_weights = (q.matmul(&k.transpose(2, 3)?)? * scale)?;
-420
-421        let attn_weights = match attention_mask {
-422            None => attn_weights,
-423            Some(mask) => attn_weights.broadcast_add(mask)?,
-424        };
-425        let attn_weights = softmax_last_dim(&attn_weights)?;
-426        let attn_output = attn_weights.matmul(&v)?;
-427        let out = attn_output
-428            .transpose(1, 2)?
-429            .reshape((b_sz, q_len, self.hidden_size))?
-430            .apply(&self.out_proj)?;
-431
-432        Ok(out)
-433    }
-434}
-435
-436// The model layers use three types of mixers.
-437#[derive(Debug, Clone)]
-438enum SequenceMixer {
-439    Based(BasedConv),
-440    Linear(LinearAttention),
-441    Sliding(SlidingWindowAttention),
-442}
-443
-444impl SequenceMixer {
-445    fn forward(
-446        &mut self,
-447        xs: &Tensor,
-448        attention_mask: Option<&Tensor>,
-449        pos: usize,
-450    ) -> Result<Tensor> {
-451        match self {
-452            Self::Based(b) => b.forward(xs, pos),
-453            Self::Linear(b) => b.forward(xs, pos),
-454            Self::Sliding(b) => b.forward(xs, attention_mask, pos),
-455        }
-456    }
-457}
-458
-459#[derive(Debug, Clone)]
-460struct DecoderLayer {
-461    mlp: MLP,
-462    norm1: RmsNorm,
-463    norm2: RmsNorm,
-464    mixer: SequenceMixer,
-465}
-466
-467impl DecoderLayer {
-468    fn new(layer_idx: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-469        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-470        let norm1 = rms_norm(cfg.hidden_size, cfg.layer_norm_epsilon, vb.pp("norm1"))?;
-471        let norm2 = rms_norm(cfg.hidden_size, cfg.layer_norm_epsilon, vb.pp("norm2"))?;
-472
-473        let l_attn = cfg.alt_mixer_layers.contains(&layer_idx);
-474        let sw_attn = cfg.alt_mixer_2_layers.contains(&layer_idx);
-475
-476        let mixer = if l_attn {
-477            SequenceMixer::Linear(LinearAttention::new(cfg, vb.pp("mixer"))?)
-478        } else if sw_attn {
-479            SequenceMixer::Sliding(SlidingWindowAttention::new(cfg, vb.pp("mixer"))?)
-480        } else {
-481            SequenceMixer::Based(BasedConv::new(cfg, vb.pp("mixer"))?)
-482        };
-483
-484        Ok(Self {
-485            mlp,
-486            norm1,
-487            norm2,
-488            mixer,
-489        })
-490    }
-491
-492    fn forward(
-493        &mut self,
-494        xs: &Tensor,
-495        attention_mask: Option<&Tensor>,
-496        seqlen_offset: usize,
-497    ) -> Result<Tensor> {
-498        let residual = xs;
-499        let xs = self.norm1.forward(xs)?;
-500        let xs = self.mixer.forward(&xs, attention_mask, seqlen_offset)?;
-501        let xs = (xs + residual)?;
-502        let residual = &xs;
-503        let xs = xs.apply(&self.norm2)?.apply(&self.mlp)?;
-504        residual + xs
-505    }
-506}
-507
-508#[derive(Debug, Clone)]
-509pub struct Model {
-510    embed_tokens: super::with_tracing::Embedding,
-511    layers: Vec<DecoderLayer>,
-512    norm: RmsNorm,
-513    lm_head: Linear,
-514    sliding_window: usize,
-515    device: Device,
-516    dtype: DType,
-517}
-518
-519impl Model {
-520    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-521        let vocab_size = cfg.vocab_size + (8 - cfg.vocab_size % 8) % 8;
-522        let lm_head = linear_no_bias(cfg.hidden_size, vocab_size, vb.pp("lm_head"))?;
-523        let embed_tokens = super::with_tracing::Embedding::from_weights(lm_head.weight().clone())?;
-524        let vb_m = vb.pp("transformer");
-525        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-526        let vb_l = vb_m.pp("layers");
-527        for layer_idx in 0..cfg.num_hidden_layers {
-528            let layer = DecoderLayer::new(layer_idx, cfg, vb_l.pp(layer_idx))?;
-529            layers.push(layer)
-530        }
-531        let norm = rms_norm(cfg.hidden_size, cfg.layer_norm_epsilon, vb_m.pp("ln_f"))?;
-532        Ok(Self {
-533            embed_tokens,
-534            layers,
-535            norm,
-536            lm_head,
-537            sliding_window: cfg.swa.window_size,
-538            device: vb.device().clone(),
-539            dtype: vb.dtype(),
-540        })
-541    }
-542
-543    fn prepare_decoder_attention_mask(
-544        &self,
-545        b_size: usize,
-546        tgt_len: usize,
-547        seqlen_offset: usize,
-548    ) -> Result<Tensor> {
-549        let sliding_window = self.sliding_window / 2;
-550        let mask: Vec<_> = (0..tgt_len)
-551            .flat_map(|i| {
-552                (0..tgt_len).map(move |j| {
-553                    if i < j || j + sliding_window < i {
-554                        f32::NEG_INFINITY
-555                    } else {
-556                        0.
-557                    }
-558                })
-559            })
-560            .collect();
-561        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-562        let mask = if seqlen_offset > 0 {
-563            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), self.dtype, &self.device)?;
-564            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-565        } else {
-566            mask
-567        };
-568        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-569            .to_dtype(self.dtype)
-570    }
-571
-572    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-573        let (b_size, seq_len) = input_ids.dims2()?;
-574        let attention_mask = if seq_len <= 1 {
-575            None
-576        } else {
-577            let mask = self.prepare_decoder_attention_mask(b_size, seq_len, seqlen_offset)?;
-578            Some(mask)
-579        };
-580        let mut xs = self.embed_tokens.forward(input_ids)?;
-581        for layer in self.layers.iter_mut() {
-582            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-583        }
-584        xs.narrow(1, seq_len - 1, 1)?
-585            .apply(&self.norm)?
-586            .apply(&self.lm_head)
-587    }
-588}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/beit.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/beit.rs.html deleted file mode 100644 index e3976e6..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/beit.rs.html +++ /dev/null @@ -1,412 +0,0 @@ -beit.rs - source

candle_transformers/models/
beit.rs

1//! Based on the BEIT vision-language model.
-2//!
-3//! See "BEIT: BERT Pre-Training of Image Transformers", Bao et al. 2021
-4//! - [Arxiv](https://arxiv.org/abs/2106.08254)
-5//! - [Github](https://github.com/microsoft/unilm/tree/master/beit)
-6//!
-7
-8use candle::{DType, Device, IndexOp, Result, Tensor, D};
-9use candle_nn::{layer_norm, LayerNorm, Linear, Module, VarBuilder};
-10
-11const IMG_SIZE: usize = 384;
-12const PATCH_SIZE: usize = 16;
-13const NUM_CLASSES: usize = 1000;
-14const WINDOW_SIZE: usize = IMG_SIZE / PATCH_SIZE; // 384 / 16 = 24
-15const NB_TOKENS: usize = WINDOW_SIZE * WINDOW_SIZE + 1; // 24 * 24 + 1 = 577
-16
-17fn linear(vb: VarBuilder, in_dim: usize, out_dim: usize, bias: bool) -> Result<Linear> {
-18    if bias {
-19        candle_nn::linear(in_dim, out_dim, vb)
-20    } else {
-21        candle_nn::linear_no_bias(in_dim, out_dim, vb)
-22    }
-23}
-24
-25#[derive(Debug)]
-26struct Attention {
-27    qkv: Linear,
-28    proj: Linear,
-29    relative_position_bias_table: Tensor,
-30    relative_position_index: Tensor,
-31    num_heads: usize,
-32    scale: f64,
-33}
-34
-35impl Attention {
-36    fn new(
-37        vb: VarBuilder,
-38        dim: usize,
-39        num_heads: usize,
-40        qkv_bias: bool,
-41        proj_bias: bool,
-42    ) -> Result<Self> {
-43        let qkv = linear(vb.pp("qkv"), dim, dim * 3, qkv_bias)?;
-44        let proj = linear(vb.pp("proj"), dim, dim, proj_bias)?;
-45        // num_relative_distance = token-token(47x47) + token-CLS(1) + CLS-token(1) + CLS-CLS(1) = 2212
-46        let num_relative_distance = (2 * WINDOW_SIZE - 1) * (2 * WINDOW_SIZE - 1) + 3;
-47        let relative_position_bias_table = vb.get(
-48            (num_relative_distance, num_heads),
-49            "relative_position_bias_table",
-50        )?;
-51        let relative_position_index =
-52            Self::gen_relative_position_index(relative_position_bias_table.device())?;
-53        let scale = 1. / ((dim / num_heads) as f64).sqrt();
-54        Ok(Self {
-55            qkv,
-56            proj,
-57            relative_position_bias_table,
-58            relative_position_index,
-59            num_heads,
-60            scale,
-61        })
-62    }
-63}
-64
-65impl Attention {
-66    // See: https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/beit.py#L61
-67    fn gen_relative_position_index(device: &Device) -> Result<Tensor> {
-68        let num_relative_distance = (2 * WINDOW_SIZE - 1) * (2 * WINDOW_SIZE - 1) + 3;
-69        let w_area = WINDOW_SIZE * WINDOW_SIZE;
-70
-71        let t_arange: Tensor = Tensor::arange(0, WINDOW_SIZE as u32, device)?;
-72        let t_ndgrid = Tensor::meshgrid(&[&t_arange, &t_arange], false)?;
-73        let coords_flatten = Tensor::stack(&t_ndgrid, 0)?.flatten(1, 2)?;
-74
-75        let tmp1 = coords_flatten
-76            .unsqueeze(2)?
-77            .broadcast_as((2, w_area, w_area))?
-78            .to_dtype(DType::I64)?;
-79        let tmp2 = coords_flatten
-80            .unsqueeze(1)?
-81            .broadcast_as((2, w_area, w_area))?
-82            .to_dtype(DType::I64)?;
-83        let relative_coords = (tmp1 - tmp2)?
-84            .transpose(0, 1)? // 102
-85            .transpose(1, 2)? // 120
-86            .contiguous()?;
-87
-88        let relative_coords = relative_coords.slice_assign(
-89            &[0..w_area, 0..w_area, 0..1],
-90            &(relative_coords.i((0..w_area, 0..w_area, 0..1))? + (WINDOW_SIZE - 1) as f64)?,
-91        )?;
-92        let relative_coords = relative_coords.slice_assign(
-93            &[0..w_area, 0..w_area, 1..2],
-94            &(relative_coords.i((0..w_area, 0..w_area, 1..2))? + (WINDOW_SIZE - 1) as f64)?,
-95        )?;
-96        let relative_coords = relative_coords.slice_assign(
-97            &[0..w_area, 0..w_area, 0..1],
-98            &(relative_coords.i((.., .., 0..1))? * (2. * (WINDOW_SIZE as f64) - 1.))?,
-99        )?;
-100
-101        Tensor::zeros((w_area + 1, w_area + 1), DType::I64, device)?
-102            .slice_assign(&[1.., 1..], &relative_coords.sum(2)?)?
-103            .slice_assign(
-104                &[0..1, 0..(w_area + 1)],
-105                &(Tensor::ones((1, w_area + 1), DType::I64, device)?
-106                    * ((num_relative_distance - 3) as f64))?
-107                    .to_dtype(DType::I64)?,
-108            )?
-109            .slice_assign(
-110                &[0..(w_area + 1), 0..1],
-111                &(Tensor::ones((w_area + 1, 1), DType::I64, device)?
-112                    * ((num_relative_distance - 2) as f64))?
-113                    .to_dtype(DType::I64)?,
-114            )?
-115            .slice_assign(
-116                &[0..1, 0..1],
-117                &(Tensor::ones((1, 1), DType::I64, device)?
-118                    * ((num_relative_distance - 1) as f64))?
-119                    .to_dtype(DType::I64)?,
-120            )
-121    }
-122
-123    fn _get_rel_pos_bias(&self) -> Result<Tensor> {
-124        self.relative_position_bias_table
-125            .index_select(
-126                &self
-127                    .relative_position_index
-128                    .flatten_all()?
-129                    .to_dtype(DType::U32)?,
-130                0,
-131            )?
-132            .reshape((NB_TOKENS, NB_TOKENS, ()))?
-133            .transpose(0, 1)? // 102
-134            .transpose(0, 2)? // 201
-135            .contiguous()?
-136            .unsqueeze(0)
-137    }
-138}
-139
-140impl Module for Attention {
-141    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-142        let (b, n, c) = xs.dims3()?;
-143        let qkv = self
-144            .qkv
-145            .forward(xs)?
-146            .reshape((b, n, 3, self.num_heads, c / self.num_heads))?
-147            .transpose(1, 2)? // 02134
-148            .transpose(0, 1)? // 20134
-149            .transpose(2, 3)?; // 20314
-150        let q = (qkv.i(0)? * self.scale)?;
-151        let k = qkv.i(1)?.contiguous()?;
-152        let v = qkv.i(2)?.contiguous()?;
-153        let attn = (&q.matmul(&k.t()?)? + self._get_rel_pos_bias())?;
-154        let attn = candle_nn::ops::softmax(&attn, D::Minus1)?;
-155        let attn = attn.matmul(&v)?.transpose(1, 2)?.reshape((b, n, c))?;
-156        self.proj.forward(&attn)
-157    }
-158}
-159
-160#[derive(Debug)]
-161struct LayerScale {
-162    gamma: Tensor,
-163}
-164
-165impl LayerScale {
-166    fn new(vb: VarBuilder, dim: usize) -> Result<Self> {
-167        let gamma = vb.get(dim, "gamma")?;
-168        Ok(Self { gamma })
-169    }
-170}
-171
-172impl Module for LayerScale {
-173    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-174        xs.broadcast_mul(&self.gamma)
-175    }
-176}
-177
-178#[derive(Debug)]
-179struct Mlp {
-180    fc1: Linear,
-181    fc2: Linear,
-182}
-183
-184impl Mlp {
-185    fn new(vb: VarBuilder, in_features: usize, hidden_features: usize, bias: bool) -> Result<Self> {
-186        let out_features = in_features;
-187        let fc1 = linear(vb.pp("fc1"), in_features, hidden_features, bias)?;
-188        let fc2 = linear(vb.pp("fc2"), hidden_features, out_features, bias)?;
-189        Ok(Self { fc1, fc2 })
-190    }
-191}
-192
-193impl Module for Mlp {
-194    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-195        let xs = self.fc1.forward(xs)?.gelu()?;
-196        self.fc2.forward(&xs)
-197    }
-198}
-199
-200#[derive(Debug)]
-201struct Block {
-202    norm1: LayerNorm,
-203    attn: Attention,
-204    ls1: LayerScale,
-205    norm2: LayerNorm,
-206    mlp: Mlp,
-207    ls2: LayerScale,
-208}
-209
-210impl Block {
-211    fn new(vb: VarBuilder, dim: usize, num_heads: usize) -> Result<Self> {
-212        let norm1 = layer_norm(dim, 1e-6, vb.pp("norm1"))?;
-213        let attn = Attention::new(vb.pp("attn"), dim, num_heads, true, true)?;
-214        let ls1 = LayerScale::new(vb.pp("ls1"), dim)?;
-215        let norm2 = layer_norm(dim, 1e-6, vb.pp("norm2"))?;
-216        let mlp = Mlp::new(vb.pp("mlp"), dim, dim * 4, true)?;
-217        let ls2 = LayerScale::new(vb.pp("ls2"), dim)?;
-218        Ok(Self {
-219            norm1,
-220            attn,
-221            ls1,
-222            norm2,
-223            mlp,
-224            ls2,
-225        })
-226    }
-227}
-228
-229impl Module for Block {
-230    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-231        let residual = xs;
-232        let xs = self
-233            .ls1
-234            .forward(&self.attn.forward(&self.norm1.forward(xs)?)?)?;
-235        let xs = (xs + residual)?;
-236        let residual = &xs;
-237        let xs = self
-238            .ls2
-239            .forward(&self.mlp.forward(&self.norm2.forward(&xs)?)?)?;
-240        xs + residual
-241    }
-242}
-243
-244#[derive(Debug)]
-245struct PatchEmbed {
-246    proj: candle_nn::Conv2d,
-247    patch_size: (usize, usize),
-248}
-249
-250impl PatchEmbed {
-251    fn new(vb: VarBuilder, patch_size: usize, in_chans: usize, embed_dim: usize) -> Result<Self> {
-252        let config = candle_nn::Conv2dConfig {
-253            stride: patch_size,
-254            ..Default::default()
-255        };
-256        let proj = candle_nn::conv2d(in_chans, embed_dim, patch_size, config, vb.pp("proj"))?;
-257        Ok(Self {
-258            proj,
-259            patch_size: (patch_size, patch_size),
-260        })
-261    }
-262}
-263
-264impl Module for PatchEmbed {
-265    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-266        let (_b, _c, h, w) = xs.dims4()?;
-267        let (patch_h, patch_w) = self.patch_size;
-268        if (h % patch_h) != 0 {
-269            candle::bail!("image height {h} is not a multiple of patch height {patch_h}")
-270        }
-271        if (w % patch_w) != 0 {
-272            candle::bail!("image width {w} is not a multiple of patch width {patch_w}")
-273        }
-274        let xs = self.proj.forward(xs)?;
-275        let (b, c, h, w) = xs.dims4()?;
-276        // flatten embeddings.
-277        xs.reshape((b, c, h * w))?.transpose(1, 2)
-278    }
-279}
-280
-281#[derive(Debug)]
-282pub struct BeitVisionTransformer {
-283    patch_embed: PatchEmbed,
-284    cls_token: Tensor,
-285    blocks: Vec<Block>,
-286    norm: LayerNorm,
-287    head: Linear,
-288}
-289
-290impl BeitVisionTransformer {
-291    pub fn new(vb: VarBuilder, depth: usize, embed_dim: usize, num_heads: usize) -> Result<Self> {
-292        let patch_embed = PatchEmbed::new(vb.pp("patch_embed"), PATCH_SIZE, 3, embed_dim)?;
-293        let cls_token = vb.get((1, 1, embed_dim), "cls_token")?;
-294        let head = linear(vb.pp("head"), embed_dim, NUM_CLASSES, true)?;
-295        let norm = layer_norm(embed_dim, 1e-6, vb.pp("norm"))?;
-296        let vb_b = vb.pp("blocks");
-297        let blocks = (0..depth)
-298            .map(|i| Block::new(vb_b.pp(i.to_string()), embed_dim, num_heads))
-299            .collect::<Result<Vec<_>>>()?;
-300        Ok(Self {
-301            patch_embed,
-302            cls_token,
-303            blocks,
-304            norm,
-305            head,
-306        })
-307    }
-308
-309    fn prepare_tokens_with_mask(&self, xs: &Tensor) -> Result<Tensor> {
-310        let xs = self.patch_embed.forward(xs)?;
-311        Tensor::cat(&[&self.cls_token, &xs], 1)
-312    }
-313
-314    fn get_intermediate_layers_not_chunked(
-315        &self,
-316        xs: &Tensor,
-317        blocks_to_take: &[usize],
-318    ) -> Result<Vec<Tensor>> {
-319        let mut xs = self.prepare_tokens_with_mask(xs)?;
-320        let mut output = Vec::new();
-321        for (i, blk) in self.blocks.iter().enumerate() {
-322            xs = blk.forward(&xs)?;
-323            if blocks_to_take.contains(&i) {
-324                output.push(xs.clone());
-325            }
-326        }
-327        if output.len() != blocks_to_take.len() {
-328            candle::bail!(
-329                "only {} / {} blocks found",
-330                output.len(),
-331                blocks_to_take.len()
-332            );
-333        }
-334        Ok(output)
-335    }
-336
-337    pub fn get_intermediate_layers(
-338        &self,
-339        xs: &Tensor,
-340        blocks_to_take: &[usize],
-341        reshape: bool,
-342        return_class_token: bool,
-343        norm: bool,
-344    ) -> Result<Tensor> {
-345        let outputs = self.get_intermediate_layers_not_chunked(xs, blocks_to_take)?;
-346        let outputs = if norm {
-347            outputs
-348                .iter()
-349                .map(|out| self.norm.forward(out))
-350                .collect::<Result<Vec<_>>>()?
-351        } else {
-352            outputs
-353        };
-354        let class_tokens = outputs
-355            .iter()
-356            .map(|out| out.i((.., 0)))
-357            .collect::<Result<Vec<_>>>()?;
-358        let outputs = outputs
-359            .iter()
-360            .map(|out| out.i((.., 1..)))
-361            .collect::<Result<Vec<_>>>()?;
-362
-363        let outputs = if reshape {
-364            let (b, _c, w, h) = xs.dims4()?;
-365            let patch_size = self.patch_embed.patch_size.0;
-366            let num_channels = outputs[0].elem_count() / (b * (w / patch_size) * (h / patch_size));
-367            outputs
-368                .iter()
-369                .map(|out| {
-370                    out.reshape((b, w / patch_size, h / patch_size, num_channels))?
-371                        .transpose(2, 3)?
-372                        .transpose(1, 2)
-373                })
-374                .collect::<Result<Vec<_>>>()?
-375        } else {
-376            outputs
-377        };
-378
-379        let outputs = if return_class_token {
-380            outputs
-381                .iter()
-382                .zip(class_tokens.iter())
-383                .map(|(out, class_token)| Tensor::cat(&[out, class_token], D::Minus1))
-384                .collect::<Result<Vec<_>>>()?
-385        } else {
-386            outputs
-387        };
-388
-389        Tensor::stack(&outputs[..], 0)
-390    }
-391}
-392
-393impl Module for BeitVisionTransformer {
-394    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-395        let mut xs = self.prepare_tokens_with_mask(xs)?;
-396        for blk in self.blocks.iter() {
-397            xs = blk.forward(&xs)?
-398        }
-399        let xs_moy_local_tokens = xs.i((.., 1..))?.mean(1)?;
-400        let xs_norm = self.norm.forward(&xs_moy_local_tokens)?;
-401        self.head.forward(&xs_norm)
-402    }
-403}
-404
-405pub fn vit_base(vb: VarBuilder) -> Result<BeitVisionTransformer> {
-406    BeitVisionTransformer::new(vb, 12, 768, 12)
-407}
-408
-409pub fn vit_large(vb: VarBuilder) -> Result<BeitVisionTransformer> {
-410    BeitVisionTransformer::new(vb, 24, 1024, 16)
-411}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/bert.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/bert.rs.html deleted file mode 100644 index 1fab1dd..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/bert.rs.html +++ /dev/null @@ -1,622 +0,0 @@ -bert.rs - source

candle_transformers/models/
bert.rs

1//! BERT (Bidirectional Encoder Representations from Transformers)
-2//!
-3//! Bert is a general large language model that can be used for various language tasks:
-4//! - Compute sentence embeddings for a prompt.
-5//! - Compute similarities between a set of sentences.
-6//! - [Arxiv](https://arxiv.org/abs/1810.04805) "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding"
-7//! - Upstream [Github repo](https://github.com/google-research/bert).
-8//! - See bert in [candle-examples](https://github.com/huggingface/candle/tree/main/candle-examples/) for runnable code
-9//!
-10use super::with_tracing::{layer_norm, linear, LayerNorm, Linear};
-11use candle::{DType, Device, Result, Tensor};
-12use candle_nn::{embedding, Embedding, Module, VarBuilder};
-13use serde::Deserialize;
-14
-15pub const DTYPE: DType = DType::F32;
-16
-17#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)]
-18#[serde(rename_all = "lowercase")]
-19pub enum HiddenAct {
-20    Gelu,
-21    GeluApproximate,
-22    Relu,
-23}
-24
-25#[derive(Clone)]
-26struct HiddenActLayer {
-27    act: HiddenAct,
-28    span: tracing::Span,
-29}
-30
-31impl HiddenActLayer {
-32    fn new(act: HiddenAct) -> Self {
-33        let span = tracing::span!(tracing::Level::TRACE, "hidden-act");
-34        Self { act, span }
-35    }
-36
-37    fn forward(&self, xs: &Tensor) -> candle::Result<Tensor> {
-38        let _enter = self.span.enter();
-39        match self.act {
-40            // https://github.com/huggingface/transformers/blob/cd4584e3c809bb9e1392ccd3fe38b40daba5519a/src/transformers/activations.py#L213
-41            HiddenAct::Gelu => xs.gelu_erf(),
-42            HiddenAct::GeluApproximate => xs.gelu(),
-43            HiddenAct::Relu => xs.relu(),
-44        }
-45    }
-46}
-47
-48#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Default)]
-49#[serde(rename_all = "lowercase")]
-50pub enum PositionEmbeddingType {
-51    #[default]
-52    Absolute,
-53}
-54
-55// https://github.com/huggingface/transformers/blob/6eedfa6dd15dc1e22a55ae036f681914e5a0d9a1/src/transformers/models/bert/configuration_bert.py#L1
-56#[derive(Debug, Clone, PartialEq, Deserialize)]
-57pub struct Config {
-58    pub vocab_size: usize,
-59    pub hidden_size: usize,
-60    pub num_hidden_layers: usize,
-61    pub num_attention_heads: usize,
-62    pub intermediate_size: usize,
-63    pub hidden_act: HiddenAct,
-64    pub hidden_dropout_prob: f64,
-65    pub max_position_embeddings: usize,
-66    pub type_vocab_size: usize,
-67    pub initializer_range: f64,
-68    pub layer_norm_eps: f64,
-69    pub pad_token_id: usize,
-70    #[serde(default)]
-71    pub position_embedding_type: PositionEmbeddingType,
-72    #[serde(default)]
-73    pub use_cache: bool,
-74    pub classifier_dropout: Option<f64>,
-75    pub model_type: Option<String>,
-76}
-77
-78impl Default for Config {
-79    fn default() -> Self {
-80        Self {
-81            vocab_size: 30522,
-82            hidden_size: 768,
-83            num_hidden_layers: 12,
-84            num_attention_heads: 12,
-85            intermediate_size: 3072,
-86            hidden_act: HiddenAct::Gelu,
-87            hidden_dropout_prob: 0.1,
-88            max_position_embeddings: 512,
-89            type_vocab_size: 2,
-90            initializer_range: 0.02,
-91            layer_norm_eps: 1e-12,
-92            pad_token_id: 0,
-93            position_embedding_type: PositionEmbeddingType::Absolute,
-94            use_cache: true,
-95            classifier_dropout: None,
-96            model_type: Some("bert".to_string()),
-97        }
-98    }
-99}
-100
-101impl Config {
-102    fn _all_mini_lm_l6_v2() -> Self {
-103        // https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/blob/main/config.json
-104        Self {
-105            vocab_size: 30522,
-106            hidden_size: 384,
-107            num_hidden_layers: 6,
-108            num_attention_heads: 12,
-109            intermediate_size: 1536,
-110            hidden_act: HiddenAct::Gelu,
-111            hidden_dropout_prob: 0.1,
-112            max_position_embeddings: 512,
-113            type_vocab_size: 2,
-114            initializer_range: 0.02,
-115            layer_norm_eps: 1e-12,
-116            pad_token_id: 0,
-117            position_embedding_type: PositionEmbeddingType::Absolute,
-118            use_cache: true,
-119            classifier_dropout: None,
-120            model_type: Some("bert".to_string()),
-121        }
-122    }
-123}
-124
-125#[derive(Clone)]
-126struct Dropout {
-127    #[allow(dead_code)]
-128    pr: f64,
-129}
-130
-131impl Dropout {
-132    fn new(pr: f64) -> Self {
-133        Self { pr }
-134    }
-135}
-136
-137impl Module for Dropout {
-138    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-139        // TODO
-140        Ok(x.clone())
-141    }
-142}
-143
-144// https://github.com/huggingface/transformers/blob/6eedfa6dd15dc1e22a55ae036f681914e5a0d9a1/src/transformers/models/bert/modeling_bert.py#L180
-145struct BertEmbeddings {
-146    word_embeddings: Embedding,
-147    position_embeddings: Option<Embedding>,
-148    token_type_embeddings: Embedding,
-149    layer_norm: LayerNorm,
-150    dropout: Dropout,
-151    span: tracing::Span,
-152}
-153
-154impl BertEmbeddings {
-155    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-156        let word_embeddings = embedding(
-157            config.vocab_size,
-158            config.hidden_size,
-159            vb.pp("word_embeddings"),
-160        )?;
-161        let position_embeddings = embedding(
-162            config.max_position_embeddings,
-163            config.hidden_size,
-164            vb.pp("position_embeddings"),
-165        )?;
-166        let token_type_embeddings = embedding(
-167            config.type_vocab_size,
-168            config.hidden_size,
-169            vb.pp("token_type_embeddings"),
-170        )?;
-171        let layer_norm = layer_norm(
-172            config.hidden_size,
-173            config.layer_norm_eps,
-174            vb.pp("LayerNorm"),
-175        )?;
-176        Ok(Self {
-177            word_embeddings,
-178            position_embeddings: Some(position_embeddings),
-179            token_type_embeddings,
-180            layer_norm,
-181            dropout: Dropout::new(config.hidden_dropout_prob),
-182            span: tracing::span!(tracing::Level::TRACE, "embeddings"),
-183        })
-184    }
-185
-186    fn forward(&self, input_ids: &Tensor, token_type_ids: &Tensor) -> Result<Tensor> {
-187        let _enter = self.span.enter();
-188        let (_bsize, seq_len) = input_ids.dims2()?;
-189        let input_embeddings = self.word_embeddings.forward(input_ids)?;
-190        let token_type_embeddings = self.token_type_embeddings.forward(token_type_ids)?;
-191        let mut embeddings = (&input_embeddings + token_type_embeddings)?;
-192        if let Some(position_embeddings) = &self.position_embeddings {
-193            // TODO: Proper absolute positions?
-194            let position_ids = (0..seq_len as u32).collect::<Vec<_>>();
-195            let position_ids = Tensor::new(&position_ids[..], input_ids.device())?;
-196            embeddings = embeddings.broadcast_add(&position_embeddings.forward(&position_ids)?)?
-197        }
-198        let embeddings = self.layer_norm.forward(&embeddings)?;
-199        let embeddings = self.dropout.forward(&embeddings)?;
-200        Ok(embeddings)
-201    }
-202}
-203
-204#[derive(Clone)]
-205struct BertSelfAttention {
-206    query: Linear,
-207    key: Linear,
-208    value: Linear,
-209    dropout: Dropout,
-210    num_attention_heads: usize,
-211    attention_head_size: usize,
-212    span: tracing::Span,
-213    span_softmax: tracing::Span,
-214}
-215
-216impl BertSelfAttention {
-217    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-218        let attention_head_size = config.hidden_size / config.num_attention_heads;
-219        let all_head_size = config.num_attention_heads * attention_head_size;
-220        let dropout = Dropout::new(config.hidden_dropout_prob);
-221        let hidden_size = config.hidden_size;
-222        let query = linear(hidden_size, all_head_size, vb.pp("query"))?;
-223        let value = linear(hidden_size, all_head_size, vb.pp("value"))?;
-224        let key = linear(hidden_size, all_head_size, vb.pp("key"))?;
-225        Ok(Self {
-226            query,
-227            key,
-228            value,
-229            dropout,
-230            num_attention_heads: config.num_attention_heads,
-231            attention_head_size,
-232            span: tracing::span!(tracing::Level::TRACE, "self-attn"),
-233            span_softmax: tracing::span!(tracing::Level::TRACE, "softmax"),
-234        })
-235    }
-236
-237    fn transpose_for_scores(&self, xs: &Tensor) -> Result<Tensor> {
-238        let mut new_x_shape = xs.dims().to_vec();
-239        new_x_shape.pop();
-240        new_x_shape.push(self.num_attention_heads);
-241        new_x_shape.push(self.attention_head_size);
-242        let xs = xs.reshape(new_x_shape.as_slice())?.transpose(1, 2)?;
-243        xs.contiguous()
-244    }
-245
-246    fn forward(&self, hidden_states: &Tensor, attention_mask: &Tensor) -> Result<Tensor> {
-247        let _enter = self.span.enter();
-248        let query_layer = self.query.forward(hidden_states)?;
-249        let key_layer = self.key.forward(hidden_states)?;
-250        let value_layer = self.value.forward(hidden_states)?;
-251
-252        let query_layer = self.transpose_for_scores(&query_layer)?;
-253        let key_layer = self.transpose_for_scores(&key_layer)?;
-254        let value_layer = self.transpose_for_scores(&value_layer)?;
-255
-256        let attention_scores = query_layer.matmul(&key_layer.t()?)?;
-257        let attention_scores = (attention_scores / (self.attention_head_size as f64).sqrt())?;
-258        let attention_scores = attention_scores.broadcast_add(attention_mask)?;
-259        let attention_probs = {
-260            let _enter_sm = self.span_softmax.enter();
-261            candle_nn::ops::softmax(&attention_scores, candle::D::Minus1)?
-262        };
-263        let attention_probs = self.dropout.forward(&attention_probs)?;
-264
-265        let context_layer = attention_probs.matmul(&value_layer)?;
-266        let context_layer = context_layer.transpose(1, 2)?.contiguous()?;
-267        let context_layer = context_layer.flatten_from(candle::D::Minus2)?;
-268        Ok(context_layer)
-269    }
-270}
-271
-272#[derive(Clone)]
-273struct BertSelfOutput {
-274    dense: Linear,
-275    layer_norm: LayerNorm,
-276    dropout: Dropout,
-277    span: tracing::Span,
-278}
-279
-280impl BertSelfOutput {
-281    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-282        let dense = linear(config.hidden_size, config.hidden_size, vb.pp("dense"))?;
-283        let layer_norm = layer_norm(
-284            config.hidden_size,
-285            config.layer_norm_eps,
-286            vb.pp("LayerNorm"),
-287        )?;
-288        let dropout = Dropout::new(config.hidden_dropout_prob);
-289        Ok(Self {
-290            dense,
-291            layer_norm,
-292            dropout,
-293            span: tracing::span!(tracing::Level::TRACE, "self-out"),
-294        })
-295    }
-296
-297    fn forward(&self, hidden_states: &Tensor, input_tensor: &Tensor) -> Result<Tensor> {
-298        let _enter = self.span.enter();
-299        let hidden_states = self.dense.forward(hidden_states)?;
-300        let hidden_states = self.dropout.forward(&hidden_states)?;
-301        self.layer_norm.forward(&(hidden_states + input_tensor)?)
-302    }
-303}
-304
-305// https://github.com/huggingface/transformers/blob/6eedfa6dd15dc1e22a55ae036f681914e5a0d9a1/src/transformers/models/bert/modeling_bert.py#L392
-306#[derive(Clone)]
-307struct BertAttention {
-308    self_attention: BertSelfAttention,
-309    self_output: BertSelfOutput,
-310    span: tracing::Span,
-311}
-312
-313impl BertAttention {
-314    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-315        let self_attention = BertSelfAttention::load(vb.pp("self"), config)?;
-316        let self_output = BertSelfOutput::load(vb.pp("output"), config)?;
-317        Ok(Self {
-318            self_attention,
-319            self_output,
-320            span: tracing::span!(tracing::Level::TRACE, "attn"),
-321        })
-322    }
-323
-324    fn forward(&self, hidden_states: &Tensor, attention_mask: &Tensor) -> Result<Tensor> {
-325        let _enter = self.span.enter();
-326        let self_outputs = self.self_attention.forward(hidden_states, attention_mask)?;
-327        let attention_output = self.self_output.forward(&self_outputs, hidden_states)?;
-328        Ok(attention_output)
-329    }
-330}
-331
-332// https://github.com/huggingface/transformers/blob/6eedfa6dd15dc1e22a55ae036f681914e5a0d9a1/src/transformers/models/bert/modeling_bert.py#L441
-333#[derive(Clone)]
-334struct BertIntermediate {
-335    dense: Linear,
-336    intermediate_act: HiddenActLayer,
-337    span: tracing::Span,
-338}
-339
-340impl BertIntermediate {
-341    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-342        let dense = linear(config.hidden_size, config.intermediate_size, vb.pp("dense"))?;
-343        Ok(Self {
-344            dense,
-345            intermediate_act: HiddenActLayer::new(config.hidden_act),
-346            span: tracing::span!(tracing::Level::TRACE, "inter"),
-347        })
-348    }
-349}
-350
-351impl Module for BertIntermediate {
-352    fn forward(&self, hidden_states: &Tensor) -> Result<Tensor> {
-353        let _enter = self.span.enter();
-354        let hidden_states = self.dense.forward(hidden_states)?;
-355        let ys = self.intermediate_act.forward(&hidden_states)?;
-356        Ok(ys)
-357    }
-358}
-359
-360// https://github.com/huggingface/transformers/blob/6eedfa6dd15dc1e22a55ae036f681914e5a0d9a1/src/transformers/models/bert/modeling_bert.py#L456
-361#[derive(Clone)]
-362struct BertOutput {
-363    dense: Linear,
-364    layer_norm: LayerNorm,
-365    dropout: Dropout,
-366    span: tracing::Span,
-367}
-368
-369impl BertOutput {
-370    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-371        let dense = linear(config.intermediate_size, config.hidden_size, vb.pp("dense"))?;
-372        let layer_norm = layer_norm(
-373            config.hidden_size,
-374            config.layer_norm_eps,
-375            vb.pp("LayerNorm"),
-376        )?;
-377        let dropout = Dropout::new(config.hidden_dropout_prob);
-378        Ok(Self {
-379            dense,
-380            layer_norm,
-381            dropout,
-382            span: tracing::span!(tracing::Level::TRACE, "out"),
-383        })
-384    }
-385
-386    fn forward(&self, hidden_states: &Tensor, input_tensor: &Tensor) -> Result<Tensor> {
-387        let _enter = self.span.enter();
-388        let hidden_states = self.dense.forward(hidden_states)?;
-389        let hidden_states = self.dropout.forward(&hidden_states)?;
-390        self.layer_norm.forward(&(hidden_states + input_tensor)?)
-391    }
-392}
-393
-394// https://github.com/huggingface/transformers/blob/6eedfa6dd15dc1e22a55ae036f681914e5a0d9a1/src/transformers/models/bert/modeling_bert.py#L470
-395#[derive(Clone)]
-396pub struct BertLayer {
-397    attention: BertAttention,
-398    intermediate: BertIntermediate,
-399    output: BertOutput,
-400    span: tracing::Span,
-401}
-402
-403impl BertLayer {
-404    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-405        let attention = BertAttention::load(vb.pp("attention"), config)?;
-406        let intermediate = BertIntermediate::load(vb.pp("intermediate"), config)?;
-407        let output = BertOutput::load(vb.pp("output"), config)?;
-408        Ok(Self {
-409            attention,
-410            intermediate,
-411            output,
-412            span: tracing::span!(tracing::Level::TRACE, "layer"),
-413        })
-414    }
-415
-416    fn forward(&self, hidden_states: &Tensor, attention_mask: &Tensor) -> Result<Tensor> {
-417        let _enter = self.span.enter();
-418        let attention_output = self.attention.forward(hidden_states, attention_mask)?;
-419        // TODO: Support cross-attention?
-420        // https://github.com/huggingface/transformers/blob/6eedfa6dd15dc1e22a55ae036f681914e5a0d9a1/src/transformers/models/bert/modeling_bert.py#L523
-421        // TODO: Support something similar to `apply_chunking_to_forward`?
-422        let intermediate_output = self.intermediate.forward(&attention_output)?;
-423        let layer_output = self
-424            .output
-425            .forward(&intermediate_output, &attention_output)?;
-426        Ok(layer_output)
-427    }
-428}
-429
-430// https://github.com/huggingface/transformers/blob/6eedfa6dd15dc1e22a55ae036f681914e5a0d9a1/src/transformers/models/bert/modeling_bert.py#L556
-431#[derive(Clone)]
-432pub struct BertEncoder {
-433    pub layers: Vec<BertLayer>,
-434    span: tracing::Span,
-435}
-436
-437impl BertEncoder {
-438    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-439        let layers = (0..config.num_hidden_layers)
-440            .map(|index| BertLayer::load(vb.pp(format!("layer.{index}")), config))
-441            .collect::<Result<Vec<_>>>()?;
-442        let span = tracing::span!(tracing::Level::TRACE, "encoder");
-443        Ok(BertEncoder { layers, span })
-444    }
-445
-446    pub fn forward(&self, hidden_states: &Tensor, attention_mask: &Tensor) -> Result<Tensor> {
-447        let _enter = self.span.enter();
-448        let mut hidden_states = hidden_states.clone();
-449        // Use a loop rather than a fold as it's easier to modify when adding debug/...
-450        for layer in self.layers.iter() {
-451            hidden_states = layer.forward(&hidden_states, attention_mask)?
-452        }
-453        Ok(hidden_states)
-454    }
-455}
-456
-457// https://github.com/huggingface/transformers/blob/6eedfa6dd15dc1e22a55ae036f681914e5a0d9a1/src/transformers/models/bert/modeling_bert.py#L874
-458pub struct BertModel {
-459    embeddings: BertEmbeddings,
-460    encoder: BertEncoder,
-461    pub device: Device,
-462    span: tracing::Span,
-463}
-464
-465impl BertModel {
-466    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-467        let (embeddings, encoder) = match (
-468            BertEmbeddings::load(vb.pp("embeddings"), config),
-469            BertEncoder::load(vb.pp("encoder"), config),
-470        ) {
-471            (Ok(embeddings), Ok(encoder)) => (embeddings, encoder),
-472            (Err(err), _) | (_, Err(err)) => {
-473                if let Some(model_type) = &config.model_type {
-474                    if let (Ok(embeddings), Ok(encoder)) = (
-475                        BertEmbeddings::load(vb.pp(format!("{model_type}.embeddings")), config),
-476                        BertEncoder::load(vb.pp(format!("{model_type}.encoder")), config),
-477                    ) {
-478                        (embeddings, encoder)
-479                    } else {
-480                        return Err(err);
-481                    }
-482                } else {
-483                    return Err(err);
-484                }
-485            }
-486        };
-487        Ok(Self {
-488            embeddings,
-489            encoder,
-490            device: vb.device().clone(),
-491            span: tracing::span!(tracing::Level::TRACE, "model"),
-492        })
-493    }
-494
-495    pub fn forward(
-496        &self,
-497        input_ids: &Tensor,
-498        token_type_ids: &Tensor,
-499        attention_mask: Option<&Tensor>,
-500    ) -> Result<Tensor> {
-501        let _enter = self.span.enter();
-502        let embedding_output = self.embeddings.forward(input_ids, token_type_ids)?;
-503        let attention_mask = match attention_mask {
-504            Some(attention_mask) => attention_mask.clone(),
-505            None => input_ids.ones_like()?,
-506        };
-507        // https://github.com/huggingface/transformers/blob/6eedfa6dd15dc1e22a55ae036f681914e5a0d9a1/src/transformers/models/bert/modeling_bert.py#L995
-508        let attention_mask = get_extended_attention_mask(&attention_mask, DType::F32)?;
-509        let sequence_output = self.encoder.forward(&embedding_output, &attention_mask)?;
-510        Ok(sequence_output)
-511    }
-512}
-513
-514fn get_extended_attention_mask(attention_mask: &Tensor, dtype: DType) -> Result<Tensor> {
-515    let attention_mask = match attention_mask.rank() {
-516        3 => attention_mask.unsqueeze(1)?,
-517        2 => attention_mask.unsqueeze(1)?.unsqueeze(1)?,
-518        _ => candle::bail!("Wrong shape for input_ids or attention_mask"),
-519    };
-520    let attention_mask = attention_mask.to_dtype(dtype)?;
-521    // torch.finfo(dtype).min
-522    (attention_mask.ones_like()? - &attention_mask)?
-523        .broadcast_mul(&Tensor::try_from(f32::MIN)?.to_device(attention_mask.device())?)
-524}
-525
-526//https://github.com/huggingface/transformers/blob/1bd604d11c405dfb8b78bda4062d88fc75c17de0/src/transformers/models/bert/modeling_bert.py#L752-L766
-527struct BertPredictionHeadTransform {
-528    dense: Linear,
-529    activation: HiddenActLayer,
-530    layer_norm: LayerNorm,
-531}
-532
-533impl BertPredictionHeadTransform {
-534    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-535        let dense = linear(config.hidden_size, config.hidden_size, vb.pp("dense"))?;
-536        let activation = HiddenActLayer::new(config.hidden_act);
-537        let layer_norm = layer_norm(
-538            config.hidden_size,
-539            config.layer_norm_eps,
-540            vb.pp("LayerNorm"),
-541        )?;
-542        Ok(Self {
-543            dense,
-544            activation,
-545            layer_norm,
-546        })
-547    }
-548}
-549
-550impl Module for BertPredictionHeadTransform {
-551    fn forward(&self, hidden_states: &Tensor) -> Result<Tensor> {
-552        let hidden_states = self
-553            .activation
-554            .forward(&self.dense.forward(hidden_states)?)?;
-555        self.layer_norm.forward(&hidden_states)
-556    }
-557}
-558
-559// https://github.com/huggingface/transformers/blob/1bd604d11c405dfb8b78bda4062d88fc75c17de0/src/transformers/models/bert/modeling_bert.py#L769C1-L790C1
-560pub struct BertLMPredictionHead {
-561    transform: BertPredictionHeadTransform,
-562    decoder: Linear,
-563}
-564
-565impl BertLMPredictionHead {
-566    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-567        let transform = BertPredictionHeadTransform::load(vb.pp("transform"), config)?;
-568        let decoder = linear(config.hidden_size, config.vocab_size, vb.pp("decoder"))?;
-569        Ok(Self { transform, decoder })
-570    }
-571}
-572
-573impl Module for BertLMPredictionHead {
-574    fn forward(&self, hidden_states: &Tensor) -> Result<Tensor> {
-575        self.decoder
-576            .forward(&self.transform.forward(hidden_states)?)
-577    }
-578}
-579
-580// https://github.com/huggingface/transformers/blob/1bd604d11c405dfb8b78bda4062d88fc75c17de0/src/transformers/models/bert/modeling_bert.py#L792
-581pub struct BertOnlyMLMHead {
-582    predictions: BertLMPredictionHead,
-583}
-584
-585impl BertOnlyMLMHead {
-586    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-587        let predictions = BertLMPredictionHead::load(vb.pp("predictions"), config)?;
-588        Ok(Self { predictions })
-589    }
-590}
-591
-592impl Module for BertOnlyMLMHead {
-593    fn forward(&self, sequence_output: &Tensor) -> Result<Tensor> {
-594        self.predictions.forward(sequence_output)
-595    }
-596}
-597
-598pub struct BertForMaskedLM {
-599    bert: BertModel,
-600    cls: BertOnlyMLMHead,
-601}
-602
-603impl BertForMaskedLM {
-604    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-605        let bert = BertModel::load(vb.pp("bert"), config)?;
-606        let cls = BertOnlyMLMHead::load(vb.pp("cls"), config)?;
-607        Ok(Self { bert, cls })
-608    }
-609
-610    pub fn forward(
-611        &self,
-612        input_ids: &Tensor,
-613        token_type_ids: &Tensor,
-614        attention_mask: Option<&Tensor>,
-615    ) -> Result<Tensor> {
-616        let sequence_output = self
-617            .bert
-618            .forward(input_ids, token_type_ids, attention_mask)?;
-619        self.cls.forward(&sequence_output)
-620    }
-621}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/bigcode.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/bigcode.rs.html deleted file mode 100644 index f80de00..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/bigcode.rs.html +++ /dev/null @@ -1,368 +0,0 @@ -bigcode.rs - source

candle_transformers/models/
bigcode.rs

1//! BigCode implementation in Rust based on the GPT-BigCode model.
-2//!
-3//! [StarCoder/BigCode](https://huggingface.co/bigcode/starcoderbase-1b) is a LLM
-4//! model specialized to code generation. The initial model was trained on 80
-5//! programming languages. See "StarCoder: A State-of-the-Art LLM for Code", Mukherjee et al. 2023
-6//! - [Arxiv](https://arxiv.org/abs/2305.06161)
-7//! - [Github](https://github.com/bigcode-project/starcoder)
-8//!
-9//! ## Running some example
-10//!
-11//! ```bash
-12//! cargo run --example bigcode --release -- --prompt "fn fact(n: u64) -> u64"
-13//!
-14//! > fn fact(n: u64) -> u64  {
-15//! >     if n == 0 {
-16//! >         1
-17//! >     } else {
-18//! >         n * fact(n - 1)
-19//! >     }
-20//! > }
-21//! ```
-22//!
-23
-24use candle::{DType, Device, IndexOp, Result, Tensor, D};
-25use candle_nn::{embedding, linear_b as linear, Embedding, LayerNorm, Linear, Module, VarBuilder};
-26
-27fn layer_norm(size: usize, eps: f64, vb: VarBuilder) -> Result<LayerNorm> {
-28    let weight = vb.get(size, "weight")?;
-29    let bias = vb.get(size, "bias")?;
-30    Ok(LayerNorm::new(weight, bias, eps))
-31}
-32
-33fn make_causal_mask(t: usize, device: &Device) -> Result<Tensor> {
-34    let mask: Vec<_> = (0..t)
-35        .flat_map(|i| (0..t).map(move |j| u8::from(j <= i)))
-36        .collect();
-37    let mask = Tensor::from_slice(&mask, (t, t), device)?;
-38    Ok(mask)
-39}
-40
-41#[derive(Debug)]
-42pub struct Config {
-43    pub vocab_size: usize,
-44    // max_position_embeddings aka n_positions
-45    pub max_position_embeddings: usize,
-46    // num_hidden_layers aka n_layer
-47    pub num_hidden_layers: usize,
-48    // hidden_size aka n_embd
-49    pub hidden_size: usize,
-50    pub layer_norm_epsilon: f64,
-51    pub n_inner: Option<usize>,
-52    // num_attention_heads aka n_head
-53    pub num_attention_heads: usize,
-54    pub multi_query: bool,
-55    pub use_cache: bool,
-56}
-57
-58impl Config {
-59    #[allow(dead_code)]
-60    pub fn starcoder_1b() -> Self {
-61        Self {
-62            vocab_size: 49152,
-63            max_position_embeddings: 8192,
-64            num_hidden_layers: 24,
-65            hidden_size: 2048,
-66            layer_norm_epsilon: 1e-5,
-67            n_inner: Some(8192),
-68            num_attention_heads: 16,
-69            multi_query: true,
-70            use_cache: true,
-71        }
-72    }
-73
-74    #[allow(dead_code)]
-75    pub fn starcoder_3b() -> Self {
-76        Self {
-77            vocab_size: 49152,
-78            max_position_embeddings: 8192,
-79            num_hidden_layers: 36,
-80            hidden_size: 2816,
-81            layer_norm_epsilon: 1e-5,
-82            n_inner: Some(11264),
-83            num_attention_heads: 22,
-84            multi_query: true,
-85            use_cache: true,
-86        }
-87    }
-88
-89    #[allow(dead_code)]
-90    pub fn starcoder_7b() -> Self {
-91        Self {
-92            vocab_size: 49152,
-93            max_position_embeddings: 8192,
-94            num_hidden_layers: 42,
-95            hidden_size: 4096,
-96            layer_norm_epsilon: 1e-5,
-97            n_inner: Some(16384),
-98            num_attention_heads: 32,
-99            multi_query: true,
-100            use_cache: true,
-101        }
-102    }
-103
-104    #[allow(dead_code)]
-105    pub fn starcoder() -> Self {
-106        Self {
-107            vocab_size: 49152,
-108            max_position_embeddings: 8192,
-109            num_hidden_layers: 40,
-110            hidden_size: 6144,
-111            layer_norm_epsilon: 1e-5,
-112            n_inner: Some(24576),
-113            num_attention_heads: 48,
-114            multi_query: true,
-115            use_cache: true,
-116        }
-117    }
-118}
-119
-120struct Attention {
-121    c_attn: Linear,
-122    c_proj: Linear,
-123    kv_cache: Option<Tensor>,
-124    use_cache: bool,
-125    embed_dim: usize,
-126    kv_dim: usize,
-127    num_heads: usize,
-128    head_dim: usize,
-129    multi_query: bool,
-130}
-131
-132impl Attention {
-133    pub fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-134        let hidden_size = cfg.hidden_size;
-135        let head_dim = hidden_size / cfg.num_attention_heads;
-136        let kv_heads = if cfg.multi_query {
-137            1
-138        } else {
-139            cfg.num_attention_heads
-140        };
-141        let kv_dim = kv_heads * head_dim;
-142        let c_attn = linear(hidden_size, hidden_size + 2 * kv_dim, true, vb.pp("c_attn"))?;
-143        let c_proj = linear(hidden_size, hidden_size, true, vb.pp("c_proj"))?;
-144        Ok(Self {
-145            c_proj,
-146            c_attn,
-147            embed_dim: hidden_size,
-148            kv_cache: None,
-149            use_cache: cfg.use_cache,
-150            kv_dim,
-151            head_dim,
-152            num_heads: cfg.num_attention_heads,
-153            multi_query: cfg.multi_query,
-154        })
-155    }
-156
-157    fn attn(
-158        &self,
-159        query: &Tensor,
-160        key: &Tensor,
-161        value: &Tensor,
-162        attention_mask: &Tensor,
-163    ) -> Result<Tensor> {
-164        if query.dtype() != DType::F32 {
-165            // If we start supporting f16 models, we may need the upcasting scaling bits.
-166            // https://github.com/huggingface/transformers/blob/a0042379269bea9182c1f87e6b2eee4ba4c8cce8/src/transformers/models/gpt_bigcode/modeling_gpt_bigcode.py#L133
-167            candle::bail!("upcasting is not supported {:?}", query.dtype())
-168        }
-169        let scale_factor = 1f64 / (self.head_dim as f64).sqrt();
-170        let initial_query_shape = query.shape();
-171        let key_len = key.dim(D::Minus1)?;
-172        let (query, key, attn_shape, attn_view) = if self.multi_query {
-173            let (b_sz, query_len, _) = query.dims3()?;
-174            let query = query.reshape((b_sz, query_len * self.num_heads, self.head_dim))?;
-175            let attn_shape = (b_sz, query_len, self.num_heads, key_len);
-176            let attn_view = (b_sz, query_len * self.num_heads, key_len);
-177            (query, key.clone(), attn_shape, attn_view)
-178        } else {
-179            let (b_sz, _num_heads, query_len, _head_dim) = query.dims4()?;
-180            let query = query.reshape((b_sz, query_len * self.num_heads, self.head_dim))?;
-181            let key = key.reshape((b_sz * self.num_heads, self.head_dim, key_len))?;
-182            let attn_shape = (b_sz, self.num_heads, query_len, key_len);
-183            let attn_view = (b_sz * self.num_heads, query_len, key_len);
-184            (query, key, attn_shape, attn_view)
-185        };
-186
-187        let attn_weights =
-188            (query.matmul(&key.contiguous()?)? * scale_factor)?.reshape(attn_shape)?;
-189        let attention_mask = attention_mask.broadcast_as(attn_shape)?;
-190        let mask_value =
-191            Tensor::new(f32::NEG_INFINITY, query.device())?.broadcast_as(attn_shape)?;
-192        let attn_weights = attention_mask.where_cond(&attn_weights, &mask_value)?;
-193        let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-194        let value = value.contiguous()?;
-195        let attn_output = if self.multi_query {
-196            attn_weights
-197                .reshape(attn_view)?
-198                .matmul(&value)?
-199                .reshape(initial_query_shape)?
-200        } else {
-201            attn_weights.matmul(&value)?
-202        };
-203        Ok(attn_output)
-204    }
-205
-206    fn forward(&mut self, hidden_states: &Tensor, attention_mask: &Tensor) -> Result<Tensor> {
-207        let qkv = self.c_attn.forward(hidden_states)?;
-208        let (query, key_value) = if self.multi_query {
-209            let query = qkv.i((.., .., ..self.embed_dim))?;
-210            let key_value = qkv.i((.., .., self.embed_dim..self.embed_dim + 2 * self.kv_dim))?;
-211            (query, key_value)
-212        } else {
-213            let mut dims = qkv.dims().to_vec();
-214            dims.pop();
-215            dims.push(self.embed_dim);
-216            dims.push(self.head_dim * 3);
-217            let qkv = qkv.reshape(dims)?.transpose(1, 2)?;
-218            let query = qkv.i((.., .., .., ..self.head_dim))?;
-219            let key_value = qkv.i((.., .., .., self.head_dim..3 * self.head_dim))?;
-220            (query, key_value)
-221        };
-222        let mut key_value = key_value;
-223        if self.use_cache {
-224            if let Some(kv_cache) = &self.kv_cache {
-225                // TODO: we could trim the tensors to MAX_SEQ_LEN so that this would work for
-226                // arbitrarily large sizes.
-227                key_value = Tensor::cat(&[kv_cache, &key_value], D::Minus2)?.contiguous()?;
-228            }
-229            self.kv_cache = Some(key_value.clone())
-230        }
-231
-232        let key = key_value.narrow(D::Minus1, 0, self.head_dim)?;
-233        let value = key_value.narrow(D::Minus1, self.head_dim, self.head_dim)?;
-234        let attn_output = self.attn(&query, &key.t()?, &value, attention_mask)?;
-235        let attn_output = if self.multi_query {
-236            attn_output
-237        } else {
-238            attn_output
-239                .transpose(1, 2)?
-240                .reshape(hidden_states.shape())?
-241        };
-242        let attn_output = self.c_proj.forward(&attn_output)?;
-243        Ok(attn_output)
-244    }
-245}
-246
-247struct Mlp {
-248    c_fc: Linear,
-249    c_proj: Linear,
-250}
-251
-252impl Mlp {
-253    fn load(inner_dim: usize, vb: VarBuilder, cfg: &Config) -> Result<Self> {
-254        let c_fc = linear(cfg.hidden_size, inner_dim, true, vb.pp("c_fc"))?;
-255        let c_proj = linear(inner_dim, cfg.hidden_size, true, vb.pp("c_proj"))?;
-256        Ok(Self { c_fc, c_proj })
-257    }
-258
-259    fn forward(&mut self, hidden_states: &Tensor) -> Result<Tensor> {
-260        let hidden_states = self.c_fc.forward(hidden_states)?.gelu()?;
-261        let hidden_states = self.c_proj.forward(&hidden_states)?;
-262        Ok(hidden_states)
-263    }
-264}
-265
-266// TODO: Add cross-attention?
-267struct Block {
-268    ln_1: LayerNorm,
-269    attn: Attention,
-270    ln_2: LayerNorm,
-271    mlp: Mlp,
-272}
-273
-274impl Block {
-275    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-276        let hidden_size = cfg.hidden_size;
-277        let inner_dim = cfg.n_inner.unwrap_or(4 * hidden_size);
-278        let ln_1 = layer_norm(hidden_size, cfg.layer_norm_epsilon, vb.pp("ln_1"))?;
-279        let attn = Attention::load(vb.pp("attn"), cfg)?;
-280        let ln_2 = layer_norm(hidden_size, cfg.layer_norm_epsilon, vb.pp("ln_2"))?;
-281        let mlp = Mlp::load(inner_dim, vb.pp("mlp"), cfg)?;
-282        Ok(Self {
-283            ln_1,
-284            attn,
-285            ln_2,
-286            mlp,
-287        })
-288    }
-289
-290    fn forward(&mut self, hidden_states: &Tensor, attention_mask: &Tensor) -> Result<Tensor> {
-291        let residual = hidden_states;
-292        let hidden_states = self.ln_1.forward(hidden_states)?;
-293        let attn_outputs = self.attn.forward(&hidden_states, attention_mask)?;
-294        let hidden_states = (&attn_outputs + residual)?;
-295        let residual = &hidden_states;
-296        let hidden_states = self.ln_2.forward(&hidden_states)?;
-297        let hidden_states = self.mlp.forward(&hidden_states)?;
-298        let hidden_states = (&hidden_states + residual)?;
-299        Ok(hidden_states)
-300    }
-301}
-302
-303pub struct GPTBigCode {
-304    wte: Embedding,
-305    wpe: Embedding,
-306    blocks: Vec<Block>,
-307    ln_f: LayerNorm,
-308    lm_head: Linear,
-309    bias: Tensor,
-310    config: Config,
-311}
-312
-313impl GPTBigCode {
-314    pub fn config(&self) -> &Config {
-315        &self.config
-316    }
-317
-318    pub fn load(vb: VarBuilder, cfg: Config) -> Result<Self> {
-319        let hidden_size = cfg.hidden_size;
-320        let vb_t = vb.pp("transformer");
-321        let wte = embedding(cfg.vocab_size, hidden_size, vb_t.pp("wte"))?;
-322        let wpe = embedding(cfg.max_position_embeddings, hidden_size, vb_t.pp("wpe"))?;
-323        let blocks = (0..cfg.num_hidden_layers)
-324            .map(|i| Block::load(vb_t.pp(format!("h.{i}")), &cfg))
-325            .collect::<Result<Vec<_>>>()?;
-326        let ln_f = layer_norm(hidden_size, cfg.layer_norm_epsilon, vb_t.pp("ln_f"))?;
-327        let lm_head = linear(hidden_size, cfg.vocab_size, false, vb_t.pp("wte"))?;
-328        let bias = make_causal_mask(cfg.max_position_embeddings, vb.device())?;
-329        Ok(Self {
-330            wte,
-331            wpe,
-332            blocks,
-333            lm_head,
-334            ln_f,
-335            bias,
-336            config: cfg,
-337        })
-338    }
-339
-340    pub fn forward(&mut self, input_ids: &Tensor, past_len: usize) -> Result<Tensor> {
-341        let dev = input_ids.device();
-342        let (b_sz, seq_len) = input_ids.dims2()?;
-343
-344        let key_len = past_len + seq_len;
-345        let attention_mask = self.bias.i((past_len..key_len, ..key_len))?.unsqueeze(0)?;
-346        // MQA models: (batch_size, query_length, n_heads, key_length)
-347        // MHA models: (batch_size, n_heads, query_length, key_length)
-348        let seq_len_dim = if self.config.multi_query { 2 } else { 1 };
-349        let attention_mask = attention_mask.unsqueeze(seq_len_dim)?;
-350
-351        let position_ids = Tensor::arange(past_len as u32, (past_len + seq_len) as u32, dev)?;
-352        let position_ids = position_ids.unsqueeze(0)?.broadcast_as((b_sz, seq_len))?;
-353        let input_embeds = self.wte.forward(input_ids)?;
-354        let position_embeds = self.wpe.forward(&position_ids)?;
-355
-356        let mut hidden_states = (&input_embeds + &position_embeds)?;
-357        for block in self.blocks.iter_mut() {
-358            hidden_states = block.forward(&hidden_states, &attention_mask)?;
-359        }
-360        let hidden_states = self.ln_f.forward(&hidden_states)?;
-361        let hidden_states = hidden_states
-362            .reshape((b_sz, seq_len, self.config.hidden_size))?
-363            .narrow(1, seq_len - 1, 1)?;
-364        let logits = self.lm_head.forward(&hidden_states)?.squeeze(1)?;
-365        Ok(logits)
-366    }
-367}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/blip.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/blip.rs.html deleted file mode 100644 index 5e91d30..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/blip.rs.html +++ /dev/null @@ -1,318 +0,0 @@ -blip.rs - source

candle_transformers/models/
blip.rs

1//! Based on the BLIP paper from Salesforce Research.
-2//!
-3//! The blip-image-captioning model can generate captions for an input image.
-4//!
-5//! - ⚡ [Interactive Wasm Example](https://huggingface.co/spaces/radames/Candle-BLIP-Image-Captioning)
-6//! - 💻 [GH Link](https://github.com/salesforce/BLIP)
-7//! - 🤗 [HF Link](https://huggingface.co/Salesforce/blip-image-captioning-base)
-8//! - 📝 [Paper](https://arxiv.org/abs/2201.12086)
-9//!
-10
-11use super::blip_text;
-12use super::with_tracing::{conv2d, linear, Conv2d, Linear};
-13use candle::{Module, Result, Tensor, D};
-14use candle_nn::{layer_norm, Conv2dConfig, LayerNorm, VarBuilder};
-15use serde::Deserialize;
-16
-17#[derive(Debug, Clone, Deserialize)]
-18pub struct VisionConfig {
-19    pub hidden_size: usize,
-20    pub intermediate_size: usize,
-21    pub projection_dim: usize,
-22    pub num_hidden_layers: usize,
-23    pub num_attention_heads: usize,
-24    pub image_size: usize,
-25    pub patch_size: usize,
-26    pub hidden_act: candle_nn::Activation,
-27    pub layer_norm_eps: f64,
-28}
-29
-30#[derive(Debug, Clone, Deserialize)]
-31pub struct Config {
-32    pub text_config: blip_text::Config,
-33    pub vision_config: VisionConfig,
-34    pub projection_dim: usize,
-35    pub image_text_hidden_size: usize,
-36}
-37
-38impl Config {
-39    pub fn image_captioning_large() -> Self {
-40        let text_config = blip_text::Config {
-41            vocab_size: 30524,
-42            hidden_size: 768,
-43            encoder_hidden_size: 1024,
-44            intermediate_size: 3072,
-45            projection_dim: 768,
-46            num_hidden_layers: 12,
-47            num_attention_heads: 12,
-48            max_position_embeddings: 512,
-49            hidden_act: candle_nn::Activation::Gelu,
-50            layer_norm_eps: 1e-12,
-51            is_decoder: true,
-52        };
-53        let vision_config = VisionConfig {
-54            hidden_size: 1024,
-55            intermediate_size: 4096,
-56            projection_dim: 512,
-57            num_hidden_layers: 24,
-58            num_attention_heads: 16,
-59            image_size: 384,
-60            patch_size: 16,
-61            hidden_act: candle_nn::Activation::Gelu,
-62            layer_norm_eps: 1e-5,
-63        };
-64        Self {
-65            text_config,
-66            vision_config,
-67            projection_dim: 512,
-68            image_text_hidden_size: 256,
-69        }
-70    }
-71}
-72
-73#[derive(Debug, Clone)]
-74struct VisionEmbeddings {
-75    class_embedding: Tensor,
-76    patch_embedding: Conv2d,
-77    position_embedding: Tensor,
-78}
-79
-80impl VisionEmbeddings {
-81    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-82        let class_embedding = vb.get((1, 1, cfg.hidden_size), "class_embedding")?;
-83        let conv_cfg = Conv2dConfig {
-84            stride: cfg.patch_size,
-85            ..Default::default()
-86        };
-87        let patch_embedding = conv2d(
-88            3,
-89            cfg.hidden_size,
-90            cfg.patch_size,
-91            conv_cfg,
-92            vb.pp("patch_embedding"),
-93        )?;
-94        let num_patches1 = cfg.image_size / cfg.patch_size;
-95        let num_patches = num_patches1 * num_patches1;
-96        let num_positions = num_patches + 1;
-97        let position_embedding =
-98            vb.get((1, num_positions, cfg.hidden_size), "position_embedding")?;
-99        Ok(Self {
-100            class_embedding,
-101            patch_embedding,
-102            position_embedding,
-103        })
-104    }
-105}
-106
-107impl Module for VisionEmbeddings {
-108    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-109        let target_dtype = xs.dtype();
-110        let b_size = xs.dim(0)?;
-111        let patch_embeds = xs.apply(&self.patch_embedding)?.flatten_from(2)?.t()?;
-112        let d = self.class_embedding.dim(D::Minus1)?;
-113        let class_embeds = self
-114            .class_embedding
-115            .broadcast_as((b_size, 1, d))?
-116            .to_dtype(target_dtype)?;
-117        let embeddings = Tensor::cat(&[&class_embeds, &patch_embeds], 1)?;
-118        let position_embedding = self.position_embedding.narrow(1, 0, embeddings.dim(1)?)?;
-119        embeddings.broadcast_add(&position_embedding)
-120    }
-121}
-122
-123#[derive(Debug, Clone)]
-124struct Attention {
-125    qkv: Linear,
-126    projection: Linear,
-127    scale: f64,
-128    num_heads: usize,
-129}
-130
-131impl Attention {
-132    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-133        let embed_dim = cfg.hidden_size;
-134        let num_heads = cfg.num_attention_heads;
-135        let head_dim = embed_dim / num_heads;
-136        let scale = 1f64 / (head_dim as f64).sqrt();
-137        let qkv = linear(embed_dim, 3 * embed_dim, vb.pp("qkv"))?;
-138        let projection = linear(embed_dim, embed_dim, vb.pp("projection"))?;
-139        Ok(Self {
-140            qkv,
-141            projection,
-142            scale,
-143            num_heads,
-144        })
-145    }
-146
-147    fn forward(&self, xs: &Tensor, attn_mask: Option<&Tensor>) -> Result<Tensor> {
-148        let (b_sz, tgt_len, embed_dim) = xs.dims3()?;
-149        let mixed_qkv = xs
-150            .apply(&self.qkv)?
-151            .reshape((b_sz, tgt_len, 3, self.num_heads, embed_dim / self.num_heads))?
-152            .permute((2, 0, 3, 1, 4))?;
-153        let query = mixed_qkv.get(0)?;
-154        let key = mixed_qkv.get(1)?;
-155        let value = mixed_qkv.get(2)?;
-156        let attention_scores = query.matmul(&key.t()?)?;
-157        let attention_scores = (attention_scores * self.scale)?;
-158        let attention_probs = candle_nn::ops::softmax_last_dim(&attention_scores)?;
-159        let attention_probs = match attn_mask {
-160            None => attention_probs,
-161            Some(attn_mask) => (attention_probs * attn_mask)?,
-162        };
-163        attention_probs
-164            .matmul(&value)?
-165            .permute((0, 2, 1, 3))?
-166            .flatten_from(D::Minus2)?
-167            .apply(&self.projection)
-168    }
-169}
-170
-171#[derive(Debug, Clone)]
-172#[allow(clippy::upper_case_acronyms)]
-173struct MLP {
-174    activation_fn: candle_nn::Activation,
-175    fc1: Linear,
-176    fc2: Linear,
-177}
-178
-179impl MLP {
-180    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-181        let fc1 = linear(cfg.hidden_size, cfg.intermediate_size, vb.pp("fc1"))?;
-182        let fc2 = linear(cfg.intermediate_size, cfg.hidden_size, vb.pp("fc2"))?;
-183        Ok(Self {
-184            activation_fn: cfg.hidden_act,
-185            fc1,
-186            fc2,
-187        })
-188    }
-189}
-190
-191impl Module for MLP {
-192    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-193        xs.apply(&self.fc1)?
-194            .apply(&self.activation_fn)?
-195            .apply(&self.fc2)
-196    }
-197}
-198
-199#[derive(Debug, Clone)]
-200struct EncoderLayer {
-201    self_attn: Attention,
-202    layer_norm1: LayerNorm,
-203    mlp: MLP,
-204    layer_norm2: LayerNorm,
-205}
-206
-207impl EncoderLayer {
-208    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-209        let embed_dim = cfg.hidden_size;
-210        let self_attn = Attention::new(cfg, vb.pp("self_attn"))?;
-211        let layer_norm1 = layer_norm(embed_dim, cfg.layer_norm_eps, vb.pp("layer_norm1"))?;
-212        let layer_norm2 = layer_norm(embed_dim, cfg.layer_norm_eps, vb.pp("layer_norm2"))?;
-213        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-214        Ok(Self {
-215            self_attn,
-216            layer_norm1,
-217            mlp,
-218            layer_norm2,
-219        })
-220    }
-221
-222    fn forward(&self, xs: &Tensor, attention_mask: Option<&Tensor>) -> Result<Tensor> {
-223        let residual = xs;
-224        let xs = xs.apply(&self.layer_norm1)?;
-225        let xs = self.self_attn.forward(&xs, attention_mask)?;
-226        let xs = (xs + residual)?;
-227
-228        let residual = &xs;
-229        let xs = xs.apply(&self.layer_norm2)?.apply(&self.mlp)?;
-230        xs + residual
-231    }
-232}
-233
-234#[derive(Debug, Clone)]
-235struct Encoder {
-236    layers: Vec<EncoderLayer>,
-237}
-238
-239impl Encoder {
-240    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-241        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-242        let vb = vb.pp("layers");
-243        for i in 0..cfg.num_hidden_layers {
-244            let layer = EncoderLayer::new(cfg, vb.pp(i))?;
-245            layers.push(layer)
-246        }
-247        Ok(Self { layers })
-248    }
-249
-250    fn forward(&self, xs: &Tensor, attention_mask: Option<&Tensor>) -> Result<Tensor> {
-251        let mut xs = xs.clone();
-252        for layer in self.layers.iter() {
-253            xs = layer.forward(&xs, attention_mask)?
-254        }
-255        Ok(xs)
-256    }
-257}
-258
-259#[derive(Debug, Clone)]
-260pub struct VisionModel {
-261    embeddings: VisionEmbeddings,
-262    encoder: Encoder,
-263    post_layernorm: LayerNorm,
-264}
-265
-266impl VisionModel {
-267    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-268        let embeddings = VisionEmbeddings::new(cfg, vb.pp("embeddings"))?;
-269        let encoder = Encoder::new(cfg, vb.pp("encoder"))?;
-270        let post_layernorm =
-271            layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("post_layernorm"))?;
-272        Ok(Self {
-273            embeddings,
-274            encoder,
-275            post_layernorm,
-276        })
-277    }
-278}
-279
-280impl Module for VisionModel {
-281    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-282        let xs = xs.apply(&self.embeddings)?;
-283        let encoder_outputs = self.encoder.forward(&xs, None)?;
-284        // Return the last hidden state rather than pooled outputs.
-285        encoder_outputs.apply(&self.post_layernorm)
-286    }
-287}
-288
-289#[derive(Debug, Clone)]
-290pub struct BlipForConditionalGeneration {
-291    vision_model: VisionModel,
-292    text_decoder: blip_text::TextLMHeadModel,
-293}
-294
-295impl BlipForConditionalGeneration {
-296    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-297        let vision_model = VisionModel::new(&cfg.vision_config, vb.pp("vision_model"))?;
-298        let text_decoder =
-299            blip_text::TextLMHeadModel::new(&cfg.text_config, vb.pp("text_decoder"))?;
-300        Ok(Self {
-301            vision_model,
-302            text_decoder,
-303        })
-304    }
-305
-306    pub fn vision_model(&self) -> &VisionModel {
-307        &self.vision_model
-308    }
-309
-310    pub fn text_decoder(&mut self) -> &mut blip_text::TextLMHeadModel {
-311        &mut self.text_decoder
-312    }
-313
-314    pub fn reset_kv_cache(&mut self) {
-315        self.text_decoder.reset_kv_cache();
-316    }
-317}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/blip_text.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/blip_text.rs.html deleted file mode 100644 index bef681f..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/blip_text.rs.html +++ /dev/null @@ -1,498 +0,0 @@ -blip_text.rs - source

candle_transformers/models/
blip_text.rs

1//! Implementation of BLIP text encoder/decoder.
-2//!
-3//! - 📝 [Paper](https://arxiv.org/abs/2201.12086). BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation"
-4//!
-5//! - ⚡ [Interactive Wasm Example](https://huggingface.co/spaces/radames/Candle-BLIP-Image-Captioning)
-6//! - 💻 [GH Link](https://github.com/salesforce/BLIP)
-7//! - 🤗 [HF Link](https://huggingface.co/Salesforce/blip-image-captioning-base)
-8//! - 📝 [Paper](https://arxiv.org/abs/2201.12086)
-9//!
-10use super::with_tracing::{linear, Embedding, Linear};
-11use candle::{Module, Result, Tensor, D};
-12use candle_nn::{layer_norm, LayerNorm, VarBuilder};
-13use serde::Deserialize;
-14
-15#[derive(Debug, Clone, Deserialize)]
-16pub struct Config {
-17    pub vocab_size: usize,
-18    pub hidden_size: usize,
-19    pub encoder_hidden_size: usize,
-20    pub intermediate_size: usize,
-21    pub projection_dim: usize,
-22    pub num_hidden_layers: usize,
-23    pub num_attention_heads: usize,
-24    pub max_position_embeddings: usize,
-25    pub hidden_act: candle_nn::Activation,
-26    pub layer_norm_eps: f64,
-27    pub is_decoder: bool,
-28}
-29
-30#[derive(Debug, Clone)]
-31struct TextEmbeddings {
-32    word_embedddings: Embedding,
-33    position_embeddings: Embedding,
-34    layer_norm: LayerNorm,
-35    position_ids: Tensor,
-36}
-37
-38impl TextEmbeddings {
-39    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-40        let word_embedddings =
-41            Embedding::new(cfg.vocab_size, cfg.hidden_size, vb.pp("word_embeddings"))?;
-42        let position_embeddings = Embedding::new(
-43            cfg.max_position_embeddings,
-44            cfg.hidden_size,
-45            vb.pp("position_embeddings"),
-46        )?;
-47        let layer_norm = layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("LayerNorm"))?;
-48        let position_ids =
-49            Tensor::arange(0, cfg.max_position_embeddings as u32, vb.device())?.unsqueeze(0)?;
-50        Ok(Self {
-51            word_embedddings,
-52            position_embeddings,
-53            layer_norm,
-54            position_ids,
-55        })
-56    }
-57
-58    fn forward(&self, xs: &Tensor, past_kv_len: usize) -> Result<Tensor> {
-59        let seq_len = xs.dim(1)?;
-60        let position_ids = self.position_ids.narrow(1, past_kv_len, seq_len)?;
-61        let embeddings = self.word_embedddings.forward(xs)?;
-62        let position_embeddings = self.position_embeddings.forward(&position_ids)?;
-63        (embeddings + position_embeddings)?.apply(&self.layer_norm)
-64    }
-65}
-66
-67#[derive(Debug, Clone)]
-68struct TextSelfAttention {
-69    query: Linear,
-70    key: Linear,
-71    value: Linear,
-72    attention_head_size: usize,
-73    num_attention_heads: usize,
-74    attention_scale: f64,
-75    kv_cache: Option<(Tensor, Tensor)>,
-76}
-77
-78impl TextSelfAttention {
-79    fn new(cfg: &Config, is_cross_attention: bool, vb: VarBuilder) -> Result<Self> {
-80        let num_attention_heads = cfg.num_attention_heads;
-81        let attention_head_size = cfg.hidden_size / num_attention_heads;
-82        let all_head_size = cfg.num_attention_heads * attention_head_size;
-83        let query = linear(cfg.hidden_size, all_head_size, vb.pp("query"))?;
-84        let in_size = if is_cross_attention {
-85            cfg.encoder_hidden_size
-86        } else {
-87            cfg.hidden_size
-88        };
-89        let key = linear(in_size, all_head_size, vb.pp("key"))?;
-90        let value = linear(in_size, all_head_size, vb.pp("value"))?;
-91        let attention_scale = 1f64 / (attention_head_size as f64).sqrt();
-92        Ok(Self {
-93            query,
-94            key,
-95            value,
-96            attention_head_size,
-97            num_attention_heads,
-98            attention_scale,
-99            kv_cache: None,
-100        })
-101    }
-102
-103    fn transpose_for_scores(&self, xs: &Tensor) -> Result<Tensor> {
-104        let (b_size, seq_len, _) = xs.dims3()?;
-105        xs.reshape((
-106            b_size,
-107            seq_len,
-108            self.num_attention_heads,
-109            self.attention_head_size,
-110        ))?
-111        .permute((0, 2, 1, 3))
-112    }
-113
-114    fn reset_kv_cache(&mut self) {
-115        self.kv_cache = None
-116    }
-117
-118    fn forward(
-119        &mut self,
-120        xs: &Tensor,
-121        encoder_hidden_states: Option<&Tensor>,
-122        attention_mask: Option<&Tensor>,
-123    ) -> Result<Tensor> {
-124        let query = self
-125            .transpose_for_scores(&self.query.forward(xs)?)?
-126            .contiguous()?;
-127        let (key, value) = match encoder_hidden_states {
-128            None => {
-129                let key = self.transpose_for_scores(&self.key.forward(xs)?)?;
-130                let value = self.transpose_for_scores(&self.value.forward(xs)?)?;
-131                let (key, value) = match &self.kv_cache {
-132                    None => (key, value),
-133                    Some((prev_key, prev_value)) => {
-134                        let key = Tensor::cat(&[prev_key, &key], 2)?;
-135                        let value = Tensor::cat(&[prev_value, &value], 2)?;
-136                        (key, value)
-137                    }
-138                };
-139                self.kv_cache = Some((key.clone(), value.clone()));
-140                (key, value)
-141            }
-142            Some(xs) => {
-143                let key = self.transpose_for_scores(&self.key.forward(xs)?)?;
-144                let value = self.transpose_for_scores(&self.value.forward(xs)?)?;
-145                // no kv-cache in this case, but the results could probably be memoized.
-146                (key, value)
-147            }
-148        };
-149        let key = key.contiguous()?;
-150        let value = value.contiguous()?;
-151        let attention_scores = query.matmul(&key.t()?)?;
-152        let attention_scores = (attention_scores * self.attention_scale)?;
-153        let attention_scores = match attention_mask {
-154            Some(mask) => attention_scores.broadcast_add(mask)?,
-155            None => attention_scores,
-156        };
-157        let attention_probs = candle_nn::ops::softmax_last_dim(&attention_scores)?;
-158        attention_probs
-159            .matmul(&value)?
-160            .permute((0, 2, 1, 3))?
-161            .flatten_from(D::Minus2)
-162    }
-163}
-164
-165#[derive(Debug, Clone)]
-166struct TextSelfOutput {
-167    dense: Linear,
-168    layer_norm: LayerNorm,
-169}
-170
-171impl TextSelfOutput {
-172    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-173        let dense = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("dense"))?;
-174        let layer_norm = layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("LayerNorm"))?;
-175        Ok(Self { dense, layer_norm })
-176    }
-177
-178    fn forward(&self, xs: &Tensor, input_tensor: &Tensor) -> Result<Tensor> {
-179        (xs.apply(&self.dense) + input_tensor)?.apply(&self.layer_norm)
-180    }
-181}
-182
-183#[derive(Debug, Clone)]
-184struct TextAttention {
-185    self_: TextSelfAttention,
-186    output: TextSelfOutput,
-187}
-188
-189impl TextAttention {
-190    fn new(cfg: &Config, is_cross_attention: bool, vb: VarBuilder) -> Result<Self> {
-191        let self_ = TextSelfAttention::new(cfg, is_cross_attention, vb.pp("self"))?;
-192        let output = TextSelfOutput::new(cfg, vb.pp("output"))?;
-193        Ok(Self { self_, output })
-194    }
-195
-196    fn reset_kv_cache(&mut self) {
-197        self.self_.reset_kv_cache()
-198    }
-199
-200    fn forward(
-201        &mut self,
-202        xs: &Tensor,
-203        encoder_hidden_states: Option<&Tensor>,
-204        attention_mask: Option<&Tensor>,
-205    ) -> Result<Tensor> {
-206        let self_outputs = self
-207            .self_
-208            .forward(xs, encoder_hidden_states, attention_mask)?;
-209        self.output.forward(&self_outputs, xs)
-210    }
-211}
-212
-213#[derive(Debug, Clone)]
-214struct TextIntermediate {
-215    dense: Linear,
-216    intermediate_act_fn: candle_nn::Activation,
-217}
-218
-219impl TextIntermediate {
-220    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-221        let dense = linear(cfg.hidden_size, cfg.intermediate_size, vb.pp("dense"))?;
-222        Ok(Self {
-223            dense,
-224            intermediate_act_fn: cfg.hidden_act,
-225        })
-226    }
-227}
-228
-229impl Module for TextIntermediate {
-230    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-231        xs.apply(&self.dense)?.apply(&self.intermediate_act_fn)
-232    }
-233}
-234
-235#[derive(Debug, Clone)]
-236struct TextOutput {
-237    dense: Linear,
-238    layer_norm: LayerNorm,
-239}
-240
-241impl TextOutput {
-242    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-243        let dense = linear(cfg.intermediate_size, cfg.hidden_size, vb.pp("dense"))?;
-244        let layer_norm = layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("LayerNorm"))?;
-245        Ok(Self { dense, layer_norm })
-246    }
-247
-248    fn forward(&self, xs: &Tensor, input_tensor: &Tensor) -> Result<Tensor> {
-249        (xs.apply(&self.dense)? + input_tensor)?.apply(&self.layer_norm)
-250    }
-251}
-252
-253#[derive(Debug, Clone)]
-254struct TextLayer {
-255    attention: TextAttention,
-256    cross_attention: Option<TextAttention>,
-257    intermediate: TextIntermediate,
-258    output: TextOutput,
-259}
-260
-261impl TextLayer {
-262    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-263        let attention = TextAttention::new(cfg, false, vb.pp("attention"))?;
-264        let cross_attention = if cfg.is_decoder {
-265            Some(TextAttention::new(cfg, true, vb.pp("crossattention"))?)
-266        } else {
-267            None
-268        };
-269        let intermediate = TextIntermediate::new(cfg, vb.pp("intermediate"))?;
-270        let output = TextOutput::new(cfg, vb.pp("output"))?;
-271        Ok(Self {
-272            attention,
-273            cross_attention,
-274            intermediate,
-275            output,
-276        })
-277    }
-278
-279    fn reset_kv_cache(&mut self) {
-280        self.attention.reset_kv_cache();
-281        if let Some(ca) = &mut self.cross_attention {
-282            ca.reset_kv_cache()
-283        }
-284    }
-285
-286    fn forward(
-287        &mut self,
-288        xs: &Tensor,
-289        encoder_hidden_states: &Tensor,
-290        attention_mask: &Tensor,
-291    ) -> Result<Tensor> {
-292        let attention_output = self.attention.forward(xs, None, Some(attention_mask))?;
-293        let attention_output = match &mut self.cross_attention {
-294            Some(ca) => ca.forward(&attention_output, Some(encoder_hidden_states), None)?,
-295            None => candle::bail!("expected some cross-attn"),
-296        };
-297        let intermediate_output = self.intermediate.forward(&attention_output)?;
-298        self.output.forward(&intermediate_output, &attention_output)
-299    }
-300}
-301
-302#[derive(Debug, Clone)]
-303struct TextEncoder {
-304    layers: Vec<TextLayer>,
-305}
-306
-307impl TextEncoder {
-308    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-309        let vb = vb.pp("layer");
-310        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-311        for i in 0..cfg.num_hidden_layers {
-312            let layer = TextLayer::new(cfg, vb.pp(i))?;
-313            layers.push(layer)
-314        }
-315        Ok(Self { layers })
-316    }
-317
-318    fn reset_kv_cache(&mut self) {
-319        self.layers.iter_mut().for_each(|l| l.reset_kv_cache())
-320    }
-321
-322    fn forward(
-323        &mut self,
-324        xs: &Tensor,
-325        encoder_hidden_states: &Tensor,
-326        attention_mask: &Tensor,
-327    ) -> Result<Tensor> {
-328        let mut xs = xs.clone();
-329        for layer in self.layers.iter_mut() {
-330            xs = layer.forward(&xs, encoder_hidden_states, attention_mask)?
-331        }
-332        Ok(xs)
-333    }
-334}
-335
-336#[derive(Debug, Clone)]
-337pub struct TextPooler {
-338    dense: Linear,
-339}
-340
-341impl TextPooler {
-342    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-343        let dense = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("dense"))?;
-344        Ok(Self { dense })
-345    }
-346}
-347
-348impl Module for TextPooler {
-349    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-350        xs.narrow(D::Minus1, 0, 1)?
-351            .squeeze(D::Minus1)?
-352            .apply(&self.dense)?
-353            .tanh()
-354    }
-355}
-356
-357#[derive(Debug, Clone)]
-358struct TextPredictionHeadTransform {
-359    dense: Linear,
-360    transform_act_fn: candle_nn::Activation,
-361    layer_norm: LayerNorm,
-362}
-363
-364impl TextPredictionHeadTransform {
-365    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-366        let dense = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("dense"))?;
-367        let layer_norm = layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("LayerNorm"))?;
-368        Ok(Self {
-369            dense,
-370            transform_act_fn: cfg.hidden_act,
-371            layer_norm,
-372        })
-373    }
-374}
-375
-376impl Module for TextPredictionHeadTransform {
-377    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-378        xs.apply(&self.dense)?
-379            .apply(&self.transform_act_fn)?
-380            .apply(&self.layer_norm)
-381    }
-382}
-383
-384#[derive(Debug, Clone)]
-385struct TextLMPredictionHead {
-386    transform: TextPredictionHeadTransform,
-387    decoder: Linear,
-388}
-389
-390impl TextLMPredictionHead {
-391    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-392        let transform = TextPredictionHeadTransform::new(cfg, vb.pp("transform"))?;
-393        let weight = vb.get((cfg.vocab_size, cfg.hidden_size), "decoder.weight")?;
-394        let bias = vb.get(cfg.vocab_size, "bias")?;
-395        let decoder = Linear::from_weights(weight, Some(bias));
-396        Ok(Self { transform, decoder })
-397    }
-398}
-399
-400impl Module for TextLMPredictionHead {
-401    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-402        xs.apply(&self.transform)?.apply(&self.decoder)
-403    }
-404}
-405
-406#[derive(Debug, Clone)]
-407struct TextOnlyMLMHead {
-408    predictions: TextLMPredictionHead,
-409}
-410
-411impl TextOnlyMLMHead {
-412    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-413        let predictions = TextLMPredictionHead::new(cfg, vb.pp("predictions"))?;
-414        Ok(Self { predictions })
-415    }
-416}
-417
-418impl Module for TextOnlyMLMHead {
-419    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-420        self.predictions.forward(xs)
-421    }
-422}
-423
-424#[derive(Debug, Clone)]
-425struct TextModel {
-426    embeddings: TextEmbeddings,
-427    encoder: TextEncoder,
-428    past_kv_len: usize,
-429    // We do not need the pooler for caption generation
-430}
-431
-432impl TextModel {
-433    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-434        let embeddings = TextEmbeddings::new(cfg, vb.pp("embeddings"))?;
-435        let encoder = TextEncoder::new(cfg, vb.pp("encoder"))?;
-436        Ok(Self {
-437            embeddings,
-438            encoder,
-439            past_kv_len: 0,
-440        })
-441    }
-442
-443    fn forward(
-444        &mut self,
-445        input_ids: &Tensor,
-446        encoder_hidden_states: &Tensor,
-447        attention_mask: &Tensor,
-448    ) -> Result<Tensor> {
-449        let (_b_sz, seq_len) = input_ids.dims2()?;
-450        let embedding_output = self.embeddings.forward(input_ids, self.past_kv_len)?;
-451        let sequence_output =
-452            self.encoder
-453                .forward(&embedding_output, encoder_hidden_states, attention_mask)?;
-454        self.past_kv_len += seq_len;
-455        // We're interested in the sequence-output rather than the pooled-output.
-456        Ok(sequence_output)
-457    }
-458
-459    fn reset_kv_cache(&mut self) {
-460        self.past_kv_len = 0;
-461        self.encoder.reset_kv_cache();
-462    }
-463}
-464
-465#[derive(Debug, Clone)]
-466pub struct TextLMHeadModel {
-467    bert: TextModel,
-468    cls: TextOnlyMLMHead,
-469}
-470
-471impl TextLMHeadModel {
-472    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-473        let bert = TextModel::new(cfg, vb.pp("bert"))?;
-474        let cls = TextOnlyMLMHead::new(cfg, vb.pp("cls"))?;
-475        Ok(Self { bert, cls })
-476    }
-477
-478    pub fn forward(
-479        &mut self,
-480        input_ids: &Tensor,
-481        encoder_hidden_states: &Tensor,
-482    ) -> Result<Tensor> {
-483        let seq_len = input_ids.dim(1)?;
-484        let mask: Vec<_> = (0..seq_len)
-485            .flat_map(|i| (0..seq_len).map(move |j| if j > i { f32::NEG_INFINITY } else { 0f32 }))
-486            .collect();
-487        let mask = Tensor::from_vec(mask, (seq_len, seq_len), input_ids.device())?;
-488        let sequence_output = self.bert.forward(input_ids, encoder_hidden_states, &mask)?;
-489        let prediction_scores = self.cls.forward(&sequence_output)?;
-490        // return_logits is false so we don't discard the last sequence element.
-491        Ok(prediction_scores)
-492    }
-493
-494    pub fn reset_kv_cache(&mut self) {
-495        self.bert.reset_kv_cache()
-496    }
-497}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/chatglm.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/chatglm.rs.html deleted file mode 100644 index ad3d675..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/chatglm.rs.html +++ /dev/null @@ -1,591 +0,0 @@ -chatglm.rs - source

candle_transformers/models/
chatglm.rs

1//! Implementation of the ChatGLM2/3 models from THUDM.
-2//!
-3//! - 💻 [Github](https://github.com/THUDM/ChatGLM3) ChatGLM3: Advancing Multilingual Conversational Language Models with High-Quality Data
-4//! - 💻 [Github](https://github.com/THUDM/ChatGLM2-6B) ChatGLM2-6B.
-5//!
-6use crate::models::with_tracing::{linear_b as linear, Linear};
-7use candle::{DType, Device, IndexOp, Module, Result, Tensor, D};
-8use candle_nn::VarBuilder;
-9
-10#[derive(Debug, Clone)]
-11pub struct Config {
-12    pub num_layers: usize,
-13    pub padded_vocab_size: usize,
-14    pub hidden_size: usize,
-15    pub ffn_hidden_size: usize,
-16    pub kv_channels: usize,
-17    pub num_attention_heads: usize,
-18    pub seq_length: usize,
-19    pub layernorm_epsilon: f64,
-20    pub rmsnorm: bool,
-21    pub apply_residual_connection_post_layernorm: bool,
-22    pub post_layer_norm: bool,
-23    pub add_bias_linear: bool,
-24    pub add_qkv_bias: bool,
-25    pub bias_dropout_fusion: bool,
-26    pub multi_query_attention: bool,
-27    pub multi_query_group_num: usize,
-28    pub apply_query_key_layer_scaling: bool,
-29    pub attention_softmax_in_fp32: bool,
-30    pub fp32_residual_connection: bool,
-31}
-32
-33impl Config {
-34    pub fn glm3_6b() -> Self {
-35        Self {
-36            num_layers: 28,
-37            padded_vocab_size: 65024,
-38            hidden_size: 4096,
-39            ffn_hidden_size: 13696,
-40            kv_channels: 128,
-41            num_attention_heads: 32,
-42            seq_length: 8192,
-43            layernorm_epsilon: 1e-5,
-44            rmsnorm: true,
-45            apply_residual_connection_post_layernorm: false,
-46            post_layer_norm: true,
-47            add_bias_linear: false,
-48            add_qkv_bias: true,
-49            bias_dropout_fusion: true,
-50            multi_query_attention: true,
-51            multi_query_group_num: 2,
-52            apply_query_key_layer_scaling: true,
-53            attention_softmax_in_fp32: true,
-54            fp32_residual_connection: false,
-55        }
-56    }
-57}
-58
-59#[derive(Debug, Clone)]
-60struct RotaryEmbedding {
-61    cache: Tensor,
-62}
-63
-64impl RotaryEmbedding {
-65    fn new(cfg: &Config, dtype: DType, dev: &Device) -> Result<Self> {
-66        let rotary_dim = cfg.kv_channels;
-67        let n_elem = rotary_dim / 2;
-68        let inv_freq: Vec<_> = (0..n_elem)
-69            .step_by(2)
-70            .map(|i| 1f32 / 10_000f64.powf(i as f64 / n_elem as f64) as f32)
-71            .collect();
-72        let inv_freq_len = inv_freq.len();
-73        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-74        let t = Tensor::arange(0u32, cfg.seq_length as u32, dev)?
-75            .to_dtype(dtype)?
-76            .reshape((cfg.seq_length, 1))?;
-77        let freqs = t.matmul(&inv_freq)?;
-78        let cache = Tensor::stack(&[&freqs.cos()?, &freqs.sin()?], D::Minus1)?;
-79        Ok(Self { cache })
-80    }
-81
-82    fn apply(&self, xs: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-83        let (seqlen, _b, np, _hn) = xs.dims4()?;
-84        let cache = self.cache.narrow(0, seqlen_offset, seqlen)?;
-85        let rot_dim = cache.dim(D::Minus2)? * 2;
-86        let (xs, xs_pass) = (
-87            xs.narrow(D::Minus1, 0, rot_dim)?,
-88            xs.narrow(D::Minus1, rot_dim, rot_dim)?,
-89        );
-90        let xshaped = xs.reshape((seqlen, (), np, rot_dim / 2, 2))?;
-91        let cache = cache.reshape((seqlen, (), 1, rot_dim / 2, 2))?;
-92        let (xshaped0, xshaped1) = (
-93            xshaped.i((.., .., .., .., 0))?,
-94            xshaped.i((.., .., .., .., 1))?,
-95        );
-96        let (cache0, cache1) = (cache.i((.., .., .., .., 0))?, cache.i((.., .., .., .., 1))?);
-97        let xs_out = Tensor::stack(
-98            &[
-99                (xshaped0.broadcast_mul(&cache0)? - xshaped1.broadcast_mul(&cache1)?)?,
-100                (xshaped1.broadcast_mul(&cache0)? + xshaped0.broadcast_mul(&cache1)?)?,
-101            ],
-102            D::Minus1,
-103        )?;
-104        let xs_out = xs_out.flatten_from(3)?;
-105        Tensor::cat(&[xs_out, xs_pass], D::Minus1)
-106    }
-107}
-108
-109#[derive(Debug, Clone)]
-110struct CoreAttention {
-111    coeff: Option<f64>,
-112    norm_factor: f64,
-113}
-114
-115fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: f32) -> Result<Tensor> {
-116    let shape = mask.shape();
-117    let on_true = Tensor::new(on_true, on_false.device())?.broadcast_as(shape.dims())?;
-118    let m = mask.where_cond(&on_true, on_false)?;
-119    Ok(m)
-120}
-121
-122impl CoreAttention {
-123    fn new(layer_number: usize, cfg: &Config) -> Result<Self> {
-124        let norm_factor = (cfg.kv_channels as f64).sqrt();
-125        let (norm_factor, coeff) = if cfg.apply_query_key_layer_scaling {
-126            let coeff = f64::max(1.0, layer_number as f64);
-127            (norm_factor * coeff, Some(coeff))
-128        } else {
-129            (norm_factor, None)
-130        };
-131        Ok(Self { coeff, norm_factor })
-132    }
-133
-134    fn forward(
-135        &self,
-136        query_layer: &Tensor,
-137        key_layer: &Tensor,
-138        value_layer: &Tensor,
-139        attention_mask: &Option<Tensor>,
-140    ) -> Result<Tensor> {
-141        let output_size = (
-142            query_layer.dim(1)?, // b
-143            query_layer.dim(2)?, // np
-144            query_layer.dim(0)?, // sq
-145            key_layer.dim(0)?,   // sk
-146        );
-147        let query_layer =
-148            query_layer.reshape((output_size.2, output_size.0 * output_size.1, ()))?;
-149        let key_layer = key_layer.reshape((output_size.3, output_size.0 * output_size.1, ()))?;
-150        let matmul_result = Tensor::matmul(
-151            &query_layer.transpose(0, 1)?,
-152            &key_layer.transpose(0, 1)?.transpose(1, 2)?,
-153        )?;
-154        let matmul_result = (matmul_result / self.norm_factor)?.reshape(output_size)?;
-155        let matmul_result = match self.coeff {
-156            None => matmul_result,
-157            Some(coeff) => (matmul_result * coeff)?,
-158        };
-159        let attention_scores = match attention_mask {
-160            Some(mask) => masked_fill(
-161                &matmul_result,
-162                &mask.broadcast_left((matmul_result.dim(0)?, matmul_result.dim(1)?))?,
-163                f32::NEG_INFINITY,
-164            )?,
-165            None => matmul_result,
-166        };
-167        let attention_probs = candle_nn::ops::softmax_last_dim(&attention_scores)?;
-168
-169        let output_size = (
-170            value_layer.dim(1)?,
-171            value_layer.dim(2)?,
-172            query_layer.dim(0)?,
-173            value_layer.dim(3)?,
-174        );
-175        let value_layer =
-176            value_layer.reshape((value_layer.dim(0)?, output_size.0 * output_size.1, ()))?;
-177        let attention_probs =
-178            attention_probs.reshape((output_size.0 * output_size.1, output_size.2, ()))?;
-179        let context_layer = Tensor::matmul(&attention_probs, &value_layer.transpose(0, 1)?)?;
-180        let context_layer = context_layer.reshape(output_size)?;
-181        let context_layer = context_layer.permute((2, 0, 1, 3))?.contiguous()?;
-182        context_layer.flatten_from(D::Minus2)
-183    }
-184}
-185
-186#[derive(Debug, Clone)]
-187struct SelfAttention {
-188    query_key_value: Linear,
-189    core_attention: CoreAttention,
-190    dense: Linear,
-191    multi_query_attention: bool,
-192    num_attention_heads_per_partition: usize,
-193    num_multi_query_groups_per_partition: usize,
-194    hidden_size_per_attention_head: usize,
-195    kv_cache: Option<(Tensor, Tensor)>,
-196}
-197
-198impl SelfAttention {
-199    fn new(layer_number: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-200        let projection_size = cfg.kv_channels * cfg.num_attention_heads;
-201        let hidden_size_per_attention_head = projection_size / cfg.num_attention_heads;
-202        let qkv_hidden_size = if cfg.multi_query_attention {
-203            projection_size + 2 * hidden_size_per_attention_head * cfg.multi_query_group_num
-204        } else {
-205            3 * projection_size
-206        };
-207        let query_key_value = linear(
-208            cfg.hidden_size,
-209            qkv_hidden_size,
-210            cfg.add_bias_linear || cfg.add_qkv_bias,
-211            vb.pp("query_key_value"),
-212        )?;
-213        let core_attention = CoreAttention::new(layer_number, cfg)?;
-214        let dense = linear(
-215            cfg.hidden_size,
-216            cfg.hidden_size,
-217            cfg.add_bias_linear,
-218            vb.pp("dense"),
-219        )?;
-220        Ok(Self {
-221            query_key_value,
-222            core_attention,
-223            dense,
-224            multi_query_attention: cfg.multi_query_attention,
-225            num_attention_heads_per_partition: cfg.num_attention_heads,
-226            num_multi_query_groups_per_partition: cfg.multi_query_group_num,
-227            hidden_size_per_attention_head: cfg.kv_channels,
-228            kv_cache: None,
-229        })
-230    }
-231
-232    fn reset_kv_cache(&mut self) {
-233        self.kv_cache = None
-234    }
-235
-236    fn forward(
-237        &mut self,
-238        xs: &Tensor,
-239        attention_mask: &Option<Tensor>,
-240        rotary_emb: &RotaryEmbedding,
-241    ) -> Result<Tensor> {
-242        let mixed_x_layer = xs.apply(&self.query_key_value)?;
-243        if !self.multi_query_attention {
-244            candle::bail!("only multi_query_attention=true is supported")
-245        }
-246        let hpa = self.hidden_size_per_attention_head;
-247        let query_layer =
-248            mixed_x_layer.narrow(D::Minus1, 0, self.num_attention_heads_per_partition * hpa)?;
-249        let key_layer = mixed_x_layer.narrow(
-250            D::Minus1,
-251            self.num_attention_heads_per_partition * hpa,
-252            self.num_multi_query_groups_per_partition * hpa,
-253        )?;
-254        let value_layer = mixed_x_layer.narrow(
-255            D::Minus1,
-256            self.num_attention_heads_per_partition * hpa
-257                + self.num_multi_query_groups_per_partition * hpa,
-258            self.num_multi_query_groups_per_partition * hpa,
-259        )?;
-260        let query_layer = query_layer.reshape((
-261            query_layer.dim(0)?,
-262            query_layer.dim(1)?,
-263            self.num_attention_heads_per_partition,
-264            hpa,
-265        ))?;
-266        let key_layer = key_layer.reshape((
-267            key_layer.dim(0)?,
-268            key_layer.dim(1)?,
-269            self.num_multi_query_groups_per_partition,
-270            hpa,
-271        ))?;
-272        let value_layer = value_layer.reshape((
-273            value_layer.dim(0)?,
-274            value_layer.dim(1)?,
-275            self.num_multi_query_groups_per_partition,
-276            hpa,
-277        ))?;
-278
-279        // Rotary embeddings.
-280        let seqlen_offset = match &self.kv_cache {
-281            None => 0,
-282            Some((prev_k, _)) => prev_k.dim(0)?,
-283        };
-284        let query_layer = rotary_emb.apply(&query_layer, seqlen_offset)?;
-285        let key_layer = rotary_emb.apply(&key_layer, seqlen_offset)?;
-286
-287        // KV cache.
-288        let (key_layer, value_layer) = match &self.kv_cache {
-289            None => (key_layer, value_layer),
-290            Some((prev_k, prev_v)) => {
-291                let k = Tensor::cat(&[prev_k, &key_layer], 0)?;
-292                let v = Tensor::cat(&[prev_v, &value_layer], 0)?;
-293                (k, v)
-294            }
-295        };
-296        self.kv_cache = Some((key_layer.clone(), value_layer.clone()));
-297
-298        // Repeat KV.
-299        let ratio =
-300            self.num_attention_heads_per_partition / self.num_multi_query_groups_per_partition;
-301        let key_layer = {
-302            let (d0, d1, d2, d3) = key_layer.dims4()?;
-303            key_layer
-304                .unsqueeze(D::Minus2)?
-305                .expand((d0, d1, d2, ratio, d3))?
-306                .reshape((
-307                    d0,
-308                    d1,
-309                    self.num_attention_heads_per_partition,
-310                    self.hidden_size_per_attention_head,
-311                ))?
-312        };
-313        let value_layer = {
-314            let (d0, d1, d2, d3) = value_layer.dims4()?;
-315            value_layer
-316                .unsqueeze(D::Minus2)?
-317                .expand((d0, d1, d2, ratio, d3))?
-318                .reshape((
-319                    d0,
-320                    d1,
-321                    self.num_attention_heads_per_partition,
-322                    self.hidden_size_per_attention_head,
-323                ))?
-324        };
-325
-326        let context_layer =
-327            self.core_attention
-328                .forward(&query_layer, &key_layer, &value_layer, attention_mask)?;
-329        let output = context_layer.apply(&self.dense)?;
-330        Ok(output)
-331    }
-332}
-333
-334#[allow(clippy::upper_case_acronyms)]
-335#[derive(Debug, Clone)]
-336struct MLP {
-337    dense_h_to_4h: Linear,
-338    dense_4h_to_h: Linear,
-339}
-340
-341impl MLP {
-342    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-343        let dense_h_to_4h = linear(
-344            cfg.hidden_size,
-345            cfg.ffn_hidden_size * 2,
-346            cfg.add_bias_linear,
-347            vb.pp("dense_h_to_4h"),
-348        )?;
-349        let dense_4h_to_h = linear(
-350            cfg.ffn_hidden_size,
-351            cfg.hidden_size,
-352            cfg.add_bias_linear,
-353            vb.pp("dense_4h_to_h"),
-354        )?;
-355        Ok(Self {
-356            dense_4h_to_h,
-357            dense_h_to_4h,
-358        })
-359    }
-360}
-361
-362impl Module for MLP {
-363    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-364        xs.apply(&self.dense_h_to_4h)?
-365            .apply(&candle_nn::Activation::Swiglu)?
-366            .apply(&self.dense_4h_to_h)
-367    }
-368}
-369
-370#[derive(Debug, Clone)]
-371struct Block {
-372    input_layernorm: candle_nn::LayerNorm,
-373    self_attention: SelfAttention,
-374    post_attention_layernorm: candle_nn::LayerNorm,
-375    mlp: MLP,
-376    apply_residual_connection_post_layernorm: bool,
-377}
-378
-379impl Block {
-380    fn new(layer_number: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-381        let input_layernorm = if cfg.rmsnorm {
-382            candle_nn::rms_norm(
-383                cfg.hidden_size,
-384                cfg.layernorm_epsilon,
-385                vb.pp("input_layernorm"),
-386            )?
-387            .into_inner()
-388        } else {
-389            candle_nn::layer_norm(
-390                cfg.hidden_size,
-391                cfg.layernorm_epsilon,
-392                vb.pp("input_layernorm"),
-393            )?
-394        };
-395        let post_attention_layernorm = if cfg.rmsnorm {
-396            candle_nn::rms_norm(
-397                cfg.hidden_size,
-398                cfg.layernorm_epsilon,
-399                vb.pp("post_attention_layernorm"),
-400            )?
-401            .into_inner()
-402        } else {
-403            candle_nn::layer_norm(
-404                cfg.hidden_size,
-405                cfg.layernorm_epsilon,
-406                vb.pp("post_attention_layernorm"),
-407            )?
-408        };
-409        let self_attention = SelfAttention::new(layer_number, cfg, vb.pp("self_attention"))?;
-410        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-411        Ok(Self {
-412            input_layernorm,
-413            self_attention,
-414            post_attention_layernorm,
-415            mlp,
-416            apply_residual_connection_post_layernorm: cfg.apply_residual_connection_post_layernorm,
-417        })
-418    }
-419
-420    fn reset_kv_cache(&mut self) {
-421        self.self_attention.reset_kv_cache()
-422    }
-423
-424    fn forward(
-425        &mut self,
-426        xs: &Tensor,
-427        attention_mask: &Option<Tensor>,
-428        rotary_emb: &RotaryEmbedding,
-429    ) -> Result<Tensor> {
-430        let layernorm_output = xs.apply(&self.input_layernorm)?;
-431        let attention_output =
-432            self.self_attention
-433                .forward(&layernorm_output, attention_mask, rotary_emb)?;
-434        let residual = if self.apply_residual_connection_post_layernorm {
-435            &layernorm_output
-436        } else {
-437            xs
-438        };
-439        let layernorm_input = (residual + attention_output)?;
-440        let layernorm_output = layernorm_input.apply(&self.post_attention_layernorm)?;
-441        let mlp_output = layernorm_output.apply(&self.mlp)?;
-442        let residual = if self.apply_residual_connection_post_layernorm {
-443            &layernorm_output
-444        } else {
-445            &layernorm_input
-446        };
-447        mlp_output + residual
-448    }
-449}
-450
-451#[derive(Debug, Clone)]
-452struct Transformer {
-453    layers: Vec<Block>,
-454    final_layernorm: Option<candle_nn::LayerNorm>,
-455    rotary_emb: RotaryEmbedding,
-456}
-457
-458impl Transformer {
-459    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-460        let vb_l = vb.pp("layers");
-461        let mut layers = Vec::with_capacity(cfg.num_layers);
-462        for layer_index in 0..cfg.num_layers {
-463            let block = Block::new(layer_index + 1, cfg, vb_l.pp(layer_index))?;
-464            layers.push(block)
-465        }
-466        let final_layernorm = if cfg.post_layer_norm {
-467            let ln = if cfg.rmsnorm {
-468                candle_nn::rms_norm(
-469                    cfg.hidden_size,
-470                    cfg.layernorm_epsilon,
-471                    vb.pp("final_layernorm"),
-472                )?
-473                .into_inner()
-474            } else {
-475                candle_nn::layer_norm(
-476                    cfg.hidden_size,
-477                    cfg.layernorm_epsilon,
-478                    vb.pp("final_layernorm"),
-479                )?
-480            };
-481            Some(ln)
-482        } else {
-483            None
-484        };
-485        let rotary_emb = RotaryEmbedding::new(cfg, vb.dtype(), vb.device())?;
-486        Ok(Self {
-487            layers,
-488            final_layernorm,
-489            rotary_emb,
-490        })
-491    }
-492
-493    fn reset_kv_cache(&mut self) {
-494        for block in self.layers.iter_mut() {
-495            block.reset_kv_cache()
-496        }
-497    }
-498
-499    fn forward(&mut self, xs: &Tensor, attention_mask: &Option<Tensor>) -> Result<Tensor> {
-500        let mut xs = xs.clone();
-501        for block in self.layers.iter_mut() {
-502            xs = block.forward(&xs, attention_mask, &self.rotary_emb)?
-503        }
-504        match self.final_layernorm.as_ref() {
-505            None => Ok(xs),
-506            Some(ln) => xs.apply(ln),
-507        }
-508    }
-509}
-510
-511#[derive(Debug, Clone)]
-512struct Embedding {
-513    word_embeddings: candle_nn::Embedding,
-514    fp32_residual_connection: bool,
-515}
-516
-517impl Embedding {
-518    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-519        let word_embeddings = candle_nn::embedding(
-520            cfg.padded_vocab_size,
-521            cfg.hidden_size,
-522            vb.pp("word_embeddings"),
-523        )?;
-524        Ok(Self {
-525            word_embeddings,
-526            fp32_residual_connection: cfg.fp32_residual_connection,
-527        })
-528    }
-529}
-530
-531impl Module for Embedding {
-532    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-533        let xs = self.word_embeddings.forward(xs)?.transpose(0, 1)?; // b,s,h -> s,b,h
-534        if self.fp32_residual_connection {
-535            xs.to_dtype(candle::DType::F32)
-536        } else {
-537            xs.contiguous()
-538        }
-539    }
-540}
-541
-542#[derive(Debug, Clone)]
-543pub struct Model {
-544    embedding: Embedding,
-545    encoder: Transformer,
-546    output_layer: Linear,
-547}
-548
-549fn get_mask(size: usize, device: &Device) -> Result<Tensor> {
-550    let mask: Vec<_> = (0..size)
-551        .flat_map(|i| (0..size).map(move |j| u8::from(j > i)))
-552        .collect();
-553    Tensor::from_slice(&mask, (size, size), device)
-554}
-555
-556impl Model {
-557    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-558        let vb = vb.pp("transformer");
-559        let embedding = Embedding::new(cfg, vb.pp("embedding"))?;
-560        let encoder = Transformer::new(cfg, vb.pp("encoder"))?;
-561        let output_layer = linear(
-562            cfg.hidden_size,
-563            cfg.padded_vocab_size,
-564            false,
-565            vb.pp("output_layer"),
-566        )?;
-567        Ok(Self {
-568            embedding,
-569            encoder,
-570            output_layer,
-571        })
-572    }
-573
-574    pub fn reset_kv_cache(&mut self) {
-575        self.encoder.reset_kv_cache()
-576    }
-577
-578    pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor> {
-579        let (_b_size, seq_len) = xs.dims2()?;
-580        let input_embeds = xs.apply(&self.embedding)?;
-581        let attention_mask = if seq_len <= 1 {
-582            None
-583        } else {
-584            Some(get_mask(seq_len, xs.device())?)
-585        };
-586        let xs = self.encoder.forward(&input_embeds, &attention_mask)?;
-587        let lm_logits = xs.i(seq_len - 1)?.apply(&self.output_layer)?;
-588        Ok(lm_logits)
-589    }
-590}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/chinese_clip/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/chinese_clip/mod.rs.html deleted file mode 100644 index 71a5079..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/chinese_clip/mod.rs.html +++ /dev/null @@ -1,210 +0,0 @@ -mod.rs - source

candle_transformers/models/chinese_clip/
mod.rs

1//! Chinese contrastive Language-Image Pre-Training
-2//!
-3//! Chinese contrastive Language-Image Pre-Training (CLIP) is an architecture trained on
-4//! pairs of images with related texts.
-5//!
-6//! - 💻 [GH Link](https://github.com/OFA-Sys/Chinese-CLIP)
-7//! - 💻 Transformers Python [reference implementation](https://github.com/huggingface/transformers/blob/5af7d41e49bbfc8319f462eb45253dcb3863dfb7/src/transformers/models/chinese_clip/modeling_chinese_clip.py)
-8//!
-9use candle::{Module, Result, Tensor, D};
-10use candle_nn as nn;
-11
-12use text_model::ChineseClipTextTransformer;
-13use vision_model::ChineseClipVisionTransformer;
-14
-15pub mod text_model;
-16pub mod vision_model;
-17
-18#[derive(Debug, Clone, Copy)]
-19pub enum Activation {
-20    QuickGelu,
-21    Gelu,
-22    GeluNew,
-23    Relu,
-24}
-25
-26impl From<String> for Activation {
-27    fn from(value: String) -> Self {
-28        match value.as_str() {
-29            "quick_gelu" => Activation::QuickGelu,
-30            "gelu" => Activation::Gelu,
-31            "gelu_new" => Activation::GeluNew,
-32            "relu" => Activation::Relu,
-33            _ => panic!("Invalid activation function: {}", value),
-34        }
-35    }
-36}
-37
-38impl Module for Activation {
-39    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-40        match self {
-41            Activation::QuickGelu => xs * nn::ops::sigmoid(&(xs * 1.702f64)?)?,
-42            Activation::Gelu => xs.gelu_erf(),
-43            Activation::GeluNew => xs.gelu(),
-44            Activation::Relu => xs.relu(),
-45        }
-46    }
-47}
-48
-49#[derive(Clone, Debug)]
-50pub struct ChineseClipConfig {
-51    pub text_config: text_model::ChineseClipTextConfig,
-52    pub vision_config: vision_model::ChineseClipVisionConfig,
-53    pub projection_dim: usize,
-54    pub logit_scale_init_value: f32,
-55    pub image_size: usize,
-56}
-57
-58impl ChineseClipConfig {
-59    /// referer: https://huggingface.co/OFA-Sys/chinese-clip-vit-base-patch16/blob/main/config.json
-60    pub fn clip_vit_base_patch16() -> Self {
-61        let text_config = text_model::ChineseClipTextConfig::clip_vit_base_patch16();
-62        let vision_config = vision_model::ChineseClipVisionConfig::clip_vit_base_patch16();
-63
-64        Self {
-65            text_config,
-66            vision_config,
-67            projection_dim: 512,
-68            logit_scale_init_value: 2.6592,
-69            image_size: 512,
-70        }
-71    }
-72}
-73
-74#[derive(Clone, Debug)]
-75pub enum EncoderConfig {
-76    Text(text_model::ChineseClipTextConfig),
-77    Vision(vision_model::ChineseClipVisionConfig),
-78}
-79
-80impl EncoderConfig {
-81    pub fn embed_dim(&self) -> usize {
-82        match self {
-83            Self::Text(c) => c.hidden_size,
-84            Self::Vision(c) => c.hidden_size,
-85        }
-86    }
-87
-88    pub fn num_attention_heads(&self) -> usize {
-89        match self {
-90            Self::Text(c) => c.num_attention_heads,
-91            Self::Vision(c) => c.num_attention_heads,
-92        }
-93    }
-94
-95    pub fn intermediate_size(&self) -> usize {
-96        match self {
-97            Self::Text(c) => c.intermediate_size,
-98            Self::Vision(c) => c.intermediate_size,
-99        }
-100    }
-101
-102    pub fn num_hidden_layers(&self) -> usize {
-103        match self {
-104            Self::Text(c) => c.num_hidden_layers,
-105            Self::Vision(c) => c.num_hidden_layers,
-106        }
-107    }
-108
-109    pub fn activation(&self) -> Activation {
-110        match self {
-111            Self::Text(c) => c.hidden_act,
-112            Self::Vision(c) => c.hidden_act,
-113        }
-114    }
-115
-116    pub fn layer_norm_eps(&self) -> f64 {
-117        match self {
-118            Self::Text(c) => c.layer_norm_eps,
-119            Self::Vision(c) => c.layer_norm_eps,
-120        }
-121    }
-122}
-123
-124#[derive(Clone, Debug)]
-125pub struct ChineseClipModel {
-126    text_model: ChineseClipTextTransformer,
-127    vision_model: ChineseClipVisionTransformer,
-128    visual_projection: nn::Linear,
-129    text_projection: nn::Linear,
-130    logit_scale: Tensor,
-131}
-132
-133impl ChineseClipModel {
-134    pub fn new(vs: nn::VarBuilder, c: &ChineseClipConfig) -> Result<Self> {
-135        let text_model = ChineseClipTextTransformer::new(vs.pp("text_model"), &c.text_config)?;
-136
-137        let vision_model =
-138            ChineseClipVisionTransformer::new(vs.pp("vision_model"), &c.vision_config)?;
-139
-140        let vision_embed_dim = c.vision_config.hidden_size;
-141        let vision_projection = nn::linear_no_bias(
-142            vision_embed_dim,
-143            c.projection_dim,
-144            vs.pp("visual_projection"),
-145        )?;
-146
-147        let text_embed_dim = c.text_config.hidden_size;
-148        let text_projection =
-149            nn::linear_no_bias(text_embed_dim, c.projection_dim, vs.pp("text_projection"))?;
-150
-151        let logit_scale = if vs.contains_tensor("logit_scale") {
-152            vs.get(&[], "logit_scale")?
-153        } else {
-154            Tensor::new(&[c.logit_scale_init_value], vs.device())?
-155        };
-156
-157        Ok(Self {
-158            text_model,
-159            vision_model,
-160            visual_projection: vision_projection,
-161            text_projection,
-162            logit_scale,
-163        })
-164    }
-165
-166    pub fn get_text_features(
-167        &self,
-168        input_ids: &Tensor,
-169        token_type_ids: Option<&Tensor>,
-170        attention_mask: Option<&Tensor>,
-171    ) -> Result<Tensor> {
-172        let output = self
-173            .text_model
-174            .forward(input_ids, token_type_ids, attention_mask)?
-175            .contiguous()?;
-176        self.text_projection.forward(&output)
-177    }
-178
-179    pub fn get_image_features(&self, pixel_values: &Tensor) -> Result<Tensor> {
-180        pixel_values
-181            .apply(&self.vision_model)?
-182            .apply(&self.visual_projection)
-183    }
-184
-185    pub fn forward(
-186        &self,
-187        pixel_values: &Tensor,
-188        input_ids: &Tensor,
-189        token_type_ids: Option<&Tensor>,
-190        attention_mask: Option<&Tensor>,
-191    ) -> Result<(Tensor, Tensor)> {
-192        let image_features = self.get_image_features(pixel_values)?;
-193        let text_features = self.get_text_features(input_ids, token_type_ids, attention_mask)?;
-194
-195        let image_features_normalized = div_l2_norm(&image_features)?;
-196        let text_features_normalized = div_l2_norm(&text_features)?;
-197
-198        let logits_per_text = text_features_normalized.matmul(&image_features_normalized.t()?)?;
-199        let logit_scale = self.logit_scale.exp()?;
-200        let logits_per_text = logits_per_text.broadcast_mul(&logit_scale)?;
-201        let logits_per_image = logits_per_text.t()?;
-202        Ok((logits_per_text, logits_per_image))
-203    }
-204}
-205
-206pub fn div_l2_norm(v: &Tensor) -> Result<Tensor> {
-207    let l2_norm = v.sqr()?.sum_keepdim(D::Minus1)?.sqrt()?;
-208    v.broadcast_div(&l2_norm)
-209}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/chinese_clip/text_model.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/chinese_clip/text_model.rs.html deleted file mode 100644 index 23ba571..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/chinese_clip/text_model.rs.html +++ /dev/null @@ -1,541 +0,0 @@ -text_model.rs - source

candle_transformers/models/chinese_clip/
text_model.rs

1//! Chinese contrastive Language-Image Pre-Training
-2//!
-3//! Chinese contrastive Language-Image Pre-Training (CLIP) is an architecture trained on
-4//! pairs of images with related texts.
-5//!
-6//! - 💻 [Chinese-CLIP](https://github.com/OFA-Sys/Chinese-CLIP)
-7//! - 💻 [HF](https://github.com/huggingface/transformers/blob/5af7d41e49bbfc8319f462eb45253dcb3863dfb7/src/transformers/models/chinese_clip/modeling_chinese_clip.py)
-8
-9use candle::{DType, Device, IndexOp, Module, Result, Tensor};
-10use candle_nn as nn;
-11
-12use super::Activation;
-13
-14/// Type of position embedding. Choose one of `"absolute"`, `"relative_key"`, `"relative_key_query"`. For
-15/// positional embeddings use `"absolute"`. For more information on `"relative_key"`, please refer to
-16/// [Self-Attention with Relative Position Representations (Shaw et al.)](https://arxiv.org/abs/1803.02155).
-17/// For more information on `"relative_key_query"`, please refer to *Method 4* in [Improve Transformer Models
-18/// with Better Relative Position Embeddings (Huang et al.)](https://arxiv.org/abs/2009.13658).
-19#[derive(Clone, Debug)]
-20pub enum PositionEmbeddingType {
-21    Absolute,
-22    RelativeKey,
-23    RelativeKeyQuery,
-24}
-25
-26#[derive(Clone, Debug)]
-27pub struct ChineseClipTextConfig {
-28    pub vocab_size: usize,
-29    pub hidden_size: usize,
-30    pub num_hidden_layers: usize,
-31    pub num_attention_heads: usize,
-32    pub intermediate_size: usize,
-33    pub hidden_act: Activation,
-34    pub hidden_dropout_prob: f32,
-35    pub attention_probs_dropout_prob: f64,
-36    pub max_position_embeddings: usize,
-37    pub type_vocab_size: usize,
-38    pub initializer_range: f64,
-39    pub initializer_factor: f64,
-40    pub layer_norm_eps: f64,
-41    pub pad_token_id: usize,
-42    pub position_embedding_type: PositionEmbeddingType,
-43    pub use_cache: bool,
-44}
-45
-46impl Default for ChineseClipTextConfig {
-47    fn default() -> Self {
-48        Self {
-49            vocab_size: 30522,
-50            hidden_size: 768,
-51            num_hidden_layers: 12,
-52            num_attention_heads: 12,
-53            intermediate_size: 3072,
-54            hidden_act: Activation::Gelu,
-55            hidden_dropout_prob: 0.1,
-56            attention_probs_dropout_prob: 0.1,
-57            max_position_embeddings: 512,
-58            type_vocab_size: 2,
-59            initializer_range: 0.02,
-60            initializer_factor: 1.0,
-61            layer_norm_eps: 1e-12,
-62            pad_token_id: 0,
-63            position_embedding_type: PositionEmbeddingType::Absolute,
-64            use_cache: true,
-65        }
-66    }
-67}
-68
-69impl ChineseClipTextConfig {
-70    /// [referer](https://huggingface.co/OFA-Sys/chinese-clip-vit-base-patch16/blob/main/config.json)
-71    pub fn clip_vit_base_patch16() -> Self {
-72        Self {
-73            vocab_size: 21128,
-74            hidden_size: 768,
-75            num_hidden_layers: 12,
-76            num_attention_heads: 12,
-77            intermediate_size: 3072,
-78            hidden_act: Activation::Gelu,
-79            hidden_dropout_prob: 0.1,
-80            attention_probs_dropout_prob: 0.1,
-81            max_position_embeddings: 512,
-82            type_vocab_size: 2,
-83            initializer_range: 0.02,
-84            initializer_factor: 1.0,
-85            layer_norm_eps: 1e-12,
-86            pad_token_id: 0,
-87            position_embedding_type: PositionEmbeddingType::Absolute,
-88            use_cache: true,
-89        }
-90    }
-91}
-92
-93#[derive(Clone, Debug)]
-94pub struct ChineseClipTextEmbeddings {
-95    word_embeddings: nn::Embedding,
-96    position_embeddings: nn::Embedding,
-97    token_type_embeddings: nn::Embedding,
-98    layer_norm: nn::LayerNorm,
-99    dropout: nn::Dropout,
-100    position_embedding_type: PositionEmbeddingType,
-101    position_ids: Tensor,
-102    token_type_ids: Tensor,
-103}
-104
-105impl ChineseClipTextEmbeddings {
-106    pub fn new(var: nn::VarBuilder, config: &ChineseClipTextConfig) -> Result<Self> {
-107        let word_embeddings = nn::embedding(
-108            config.vocab_size,
-109            config.hidden_size,
-110            var.pp("word_embeddings"),
-111        )?;
-112        let position_embeddings = nn::embedding(
-113            config.max_position_embeddings,
-114            config.hidden_size,
-115            var.pp("position_embeddings"),
-116        )?;
-117        let token_type_embeddings = nn::embedding(
-118            config.type_vocab_size,
-119            config.hidden_size,
-120            var.pp("token_type_embeddings"),
-121        )?;
-122        let layer_norm = nn::layer_norm::<f64>(
-123            config.hidden_size,
-124            config.layer_norm_eps,
-125            var.pp("LayerNorm"),
-126        )?;
-127        let dropout = nn::Dropout::new(config.hidden_dropout_prob);
-128        let position_ids =
-129            Tensor::arange(0u32, config.max_position_embeddings as u32, var.device())?
-130                .unsqueeze(0)?;
-131        let token_type_ids = Tensor::zeros(position_ids.shape(), DType::I64, var.device())?;
-132
-133        Ok(Self {
-134            word_embeddings,
-135            position_embeddings,
-136            token_type_embeddings,
-137            layer_norm,
-138            dropout,
-139            position_embedding_type: config.position_embedding_type.clone(),
-140            position_ids,
-141            token_type_ids,
-142        })
-143    }
-144
-145    fn forward(&self, xs: &Tensor, token_type_ids: Option<&Tensor>) -> Result<Tensor> {
-146        let (_batch_size, seq_length) = xs.dims2()?;
-147        let position_ids = (0..seq_length as u32).collect::<Vec<_>>();
-148        let position_ids = self.position_ids.index_select(
-149            &Tensor::new(&position_ids[..], self.position_ids.device())?,
-150            1,
-151        )?;
-152
-153        let word_embeddings = self.word_embeddings.forward(xs)?;
-154
-155        let token_type_ids = match token_type_ids {
-156            Some(token_type_ids) => token_type_ids,
-157            None => &self.token_type_ids.i((.., 0..seq_length))?,
-158        };
-159        let token_type_ids = token_type_ids.expand(xs.shape())?;
-160        let token_type_embeddings = self.token_type_embeddings.forward(&token_type_ids)?;
-161
-162        let embeddings = (&word_embeddings + token_type_embeddings)?;
-163        let embeddings = match self.position_embedding_type {
-164            PositionEmbeddingType::Absolute => {
-165                let position_embeddings = self.position_embeddings.forward(&position_ids)?;
-166                let position_embeddings = position_embeddings.expand(embeddings.shape())?;
-167                (embeddings + position_embeddings)?
-168            }
-169            _ => embeddings,
-170        };
-171        let embeddings = self.layer_norm.forward(&embeddings)?;
-172        let embeddings = self.dropout.forward(&embeddings, false)?;
-173        Ok(embeddings)
-174    }
-175}
-176
-177/// Copied from [`crate::models::bert::BertSelfOutput`] to [`ChineseClipTextSelfOutput`]
-178#[derive(Clone, Debug)]
-179struct ChineseClipTextSelfOutput {
-180    dense: nn::Linear,
-181    layer_norm: nn::LayerNorm,
-182    dropout: nn::Dropout,
-183    span: tracing::Span,
-184}
-185
-186impl ChineseClipTextSelfOutput {
-187    fn new(var: nn::VarBuilder, config: &ChineseClipTextConfig) -> Result<Self> {
-188        let dense = nn::linear(config.hidden_size, config.hidden_size, var.pp("dense"))?;
-189        let layer_norm = nn::layer_norm(
-190            config.hidden_size,
-191            config.layer_norm_eps,
-192            var.pp("LayerNorm"),
-193        )?;
-194        let dropout = nn::Dropout::new(config.hidden_dropout_prob);
-195        Ok(Self {
-196            dense,
-197            layer_norm,
-198            dropout,
-199            span: tracing::span!(tracing::Level::TRACE, "self-out"),
-200        })
-201    }
-202
-203    fn forward(&self, hidden_states: &Tensor, input_tensor: &Tensor) -> Result<Tensor> {
-204        let _enter = self.span.enter();
-205        let hidden_states = self.dense.forward(hidden_states)?;
-206        let hidden_states = self.dropout.forward(&hidden_states, false)?;
-207        self.layer_norm.forward(&(hidden_states + input_tensor)?)
-208    }
-209}
-210
-211/// Copied from [`crate::models::bert::BertSelfAttention`] to [`ChineseClipTextSelfAttention`]
-212#[derive(Clone, Debug)]
-213struct ChineseClipTextSelfAttention {
-214    query: nn::Linear,
-215    key: nn::Linear,
-216    value: nn::Linear,
-217    dropout: nn::Dropout,
-218    num_attention_heads: usize,
-219    attention_head_size: usize,
-220    span: tracing::Span,
-221    span_softmax: tracing::Span,
-222}
-223
-224impl ChineseClipTextSelfAttention {
-225    fn new(var: nn::VarBuilder, config: &ChineseClipTextConfig) -> Result<Self> {
-226        let attention_head_size = config.hidden_size / config.num_attention_heads;
-227        let all_head_size = config.num_attention_heads * attention_head_size;
-228        let dropout = nn::Dropout::new(config.hidden_dropout_prob);
-229        let hidden_size = config.hidden_size;
-230        let query = nn::linear(hidden_size, all_head_size, var.pp("query"))?;
-231        let value = nn::linear(hidden_size, all_head_size, var.pp("value"))?;
-232        let key = nn::linear(hidden_size, all_head_size, var.pp("key"))?;
-233        Ok(Self {
-234            query,
-235            key,
-236            value,
-237            dropout,
-238            num_attention_heads: config.num_attention_heads,
-239            attention_head_size,
-240            span: tracing::span!(tracing::Level::TRACE, "self-attn"),
-241            span_softmax: tracing::span!(tracing::Level::TRACE, "softmax"),
-242        })
-243    }
-244
-245    fn transpose_for_scores(&self, xs: &Tensor) -> Result<Tensor> {
-246        let mut new_x_shape = xs.dims().to_vec();
-247        new_x_shape.pop();
-248        new_x_shape.push(self.num_attention_heads);
-249        new_x_shape.push(self.attention_head_size);
-250        let xs = xs.reshape(new_x_shape.as_slice())?.transpose(1, 2)?;
-251        xs.contiguous()
-252    }
-253
-254    fn forward(&self, hidden_states: &Tensor, attention_mask: &Tensor) -> Result<Tensor> {
-255        let _enter = self.span.enter();
-256        let query_layer = self.query.forward(hidden_states)?;
-257        let key_layer = self.key.forward(hidden_states)?;
-258        let value_layer = self.value.forward(hidden_states)?;
-259
-260        let query_layer = self.transpose_for_scores(&query_layer)?;
-261        let key_layer = self.transpose_for_scores(&key_layer)?;
-262        let value_layer = self.transpose_for_scores(&value_layer)?;
-263
-264        let attention_scores = query_layer.matmul(&key_layer.t()?)?;
-265        let attention_scores = (attention_scores / (self.attention_head_size as f64).sqrt())?;
-266        let attention_scores = attention_scores.broadcast_add(attention_mask)?;
-267        let attention_probs = {
-268            let _enter_sm = self.span_softmax.enter();
-269            nn::ops::softmax(&attention_scores, candle::D::Minus1)?
-270        };
-271        let attention_probs = self.dropout.forward(&attention_probs, false)?;
-272
-273        let context_layer = attention_probs.matmul(&value_layer)?;
-274        let context_layer = context_layer.transpose(1, 2)?.contiguous()?;
-275        let context_layer = context_layer.flatten_from(candle::D::Minus2)?;
-276        Ok(context_layer)
-277    }
-278}
-279
-280/// Copied from [`crate::models::bert::BertAttention`] to [`ChineseClipTextAttention`]
-281#[derive(Clone, Debug)]
-282struct ChineseClipTextAttention {
-283    self_attention: ChineseClipTextSelfAttention,
-284    self_output: ChineseClipTextSelfOutput,
-285    span: tracing::Span,
-286}
-287
-288impl ChineseClipTextAttention {
-289    fn new(var: nn::VarBuilder, config: &ChineseClipTextConfig) -> Result<Self> {
-290        let self_attention = ChineseClipTextSelfAttention::new(var.pp("self"), config)?;
-291        let self_output = ChineseClipTextSelfOutput::new(var.pp("output"), config)?;
-292        Ok(Self {
-293            self_attention,
-294            self_output,
-295            span: tracing::span!(tracing::Level::TRACE, "attn"),
-296        })
-297    }
-298
-299    fn forward(&self, hidden_states: &Tensor, attention_mask: &Tensor) -> Result<Tensor> {
-300        let _enter = self.span.enter();
-301        let self_outputs = self.self_attention.forward(hidden_states, attention_mask)?;
-302        let attention_output = self.self_output.forward(&self_outputs, hidden_states)?;
-303        Ok(attention_output)
-304    }
-305}
-306
-307type HiddenActLayer = Activation;
-308
-309/// Copied from [`crate::models::bert::BertIntermediate`] to [`ChineseClipTextIntermediate`]
-310#[derive(Clone, Debug)]
-311struct ChineseClipTextIntermediate {
-312    dense: nn::Linear,
-313    intermediate_act: HiddenActLayer,
-314    span: tracing::Span,
-315}
-316
-317impl ChineseClipTextIntermediate {
-318    fn new(var: nn::VarBuilder, config: &ChineseClipTextConfig) -> Result<Self> {
-319        let dense = nn::linear(
-320            config.hidden_size,
-321            config.intermediate_size,
-322            var.pp("dense"),
-323        )?;
-324        Ok(Self {
-325            dense,
-326            intermediate_act: config.hidden_act,
-327            span: tracing::span!(tracing::Level::TRACE, "inter"),
-328        })
-329    }
-330}
-331
-332impl Module for ChineseClipTextIntermediate {
-333    fn forward(&self, hidden_states: &Tensor) -> Result<Tensor> {
-334        let _enter = self.span.enter();
-335        let hidden_states = self.dense.forward(hidden_states)?;
-336        let ys = self.intermediate_act.forward(&hidden_states)?;
-337        Ok(ys)
-338    }
-339}
-340
-341/// Copied from [`crate::models::bert::BertOutput`] to [`ChineseClipTextOutput`]
-342#[derive(Clone, Debug)]
-343struct ChineseClipTextOutput {
-344    dense: nn::Linear,
-345    layer_norm: nn::LayerNorm,
-346    dropout: nn::Dropout,
-347    span: tracing::Span,
-348}
-349
-350impl ChineseClipTextOutput {
-351    fn new(var: nn::VarBuilder, config: &ChineseClipTextConfig) -> Result<Self> {
-352        let dense = nn::linear(
-353            config.intermediate_size,
-354            config.hidden_size,
-355            var.pp("dense"),
-356        )?;
-357        let layer_norm = nn::layer_norm(
-358            config.hidden_size,
-359            config.layer_norm_eps,
-360            var.pp("LayerNorm"),
-361        )?;
-362        let dropout = nn::Dropout::new(config.hidden_dropout_prob);
-363        Ok(Self {
-364            dense,
-365            layer_norm,
-366            dropout,
-367            span: tracing::span!(tracing::Level::TRACE, "out"),
-368        })
-369    }
-370
-371    fn forward(&self, hidden_states: &Tensor, input_tensor: &Tensor) -> Result<Tensor> {
-372        let _enter = self.span.enter();
-373        let hidden_states = self.dense.forward(hidden_states)?;
-374        let hidden_states = self.dropout.forward(&hidden_states, false)?;
-375        self.layer_norm.forward(&(hidden_states + input_tensor)?)
-376    }
-377}
-378
-379/// Copied from [`crate::models::bert::BertLayer`] to [`ChineseClipTextLayer`]
-380#[derive(Clone, Debug)]
-381struct ChineseClipTextLayer {
-382    attention: ChineseClipTextAttention,
-383    intermediate: ChineseClipTextIntermediate,
-384    output: ChineseClipTextOutput,
-385    span: tracing::Span,
-386}
-387
-388impl ChineseClipTextLayer {
-389    fn new(var: nn::VarBuilder, config: &ChineseClipTextConfig) -> Result<Self> {
-390        let attention = ChineseClipTextAttention::new(var.pp("attention"), config)?;
-391        let intermediate = ChineseClipTextIntermediate::new(var.pp("intermediate"), config)?;
-392        let output = ChineseClipTextOutput::new(var.pp("output"), config)?;
-393        Ok(Self {
-394            attention,
-395            intermediate,
-396            output,
-397            span: tracing::span!(tracing::Level::TRACE, "layer"),
-398        })
-399    }
-400
-401    fn forward(&self, hidden_states: &Tensor, attention_mask: &Tensor) -> Result<Tensor> {
-402        let _enter = self.span.enter();
-403        let attention_output = self.attention.forward(hidden_states, attention_mask)?;
-404        // https://github.com/huggingface/transformers/blob/6eedfa6dd15dc1e22a55ae036f681914e5a0d9a1/src/transformers/models/bert/modeling_bert.py#L523
-405        let intermediate_output = self.intermediate.forward(&attention_output)?;
-406        let layer_output = self
-407            .output
-408            .forward(&intermediate_output, &attention_output)?;
-409        Ok(layer_output)
-410    }
-411}
-412
-413#[derive(Clone, Debug)]
-414struct Tanh;
-415
-416impl Tanh {
-417    pub fn new() -> Self {
-418        Self {}
-419    }
-420}
-421impl Module for Tanh {
-422    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-423        xs.tanh()
-424    }
-425}
-426
-427#[derive(Clone, Debug)]
-428struct ChineseClipTextPooler {
-429    dense: nn::Linear,
-430    activation: Tanh,
-431}
-432
-433impl ChineseClipTextPooler {
-434    pub fn new(var: nn::VarBuilder, config: &ChineseClipTextConfig) -> Result<Self> {
-435        let dense = nn::linear(config.hidden_size, config.hidden_size, var.pp("dense"))?;
-436        let activation = Tanh::new();
-437        Ok(Self { dense, activation })
-438    }
-439}
-440
-441impl Module for ChineseClipTextPooler {
-442    fn forward(&self, hidden_states: &Tensor) -> Result<Tensor> {
-443        let first_token_tensor = hidden_states.i((.., 0))?;
-444        let pooled_output = self.dense.forward(&first_token_tensor)?;
-445        let pooled_output = self.activation.forward(&pooled_output)?;
-446        Ok(pooled_output)
-447    }
-448}
-449
-450#[derive(Clone, Debug)]
-451struct ChineseClipTextEncoder {
-452    layers: Vec<ChineseClipTextLayer>,
-453    span: tracing::Span,
-454}
-455
-456impl ChineseClipTextEncoder {
-457    fn new(var: nn::VarBuilder, config: &ChineseClipTextConfig) -> Result<Self> {
-458        let layers = (0..config.num_hidden_layers)
-459            .map(|index| ChineseClipTextLayer::new(var.pp(format!("layer.{index}")), config))
-460            .collect::<Result<Vec<_>>>()?;
-461        let span = tracing::span!(tracing::Level::TRACE, "encoder");
-462        Ok(ChineseClipTextEncoder { layers, span })
-463    }
-464
-465    fn forward(&self, hidden_states: &Tensor, attention_mask: &Tensor) -> Result<Tensor> {
-466        let _enter = self.span.enter();
-467        let mut hidden_states = hidden_states.clone();
-468        // Use a loop rather than a fold as it's easier to modify when adding debug/...
-469        for layer in self.layers.iter() {
-470            hidden_states = layer.forward(&hidden_states, attention_mask)?
-471        }
-472        Ok(hidden_states)
-473    }
-474}
-475
-476#[derive(Clone, Debug)]
-477pub struct ChineseClipTextTransformer {
-478    embeddings: ChineseClipTextEmbeddings,
-479    encoder: ChineseClipTextEncoder,
-480    pooler: Option<ChineseClipTextPooler>,
-481    pub device: Device,
-482    span: tracing::Span,
-483}
-484
-485impl ChineseClipTextTransformer {
-486    pub fn new(var: nn::VarBuilder, config: &ChineseClipTextConfig) -> Result<Self> {
-487        let embeddings = ChineseClipTextEmbeddings::new(var.pp("embeddings"), config)?;
-488        let encoder = ChineseClipTextEncoder::new(var.pp("encoder"), config)?;
-489        // see: https://github.com/huggingface/transformers/blob/e40bb4845e0eefb52ec1e9cac9c2446ab36aef81/src/transformers/models/chinese_clip/modeling_chinese_clip.py#L1362
-490        // In the original Python version of the code, the pooler is not used, and there are no parameters for the pooler in the weight file.
-491        let pooler = if var.contains_tensor("pooler") {
-492            Some(ChineseClipTextPooler::new(var.pp("pooler"), config)?)
-493        } else {
-494            None
-495        };
-496        Ok(Self {
-497            embeddings,
-498            encoder,
-499            pooler,
-500            device: var.device().clone(),
-501            span: tracing::span!(tracing::Level::TRACE, "model"),
-502        })
-503    }
-504
-505    pub fn forward(
-506        &self,
-507        input_ids: &Tensor,
-508        token_type_ids: Option<&Tensor>,
-509        attention_mask: Option<&Tensor>,
-510    ) -> Result<Tensor> {
-511        let _enter = self.span.enter();
-512        let embedding_output = self.embeddings.forward(input_ids, token_type_ids)?;
-513        let attention_mask = match attention_mask {
-514            Some(attention_mask) => attention_mask.clone(),
-515            None => input_ids.ones_like()?,
-516        };
-517        // https://github.com/huggingface/transformers/blob/6eedfa6dd15dc1e22a55ae036f681914e5a0d9a1/src/transformers/models/bert/modeling_bert.py#L995
-518        let attention_mask = get_extended_attention_mask(&attention_mask, DType::F32)?;
-519        let encoder_outputs = self.encoder.forward(&embedding_output, &attention_mask)?;
-520        let encoder_output = encoder_outputs.i((.., 0, ..))?;
-521        let pooled_output = match &self.pooler {
-522            Some(pooler) => pooler.forward(&encoder_output)?,
-523            None => encoder_output,
-524        };
-525
-526        Ok(pooled_output)
-527    }
-528}
-529
-530fn get_extended_attention_mask(attention_mask: &Tensor, dtype: DType) -> Result<Tensor> {
-531    let attention_mask = match attention_mask.rank() {
-532        3 => attention_mask.unsqueeze(1)?,
-533        2 => attention_mask.unsqueeze(1)?.unsqueeze(1)?,
-534        _ => candle::bail!("Wrong shape for input_ids or attention_mask"),
-535    };
-536    let attention_mask = attention_mask.to_dtype(dtype)?;
-537    // torch.finfo(dtype).min
-538    (attention_mask.ones_like()? - &attention_mask)?
-539        .broadcast_mul(&Tensor::try_from(f32::MIN)?.to_device(attention_mask.device())?)
-540}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/chinese_clip/vision_model.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/chinese_clip/vision_model.rs.html deleted file mode 100644 index c618019..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/chinese_clip/vision_model.rs.html +++ /dev/null @@ -1,386 +0,0 @@ -vision_model.rs - source

candle_transformers/models/chinese_clip/
vision_model.rs

1//! Chinese contrastive Language-Image Pre-Training
-2//!
-3//! Chinese contrastive Language-Image Pre-Training (CLIP) is an architecture trained on
-4//! pairs of images with related texts.
-5//!
-6//! - 💻 [Chinese-CLIP](https://github.com/OFA-Sys/Chinese-CLIP)
-7//! - 💻 [GH](https://github.com/huggingface/transformers/blob/5af7d41e49bbfc8319f462eb45253dcb3863dfb7/src/transformers/models/chinese_clip/modeling_chinese_clip.py_
-8
-9use candle::{Context, DType, IndexOp, Module, Result, Shape, Tensor, D};
-10use candle_nn as nn;
-11
-12use super::{Activation, EncoderConfig};
-13
-14#[derive(Clone, Debug)]
-15pub struct ChineseClipVisionConfig {
-16    pub hidden_size: usize,
-17    pub intermediate_size: usize,
-18    pub projection_dim: usize,
-19    pub num_hidden_layers: usize,
-20    pub num_attention_heads: usize,
-21    pub num_channels: usize,
-22    pub image_size: usize,
-23    pub patch_size: usize,
-24    pub hidden_act: Activation,
-25    pub layer_norm_eps: f64,
-26    pub attention_dropout: f32,
-27    pub initializer_range: f32,
-28    pub initializer_factor: f32,
-29}
-30
-31impl Default for ChineseClipVisionConfig {
-32    fn default() -> Self {
-33        ChineseClipVisionConfig {
-34            hidden_size: 768,
-35            intermediate_size: 3072,
-36            projection_dim: 512,
-37            num_hidden_layers: 12,
-38            num_attention_heads: 12,
-39            num_channels: 3,
-40            image_size: 224,
-41            patch_size: 32,
-42            hidden_act: Activation::QuickGelu,
-43            layer_norm_eps: 1e-5,
-44            attention_dropout: 0.0,
-45            initializer_range: 0.02,
-46            initializer_factor: 1.0,
-47        }
-48    }
-49}
-50
-51impl ChineseClipVisionConfig {
-52    /// [referer](https://huggingface.co/OFA-Sys/chinese-clip-vit-base-patch16/blob/main/config.json)
-53    pub fn clip_vit_base_patch16() -> Self {
-54        Self {
-55            hidden_size: 768,
-56            intermediate_size: 3072,
-57            projection_dim: 512,
-58            num_hidden_layers: 12,
-59            num_attention_heads: 12,
-60            num_channels: 3,
-61            image_size: 224,
-62            patch_size: 16,
-63            hidden_act: Activation::QuickGelu,
-64            layer_norm_eps: 1e-5,
-65            attention_dropout: 0.0,
-66            initializer_range: 0.02,
-67            initializer_factor: 1.0,
-68        }
-69    }
-70}
-71
-72#[derive(Clone, Debug)]
-73pub struct ChineseClipVisionEmbeddings {
-74    patch_embedding: nn::Conv2d,
-75    position_ids: Tensor,
-76    class_embedding: Tensor,
-77    position_embedding: nn::Embedding,
-78}
-79
-80impl ChineseClipVisionEmbeddings {
-81    pub fn new(var: nn::VarBuilder, config: &ChineseClipVisionConfig) -> Result<Self> {
-82        let embed_dim = config.hidden_size;
-83        // originally nn.Parameter
-84        let class_embedding = if var.contains_tensor("class_embedding") {
-85            var.get(embed_dim, "class_embedding")?
-86        } else {
-87            Tensor::randn(0f32, 1f32, embed_dim, var.device())?
-88        };
-89
-90        let num_patches = (config.image_size / config.patch_size).pow(2);
-91        let num_positions = num_patches + 1;
-92        let position_ids = Tensor::arange(0, num_positions as i64, var.device())?;
-93
-94        let conv2dconfig = nn::Conv2dConfig {
-95            stride: config.patch_size,
-96            ..Default::default()
-97        };
-98        let position_embedding =
-99            nn::embedding(num_positions, embed_dim, var.pp("position_embedding"))?;
-100        let patch_embedding = nn::conv2d_no_bias(
-101            config.num_channels,
-102            embed_dim,
-103            config.patch_size,
-104            conv2dconfig,
-105            var.pp("patch_embedding"),
-106        )?;
-107        Ok(Self {
-108            patch_embedding,
-109            position_ids,
-110            class_embedding,
-111            position_embedding,
-112        })
-113    }
-114}
-115
-116impl Module for ChineseClipVisionEmbeddings {
-117    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-118        let batch_size = xs.shape().dims();
-119        let patch_embeds = self
-120            .patch_embedding
-121            .forward(xs)?
-122            .flatten_from(2)?
-123            .transpose(1, 2)?;
-124        let shape = Shape::from((batch_size[0], 1, self.class_embedding.dim(D::Minus1)?));
-125        let class_embeds = self.class_embedding.expand(shape)?;
-126        let embeddings = Tensor::cat(&[class_embeds, patch_embeds], 1)?;
-127        let position_embedding = self.position_embedding.forward(&self.position_ids)?;
-128        embeddings.broadcast_add(&position_embedding)
-129    }
-130}
-131
-132#[derive(Clone, Debug)]
-133struct ChineseClipVisionAttention {
-134    k_proj: nn::Linear,
-135    v_proj: nn::Linear,
-136    q_proj: nn::Linear,
-137    out_proj: nn::Linear,
-138    head_dim: usize,
-139    scale: f64,
-140    num_attention_heads: usize,
-141}
-142
-143impl ChineseClipVisionAttention {
-144    fn new(var: nn::VarBuilder, config: &EncoderConfig) -> Result<Self> {
-145        let embed_dim = config.embed_dim();
-146        let num_attention_heads = config.num_attention_heads();
-147        let k_proj = nn::linear(embed_dim, embed_dim, var.pp("k_proj"))?;
-148        let v_proj = nn::linear(embed_dim, embed_dim, var.pp("v_proj"))?;
-149        let q_proj = nn::linear(embed_dim, embed_dim, var.pp("q_proj"))?;
-150        let out_proj = nn::linear(embed_dim, embed_dim, var.pp("out_proj"))?;
-151        let head_dim = embed_dim / num_attention_heads;
-152        let scale = (head_dim as f64).powf(-0.5);
-153
-154        Ok(ChineseClipVisionAttention {
-155            k_proj,
-156            v_proj,
-157            q_proj,
-158            out_proj,
-159            head_dim,
-160            scale,
-161            num_attention_heads,
-162        })
-163    }
-164
-165    fn shape(&self, xs: &Tensor, seq_len: usize, bsz: usize) -> Result<Tensor> {
-166        xs.reshape((bsz, seq_len, self.num_attention_heads, self.head_dim))?
-167            .transpose(1, 2)?
-168            .contiguous()
-169    }
-170
-171    fn forward(&self, xs: &Tensor, causal_attention_mask: Option<&Tensor>) -> Result<Tensor> {
-172        let in_dtype = xs.dtype();
-173        let (bsz, seq_len, embed_dim) = xs.dims3()?;
-174
-175        let proj_shape = (bsz * self.num_attention_heads, seq_len, self.head_dim);
-176        let query_states = self
-177            .shape(&(self.q_proj.forward(xs)? * self.scale)?, seq_len, bsz)?
-178            .reshape(proj_shape)?
-179            .to_dtype(DType::F32)?;
-180        let key_states = self
-181            .shape(&self.k_proj.forward(xs)?, seq_len, bsz)?
-182            .reshape(proj_shape)?
-183            .to_dtype(DType::F32)?;
-184        let value_states = self
-185            .shape(&self.v_proj.forward(xs)?, seq_len, bsz)?
-186            .reshape(proj_shape)?
-187            .to_dtype(DType::F32)?;
-188
-189        let attn_weights = query_states.matmul(&key_states.transpose(1, 2)?)?;
-190
-191        let src_len = key_states.dim(1)?;
-192
-193        let attn_weights = if let Some(causal_attention_mask) = causal_attention_mask {
-194            attn_weights
-195                .reshape((bsz, self.num_attention_heads, seq_len, src_len))?
-196                .broadcast_add(causal_attention_mask)?
-197                .reshape((bsz * self.num_attention_heads, seq_len, src_len))?
-198        } else {
-199            attn_weights
-200        };
-201
-202        let attn_weights = nn::ops::softmax(&attn_weights, D::Minus1)?;
-203
-204        let attn_output = attn_weights.matmul(&value_states)?.to_dtype(in_dtype)?;
-205        let attn_output = attn_output
-206            .reshape((bsz, self.num_attention_heads, seq_len, self.head_dim))?
-207            .transpose(1, 2)?
-208            .reshape((bsz, seq_len, embed_dim))?;
-209        self.out_proj.forward(&attn_output)
-210    }
-211}
-212
-213#[derive(Clone, Debug)]
-214struct ChineseClipVisionMlp {
-215    fc1: nn::Linear,
-216    fc2: nn::Linear,
-217    activation: Activation,
-218}
-219
-220impl ChineseClipVisionMlp {
-221    fn new(var: nn::VarBuilder, config: &EncoderConfig) -> Result<Self> {
-222        let fc1 = nn::linear(
-223            config.embed_dim(),
-224            config.intermediate_size(),
-225            var.pp("fc1"),
-226        )?;
-227        let fc2 = nn::linear(
-228            config.intermediate_size(),
-229            config.embed_dim(),
-230            var.pp("fc2"),
-231        )?;
-232
-233        Ok(ChineseClipVisionMlp {
-234            fc1,
-235            fc2,
-236            activation: config.activation(),
-237        })
-238    }
-239}
-240
-241impl ChineseClipVisionMlp {
-242    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-243        let xs = self.fc1.forward(xs)?;
-244        self.fc2.forward(&self.activation.forward(&xs)?)
-245    }
-246}
-247
-248#[derive(Clone, Debug)]
-249struct ChineseClipVisionEncoderLayer {
-250    self_attn: ChineseClipVisionAttention,
-251    layer_norm1: nn::LayerNorm,
-252    mlp: ChineseClipVisionMlp,
-253    layer_norm2: nn::LayerNorm,
-254}
-255
-256impl ChineseClipVisionEncoderLayer {
-257    fn new(var: nn::VarBuilder, config: &EncoderConfig) -> Result<Self> {
-258        let self_attn = ChineseClipVisionAttention::new(var.pp("self_attn"), config)?;
-259        let layer_norm1 = nn::layer_norm(
-260            config.embed_dim(),
-261            config.layer_norm_eps(),
-262            var.pp("layer_norm1"),
-263        )?;
-264        let mlp = ChineseClipVisionMlp::new(var.pp("mlp"), config)?;
-265        let layer_norm2 = nn::layer_norm(
-266            config.embed_dim(),
-267            config.layer_norm_eps(),
-268            var.pp("layer_norm2"),
-269        )?;
-270
-271        Ok(ChineseClipVisionEncoderLayer {
-272            self_attn,
-273            layer_norm1,
-274            mlp,
-275            layer_norm2,
-276        })
-277    }
-278
-279    fn forward(&self, xs: &Tensor, causal_attention_mask: Option<&Tensor>) -> Result<Tensor> {
-280        let residual = xs;
-281        let xs = self.layer_norm1.forward(xs)?;
-282        let xs = self.self_attn.forward(&xs, causal_attention_mask)?;
-283        let xs = (xs + residual)?;
-284
-285        let residual = &xs;
-286        let xs = self.layer_norm2.forward(&xs)?;
-287        let xs = self.mlp.forward(&xs)?;
-288        xs + residual
-289    }
-290}
-291
-292#[derive(Clone, Debug)]
-293pub struct ChineseClipVisionEncoder {
-294    layers: Vec<ChineseClipVisionEncoderLayer>,
-295}
-296
-297impl ChineseClipVisionEncoder {
-298    pub fn new(var: nn::VarBuilder, config: &EncoderConfig) -> Result<Self> {
-299        let vs = var.pp("layers");
-300        let mut layers: Vec<ChineseClipVisionEncoderLayer> = Vec::new();
-301        for index in 0..config.num_hidden_layers() {
-302            let layer = ChineseClipVisionEncoderLayer::new(vs.pp(index.to_string()), config)?;
-303            layers.push(layer)
-304        }
-305        Ok(ChineseClipVisionEncoder { layers })
-306    }
-307
-308    pub fn forward(&self, xs: &Tensor, causal_attention_mask: Option<&Tensor>) -> Result<Tensor> {
-309        let mut xs = xs.clone();
-310        for layer in self.layers.iter() {
-311            xs = layer.forward(&xs, causal_attention_mask)?;
-312        }
-313        Ok(xs)
-314    }
-315
-316    // required by LLaVA
-317    pub fn output_hidden_states(
-318        &self,
-319        xs: &Tensor,
-320        causal_attention_mask: Option<&Tensor>,
-321    ) -> Result<Vec<Tensor>> {
-322        let mut xs = xs.clone();
-323        let mut hidden_states = Vec::new();
-324        for layer in self.layers.iter() {
-325            xs = layer.forward(&xs, causal_attention_mask)?;
-326            hidden_states.push(xs.clone());
-327        }
-328        Ok(hidden_states)
-329    }
-330}
-331
-332#[derive(Clone, Debug)]
-333pub struct ChineseClipVisionTransformer {
-334    embeddings: ChineseClipVisionEmbeddings,
-335    encoder: ChineseClipVisionEncoder,
-336    pre_layer_norm: nn::LayerNorm,
-337    final_layer_norm: nn::LayerNorm,
-338}
-339
-340impl ChineseClipVisionTransformer {
-341    pub fn new(var: nn::VarBuilder, config: &ChineseClipVisionConfig) -> Result<Self> {
-342        let embed_dim = config.hidden_size;
-343        let embeddings = ChineseClipVisionEmbeddings::new(var.pp("embeddings"), config)?;
-344        let pre_layer_norm =
-345            nn::layer_norm(embed_dim, config.layer_norm_eps, var.pp("pre_layrnorm"))?;
-346        let encoder = ChineseClipVisionEncoder::new(
-347            var.pp("encoder"),
-348            &EncoderConfig::Vision(config.clone()),
-349        )?;
-350        let final_layer_norm =
-351            nn::layer_norm(embed_dim, config.layer_norm_eps, var.pp("post_layernorm"))?;
-352        Ok(Self {
-353            embeddings,
-354            encoder,
-355            final_layer_norm,
-356            pre_layer_norm,
-357        })
-358    }
-359    // required by LLaVA
-360    pub fn output_hidden_states(&self, pixel_values: &Tensor) -> Result<Vec<Tensor>> {
-361        let hidden_states = pixel_values
-362            .apply(&self.embeddings)?
-363            .apply(&self.pre_layer_norm)?;
-364
-365        let mut result = self.encoder.output_hidden_states(&hidden_states, None)?;
-366        let encoder_outputs = result.last().context("no last")?;
-367        let pooled_output = encoder_outputs.i((.., 0, ..))?;
-368        result.push(self.final_layer_norm.forward(&pooled_output)?.clone());
-369        Ok(result)
-370    }
-371}
-372
-373impl Module for ChineseClipVisionTransformer {
-374    fn forward(&self, pixel_values: &Tensor) -> Result<Tensor> {
-375        let hidden_states = pixel_values
-376            .apply(&self.embeddings)?
-377            .apply(&self.pre_layer_norm)?;
-378
-379        let encoder_outputs = self.encoder.forward(&hidden_states, None)?;
-380
-381        // referer: https://github.com/huggingface/transformers/blob/f6fa0f0bf0796ac66f201f23bdb8585de1609add/src/transformers/models/clip/modeling_clip.py#L787
-382        let pooled_output = encoder_outputs.i((.., 0, ..))?;
-383        self.final_layer_norm.forward(&pooled_output)
-384    }
-385}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/clip/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/clip/mod.rs.html deleted file mode 100644 index ce12f5b..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/clip/mod.rs.html +++ /dev/null @@ -1,153 +0,0 @@ -mod.rs - source

candle_transformers/models/clip/
mod.rs

1//! Contrastive Language-Image Pre-Training
-2//!
-3//! Contrastive Language-Image Pre-Training (CLIP) is an architecture trained on
-4//! pairs of images with related texts.
-5//!
-6//! - 💻 [GH Link](https://github.com/openai/CLIP)
-7//! - 💻 Transformers Python [reference implementation](https://github.com/huggingface/transformers/tree/f6fa0f0bf0796ac66f201f23bdb8585de1609add/src/transformers/models/clip)
-8//! - 🤗 [HF Model](https://huggingface.co/openai/clip-vit-large-patch14-336)
-9//!
-10
-11use self::{
-12    text_model::{Activation, ClipTextTransformer},
-13    vision_model::ClipVisionTransformer,
-14};
-15use candle::{Result, Tensor, D};
-16
-17pub mod text_model;
-18pub mod vision_model;
-19
-20#[derive(Clone, Debug)]
-21pub struct ClipModel {
-22    text_model: ClipTextTransformer,
-23    vision_model: ClipVisionTransformer,
-24    visual_projection: candle_nn::Linear,
-25    text_projection: candle_nn::Linear,
-26    logit_scale: Tensor,
-27}
-28
-29#[derive(Clone, Debug)]
-30pub enum EncoderConfig {
-31    Text(text_model::ClipTextConfig),
-32    Vision(vision_model::ClipVisionConfig),
-33}
-34
-35impl EncoderConfig {
-36    pub fn embed_dim(&self) -> usize {
-37        match self {
-38            Self::Text(c) => c.embed_dim,
-39            Self::Vision(c) => c.embed_dim,
-40        }
-41    }
-42
-43    pub fn num_attention_heads(&self) -> usize {
-44        match self {
-45            Self::Text(c) => c.num_attention_heads,
-46            Self::Vision(c) => c.num_attention_heads,
-47        }
-48    }
-49
-50    pub fn intermediate_size(&self) -> usize {
-51        match self {
-52            Self::Text(c) => c.intermediate_size,
-53            Self::Vision(c) => c.intermediate_size,
-54        }
-55    }
-56
-57    pub fn num_hidden_layers(&self) -> usize {
-58        match self {
-59            Self::Text(c) => c.num_hidden_layers,
-60            Self::Vision(c) => c.num_hidden_layers,
-61        }
-62    }
-63
-64    pub fn activation(&self) -> Activation {
-65        match self {
-66            Self::Text(_c) => Activation::QuickGelu,
-67            Self::Vision(c) => c.activation,
-68        }
-69    }
-70}
-71
-72#[derive(Clone, Debug)]
-73pub struct ClipConfig {
-74    pub text_config: text_model::ClipTextConfig,
-75    pub vision_config: vision_model::ClipVisionConfig,
-76    pub logit_scale_init_value: f32,
-77    pub image_size: usize,
-78}
-79
-80impl ClipConfig {
-81    // base image size is 224, model size is 600Mb
-82    pub fn vit_base_patch32() -> Self {
-83        let text_config = text_model::ClipTextConfig::vit_base_patch32();
-84        let vision_config = vision_model::ClipVisionConfig::vit_base_patch32();
-85
-86        Self {
-87            text_config,
-88            vision_config,
-89            logit_scale_init_value: 2.6592,
-90            image_size: 224,
-91        }
-92    }
-93}
-94
-95impl ClipModel {
-96    pub fn new(vs: candle_nn::VarBuilder, c: &ClipConfig) -> Result<Self> {
-97        let text_model = ClipTextTransformer::new(vs.pp("text_model"), &c.text_config)?;
-98        let vision_model = ClipVisionTransformer::new(vs.pp("vision_model"), &c.vision_config)?;
-99        let visual_projection = candle_nn::linear_no_bias(
-100            c.vision_config.embed_dim,
-101            c.vision_config.projection_dim,
-102            vs.pp("visual_projection"),
-103        )?;
-104        let text_projection = candle_nn::linear_no_bias(
-105            c.text_config.embed_dim,
-106            c.text_config.projection_dim,
-107            vs.pp("text_projection"),
-108        )?;
-109        // originally nn.Parameter
-110        let logit_scale = if vs.contains_tensor("logit_scale") {
-111            vs.get(&[], "logit_scale")?
-112        } else {
-113            Tensor::new(&[c.logit_scale_init_value], vs.device())?
-114        };
-115        Ok(Self {
-116            text_model,
-117            vision_model,
-118            visual_projection,
-119            text_projection,
-120            logit_scale,
-121        })
-122    }
-123
-124    pub fn get_text_features(&self, input_ids: &Tensor) -> Result<Tensor> {
-125        input_ids
-126            .apply(&self.text_model)?
-127            .apply(&self.text_projection)
-128    }
-129
-130    pub fn get_image_features(&self, pixel_values: &Tensor) -> Result<Tensor> {
-131        pixel_values
-132            .apply(&self.vision_model)?
-133            .apply(&self.visual_projection)
-134    }
-135
-136    pub fn forward(&self, pixel_values: &Tensor, input_ids: &Tensor) -> Result<(Tensor, Tensor)> {
-137        let image_features = self.get_image_features(pixel_values)?;
-138        let text_features = self.get_text_features(input_ids)?;
-139        let image_features_normalized = div_l2_norm(&image_features)?;
-140        let text_features_normalized = div_l2_norm(&text_features)?;
-141        let logits_per_text = text_features_normalized.matmul(&image_features_normalized.t()?)?;
-142        let logit_scale = self.logit_scale.exp()?;
-143        let logits_per_text = logits_per_text.broadcast_mul(&logit_scale)?;
-144        let logits_per_image = logits_per_text.t()?;
-145        Ok((logits_per_text, logits_per_image))
-146    }
-147}
-148
-149pub fn div_l2_norm(v: &Tensor) -> Result<Tensor> {
-150    let l2_norm = v.sqr()?.sum_keepdim(D::Minus1)?.sqrt()?;
-151    v.broadcast_div(&l2_norm)
-152}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/clip/text_model.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/clip/text_model.rs.html deleted file mode 100644 index 65693d4..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/clip/text_model.rs.html +++ /dev/null @@ -1,348 +0,0 @@ -text_model.rs - source

candle_transformers/models/clip/
text_model.rs

1//! Contrastive Language-Image Pre-Training
-2//!
-3//! Contrastive Language-Image Pre-Training (CLIP) is an architecture trained on
-4//! pairs of images with related texts.
-5//!
-6//! - [GH](https://github.com/openai/CLIP)
-7//! - [Code](https://github.com/huggingface/transformers/tree/f6fa0f0bf0796ac66f201f23bdb8585de1609add/src/transformers/models/clip)
-8
-9use candle::{DType, Device, IndexOp, Result, Tensor, D};
-10use candle_nn as nn;
-11use candle_nn::Module;
-12
-13use super::EncoderConfig;
-14
-15#[derive(Debug, Clone, Copy)]
-16pub enum Activation {
-17    QuickGelu,
-18}
-19
-20impl Module for Activation {
-21    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-22        match self {
-23            Activation::QuickGelu => xs * nn::ops::sigmoid(&(xs * 1.702f64)?)?,
-24        }
-25    }
-26}
-27
-28#[derive(Debug, Clone)]
-29pub struct ClipTextConfig {
-30    pub vocab_size: usize,
-31    pub embed_dim: usize,
-32    pub activation: Activation,
-33    pub intermediate_size: usize,
-34    pub max_position_embeddings: usize,
-35    pub pad_with: Option<String>,
-36    pub num_hidden_layers: usize,
-37    pub num_attention_heads: usize,
-38    #[allow(dead_code)]
-39    pub projection_dim: usize,
-40}
-41
-42impl ClipTextConfig {
-43    // The config details can be found in the "text_config" section of this json file:
-44    // https://huggingface.co/openai/clip-vit-large-patch14/blob/main/config.json
-45    pub fn vit_base_patch32() -> Self {
-46        Self {
-47            vocab_size: 49408,
-48            embed_dim: 512,
-49            intermediate_size: 2048,
-50            max_position_embeddings: 77,
-51            pad_with: None,
-52            num_hidden_layers: 12,
-53            num_attention_heads: 8,
-54            projection_dim: 512,
-55            activation: Activation::QuickGelu,
-56        }
-57    }
-58}
-59
-60// ClipTextEmbeddings mostly based on the existing implementation in the stable diffision model.
-61// TODO rewrite to be more similar to https://github.com/huggingface/transformers/blob/f6fa0f0bf0796ac66f201f23bdb8585de1609add/src/transformers/models/clip/modeling_clip.py#L142
-62#[derive(Clone, Debug)]
-63struct ClipTextEmbeddings {
-64    token_embedding: candle_nn::Embedding,
-65    position_embedding: candle_nn::Embedding,
-66    position_ids: Tensor,
-67}
-68
-69impl ClipTextEmbeddings {
-70    fn new(vs: candle_nn::VarBuilder, c: &ClipTextConfig) -> Result<Self> {
-71        let token_embedding =
-72            candle_nn::embedding(c.vocab_size, c.embed_dim, vs.pp("token_embedding"))?;
-73        let position_embedding: nn::Embedding = candle_nn::embedding(
-74            c.max_position_embeddings,
-75            c.embed_dim,
-76            vs.pp("position_embedding"),
-77        )?;
-78        let position_ids =
-79            Tensor::arange(0u32, c.max_position_embeddings as u32, vs.device())?.unsqueeze(0)?;
-80        Ok(Self {
-81            token_embedding,
-82            position_embedding,
-83            position_ids,
-84        })
-85    }
-86}
-87
-88impl Module for ClipTextEmbeddings {
-89    fn forward(&self, input_ids: &Tensor) -> Result<Tensor> {
-90        let seq_length = input_ids.dim(D::Minus1)?;
-91        let inputs_embeds = self.token_embedding.forward(input_ids)?;
-92        let position_ids = self.position_ids.narrow(1, 0, seq_length)?;
-93        let position_embedding = self.position_embedding.forward(&position_ids)?;
-94        inputs_embeds.broadcast_add(&position_embedding)
-95    }
-96}
-97
-98#[derive(Clone, Debug)]
-99struct ClipAttention {
-100    k_proj: candle_nn::Linear,
-101    v_proj: candle_nn::Linear,
-102    q_proj: candle_nn::Linear,
-103    out_proj: candle_nn::Linear,
-104    head_dim: usize,
-105    scale: f64,
-106    num_attention_heads: usize,
-107}
-108
-109impl ClipAttention {
-110    fn new(vs: candle_nn::VarBuilder, c: &EncoderConfig) -> Result<Self> {
-111        let embed_dim = c.embed_dim();
-112        let num_attention_heads = c.num_attention_heads();
-113        let k_proj = candle_nn::linear(embed_dim, embed_dim, vs.pp("k_proj"))?;
-114        let v_proj = candle_nn::linear(embed_dim, embed_dim, vs.pp("v_proj"))?;
-115        let q_proj = candle_nn::linear(embed_dim, embed_dim, vs.pp("q_proj"))?;
-116        let out_proj = candle_nn::linear(embed_dim, embed_dim, vs.pp("out_proj"))?;
-117        let head_dim = embed_dim / num_attention_heads;
-118        let scale = (head_dim as f64).powf(-0.5);
-119
-120        Ok(ClipAttention {
-121            k_proj,
-122            v_proj,
-123            q_proj,
-124            out_proj,
-125            head_dim,
-126            scale,
-127            num_attention_heads,
-128        })
-129    }
-130
-131    fn shape(&self, xs: &Tensor, seq_len: usize, bsz: usize) -> Result<Tensor> {
-132        xs.reshape((bsz, seq_len, self.num_attention_heads, self.head_dim))?
-133            .transpose(1, 2)?
-134            .contiguous()
-135    }
-136
-137    fn forward(&self, xs: &Tensor, causal_attention_mask: Option<&Tensor>) -> Result<Tensor> {
-138        let in_dtype = xs.dtype();
-139        let (bsz, seq_len, embed_dim) = xs.dims3()?;
-140
-141        let query_states = (self.q_proj.forward(xs)? * self.scale)?;
-142        let proj_shape = (bsz * self.num_attention_heads, seq_len, self.head_dim);
-143        let query_states = self
-144            .shape(&query_states, seq_len, bsz)?
-145            .reshape(proj_shape)?
-146            .to_dtype(DType::F32)?;
-147        let key_states = self
-148            .shape(&self.k_proj.forward(xs)?, seq_len, bsz)?
-149            .reshape(proj_shape)?
-150            .to_dtype(DType::F32)?;
-151        let value_states = self
-152            .shape(&self.v_proj.forward(xs)?, seq_len, bsz)?
-153            .reshape(proj_shape)?
-154            .to_dtype(DType::F32)?;
-155        let attn_weights = query_states.matmul(&key_states.transpose(1, 2)?)?;
-156
-157        let src_len = key_states.dim(1)?;
-158
-159        let attn_weights = if let Some(causal_attention_mask) = causal_attention_mask {
-160            attn_weights
-161                .reshape((bsz, self.num_attention_heads, seq_len, src_len))?
-162                .broadcast_add(causal_attention_mask)?
-163                .reshape((bsz * self.num_attention_heads, seq_len, src_len))?
-164        } else {
-165            attn_weights
-166        };
-167
-168        let attn_weights = candle_nn::ops::softmax(&attn_weights, D::Minus1)?;
-169
-170        let attn_output = attn_weights.matmul(&value_states)?.to_dtype(in_dtype)?;
-171        let attn_output = attn_output
-172            .reshape((bsz, self.num_attention_heads, seq_len, self.head_dim))?
-173            .transpose(1, 2)?
-174            .reshape((bsz, seq_len, embed_dim))?;
-175        self.out_proj.forward(&attn_output)
-176    }
-177}
-178
-179#[derive(Clone, Debug)]
-180struct ClipMlp {
-181    fc1: candle_nn::Linear,
-182    fc2: candle_nn::Linear,
-183    activation: Activation,
-184}
-185
-186impl ClipMlp {
-187    fn new(vs: candle_nn::VarBuilder, c: &EncoderConfig) -> Result<Self> {
-188        let fc1 = candle_nn::linear(c.embed_dim(), c.intermediate_size(), vs.pp("fc1"))?;
-189        let fc2 = candle_nn::linear(c.intermediate_size(), c.embed_dim(), vs.pp("fc2"))?;
-190
-191        Ok(ClipMlp {
-192            fc1,
-193            fc2,
-194            activation: c.activation(),
-195        })
-196    }
-197}
-198
-199impl ClipMlp {
-200    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-201        let xs = self.fc1.forward(xs)?;
-202        self.fc2.forward(&self.activation.forward(&xs)?)
-203    }
-204}
-205
-206#[derive(Clone, Debug)]
-207struct ClipEncoderLayer {
-208    self_attn: ClipAttention,
-209    layer_norm1: candle_nn::LayerNorm,
-210    mlp: ClipMlp,
-211    layer_norm2: candle_nn::LayerNorm,
-212}
-213
-214impl ClipEncoderLayer {
-215    fn new(vs: candle_nn::VarBuilder, c: &EncoderConfig) -> Result<Self> {
-216        let self_attn = ClipAttention::new(vs.pp("self_attn"), c)?;
-217        let layer_norm1 = candle_nn::layer_norm(c.embed_dim(), 1e-5, vs.pp("layer_norm1"))?;
-218        let mlp = ClipMlp::new(vs.pp("mlp"), c)?;
-219        let layer_norm2 = candle_nn::layer_norm(c.embed_dim(), 1e-5, vs.pp("layer_norm2"))?;
-220
-221        Ok(ClipEncoderLayer {
-222            self_attn,
-223            layer_norm1,
-224            mlp,
-225            layer_norm2,
-226        })
-227    }
-228
-229    fn forward(&self, xs: &Tensor, causal_attention_mask: Option<&Tensor>) -> Result<Tensor> {
-230        let residual = xs;
-231        let xs = self.layer_norm1.forward(xs)?;
-232        let xs = self.self_attn.forward(&xs, causal_attention_mask)?;
-233        let xs = (xs + residual)?;
-234
-235        let residual = &xs;
-236        let xs = self.layer_norm2.forward(&xs)?;
-237        let xs = self.mlp.forward(&xs)?;
-238        xs + residual
-239    }
-240}
-241
-242#[derive(Clone, Debug)]
-243pub struct ClipEncoder {
-244    layers: Vec<ClipEncoderLayer>,
-245}
-246
-247impl ClipEncoder {
-248    pub fn new(vs: candle_nn::VarBuilder, c: &EncoderConfig) -> Result<Self> {
-249        let vs = vs.pp("layers");
-250        let mut layers: Vec<ClipEncoderLayer> = Vec::new();
-251        for index in 0..c.num_hidden_layers() {
-252            let layer = ClipEncoderLayer::new(vs.pp(index.to_string()), c)?;
-253            layers.push(layer)
-254        }
-255        Ok(ClipEncoder { layers })
-256    }
-257
-258    pub fn forward(&self, xs: &Tensor, causal_attention_mask: Option<&Tensor>) -> Result<Tensor> {
-259        let mut xs = xs.clone();
-260        for layer in self.layers.iter() {
-261            xs = layer.forward(&xs, causal_attention_mask)?;
-262        }
-263        Ok(xs)
-264    }
-265    // required by LLaVA
-266    pub fn output_hidden_states(
-267        &self,
-268        xs: &Tensor,
-269        causal_attention_mask: Option<&Tensor>,
-270    ) -> Result<Vec<Tensor>> {
-271        let mut xs = xs.clone();
-272        let mut hidden_states = Vec::new();
-273        for layer in self.layers.iter() {
-274            xs = layer.forward(&xs, causal_attention_mask)?;
-275            hidden_states.push(xs.clone());
-276        }
-277        Ok(hidden_states)
-278    }
-279}
-280
-281/// A CLIP transformer based model.
-282#[derive(Clone, Debug)]
-283pub struct ClipTextTransformer {
-284    embeddings: ClipTextEmbeddings,
-285    encoder: ClipEncoder,
-286    final_layer_norm: candle_nn::LayerNorm,
-287}
-288
-289impl ClipTextTransformer {
-290    pub fn new(vs: candle_nn::VarBuilder, c: &ClipTextConfig) -> Result<Self> {
-291        let embeddings = ClipTextEmbeddings::new(vs.pp("embeddings"), c)?;
-292        let encoder = ClipEncoder::new(vs.pp("encoder"), &EncoderConfig::Text(c.clone()))?;
-293        let final_layer_norm = candle_nn::layer_norm(c.embed_dim, 1e-5, vs.pp("final_layer_norm"))?;
-294        Ok(ClipTextTransformer {
-295            embeddings,
-296            encoder,
-297            final_layer_norm,
-298        })
-299    }
-300
-301    // TODO: rewrite to newer version
-302    fn build_causal_attention_mask(
-303        bsz: usize,
-304        seq_len: usize,
-305        mask_after: usize,
-306        device: &Device,
-307    ) -> Result<Tensor> {
-308        let mask: Vec<_> = (0..seq_len)
-309            .flat_map(|i| {
-310                (0..seq_len).map(move |j| {
-311                    if j > i || j > mask_after {
-312                        f32::MIN
-313                    } else {
-314                        0.
-315                    }
-316                })
-317            })
-318            .collect();
-319        let mask = Tensor::from_slice(&mask, (seq_len, seq_len), device)?;
-320        mask.broadcast_as((bsz, 1, seq_len, seq_len))
-321    }
-322
-323    pub fn forward_with_mask(&self, input_ids: &Tensor, mask_after: usize) -> Result<Tensor> {
-324        let (bsz, seq_len) = input_ids.dims2()?;
-325        let input_ids = self.embeddings.forward(input_ids)?;
-326        let causal_attention_mask =
-327            Self::build_causal_attention_mask(bsz, seq_len, mask_after, input_ids.device())?;
-328        let input_ids = self
-329            .encoder
-330            .forward(&input_ids, Some(&causal_attention_mask))?;
-331        self.final_layer_norm.forward(&input_ids)
-332    }
-333}
-334
-335impl Module for ClipTextTransformer {
-336    fn forward(&self, input_ids: &Tensor) -> Result<Tensor> {
-337        let output = self.forward_with_mask(input_ids, usize::MAX)?;
-338        let sequence_max_indices = input_ids.argmax(D::Minus1)?.to_dtype(DType::I64)?;
-339
-340        let mut indices = Vec::new();
-341        for (batch_idx, &seq_idx) in sequence_max_indices.to_vec1::<i64>()?.iter().enumerate() {
-342            let index = output.i((batch_idx, seq_idx as usize))?.unsqueeze(0)?;
-343            indices.push(index);
-344        }
-345        Tensor::cat(&indices, 0)
-346    }
-347}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/clip/vision_model.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/clip/vision_model.rs.html deleted file mode 100644 index 97e31f2..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/clip/vision_model.rs.html +++ /dev/null @@ -1,172 +0,0 @@ -vision_model.rs - source

candle_transformers/models/clip/
vision_model.rs

1//! Contrastive Language-Image Pre-Training
-2//!
-3//! Contrastive Language-Image Pre-Training (CLIP) is an architecture trained on
-4//! pairs of images with related texts.
-5//!
-6//! https://github.com/openai/CLIP
-7//! https://github.com/huggingface/transformers/tree/f6fa0f0bf0796ac66f201f23bdb8585de1609add/src/transformers/models/clip
-8
-9use candle::{Context, IndexOp, Result, Shape, Tensor, D};
-10use candle_nn as nn;
-11use candle_nn::Module;
-12use nn::Conv2dConfig;
-13
-14use super::{
-15    text_model::{Activation, ClipEncoder},
-16    EncoderConfig,
-17};
-18
-19#[derive(Debug, Clone)]
-20pub struct ClipVisionConfig {
-21    pub embed_dim: usize,
-22    pub activation: Activation,
-23    pub intermediate_size: usize,
-24    pub num_hidden_layers: usize,
-25    pub num_attention_heads: usize,
-26    #[allow(dead_code)]
-27    pub projection_dim: usize,
-28    pub num_channels: usize,
-29    pub image_size: usize,
-30    pub patch_size: usize,
-31}
-32
-33impl ClipVisionConfig {
-34    // The config details can be found in the "vision_config" section of this json file:
-35    // https://huggingface.co/openai/clip-vit-large-patch14/blob/main/config.json
-36    pub fn vit_base_patch32() -> Self {
-37        Self {
-38            embed_dim: 768,
-39            activation: Activation::QuickGelu,
-40            intermediate_size: 3072,
-41            num_hidden_layers: 12,
-42            num_attention_heads: 12,
-43            projection_dim: 512,
-44            num_channels: 3,
-45            image_size: 224,
-46            patch_size: 32,
-47        }
-48    }
-49    pub fn clip_vit_large_patch14_336() -> Self {
-50        Self {
-51            embed_dim: 1024,
-52            activation: Activation::QuickGelu,
-53            intermediate_size: 4096,
-54            num_hidden_layers: 24,
-55            num_attention_heads: 16,
-56            projection_dim: 768,
-57            num_channels: 3,
-58            image_size: 336,
-59            patch_size: 14,
-60        }
-61    }
-62}
-63
-64// https://github.com/huggingface/transformers/blob/f6fa0f0bf0796ac66f201f23bdb8585de1609add/src/transformers/models/clip/modeling_clip.py#L112
-65#[derive(Clone, Debug)]
-66struct ClipVisionEmbeddings {
-67    patch_embedding: candle_nn::Conv2d,
-68    position_ids: Tensor,
-69    class_embedding: Tensor,
-70    position_embedding: candle_nn::Embedding,
-71}
-72
-73impl ClipVisionEmbeddings {
-74    fn new(vs: candle_nn::VarBuilder, c: &ClipVisionConfig) -> Result<Self> {
-75        // originally nn.Parameter
-76        let class_embedding = if vs.contains_tensor("class_embedding") {
-77            vs.get(c.embed_dim, "class_embedding")?
-78        } else {
-79            Tensor::randn(0f32, 1f32, c.embed_dim, vs.device())?
-80        };
-81
-82        let num_patches = (c.image_size / c.patch_size).pow(2);
-83        let num_positions = num_patches + 1;
-84        let position_ids = Tensor::arange(0, num_positions as i64, vs.device())?;
-85
-86        let conv2dconfig = Conv2dConfig {
-87            stride: c.patch_size,
-88            ..Default::default()
-89        };
-90        let position_embedding =
-91            candle_nn::embedding(num_positions, c.embed_dim, vs.pp("position_embedding"))?;
-92        let patch_embedding = candle_nn::conv2d_no_bias(
-93            c.num_channels,
-94            c.embed_dim,
-95            c.patch_size,
-96            conv2dconfig,
-97            vs.pp("patch_embedding"),
-98        )?;
-99        Ok(Self {
-100            patch_embedding,
-101            position_ids,
-102            class_embedding,
-103            position_embedding,
-104        })
-105    }
-106}
-107
-108impl Module for ClipVisionEmbeddings {
-109    fn forward(&self, pixel_values: &Tensor) -> Result<Tensor> {
-110        let batch_size = pixel_values.shape().dims();
-111        let patch_embeds = self
-112            .patch_embedding
-113            .forward(pixel_values)?
-114            .flatten_from(2)?
-115            .transpose(1, 2)?;
-116        let shape = Shape::from((batch_size[0], 1, self.class_embedding.dim(D::Minus1)?));
-117        let class_embeds = self.class_embedding.expand(shape)?;
-118        let embeddings = Tensor::cat(&[class_embeds, patch_embeds], 1)?;
-119        let position_embedding = self.position_embedding.forward(&self.position_ids)?;
-120        embeddings.broadcast_add(&position_embedding)
-121    }
-122}
-123
-124// https://github.com/huggingface/transformers/blob/f6fa0f0bf0796ac66f201f23bdb8585de1609add/src/transformers/models/clip/modeling_clip.py#L743
-125#[derive(Clone, Debug)]
-126pub struct ClipVisionTransformer {
-127    embeddings: ClipVisionEmbeddings,
-128    encoder: ClipEncoder,
-129    pre_layer_norm: candle_nn::LayerNorm,
-130    final_layer_norm: candle_nn::LayerNorm,
-131}
-132
-133impl ClipVisionTransformer {
-134    pub fn new(vs: candle_nn::VarBuilder, c: &ClipVisionConfig) -> Result<Self> {
-135        let embeddings = ClipVisionEmbeddings::new(vs.pp("embeddings"), c)?;
-136        let pre_layer_norm = candle_nn::layer_norm(c.embed_dim, 1e-5, vs.pp("pre_layrnorm"))?;
-137        let encoder = ClipEncoder::new(vs.pp("encoder"), &EncoderConfig::Vision(c.clone()))?;
-138        let final_layer_norm = candle_nn::layer_norm(c.embed_dim, 1e-5, vs.pp("post_layernorm"))?;
-139        Ok(Self {
-140            embeddings,
-141            encoder,
-142            final_layer_norm,
-143            pre_layer_norm,
-144        })
-145    }
-146    // required by LLaVA
-147    pub fn output_hidden_states(&self, pixel_values: &Tensor) -> Result<Vec<Tensor>> {
-148        let hidden_states = pixel_values
-149            .apply(&self.embeddings)?
-150            .apply(&self.pre_layer_norm)?;
-151        let mut result = self.encoder.output_hidden_states(&hidden_states, None)?;
-152        let encoder_outputs = result.last().context("no last")?;
-153        let pooled_output = encoder_outputs.i((.., 0, ..))?;
-154        result.push(self.final_layer_norm.forward(&pooled_output)?.clone());
-155        Ok(result)
-156    }
-157}
-158
-159impl Module for ClipVisionTransformer {
-160    fn forward(&self, pixel_values: &Tensor) -> Result<Tensor> {
-161        let hidden_states = pixel_values
-162            .apply(&self.embeddings)?
-163            .apply(&self.pre_layer_norm)?;
-164
-165        let encoder_outputs = self.encoder.forward(&hidden_states, None)?;
-166        // https://github.com/huggingface/transformers/blob/f6fa0f0bf0796ac66f201f23bdb8585de1609add/src/transformers/models/clip/modeling_clip.py#L787
-167        // pooled_output = encoder_outputs[:, 0, :]
-168        let pooled_output = encoder_outputs.i((.., 0, ..))?;
-169        self.final_layer_norm.forward(&pooled_output)
-170    }
-171}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/codegeex4_9b.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/codegeex4_9b.rs.html deleted file mode 100644 index 7ef2308..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/codegeex4_9b.rs.html +++ /dev/null @@ -1,613 +0,0 @@ -codegeex4_9b.rs - source

candle_transformers/models/
codegeex4_9b.rs

1//! CodeGeeX4 - A multi-language code generation model
-2//!
-3//! A Pre-Trained Model For Code Generation with Multilingual Evaluations on HumanEval-X"
-4//!
-5//! - 📝 [Arxiv](https://arxiv.org/abs/2303.17568)
-6//! - 💻 [Github](https://github.com/THUDM/CodeGeeX)
-7//!
-8
-9use crate::models::with_tracing::{linear_b as linear, Linear};
-10use candle::{DType, Device, IndexOp, Module, Result, Tensor, D};
-11use candle_nn::VarBuilder;
-12
-13fn default_one() -> usize {
-14    1
-15}
-16
-17#[derive(Debug, Clone, serde::Deserialize, Default)]
-18pub struct Config {
-19    pub num_layers: usize,
-20    pub padded_vocab_size: usize,
-21    pub hidden_size: usize,
-22    pub ffn_hidden_size: usize,
-23    pub kv_channels: usize,
-24    pub num_attention_heads: usize,
-25    pub seq_length: usize,
-26    pub layernorm_epsilon: f64,
-27    pub rmsnorm: bool,
-28    pub apply_residual_connection_post_layernorm: bool,
-29    pub post_layer_norm: bool,
-30    pub add_bias_linear: bool,
-31    pub add_qkv_bias: bool,
-32    pub bias_dropout_fusion: bool,
-33    pub multi_query_attention: bool,
-34    pub multi_query_group_num: usize,
-35    pub apply_query_key_layer_scaling: bool,
-36    pub attention_softmax_in_fp32: bool,
-37    pub fp32_residual_connection: bool,
-38    #[serde(default = "default_one")]
-39    pub rope_ratio: usize,
-40}
-41
-42impl Config {
-43    pub fn codegeex4() -> Self {
-44        Self {
-45            num_layers: 40,
-46            padded_vocab_size: 151552,
-47            hidden_size: 4096,
-48            ffn_hidden_size: 13696,
-49            kv_channels: 128,
-50            num_attention_heads: 32,
-51            seq_length: 131072,
-52            layernorm_epsilon: 1e-5,
-53            rmsnorm: true,
-54            apply_residual_connection_post_layernorm: false,
-55            post_layer_norm: true,
-56            add_bias_linear: false,
-57            add_qkv_bias: true,
-58            bias_dropout_fusion: true,
-59            multi_query_attention: true,
-60            multi_query_group_num: 2,
-61            apply_query_key_layer_scaling: true,
-62            attention_softmax_in_fp32: true,
-63            fp32_residual_connection: false,
-64            rope_ratio: 500,
-65        }
-66    }
-67}
-68
-69#[derive(Debug, Clone)]
-70struct RotaryEmbedding {
-71    cache: Tensor,
-72}
-73
-74impl RotaryEmbedding {
-75    fn new(cfg: &Config, dtype: DType, dev: &Device) -> Result<Self> {
-76        let rotary_dim = cfg.kv_channels;
-77        let n_elem = rotary_dim / 2;
-78        let base = 10_000f64 * cfg.rope_ratio as f64;
-79        let inv_freq: Vec<_> = (0..n_elem)
-80            .step_by(2)
-81            .map(|i| 1f32 / base.powf(i as f64 / n_elem as f64) as f32)
-82            .collect();
-83        let inv_freq_len = inv_freq.len();
-84        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-85        let t = Tensor::arange(0u32, cfg.seq_length as u32, dev)?
-86            .to_dtype(dtype)
-87            .expect("unalbe to dytpe in Rotray Embedding new")
-88            .reshape((cfg.seq_length, 1))?;
-89        let freqs = t.matmul(&inv_freq)?;
-90        let cache = Tensor::stack(&[&freqs.cos()?, &freqs.sin()?], D::Minus1)?;
-91        Ok(Self { cache })
-92    }
-93
-94    fn apply(&self, xs: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-95        let (seqlen, _b, np, _hn) = xs.dims4()?;
-96        let cache = self.cache.narrow(0, seqlen_offset, seqlen)?;
-97        let rot_dim = cache.dim(D::Minus2)? * 2;
-98        let (xs, xs_pass) = (
-99            xs.narrow(D::Minus1, 0, rot_dim)?,
-100            xs.narrow(D::Minus1, rot_dim, rot_dim)?,
-101        );
-102        let xshaped = xs.reshape((seqlen, (), np, rot_dim / 2, 2))?;
-103        let cache = cache.reshape((seqlen, (), 1, rot_dim / 2, 2))?;
-104        let (xshaped0, xshaped1) = (
-105            xshaped.i((.., .., .., .., 0))?,
-106            xshaped.i((.., .., .., .., 1))?,
-107        );
-108        let (cache0, cache1) = (cache.i((.., .., .., .., 0))?, cache.i((.., .., .., .., 1))?);
-109        let xs_out = Tensor::stack(
-110            &[
-111                (xshaped0.broadcast_mul(&cache0)? - xshaped1.broadcast_mul(&cache1)?)?,
-112                (xshaped1.broadcast_mul(&cache0)? + xshaped0.broadcast_mul(&cache1)?)?,
-113            ],
-114            D::Minus1,
-115        )?;
-116        let xs_out = xs_out.flatten_from(3)?;
-117        Tensor::cat(&[xs_out, xs_pass], D::Minus1)
-118    }
-119}
-120
-121#[derive(Debug, Clone)]
-122struct CoreAttention {
-123    coeff: Option<f64>,
-124    norm_factor: f64,
-125    dtype: DType,
-126}
-127
-128fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: f32, dtype: DType) -> Result<Tensor> {
-129    let shape = mask.shape();
-130    let on_true = Tensor::new(on_true, on_false.device())?.broadcast_as(shape.dims())?;
-131    let m = mask.where_cond(&on_true.to_dtype(dtype)?, on_false)?;
-132    Ok(m)
-133}
-134
-135impl CoreAttention {
-136    fn new(layer_number: usize, cfg: &Config, dtype: DType) -> Result<Self> {
-137        let norm_factor = (cfg.kv_channels as f64).sqrt();
-138        let (norm_factor, coeff) = if cfg.apply_query_key_layer_scaling {
-139            let coeff = f64::max(1.0, layer_number as f64);
-140            (norm_factor * coeff, Some(coeff))
-141        } else {
-142            (norm_factor, None)
-143        };
-144        Ok(Self {
-145            coeff,
-146            norm_factor,
-147            dtype,
-148        })
-149    }
-150
-151    fn forward(
-152        &self,
-153        query_layer: &Tensor,
-154        key_layer: &Tensor,
-155        value_layer: &Tensor,
-156        attention_mask: &Option<Tensor>,
-157    ) -> Result<Tensor> {
-158        let output_size = (
-159            query_layer.dim(1)?, // b
-160            query_layer.dim(2)?, // np
-161            query_layer.dim(0)?, // sq
-162            key_layer.dim(0)?,   // sk
-163        );
-164        let query_layer =
-165            query_layer.reshape((output_size.2, output_size.0 * output_size.1, ()))?;
-166        let key_layer = key_layer.reshape((output_size.3, output_size.0 * output_size.1, ()))?;
-167        let matmul_result = Tensor::matmul(
-168            &query_layer.transpose(0, 1)?.contiguous()?,
-169            &key_layer.transpose(0, 1)?.transpose(1, 2)?.contiguous()?,
-170        )?;
-171        let matmul_result = (matmul_result / self.norm_factor)?.reshape(output_size)?;
-172        let matmul_result = match self.coeff {
-173            None => matmul_result,
-174            Some(coeff) => (matmul_result * coeff)?,
-175        };
-176        let attention_scores = match attention_mask {
-177            Some(mask) => masked_fill(
-178                &matmul_result,
-179                &mask.broadcast_left((matmul_result.dim(0)?, matmul_result.dim(1)?))?,
-180                f32::NEG_INFINITY,
-181                self.dtype,
-182            )?,
-183            None => matmul_result,
-184        };
-185        let attention_probs = candle_nn::ops::softmax_last_dim(&attention_scores)?;
-186
-187        let output_size = (
-188            value_layer.dim(1)?,
-189            value_layer.dim(2)?,
-190            query_layer.dim(0)?,
-191            value_layer.dim(3)?,
-192        );
-193        let value_layer =
-194            value_layer.reshape((value_layer.dim(0)?, output_size.0 * output_size.1, ()))?;
-195        let attention_probs =
-196            attention_probs.reshape((output_size.0 * output_size.1, output_size.2, ()))?;
-197        let context_layer = Tensor::matmul(
-198            &attention_probs.contiguous()?,
-199            &value_layer.transpose(0, 1)?.contiguous()?,
-200        )?;
-201        let context_layer = context_layer.reshape(output_size)?;
-202        let context_layer = context_layer.permute((2, 0, 1, 3))?.contiguous()?;
-203        context_layer.flatten_from(D::Minus2)
-204    }
-205}
-206
-207#[derive(Debug, Clone)]
-208struct SelfAttention {
-209    query_key_value: Linear,
-210    core_attention: CoreAttention,
-211    dense: Linear,
-212    multi_query_attention: bool,
-213    num_attention_heads_per_partition: usize,
-214    num_multi_query_groups_per_partition: usize,
-215    hidden_size_per_attention_head: usize,
-216    kv_cache: Option<(Tensor, Tensor)>,
-217}
-218
-219impl SelfAttention {
-220    fn new(layer_number: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-221        let projection_size = cfg.kv_channels * cfg.num_attention_heads;
-222        let hidden_size_per_attention_head = projection_size / cfg.num_attention_heads;
-223        let qkv_hidden_size = if cfg.multi_query_attention {
-224            projection_size + 2 * hidden_size_per_attention_head * cfg.multi_query_group_num
-225        } else {
-226            3 * projection_size
-227        };
-228        let query_key_value = linear(
-229            cfg.hidden_size,
-230            qkv_hidden_size,
-231            cfg.add_bias_linear || cfg.add_qkv_bias,
-232            vb.pp("query_key_value"),
-233        )?;
-234        let core_attention = CoreAttention::new(layer_number, cfg, vb.dtype())?;
-235        let dense = linear(
-236            cfg.hidden_size,
-237            cfg.hidden_size,
-238            cfg.add_bias_linear,
-239            vb.pp("dense"),
-240        )?;
-241        Ok(Self {
-242            query_key_value,
-243            core_attention,
-244            dense,
-245            multi_query_attention: cfg.multi_query_attention,
-246            num_attention_heads_per_partition: cfg.num_attention_heads,
-247            num_multi_query_groups_per_partition: cfg.multi_query_group_num,
-248            hidden_size_per_attention_head: cfg.kv_channels,
-249            kv_cache: None,
-250        })
-251    }
-252
-253    fn reset_kv_cache(&mut self) {
-254        self.kv_cache = None
-255    }
-256
-257    fn forward(
-258        &mut self,
-259        xs: &Tensor,
-260        attention_mask: &Option<Tensor>,
-261        rotary_emb: &RotaryEmbedding,
-262    ) -> Result<Tensor> {
-263        let mixed_x_layer = xs.apply(&self.query_key_value)?;
-264        if !self.multi_query_attention {
-265            candle::bail!("only multi_query_attention=true is supported")
-266        }
-267        let hpa = self.hidden_size_per_attention_head;
-268        let query_layer =
-269            mixed_x_layer.narrow(D::Minus1, 0, self.num_attention_heads_per_partition * hpa)?;
-270        let key_layer = mixed_x_layer.narrow(
-271            D::Minus1,
-272            self.num_attention_heads_per_partition * hpa,
-273            self.num_multi_query_groups_per_partition * hpa,
-274        )?;
-275        let value_layer = mixed_x_layer.narrow(
-276            D::Minus1,
-277            self.num_attention_heads_per_partition * hpa
-278                + self.num_multi_query_groups_per_partition * hpa,
-279            self.num_multi_query_groups_per_partition * hpa,
-280        )?;
-281        let query_layer = query_layer.reshape((
-282            query_layer.dim(0)?,
-283            query_layer.dim(1)?,
-284            self.num_attention_heads_per_partition,
-285            hpa,
-286        ))?;
-287        let key_layer = key_layer.reshape((
-288            key_layer.dim(0)?,
-289            key_layer.dim(1)?,
-290            self.num_multi_query_groups_per_partition,
-291            hpa,
-292        ))?;
-293        let value_layer = value_layer.reshape((
-294            value_layer.dim(0)?,
-295            value_layer.dim(1)?,
-296            self.num_multi_query_groups_per_partition,
-297            hpa,
-298        ))?;
-299
-300        // Rotary embeddings.
-301        let seqlen_offset = match &self.kv_cache {
-302            None => 0,
-303            Some((prev_k, _)) => prev_k.dim(0)?,
-304        };
-305        let query_layer = rotary_emb.apply(&query_layer, seqlen_offset)?;
-306        let key_layer = rotary_emb.apply(&key_layer, seqlen_offset)?;
-307
-308        // KV cache.
-309        let (key_layer, value_layer) = match &self.kv_cache {
-310            None => (key_layer, value_layer),
-311            Some((prev_k, prev_v)) => {
-312                let k = Tensor::cat(&[prev_k, &key_layer], 0)?;
-313                let v = Tensor::cat(&[prev_v, &value_layer], 0)?;
-314                (k, v)
-315            }
-316        };
-317        self.kv_cache = Some((key_layer.clone(), value_layer.clone()));
-318
-319        // Repeat KV.
-320        let ratio =
-321            self.num_attention_heads_per_partition / self.num_multi_query_groups_per_partition;
-322        let key_layer = {
-323            let (d0, d1, d2, d3) = key_layer.dims4()?;
-324            key_layer
-325                .unsqueeze(D::Minus2)?
-326                .expand((d0, d1, d2, ratio, d3))?
-327                .reshape((
-328                    d0,
-329                    d1,
-330                    self.num_attention_heads_per_partition,
-331                    self.hidden_size_per_attention_head,
-332                ))?
-333        };
-334        let value_layer = {
-335            let (d0, d1, d2, d3) = value_layer.dims4()?;
-336            value_layer
-337                .unsqueeze(D::Minus2)?
-338                .expand((d0, d1, d2, ratio, d3))?
-339                .reshape((
-340                    d0,
-341                    d1,
-342                    self.num_attention_heads_per_partition,
-343                    self.hidden_size_per_attention_head,
-344                ))?
-345        };
-346
-347        let context_layer =
-348            self.core_attention
-349                .forward(&query_layer, &key_layer, &value_layer, attention_mask)?;
-350        let output = context_layer.apply(&self.dense)?;
-351        Ok(output)
-352    }
-353}
-354
-355#[allow(clippy::upper_case_acronyms)]
-356#[derive(Debug, Clone)]
-357struct MLP {
-358    dense_h_to_4h: Linear,
-359    dense_4h_to_h: Linear,
-360}
-361
-362impl MLP {
-363    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-364        let dense_h_to_4h = linear(
-365            cfg.hidden_size,
-366            cfg.ffn_hidden_size * 2,
-367            cfg.add_bias_linear,
-368            vb.pp("dense_h_to_4h"),
-369        )?;
-370        let dense_4h_to_h = linear(
-371            cfg.ffn_hidden_size,
-372            cfg.hidden_size,
-373            cfg.add_bias_linear,
-374            vb.pp("dense_4h_to_h"),
-375        )?;
-376        Ok(Self {
-377            dense_4h_to_h,
-378            dense_h_to_4h,
-379        })
-380    }
-381}
-382
-383impl Module for MLP {
-384    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-385        xs.apply(&self.dense_h_to_4h)?
-386            .apply(&candle_nn::Activation::Swiglu)?
-387            .apply(&self.dense_4h_to_h)
-388    }
-389}
-390
-391#[derive(Debug, Clone)]
-392struct Block {
-393    input_layernorm: candle_nn::LayerNorm,
-394    self_attention: SelfAttention,
-395    post_attention_layernorm: candle_nn::LayerNorm,
-396    mlp: MLP,
-397    apply_residual_connection_post_layernorm: bool,
-398}
-399
-400impl Block {
-401    fn new(layer_number: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-402        let input_layernorm = if cfg.rmsnorm {
-403            candle_nn::rms_norm(
-404                cfg.hidden_size,
-405                cfg.layernorm_epsilon,
-406                vb.pp("input_layernorm"),
-407            )?
-408            .into_inner()
-409        } else {
-410            candle_nn::layer_norm(
-411                cfg.hidden_size,
-412                cfg.layernorm_epsilon,
-413                vb.pp("input_layernorm"),
-414            )?
-415        };
-416        let post_attention_layernorm = if cfg.rmsnorm {
-417            candle_nn::rms_norm(
-418                cfg.hidden_size,
-419                cfg.layernorm_epsilon,
-420                vb.pp("post_attention_layernorm"),
-421            )?
-422            .into_inner()
-423        } else {
-424            candle_nn::layer_norm(
-425                cfg.hidden_size,
-426                cfg.layernorm_epsilon,
-427                vb.pp("post_attention_layernorm"),
-428            )?
-429        };
-430        let self_attention = SelfAttention::new(layer_number, cfg, vb.pp("self_attention"))?;
-431        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-432        Ok(Self {
-433            input_layernorm,
-434            self_attention,
-435            post_attention_layernorm,
-436            mlp,
-437            apply_residual_connection_post_layernorm: cfg.apply_residual_connection_post_layernorm,
-438        })
-439    }
-440
-441    fn reset_kv_cache(&mut self) {
-442        self.self_attention.reset_kv_cache()
-443    }
-444
-445    fn forward(
-446        &mut self,
-447        xs: &Tensor,
-448        attention_mask: &Option<Tensor>,
-449        rotary_emb: &RotaryEmbedding,
-450    ) -> Result<Tensor> {
-451        let layernorm_output = xs.apply(&self.input_layernorm)?;
-452        let attention_output =
-453            self.self_attention
-454                .forward(&layernorm_output, attention_mask, rotary_emb)?;
-455        let residual = if self.apply_residual_connection_post_layernorm {
-456            &layernorm_output
-457        } else {
-458            xs
-459        };
-460        let layernorm_input = (residual + attention_output)?;
-461        let layernorm_output = layernorm_input.apply(&self.post_attention_layernorm)?;
-462        let mlp_output = layernorm_output.apply(&self.mlp)?;
-463        let residual = if self.apply_residual_connection_post_layernorm {
-464            &layernorm_output
-465        } else {
-466            &layernorm_input
-467        };
-468        mlp_output + residual
-469    }
-470}
-471
-472#[derive(Debug, Clone)]
-473struct Transformer {
-474    layers: Vec<Block>,
-475    final_layernorm: Option<candle_nn::LayerNorm>,
-476    rotary_emb: RotaryEmbedding,
-477}
-478
-479impl Transformer {
-480    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-481        let vb_l = vb.pp("layers");
-482        let mut layers = Vec::with_capacity(cfg.num_layers);
-483        for layer_index in 0..cfg.num_layers {
-484            let block = Block::new(layer_index + 1, cfg, vb_l.pp(layer_index))?;
-485            layers.push(block)
-486        }
-487        let final_layernorm = if cfg.post_layer_norm {
-488            let ln = if cfg.rmsnorm {
-489                candle_nn::rms_norm(
-490                    cfg.hidden_size,
-491                    cfg.layernorm_epsilon,
-492                    vb.pp("final_layernorm"),
-493                )?
-494                .into_inner()
-495            } else {
-496                candle_nn::layer_norm(
-497                    cfg.hidden_size,
-498                    cfg.layernorm_epsilon,
-499                    vb.pp("final_layernorm"),
-500                )?
-501            };
-502            Some(ln)
-503        } else {
-504            None
-505        };
-506        let rotary_emb = RotaryEmbedding::new(cfg, vb.dtype(), vb.device())?;
-507        Ok(Self {
-508            layers,
-509            final_layernorm,
-510            rotary_emb,
-511        })
-512    }
-513
-514    fn reset_kv_cache(&mut self) {
-515        for block in self.layers.iter_mut() {
-516            block.reset_kv_cache()
-517        }
-518    }
-519
-520    fn forward(&mut self, xs: &Tensor, attention_mask: &Option<Tensor>) -> Result<Tensor> {
-521        let mut xs = xs.clone();
-522        for block in self.layers.iter_mut() {
-523            xs = block.forward(&xs, attention_mask, &self.rotary_emb)?
-524        }
-525        match self.final_layernorm.as_ref() {
-526            None => Ok(xs),
-527            Some(ln) => xs.apply(ln),
-528        }
-529    }
-530}
-531
-532#[derive(Debug, Clone)]
-533struct Embedding {
-534    word_embeddings: candle_nn::Embedding,
-535    fp32_residual_connection: bool,
-536}
-537
-538impl Embedding {
-539    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-540        let word_embeddings = candle_nn::embedding(
-541            cfg.padded_vocab_size,
-542            cfg.hidden_size,
-543            vb.pp("word_embeddings"),
-544        )?;
-545        Ok(Self {
-546            word_embeddings,
-547            fp32_residual_connection: cfg.fp32_residual_connection,
-548        })
-549    }
-550}
-551
-552impl Module for Embedding {
-553    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-554        let xs = self.word_embeddings.forward(xs)?.transpose(0, 1)?; // b,s,h -> s,b,h
-555        if self.fp32_residual_connection {
-556            xs.to_dtype(candle::DType::F32)
-557        } else {
-558            xs.contiguous()
-559        }
-560    }
-561}
-562
-563#[derive(Debug, Clone)]
-564pub struct Model {
-565    embedding: Embedding,
-566    encoder: Transformer,
-567    output_layer: Linear,
-568}
-569
-570fn get_mask(size: usize, device: &Device) -> Result<Tensor> {
-571    let mask: Vec<_> = (0..size)
-572        .flat_map(|i| (0..size).map(move |j| u8::from(j > i)))
-573        .collect();
-574    Tensor::from_slice(&mask, (size, size), device)
-575}
-576
-577impl Model {
-578    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-579        let vb = vb.pp("transformer");
-580        let embedding = Embedding::new(cfg, vb.pp("embedding"))?;
-581        let encoder = Transformer::new(cfg, vb.pp("encoder"))?;
-582        let output_layer = linear(
-583            cfg.hidden_size,
-584            cfg.padded_vocab_size,
-585            false,
-586            vb.pp("output_layer"),
-587        )?;
-588
-589        Ok(Self {
-590            embedding,
-591            encoder,
-592            output_layer,
-593        })
-594    }
-595
-596    pub fn reset_kv_cache(&mut self) {
-597        self.encoder.reset_kv_cache()
-598    }
-599
-600    pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor> {
-601        let (_b_size, seq_len) = xs.dims2()?;
-602        let input_embeds = xs.apply(&self.embedding)?;
-603        let attention_mask = if seq_len <= 1 {
-604            None
-605        } else {
-606            Some(get_mask(seq_len, xs.device())?)
-607        };
-608        let xs = self.encoder.forward(&input_embeds, &attention_mask)?;
-609        let lm_logits = xs.i(seq_len - 1)?.apply(&self.output_layer)?;
-610        Ok(lm_logits)
-611    }
-612}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/colpali.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/colpali.rs.html deleted file mode 100644 index b7416eb..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/colpali.rs.html +++ /dev/null @@ -1,48 +0,0 @@ -colpali.rs - source

candle_transformers/models/
colpali.rs

1//! Colpali Model for text/image similarity scoring.
-2//!
-3//! Colpali combines a vision encoder with an efficient LM for retrieving content.
-4//!
-5
-6use candle::{Module, Result, Tensor};
-7use candle_nn::VarBuilder;
-8
-9use super::paligemma;
-10use candle_nn::{linear, Linear};
-11
-12pub struct Model {
-13    pub model: paligemma::Model,
-14    pub custom_text_projection: Linear,
-15}
-16
-17impl Model {
-18    pub fn new(config: &paligemma::Config, vb: VarBuilder) -> Result<Self> {
-19        let model = paligemma::Model::new(config, vb.pp("model"))?;
-20        let custom_text_projection = linear(
-21            config.text_config.hidden_size,
-22            128,
-23            vb.pp("custom_text_proj"),
-24        )?;
-25
-26        Ok(Self {
-27            model,
-28            custom_text_projection,
-29        })
-30    }
-31
-32    pub fn forward_images(&mut self, pixel_values: &Tensor, input_ids: &Tensor) -> Result<Tensor> {
-33        let outputs = self
-34            .model
-35            .setup_without_projection(pixel_values, input_ids)?;
-36        let outputs = self.custom_text_projection.forward(&outputs)?;
-37        let outputs = outputs.broadcast_div(&outputs.sqr()?.sum_keepdim(2)?.sqrt()?)?;
-38        Ok(outputs)
-39    }
-40
-41    pub fn forward_text(&mut self, input_ids: &Tensor) -> Result<Tensor> {
-42        let outputs = self.model.forward_without_projection(input_ids)?;
-43        let outputs = self.custom_text_projection.forward(&outputs)?;
-44        let outputs = outputs.broadcast_div(&outputs.sqr()?.sum_keepdim(2)?.sqrt()?)?;
-45        Ok(outputs)
-46    }
-47}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/convmixer.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/convmixer.rs.html deleted file mode 100644 index 811f98b..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/convmixer.rs.html +++ /dev/null @@ -1,90 +0,0 @@ -convmixer.rs - source

candle_transformers/models/
convmixer.rs

1//! ConvMixer implementation.
-2//!
-3//! See "Patches Are All You Need?" by Trockman et al. 2022
-4//!
-5//! - 📝 [Arxiv](https://arxiv.org/abs/2201.09792)
-6//! - 💻 [Github](https://github.com/locuslab/convmixer)
-7//!
-8use candle::Result;
-9use candle_nn::{batch_norm, Conv2dConfig, Module, VarBuilder};
-10
-11#[allow(clippy::many_single_char_names)]
-12fn conv2d_same(
-13    i: usize,
-14    o: usize,
-15    k: usize,
-16    c: Conv2dConfig,
-17    vb: VarBuilder,
-18) -> Result<impl Module> {
-19    let conv2d = candle_nn::conv2d(i, o, k, c, vb)?;
-20    let s = c.stride;
-21    let module = candle_nn::func(move |xs| {
-22        let ih = xs.dim(2)?;
-23        let iw = xs.dim(3)?;
-24        let oh = ih.div_ceil(s);
-25        let ow = iw.div_ceil(s);
-26        let pad_h = usize::max((oh - 1) * s + k - ih, 0);
-27        let pad_w = usize::max((ow - 1) * s + k - iw, 0);
-28        if pad_h > 0 || pad_w > 0 {
-29            xs.pad_with_zeros(3, pad_w / 2, pad_w - pad_w / 2)?
-30                .pad_with_zeros(2, pad_h / 2, pad_h - pad_h / 2)?
-31                .apply(&conv2d)
-32        } else {
-33            xs.apply(&conv2d)
-34        }
-35    });
-36    Ok(module)
-37}
-38
-39fn block(dim: usize, kernel_size: usize, vb: VarBuilder) -> Result<impl Module> {
-40    let conv2d_cfg = Conv2dConfig {
-41        groups: dim,
-42        ..Default::default()
-43    };
-44    let vb_fn = vb.pp(0).pp("fn");
-45    let conv1 = conv2d_same(dim, dim, kernel_size, conv2d_cfg, vb_fn.pp(0))?;
-46    let bn1 = batch_norm(dim, 1e-5, vb_fn.pp(2))?;
-47    let conv2 = candle_nn::conv2d(dim, dim, 1, Default::default(), vb.pp(1))?;
-48    let bn2 = batch_norm(dim, 1e-5, vb.pp(3))?;
-49    Ok(candle_nn::func(move |xs| {
-50        let ys = xs.apply(&conv1)?.gelu_erf()?.apply_t(&bn1, false)?;
-51        (xs + ys)?.apply(&conv2)?.gelu_erf()?.apply_t(&bn2, false)
-52    }))
-53}
-54
-55fn convmixer(
-56    nclasses: usize,
-57    dim: usize,
-58    depth: usize,
-59    kernel_size: usize,
-60    patch_size: usize,
-61    vb: VarBuilder,
-62) -> Result<candle_nn::Func<'static>> {
-63    let conv2d_cfg = Conv2dConfig {
-64        stride: patch_size,
-65        ..Default::default()
-66    };
-67    let conv1 = candle_nn::conv2d(3, dim, patch_size, conv2d_cfg, vb.pp(0))?;
-68    let bn1 = batch_norm(dim, 1e-5, vb.pp(2))?;
-69    let blocks: Vec<_> = (0..depth)
-70        .map(|index| block(dim, kernel_size, vb.pp(3 + index)))
-71        .collect::<Result<Vec<_>>>()?;
-72    let fc = candle_nn::linear(dim, nclasses, vb.pp(25))?;
-73    Ok(candle_nn::func(move |xs| {
-74        let mut xs = xs.apply(&conv1)?.gelu_erf()?.apply_t(&bn1, false)?;
-75        for block in blocks.iter() {
-76            xs = xs.apply(block)?
-77        }
-78        // This performs the adaptive average pooling with a target size of (1, 1).
-79        xs.mean(3)?.mean(2)?.apply(&fc)
-80    }))
-81}
-82
-83pub fn c1536_20(nclasses: usize, vb: VarBuilder) -> Result<candle_nn::Func<'static>> {
-84    convmixer(nclasses, 1536, 20, 9, 7, vb)
-85}
-86
-87pub fn c1024_20(nclasses: usize, vb: VarBuilder) -> Result<candle_nn::Func<'static>> {
-88    convmixer(nclasses, 1024, 20, 9, 14, vb)
-89}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/convnext.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/convnext.rs.html deleted file mode 100644 index 8b90810..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/convnext.rs.html +++ /dev/null @@ -1,341 +0,0 @@ -convnext.rs - source

candle_transformers/models/
convnext.rs

1//! ConvNeXt implementation.
-2//!
-3//! This candle implementation uses a pre-trained ConvNeXt network for inference. The
-4//! classification head has been trained on the ImageNet dataset and returns the
-5//! probabilities for the top-5 classes.
-6//!
-7//! Original code:
-8//! - 💻 [ConvNeXt](https://github.com/facebookresearch/ConvNeXt/)
-9//! - 💻 [ConvNeXt-V2](https://github.com/facebookresearch/ConvNeXt-V2/)
-10//! - 💻 [timm](https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/convnext.py)
-11//! - 📝 [Paper](https://arxiv.org/abs/2201.03545) A ConvNet for the 2020s
-12//! - 📝 [Paper](https://arxiv.org/abs/2301.00808) ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
-13//!
-14
-15use candle::shape::ShapeWithOneHole;
-16use candle::{Result, D};
-17use candle_nn::{conv2d, layer_norm, linear, Conv2dConfig, Func, VarBuilder};
-18
-19#[derive(Clone)]
-20pub struct Config {
-21    blocks: [usize; 4],
-22    channels: [usize; 4],
-23    use_conv_mlp: bool,
-24}
-25
-26impl Config {
-27    pub fn atto() -> Self {
-28        Self {
-29            blocks: [2, 2, 6, 2],
-30            channels: [40, 80, 160, 320],
-31            use_conv_mlp: true,
-32        }
-33    }
-34
-35    pub fn femto() -> Self {
-36        Self {
-37            blocks: [2, 2, 6, 2],
-38            channels: [48, 96, 192, 384],
-39            use_conv_mlp: true,
-40        }
-41    }
-42
-43    pub fn pico() -> Self {
-44        Self {
-45            blocks: [2, 2, 6, 2],
-46            channels: [64, 128, 256, 512],
-47            use_conv_mlp: true,
-48        }
-49    }
-50
-51    pub fn nano() -> Self {
-52        Self {
-53            blocks: [2, 2, 8, 2],
-54            channels: [80, 160, 320, 640],
-55            use_conv_mlp: true,
-56        }
-57    }
-58
-59    pub fn tiny() -> Self {
-60        Self {
-61            blocks: [3, 3, 9, 3],
-62            channels: [96, 192, 384, 768],
-63            use_conv_mlp: false,
-64        }
-65    }
-66
-67    pub fn small() -> Self {
-68        Self {
-69            blocks: [3, 3, 27, 3],
-70            channels: [96, 192, 384, 768],
-71            use_conv_mlp: false,
-72        }
-73    }
-74
-75    pub fn base() -> Self {
-76        Self {
-77            blocks: [3, 3, 27, 3],
-78            channels: [128, 256, 512, 1024],
-79            use_conv_mlp: false,
-80        }
-81    }
-82
-83    pub fn large() -> Self {
-84        Self {
-85            blocks: [3, 3, 27, 3],
-86            channels: [192, 384, 768, 1536],
-87            use_conv_mlp: false,
-88        }
-89    }
-90
-91    pub fn xlarge() -> Self {
-92        Self {
-93            blocks: [3, 3, 27, 3],
-94            channels: [256, 512, 1024, 2048],
-95            use_conv_mlp: false,
-96        }
-97    }
-98
-99    pub fn huge() -> Self {
-100        Self {
-101            blocks: [3, 3, 27, 3],
-102            channels: [352, 704, 1408, 2816],
-103            use_conv_mlp: false,
-104        }
-105    }
-106}
-107
-108// Layer norm for data in channels-last format.
-109fn layer_norm_cl(dim: usize, vb: VarBuilder) -> Result<Func<'static>> {
-110    let norm = layer_norm(dim, 1e-6, vb)?;
-111
-112    Ok(Func::new(move |xs| xs.apply(&norm)))
-113}
-114
-115// Layer norm for data in channels-first format.
-116fn layer_norm_cf(dim: usize, vb: VarBuilder) -> Result<Func<'static>> {
-117    let norm = layer_norm(dim, 1e-6, vb)?;
-118
-119    Ok(Func::new(move |xs| {
-120        let xs = xs
-121            .permute((0, 2, 3, 1))?
-122            .apply(&norm)?
-123            .permute((0, 3, 1, 2))?;
-124        Ok(xs)
-125    }))
-126}
-127
-128// Global response normalization layer
-129// Based on https://github.com/huggingface/pytorch-image-models/blob/main/timm/layers/grn.py
-130fn convnext2_grn(dim: usize, channels_last: bool, vb: VarBuilder) -> Result<Func<'static>> {
-131    let (shape, spatial_dim, channel_dim) = if channels_last {
-132        ((1, 1, 1, ()).into_shape(dim)?, [1, 2], 3)
-133    } else {
-134        ((1, (), 1, 1).into_shape(dim)?, [2, 3], 1)
-135    };
-136
-137    let gamma = vb.get(dim, "weight")?.reshape(&shape)?;
-138    let beta = vb.get(dim, "bias")?.reshape(&shape)?;
-139
-140    Ok(Func::new(move |xs| {
-141        let residual = xs;
-142        let gx = xs
-143            .sqr()?
-144            .sum_keepdim(spatial_dim)?
-145            .mean_keepdim(spatial_dim)?
-146            .sqrt()?;
-147
-148        let gxmean = gx.mean_keepdim(channel_dim)?;
-149        let nx = gx.broadcast_div(&(gxmean + 1e-6)?)?;
-150        let xs = xs
-151            .broadcast_mul(&nx)?
-152            .broadcast_mul(&gamma)?
-153            .broadcast_add(&beta)?;
-154
-155        xs + residual
-156    }))
-157}
-158
-159// Initial downsampling via a patchify layer.
-160fn convnext_stem(out_channels: usize, vb: VarBuilder) -> Result<Func<'static>> {
-161    let conv2d_cfg = Conv2dConfig {
-162        stride: 4,
-163        ..Default::default()
-164    };
-165    let patchify = conv2d(3, out_channels, 4, conv2d_cfg, vb.pp(0))?;
-166    let norm = layer_norm_cf(out_channels, vb.pp(1))?;
-167
-168    Ok(Func::new(move |xs| xs.apply(&patchify)?.apply(&norm)))
-169}
-170
-171// Downsampling applied after the stages.
-172fn convnext_downsample(dim: usize, vb: VarBuilder) -> Result<Func<'static>> {
-173    let conv2d_cfg = Conv2dConfig {
-174        stride: 2,
-175        ..Default::default()
-176    };
-177    let norm = layer_norm_cf(dim / 2, vb.pp(0))?;
-178    let conv = conv2d(dim / 2, dim, 2, conv2d_cfg, vb.pp(1))?;
-179
-180    Ok(Func::new(move |xs| xs.apply(&norm)?.apply(&conv)))
-181}
-182
-183// MLP block from the original paper with optional GRN layer (v2 models).
-184fn convnext_mlp(dim: usize, vb: VarBuilder) -> Result<Func<'static>> {
-185    let fc1 = linear(dim, 4 * dim, vb.pp("fc1"))?;
-186    let fc2 = linear(4 * dim, dim, vb.pp("fc2"))?;
-187    let grn = convnext2_grn(4 * dim, true, vb.pp("grn"));
-188
-189    Ok(Func::new(move |xs| {
-190        let mut xs = xs.apply(&fc1)?.gelu_erf()?;
-191        if let Ok(g) = &grn {
-192            xs = xs.apply(g)?;
-193        }
-194        xs = xs.apply(&fc2)?;
-195        Ok(xs)
-196    }))
-197}
-198
-199// MLP block using pointwise convolutions, with optional GRN layer (v2 models).
-200fn convnext_conv_mlp(dim: usize, vb: VarBuilder) -> Result<Func<'static>> {
-201    let conv2d_cfg = Conv2dConfig {
-202        ..Default::default()
-203    };
-204    let fc1 = conv2d(dim, 4 * dim, 1, conv2d_cfg, vb.pp("fc1"))?;
-205    let fc2 = conv2d(4 * dim, dim, 1, conv2d_cfg, vb.pp("fc2"))?;
-206
-207    let grn = convnext2_grn(4 * dim, false, vb.pp("grn"));
-208    Ok(Func::new(move |xs| {
-209        let mut xs = xs.apply(&fc1)?.gelu_erf()?;
-210        if let Ok(g) = &grn {
-211            xs = xs.apply(g)?;
-212        }
-213        xs = xs.apply(&fc2)?;
-214        Ok(xs)
-215    }))
-216}
-217
-218// A block consisting of a depthwise convolution, a MLP and layer scaling (v1 models only).
-219fn convnext_block(dim: usize, use_conv_mlp: bool, vb: VarBuilder) -> Result<Func<'static>> {
-220    let conv2d_cfg = Conv2dConfig {
-221        groups: dim,
-222        padding: 3,
-223        ..Default::default()
-224    };
-225
-226    let conv_dw = conv2d(dim, dim, 7, conv2d_cfg, vb.pp("conv_dw"))?;
-227    let gamma = vb.get(dim, "gamma");
-228
-229    let (mlp, norm) = if use_conv_mlp {
-230        (
-231            convnext_conv_mlp(dim, vb.pp("mlp"))?,
-232            layer_norm_cf(dim, vb.pp("norm"))?,
-233        )
-234    } else {
-235        (
-236            convnext_mlp(dim, vb.pp("mlp"))?,
-237            layer_norm_cl(dim, vb.pp("norm"))?,
-238        )
-239    };
-240
-241    Ok(Func::new(move |xs| {
-242        let residual = xs;
-243        let mut xs = xs.apply(&conv_dw)?;
-244
-245        xs = if use_conv_mlp {
-246            xs.apply(&norm)?.apply(&mlp)?
-247        } else {
-248            xs.permute((0, 2, 3, 1))?
-249                .apply(&norm)?
-250                .apply(&mlp)?
-251                .permute((0, 3, 1, 2))?
-252        };
-253
-254        if let Ok(g) = &gamma {
-255            xs = xs.broadcast_mul(&g.reshape((1, (), 1, 1))?)?;
-256        };
-257
-258        xs + residual
-259    }))
-260}
-261
-262// Each stage contains blocks and a downsampling layer for the previous stage.
-263fn convnext_stage(cfg: &Config, stage_idx: usize, vb: VarBuilder) -> Result<Func<'static>> {
-264    let nblocks = cfg.blocks[stage_idx];
-265    let mut blocks = Vec::with_capacity(nblocks);
-266
-267    let dim = cfg.channels[stage_idx];
-268
-269    if stage_idx > 0 {
-270        blocks.push(convnext_downsample(dim, vb.pp("downsample"))?);
-271    }
-272
-273    for block_idx in 0..nblocks {
-274        blocks.push(convnext_block(
-275            dim,
-276            cfg.use_conv_mlp,
-277            vb.pp(format!("blocks.{block_idx}")),
-278        )?);
-279    }
-280
-281    Ok(Func::new(move |xs| {
-282        let mut xs = xs.clone();
-283        for block in blocks.iter() {
-284            xs = xs.apply(block)?
-285        }
-286        Ok(xs)
-287    }))
-288}
-289
-290// Classification head.
-291fn convnext_head(outputs: usize, nclasses: usize, vb: VarBuilder) -> Result<Func<'static>> {
-292    let norm = layer_norm_cl(outputs, vb.pp("norm"))?;
-293    let linear = linear(outputs, nclasses, vb.pp("fc"))?;
-294    Ok(Func::new(move |xs| xs.apply(&norm)?.apply(&linear)))
-295}
-296
-297// Build a convnext model for a given configuration.
-298fn convnext_model(
-299    config: &Config,
-300    nclasses: Option<usize>,
-301    vb: VarBuilder,
-302) -> Result<Func<'static>> {
-303    let head = match nclasses {
-304        None => None,
-305        Some(nclasses) => {
-306            let head = convnext_head(config.channels[3], nclasses, vb.pp("head"))?;
-307            Some(head)
-308        }
-309    };
-310
-311    let stem = convnext_stem(config.channels[0], vb.pp("stem"))?;
-312    let vb = vb.pp("stages");
-313    let stage1 = convnext_stage(config, 0, vb.pp(0))?;
-314    let stage2 = convnext_stage(config, 1, vb.pp(1))?;
-315    let stage3 = convnext_stage(config, 2, vb.pp(2))?;
-316    let stage4 = convnext_stage(config, 3, vb.pp(3))?;
-317
-318    Ok(Func::new(move |xs| {
-319        let xs = xs
-320            .apply(&stem)?
-321            .apply(&stage1)?
-322            .apply(&stage2)?
-323            .apply(&stage3)?
-324            .apply(&stage4)?
-325            .mean(D::Minus2)?
-326            .mean(D::Minus1)?;
-327        match &head {
-328            None => Ok(xs),
-329            Some(head) => xs.apply(head),
-330        }
-331    }))
-332}
-333
-334pub fn convnext(cfg: &Config, nclasses: usize, vb: VarBuilder) -> Result<Func<'static>> {
-335    convnext_model(cfg, Some(nclasses), vb)
-336}
-337
-338pub fn convnext_no_final_layer(cfg: &Config, vb: VarBuilder) -> Result<Func<'static>> {
-339    convnext_model(cfg, None, vb)
-340}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/dac.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/dac.rs.html deleted file mode 100644 index d608abe..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/dac.rs.html +++ /dev/null @@ -1,382 +0,0 @@ -dac.rs - source

candle_transformers/models/
dac.rs

1//! Implementation of the Descript Audio Codec (DAC) model
-2//!
-3//! See: [Descript Audio Codec](https://github.com/descriptinc/descript-audio-codec)
-4//!
-5/// An efficient neural codec for compressing/decompressing audio
-6///
-7use crate::models::encodec;
-8use candle::{IndexOp, Result, Tensor, D};
-9use candle_nn::{Conv1d, Conv1dConfig, ConvTranspose1d, ConvTranspose1dConfig, VarBuilder};
-10
-11#[derive(serde::Deserialize, Debug, Clone)]
-12pub struct Config {
-13    pub num_codebooks: usize,
-14    pub model_bitrate: u32,
-15    pub codebook_size: usize,
-16    pub latent_dim: usize,
-17    pub frame_rate: u32,
-18    pub sampling_rate: u32,
-19}
-20
-21#[derive(Debug, Clone)]
-22pub struct Snake1d {
-23    alpha: Tensor,
-24}
-25
-26impl Snake1d {
-27    pub fn new(channels: usize, vb: VarBuilder) -> Result<Self> {
-28        let alpha = vb.get((1, channels, 1), "alpha")?;
-29        Ok(Self { alpha })
-30    }
-31}
-32
-33impl candle::Module for Snake1d {
-34    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-35        let xs_shape = xs.shape();
-36        let xs = xs.flatten_from(2)?;
-37        let sin = self.alpha.broadcast_mul(&xs)?.sin()?;
-38        let sin = (&sin * &sin)?;
-39        (xs + (&self.alpha + 1e-9)?.recip()?.broadcast_mul(&sin)?)?.reshape(xs_shape)
-40    }
-41}
-42
-43#[derive(Debug, Clone)]
-44pub struct ResidualUnit {
-45    snake1: Snake1d,
-46    conv1: Conv1d,
-47    snake2: Snake1d,
-48    conv2: Conv1d,
-49}
-50
-51impl ResidualUnit {
-52    pub fn new(dim: usize, dilation: usize, vb: VarBuilder) -> Result<Self> {
-53        let pad = ((7 - 1) * dilation) / 2;
-54        let vb = vb.pp("block");
-55        let snake1 = Snake1d::new(dim, vb.pp(0))?;
-56        let cfg1 = Conv1dConfig {
-57            dilation,
-58            padding: pad,
-59            ..Default::default()
-60        };
-61        let conv1 = encodec::conv1d_weight_norm(dim, dim, 7, cfg1, vb.pp(1))?;
-62        let snake2 = Snake1d::new(dim, vb.pp(2))?;
-63        let conv2 = encodec::conv1d_weight_norm(dim, dim, 1, Default::default(), vb.pp(3))?;
-64        Ok(Self {
-65            snake1,
-66            conv1,
-67            snake2,
-68            conv2,
-69        })
-70    }
-71}
-72
-73impl candle::Module for ResidualUnit {
-74    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-75        let ys = xs
-76            .apply(&self.snake1)?
-77            .apply(&self.conv1)?
-78            .apply(&self.snake2)?
-79            .apply(&self.conv2)?;
-80        let pad = (xs.dim(D::Minus1)? - ys.dim(D::Minus1)?) / 2;
-81        if pad > 0 {
-82            &ys + xs.narrow(D::Minus1, pad, ys.dim(D::Minus1)?)
-83        } else {
-84            ys + xs
-85        }
-86    }
-87}
-88
-89#[derive(Debug, Clone)]
-90pub struct EncoderBlock {
-91    res1: ResidualUnit,
-92    res2: ResidualUnit,
-93    res3: ResidualUnit,
-94    snake1: Snake1d,
-95    conv1: Conv1d,
-96}
-97
-98impl EncoderBlock {
-99    pub fn new(dim: usize, stride: usize, vb: VarBuilder) -> Result<Self> {
-100        let vb = vb.pp("block");
-101        let res1 = ResidualUnit::new(dim / 2, 1, vb.pp(0))?;
-102        let res2 = ResidualUnit::new(dim / 2, 3, vb.pp(1))?;
-103        let res3 = ResidualUnit::new(dim / 2, 9, vb.pp(2))?;
-104        let snake1 = Snake1d::new(dim / 2, vb.pp(3))?;
-105        let cfg1 = Conv1dConfig {
-106            stride,
-107            padding: (stride + 1) / 2,
-108            ..Default::default()
-109        };
-110        let conv1 = encodec::conv1d_weight_norm(dim / 2, dim, 2 * stride, cfg1, vb.pp(4))?;
-111        Ok(Self {
-112            res1,
-113            res2,
-114            res3,
-115            snake1,
-116            conv1,
-117        })
-118    }
-119}
-120
-121impl candle::Module for EncoderBlock {
-122    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-123        xs.apply(&self.res1)?
-124            .apply(&self.res2)?
-125            .apply(&self.res3)?
-126            .apply(&self.snake1)?
-127            .apply(&self.conv1)
-128    }
-129}
-130
-131#[derive(Debug, Clone)]
-132pub struct Encoder {
-133    conv1: Conv1d,
-134    blocks: Vec<EncoderBlock>,
-135    snake1: Snake1d,
-136    conv2: Conv1d,
-137}
-138
-139impl candle::Module for Encoder {
-140    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-141        let mut xs = xs.apply(&self.conv1)?;
-142        for block in self.blocks.iter() {
-143            xs = xs.apply(block)?
-144        }
-145        xs.apply(&self.snake1)?.apply(&self.conv2)
-146    }
-147}
-148
-149impl Encoder {
-150    pub fn new(
-151        mut d_model: usize,
-152        strides: &[usize],
-153        d_latent: usize,
-154        vb: VarBuilder,
-155    ) -> Result<Self> {
-156        let vb = vb.pp("block");
-157        let cfg1 = Conv1dConfig {
-158            padding: 3,
-159            ..Default::default()
-160        };
-161        let conv1 = encodec::conv1d_weight_norm(1, d_model, 7, cfg1, vb.pp(0))?;
-162        let mut blocks = Vec::with_capacity(strides.len());
-163        for (block_idx, stride) in strides.iter().enumerate() {
-164            d_model *= 2;
-165            let block = EncoderBlock::new(d_model, *stride, vb.pp(block_idx + 1))?;
-166            blocks.push(block)
-167        }
-168        let snake1 = Snake1d::new(d_model, vb.pp(strides.len() + 1))?;
-169        let cfg2 = Conv1dConfig {
-170            padding: 1,
-171            ..Default::default()
-172        };
-173        let conv2 =
-174            encodec::conv1d_weight_norm(d_model, d_latent, 3, cfg2, vb.pp(strides.len() + 2))?;
-175        Ok(Self {
-176            conv1,
-177            blocks,
-178            snake1,
-179            conv2,
-180        })
-181    }
-182}
-183
-184#[derive(Debug, Clone)]
-185pub struct DecoderBlock {
-186    snake1: Snake1d,
-187    conv_tr1: ConvTranspose1d,
-188    res1: ResidualUnit,
-189    res2: ResidualUnit,
-190    res3: ResidualUnit,
-191}
-192
-193impl DecoderBlock {
-194    pub fn new(in_dim: usize, out_dim: usize, stride: usize, vb: VarBuilder) -> Result<Self> {
-195        let vb = vb.pp("block");
-196        let snake1 = Snake1d::new(in_dim, vb.pp(0))?;
-197        let cfg = ConvTranspose1dConfig {
-198            stride,
-199            padding: (stride + 1) / 2,
-200            ..Default::default()
-201        };
-202        let conv_tr1 = encodec::conv_transpose1d_weight_norm(
-203            in_dim,
-204            out_dim,
-205            2 * stride,
-206            true,
-207            cfg,
-208            vb.pp(1),
-209        )?;
-210        let res1 = ResidualUnit::new(out_dim, 1, vb.pp(2))?;
-211        let res2 = ResidualUnit::new(out_dim, 3, vb.pp(3))?;
-212        let res3 = ResidualUnit::new(out_dim, 9, vb.pp(4))?;
-213        Ok(Self {
-214            snake1,
-215            conv_tr1,
-216            res1,
-217            res2,
-218            res3,
-219        })
-220    }
-221}
-222
-223impl candle_nn::Module for DecoderBlock {
-224    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-225        xs.apply(&self.snake1)?
-226            .apply(&self.conv_tr1)?
-227            .apply(&self.res1)?
-228            .apply(&self.res2)?
-229            .apply(&self.res3)
-230    }
-231}
-232
-233#[derive(Debug, Clone)]
-234pub struct Decoder {
-235    conv1: Conv1d,
-236    blocks: Vec<DecoderBlock>,
-237    snake1: Snake1d,
-238    conv2: Conv1d,
-239}
-240
-241impl Decoder {
-242    pub fn new(
-243        in_c: usize,
-244        mut channels: usize,
-245        rates: &[usize],
-246        d_out: usize,
-247        vb: VarBuilder,
-248    ) -> Result<Self> {
-249        let vb = vb.pp("model");
-250        let cfg1 = Conv1dConfig {
-251            padding: 3,
-252            ..Default::default()
-253        };
-254        let conv1 = encodec::conv1d_weight_norm(in_c, channels, 7, cfg1, vb.pp(0))?;
-255        let mut blocks = Vec::with_capacity(rates.len());
-256        for (idx, stride) in rates.iter().enumerate() {
-257            let block = DecoderBlock::new(channels, channels / 2, *stride, vb.pp(idx + 1))?;
-258            channels /= 2;
-259            blocks.push(block)
-260        }
-261        let snake1 = Snake1d::new(channels, vb.pp(rates.len() + 1))?;
-262        let conv2 = encodec::conv1d_weight_norm(channels, d_out, 7, cfg1, vb.pp(rates.len() + 2))?;
-263        Ok(Self {
-264            conv1,
-265            blocks,
-266            snake1,
-267            conv2,
-268        })
-269    }
-270}
-271
-272impl candle::Module for Decoder {
-273    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-274        let mut xs = xs.apply(&self.conv1)?;
-275        for block in self.blocks.iter() {
-276            xs = xs.apply(block)?
-277        }
-278        xs.apply(&self.snake1)?.apply(&self.conv2)
-279    }
-280}
-281
-282#[allow(unused)]
-283#[derive(Clone, Debug)]
-284pub struct VectorQuantizer {
-285    in_proj: Conv1d,
-286    out_proj: Conv1d,
-287    codebook: candle_nn::Embedding,
-288}
-289
-290impl VectorQuantizer {
-291    pub fn new(in_dim: usize, cb_size: usize, cb_dim: usize, vb: VarBuilder) -> Result<Self> {
-292        let in_proj =
-293            encodec::conv1d_weight_norm(in_dim, cb_dim, 1, Default::default(), vb.pp("in_proj"))?;
-294        let out_proj =
-295            encodec::conv1d_weight_norm(cb_dim, in_dim, 1, Default::default(), vb.pp("out_proj"))?;
-296        let codebook = candle_nn::embedding(cb_size, cb_dim, vb.pp("codebook"))?;
-297        Ok(Self {
-298            in_proj,
-299            out_proj,
-300            codebook,
-301        })
-302    }
-303
-304    pub fn embed_code(&self, embed_id: &Tensor) -> Result<Tensor> {
-305        embed_id.apply(&self.codebook)
-306    }
-307
-308    pub fn decode_code(&self, embed_id: &Tensor) -> Result<Tensor> {
-309        self.embed_code(embed_id)?.transpose(1, 2)
-310    }
-311}
-312
-313#[derive(Clone, Debug)]
-314pub struct ResidualVectorQuantizer {
-315    quantizers: Vec<VectorQuantizer>,
-316}
-317
-318impl ResidualVectorQuantizer {
-319    pub fn new(
-320        input_dim: usize,
-321        n_codebooks: usize,
-322        cb_size: usize,
-323        cb_dim: usize,
-324        vb: VarBuilder,
-325    ) -> Result<Self> {
-326        let vb = &vb.pp("quantizers");
-327        let quantizers = (0..n_codebooks)
-328            .map(|i| VectorQuantizer::new(input_dim, cb_size, cb_dim, vb.pp(i)))
-329            .collect::<Result<Vec<_>>>()?;
-330        Ok(Self { quantizers })
-331    }
-332
-333    pub fn from_codes(&self, codes: &Tensor) -> Result<Tensor> {
-334        let mut sum = None;
-335        for (idx, quantizer) in self.quantizers.iter().enumerate() {
-336            let z_p_i = quantizer.decode_code(&codes.i((.., idx))?)?;
-337            let z_q_i = z_p_i.apply(&quantizer.out_proj)?;
-338            let s = match sum {
-339                None => z_q_i,
-340                Some(s) => (s + z_q_i)?,
-341            };
-342            sum = Some(s)
-343        }
-344        match sum {
-345            Some(s) => Ok(s),
-346            None => candle::bail!("empty codebooks"),
-347        }
-348    }
-349}
-350
-351#[derive(Debug, Clone)]
-352pub struct Model {
-353    pub encoder: Encoder,
-354    pub quantizer: ResidualVectorQuantizer,
-355    pub decoder: Decoder,
-356}
-357
-358impl Model {
-359    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-360        let vb = vb.pp("model");
-361        let encoder = Encoder::new(64, &[2, 4, 8, 8], cfg.latent_dim, vb.pp("encoder"))?;
-362        let quantizer = ResidualVectorQuantizer::new(
-363            cfg.latent_dim,
-364            cfg.num_codebooks,
-365            cfg.codebook_size,
-366            8,
-367            vb.pp("quantizer"),
-368        )?;
-369        let decoder = Decoder::new(cfg.latent_dim, 1536, &[8, 8, 4, 2], 1, vb.pp("decoder"))?;
-370        Ok(Self {
-371            encoder,
-372            decoder,
-373            quantizer,
-374        })
-375    }
-376
-377    pub fn decode_codes(&self, audio_codes: &Tensor) -> Result<Tensor> {
-378        let audio_values = self.quantizer.from_codes(audio_codes)?;
-379        audio_values.apply(&self.decoder)
-380    }
-381}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/debertav2.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/debertav2.rs.html deleted file mode 100644 index 114965a..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/debertav2.rs.html +++ /dev/null @@ -1,1449 +0,0 @@ -debertav2.rs - source

candle_transformers/models/
debertav2.rs

1use std::collections::HashMap;
-2
-3use candle::{bail, Context, DType, Device, Module, Result, Tensor, D};
-4use candle_nn::{
-5    conv1d, embedding, layer_norm, Conv1d, Conv1dConfig, Embedding, LayerNorm, VarBuilder,
-6};
-7use serde::{Deserialize, Deserializer};
-8
-9pub const DTYPE: DType = DType::F32;
-10
-11// NOTE: HiddenAct and HiddenActLayer are both direct copies from bert.rs.
-12#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)]
-13#[serde(rename_all = "lowercase")]
-14pub enum HiddenAct {
-15    Gelu,
-16    GeluApproximate,
-17    Relu,
-18}
-19
-20pub struct HiddenActLayer {
-21    act: HiddenAct,
-22    span: tracing::Span,
-23}
-24
-25impl HiddenActLayer {
-26    fn new(act: HiddenAct) -> Self {
-27        let span = tracing::span!(tracing::Level::TRACE, "hidden-act");
-28        Self { act, span }
-29    }
-30
-31    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-32        let _enter = self.span.enter();
-33        match self.act {
-34            // https://github.com/huggingface/transformers/blob/cd4584e3c809bb9e1392ccd3fe38b40daba5519a/src/transformers/activations.py#L213
-35            HiddenAct::Gelu => xs.gelu_erf(),
-36            HiddenAct::GeluApproximate => xs.gelu(),
-37            HiddenAct::Relu => xs.relu(),
-38        }
-39    }
-40}
-41
-42#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Default)]
-43#[serde(rename_all = "lowercase")]
-44enum PositionEmbeddingType {
-45    #[default]
-46    Absolute,
-47}
-48
-49pub type Id2Label = HashMap<u32, String>;
-50pub type Label2Id = HashMap<String, u32>;
-51
-52#[derive(Debug, Clone, PartialEq, Deserialize)]
-53pub struct Config {
-54    pub vocab_size: usize,
-55    pub hidden_size: usize,
-56    pub num_hidden_layers: usize,
-57    pub num_attention_heads: usize,
-58    pub intermediate_size: usize,
-59    pub hidden_act: HiddenAct,
-60    pub hidden_dropout_prob: f64,
-61    pub attention_probs_dropout_prob: f64,
-62    pub max_position_embeddings: usize,
-63    pub type_vocab_size: usize,
-64    pub initializer_range: f64,
-65    pub layer_norm_eps: f64,
-66    pub relative_attention: bool,
-67    pub max_relative_positions: isize,
-68    pub pad_token_id: Option<usize>,
-69    pub position_biased_input: bool,
-70    #[serde(deserialize_with = "deserialize_pos_att_type")]
-71    pub pos_att_type: Vec<String>,
-72    pub position_buckets: Option<isize>,
-73    pub share_att_key: Option<bool>,
-74    pub attention_head_size: Option<usize>,
-75    pub embedding_size: Option<usize>,
-76    pub norm_rel_ebd: Option<String>,
-77    pub conv_kernel_size: Option<usize>,
-78    pub conv_groups: Option<usize>,
-79    pub conv_act: Option<String>,
-80    pub id2label: Option<Id2Label>,
-81    pub label2id: Option<Label2Id>,
-82    pub pooler_dropout: Option<f64>,
-83    pub pooler_hidden_act: Option<HiddenAct>,
-84    pub pooler_hidden_size: Option<usize>,
-85    pub cls_dropout: Option<f64>,
-86}
-87
-88fn deserialize_pos_att_type<'de, D>(deserializer: D) -> std::result::Result<Vec<String>, D::Error>
-89where
-90    D: Deserializer<'de>,
-91{
-92    #[derive(Deserialize, Debug)]
-93    #[serde(untagged)]
-94    enum StringOrVec {
-95        String(String),
-96        Vec(Vec<String>),
-97    }
-98
-99    match StringOrVec::deserialize(deserializer)? {
-100        StringOrVec::String(s) => Ok(s.split('|').map(String::from).collect()),
-101        StringOrVec::Vec(v) => Ok(v),
-102    }
-103}
-104
-105// NOTE: Dropout is probably not needed for now since this will primarily be used
-106// in inferencing. However, for training/fine-tuning it will be necessary.
-107pub struct StableDropout {
-108    _drop_prob: f64,
-109    _count: usize,
-110}
-111
-112impl StableDropout {
-113    pub fn new(drop_prob: f64) -> Self {
-114        Self {
-115            _drop_prob: drop_prob,
-116            _count: 0,
-117        }
-118    }
-119
-120    pub fn forward(&self, x: &Tensor) -> Result<Tensor> {
-121        Ok(x.clone())
-122    }
-123}
-124
-125// https://github.com/huggingface/transformers/blob/78b2929c0554b79e0489b451ce4ece14d265ead2/src/transformers/models/deberta_v2/modeling_deberta_v2.py#L823
-126pub struct DebertaV2Embeddings {
-127    device: Device,
-128    word_embeddings: Embedding,
-129    position_embeddings: Option<Embedding>,
-130    token_type_embeddings: Option<Embedding>,
-131    layer_norm: LayerNorm,
-132    dropout: StableDropout,
-133    position_ids: Tensor,
-134    config: Config,
-135    embedding_size: usize,
-136    embed_proj: Option<candle_nn::Linear>,
-137}
-138
-139impl DebertaV2Embeddings {
-140    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-141        let device = vb.device().clone();
-142        let config = config.clone();
-143
-144        let embedding_size = config.embedding_size.unwrap_or(config.hidden_size);
-145
-146        let word_embeddings =
-147            embedding(config.vocab_size, embedding_size, vb.pp("word_embeddings"))?;
-148
-149        let position_embeddings = if config.position_biased_input {
-150            Some(embedding(
-151                config.max_position_embeddings,
-152                embedding_size,
-153                vb.pp("position_embeddings"),
-154            )?)
-155        } else {
-156            None
-157        };
-158
-159        let token_type_embeddings: Option<Embedding> = if config.type_vocab_size > 0 {
-160            Some(candle_nn::embedding(
-161                config.type_vocab_size,
-162                config.hidden_size,
-163                vb.pp("token_type_embeddings"),
-164            )?)
-165        } else {
-166            None
-167        };
-168
-169        let embed_proj: Option<candle_nn::Linear> = if embedding_size != config.hidden_size {
-170            Some(candle_nn::linear_no_bias(
-171                embedding_size,
-172                config.hidden_size,
-173                vb.pp("embed_proj"),
-174            )?)
-175        } else {
-176            None
-177        };
-178
-179        let layer_norm = layer_norm(
-180            config.hidden_size,
-181            config.layer_norm_eps,
-182            vb.pp("LayerNorm"),
-183        )?;
-184
-185        let dropout = StableDropout::new(config.hidden_dropout_prob);
-186
-187        let position_ids =
-188            Tensor::arange(0, config.max_position_embeddings as u32, &device)?.unsqueeze(0)?;
-189
-190        Ok(Self {
-191            word_embeddings,
-192            position_embeddings,
-193            token_type_embeddings,
-194            layer_norm,
-195            dropout,
-196            position_ids,
-197            device,
-198            config,
-199            embedding_size,
-200            embed_proj,
-201        })
-202    }
-203
-204    pub fn forward(
-205        &self,
-206        input_ids: Option<&Tensor>,
-207        token_type_ids: Option<&Tensor>,
-208        position_ids: Option<&Tensor>,
-209        mask: Option<&Tensor>,
-210        inputs_embeds: Option<&Tensor>,
-211    ) -> Result<Tensor> {
-212        let (input_shape, input_embeds) = match (input_ids, inputs_embeds) {
-213            (Some(ids), None) => {
-214                let embs = self.word_embeddings.forward(ids)?;
-215                (ids.dims(), embs)
-216            }
-217            (None, Some(e)) => (e.dims(), e.clone()),
-218            (None, None) => {
-219                bail!("Must specify either input_ids or inputs_embeds")
-220            }
-221            (Some(_), Some(_)) => {
-222                bail!("Can't specify both input_ids and inputs_embeds")
-223            }
-224        };
-225
-226        let seq_length = match input_shape.last() {
-227            Some(v) => *v,
-228            None => bail!("DebertaV2Embeddings invalid input shape"),
-229        };
-230
-231        let position_ids = match position_ids {
-232            Some(v) => v.clone(),
-233            None => self.position_ids.narrow(1, 0, seq_length)?,
-234        };
-235
-236        let token_type_ids = match token_type_ids {
-237            Some(ids) => ids.clone(),
-238            None => Tensor::zeros(input_shape, DType::U32, &self.device)?,
-239        };
-240
-241        let position_embeddings = match &self.position_embeddings {
-242            Some(emb) => emb.forward(&position_ids)?,
-243            None => Tensor::zeros_like(&input_embeds)?,
-244        };
-245
-246        let mut embeddings = input_embeds;
-247
-248        if self.config.position_biased_input {
-249            embeddings = embeddings.add(&position_embeddings)?;
-250        }
-251
-252        if self.config.type_vocab_size > 0 {
-253            embeddings = self.token_type_embeddings.as_ref().map_or_else(
-254                || bail!("token_type_embeddings must be set when type_vocab_size > 0"),
-255                |token_type_embeddings| {
-256                    embeddings.add(&token_type_embeddings.forward(&token_type_ids)?)
-257                },
-258            )?;
-259        }
-260
-261        if self.embedding_size != self.config.hidden_size {
-262            embeddings = if let Some(embed_proj) = &self.embed_proj {
-263                embed_proj.forward(&embeddings)?
-264            } else {
-265                bail!("embed_proj must exist if embedding_size != config.hidden_size");
-266            }
-267        }
-268
-269        embeddings = self.layer_norm.forward(&embeddings)?;
-270
-271        if let Some(mask) = mask {
-272            let mut mask = mask.clone();
-273            if mask.dims() != embeddings.dims() {
-274                if mask.dims().len() == 4 {
-275                    mask = mask.squeeze(1)?.squeeze(1)?;
-276                }
-277                mask = mask.unsqueeze(2)?;
-278            }
-279
-280            mask = mask.to_dtype(embeddings.dtype())?;
-281            embeddings = embeddings.broadcast_mul(&mask)?;
-282        }
-283
-284        self.dropout.forward(&embeddings)
-285    }
-286}
-287
-288// https://github.com/huggingface/transformers/blob/78b2929c0554b79e0489b451ce4ece14d265ead2/src/transformers/models/deberta_v2/modeling_deberta_v2.py#L72
-289struct XSoftmax {}
-290
-291impl XSoftmax {
-292    pub fn apply(input: &Tensor, mask: &Tensor, dim: D, device: &Device) -> Result<Tensor> {
-293        // NOTE: At the time of this writing, candle does not have a logical-not operator.
-294        let mut rmask = mask.broadcast_as(input.shape())?.to_dtype(DType::F32)?;
-295
-296        rmask = rmask
-297            .broadcast_lt(&Tensor::new(&[1.0_f32], device)?)?
-298            .to_dtype(DType::U8)?;
-299
-300        let min_value_tensor = Tensor::new(&[f32::MIN], device)?.broadcast_as(input.shape())?;
-301        let mut output = rmask.where_cond(&min_value_tensor, input)?;
-302
-303        output = candle_nn::ops::softmax(&output, dim)?;
-304
-305        let t_zeroes = Tensor::new(&[0f32], device)?.broadcast_as(input.shape())?;
-306        output = rmask.where_cond(&t_zeroes, &output)?;
-307
-308        Ok(output)
-309    }
-310}
-311
-312// https://github.com/huggingface/transformers/blob/78b2929c0554b79e0489b451ce4ece14d265ead2/src/transformers/models/deberta_v2/modeling_deberta_v2.py#L605
-313pub struct DebertaV2DisentangledSelfAttention {
-314    config: Config,
-315    num_attention_heads: usize,
-316    query_proj: candle_nn::Linear,
-317    key_proj: candle_nn::Linear,
-318    value_proj: candle_nn::Linear,
-319    dropout: StableDropout,
-320    device: Device,
-321    relative_attention: bool,
-322    pos_dropout: Option<StableDropout>,
-323    position_buckets: isize,
-324    max_relative_positions: isize,
-325    pos_ebd_size: isize,
-326    share_att_key: bool,
-327    pos_key_proj: Option<candle_nn::Linear>,
-328    pos_query_proj: Option<candle_nn::Linear>,
-329}
-330
-331impl DebertaV2DisentangledSelfAttention {
-332    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-333        let config = config.clone();
-334        let vb = vb.clone();
-335
-336        if config.hidden_size % config.num_attention_heads != 0 {
-337            return Err(candle::Error::Msg(format!(
-338                "The hidden size {} is not a multiple of the number of attention heads {}",
-339                config.hidden_size, config.num_attention_heads
-340            )));
-341        }
-342
-343        let num_attention_heads = config.num_attention_heads;
-344
-345        let attention_head_size = config
-346            .attention_head_size
-347            .unwrap_or(config.hidden_size / config.num_attention_heads);
-348
-349        let all_head_size = num_attention_heads * attention_head_size;
-350
-351        let query_proj = candle_nn::linear(config.hidden_size, all_head_size, vb.pp("query_proj"))?;
-352        let key_proj = candle_nn::linear(config.hidden_size, all_head_size, vb.pp("key_proj"))?;
-353        let value_proj = candle_nn::linear(config.hidden_size, all_head_size, vb.pp("value_proj"))?;
-354
-355        let share_att_key = config.share_att_key.unwrap_or(false);
-356        let relative_attention = config.relative_attention;
-357        let mut max_relative_positions = config.max_relative_positions;
-358
-359        let mut pos_ebd_size: isize = 0;
-360        let position_buckets = config.position_buckets.unwrap_or(-1);
-361        let mut pos_dropout: Option<StableDropout> = None;
-362        let mut pos_key_proj: Option<candle_nn::Linear> = None;
-363        let mut pos_query_proj: Option<candle_nn::Linear> = None;
-364
-365        if relative_attention {
-366            if max_relative_positions < 1 {
-367                max_relative_positions = config.max_position_embeddings as isize;
-368            }
-369            pos_ebd_size = max_relative_positions;
-370            if position_buckets > 0 {
-371                pos_ebd_size = position_buckets
-372            }
-373
-374            pos_dropout = Some(StableDropout::new(config.hidden_dropout_prob));
-375
-376            if !share_att_key {
-377                if config.pos_att_type.iter().any(|s| s == "c2p") {
-378                    pos_key_proj = Some(candle_nn::linear(
-379                        config.hidden_size,
-380                        all_head_size,
-381                        vb.pp("pos_key_proj"),
-382                    )?);
-383                }
-384                if config.pos_att_type.iter().any(|s| s == "p2c") {
-385                    pos_query_proj = Some(candle_nn::linear(
-386                        config.hidden_size,
-387                        all_head_size,
-388                        vb.pp("pos_query_proj"),
-389                    )?);
-390                }
-391            }
-392        }
-393
-394        let dropout = StableDropout::new(config.attention_probs_dropout_prob);
-395        let device = vb.device().clone();
-396
-397        Ok(Self {
-398            config,
-399            num_attention_heads,
-400            query_proj,
-401            key_proj,
-402            value_proj,
-403            dropout,
-404            device,
-405            relative_attention,
-406            pos_dropout,
-407            position_buckets,
-408            max_relative_positions,
-409            pos_ebd_size,
-410            share_att_key,
-411            pos_key_proj,
-412            pos_query_proj,
-413        })
-414    }
-415
-416    pub fn forward(
-417        &self,
-418        hidden_states: &Tensor,
-419        attention_mask: &Tensor,
-420        query_states: Option<&Tensor>,
-421        relative_pos: Option<&Tensor>,
-422        rel_embeddings: Option<&Tensor>,
-423    ) -> Result<Tensor> {
-424        let query_states = match query_states {
-425            Some(qs) => qs,
-426            None => hidden_states,
-427        };
-428
-429        let query_layer = self.transpose_for_scores(&self.query_proj.forward(query_states)?)?;
-430        let key_layer = self.transpose_for_scores(&self.key_proj.forward(query_states)?)?;
-431        let value_layer = self.transpose_for_scores(&self.value_proj.forward(query_states)?)?;
-432
-433        let mut rel_att: Option<Tensor> = None;
-434
-435        let mut scale_factor: usize = 1;
-436
-437        if self.config.pos_att_type.iter().any(|s| s == "c2p") {
-438            scale_factor += 1;
-439        }
-440
-441        if self.config.pos_att_type.iter().any(|s| s == "p2c") {
-442            scale_factor += 1;
-443        }
-444
-445        let scale = {
-446            let q_size = query_layer.dim(D::Minus1)?;
-447            Tensor::new(&[(q_size * scale_factor) as f32], &self.device)?.sqrt()?
-448        };
-449
-450        let mut attention_scores: Tensor = {
-451            let key_layer_transposed = key_layer.t()?;
-452            let div = key_layer_transposed
-453                .broadcast_div(scale.to_dtype(query_layer.dtype())?.as_ref())?;
-454            query_layer.matmul(&div)?
-455        };
-456
-457        if self.relative_attention {
-458            if let Some(rel_embeddings) = rel_embeddings {
-459                let rel_embeddings = self
-460                    .pos_dropout
-461                    .as_ref()
-462                    .context("relative_attention requires pos_dropout")?
-463                    .forward(rel_embeddings)?;
-464                rel_att = Some(self.disentangled_attention_bias(
-465                    query_layer,
-466                    key_layer,
-467                    relative_pos,
-468                    rel_embeddings,
-469                    scale_factor,
-470                )?);
-471            }
-472        }
-473
-474        if let Some(rel_att) = rel_att {
-475            attention_scores = attention_scores.broadcast_add(&rel_att)?;
-476        }
-477
-478        attention_scores = attention_scores.reshape((
-479            (),
-480            self.num_attention_heads,
-481            attention_scores.dim(D::Minus2)?,
-482            attention_scores.dim(D::Minus1)?,
-483        ))?;
-484
-485        let mut attention_probs =
-486            XSoftmax::apply(&attention_scores, attention_mask, D::Minus1, &self.device)?;
-487
-488        attention_probs = self.dropout.forward(&attention_probs)?;
-489
-490        let mut context_layer = attention_probs
-491            .reshape((
-492                (),
-493                attention_probs.dim(D::Minus2)?,
-494                attention_probs.dim(D::Minus1)?,
-495            ))?
-496            .matmul(&value_layer)?;
-497
-498        context_layer = context_layer
-499            .reshape((
-500                (),
-501                self.num_attention_heads,
-502                context_layer.dim(D::Minus2)?,
-503                context_layer.dim(D::Minus1)?,
-504            ))?
-505            .permute((0, 2, 1, 3))?
-506            .contiguous()?;
-507
-508        let dims = context_layer.dims();
-509
-510        context_layer = match dims.len() {
-511            2 => context_layer.reshape(())?,
-512            3 => context_layer.reshape((dims[0], ()))?,
-513            4 => context_layer.reshape((dims[0], dims[1], ()))?,
-514            5 => context_layer.reshape((dims[0], dims[1], dims[2], ()))?,
-515            _ => {
-516                bail!(
-517                    "Invalid shape for DisentabgledSelfAttention context layer: {:?}",
-518                    dims
-519                )
-520            }
-521        };
-522
-523        Ok(context_layer)
-524    }
-525
-526    fn transpose_for_scores(&self, xs: &Tensor) -> Result<Tensor> {
-527        let dims = xs.dims().to_vec();
-528        match dims.len() {
-529            3 => {
-530                let reshaped = xs.reshape((dims[0], dims[1], self.num_attention_heads, ()))?;
-531
-532                reshaped.transpose(1, 2)?.contiguous()?.reshape((
-533                    (),
-534                    reshaped.dim(1)?,
-535                    reshaped.dim(D::Minus1)?,
-536                ))
-537            }
-538            shape => {
-539                bail!("Invalid shape for transpose_for_scores. Expected 3 dimensions, got {shape}")
-540            }
-541        }
-542    }
-543
-544    fn disentangled_attention_bias(
-545        &self,
-546        query_layer: Tensor,
-547        key_layer: Tensor,
-548        relative_pos: Option<&Tensor>,
-549        rel_embeddings: Tensor,
-550        scale_factor: usize,
-551    ) -> Result<Tensor> {
-552        let mut relative_pos = relative_pos.map_or(
-553            build_relative_position(
-554                query_layer.dim(D::Minus2)?,
-555                key_layer.dim(D::Minus2)?,
-556                &self.device,
-557                Some(self.position_buckets),
-558                Some(self.max_relative_positions),
-559            )?,
-560            |pos| pos.clone(),
-561        );
-562
-563        relative_pos = match relative_pos.dims().len() {
-564            2 => relative_pos.unsqueeze(0)?.unsqueeze(0)?,
-565            3 => relative_pos.unsqueeze(1)?,
-566            other => {
-567                bail!("Relative position ids must be of dim 2 or 3 or 4. Got dim of size {other}")
-568            }
-569        };
-570
-571        let att_span = self.pos_ebd_size;
-572
-573        let rel_embeddings = rel_embeddings
-574            .narrow(0, 0, (att_span * 2) as usize)?
-575            .unsqueeze(0)?;
-576
-577        let mut pos_query_layer: Option<Tensor> = None;
-578        let mut pos_key_layer: Option<Tensor> = None;
-579
-580        let repeat_with = query_layer.dim(0)? / self.num_attention_heads;
-581        if self.share_att_key {
-582            pos_query_layer = Some(
-583                self.transpose_for_scores(&self.query_proj.forward(&rel_embeddings)?)?
-584                    .repeat(repeat_with)?,
-585            );
-586
-587            pos_key_layer = Some(
-588                self.transpose_for_scores(&self.key_proj.forward(&rel_embeddings)?)?
-589                    .repeat(repeat_with)?,
-590            )
-591        } else {
-592            if self.config.pos_att_type.iter().any(|s| s == "c2p") {
-593                pos_key_layer = Some(
-594                    self.transpose_for_scores(
-595                        &self
-596                            .pos_key_proj
-597                            .as_ref()
-598                            .context(
-599                                "Need pos_key_proj when share_att_key is false or not specified",
-600                            )?
-601                            .forward(&rel_embeddings)?,
-602                    )?
-603                    .repeat(repeat_with)?,
-604                )
-605            }
-606            if self.config.pos_att_type.iter().any(|s| s == "p2c") {
-607                pos_query_layer = Some(self.transpose_for_scores(&self
-608                    .pos_query_proj
-609                    .as_ref()
-610                    .context("Need a pos_query_proj when share_att_key is false or not specified")?
-611                    .forward(&rel_embeddings)?)?.repeat(repeat_with)?)
-612            }
-613        }
-614
-615        let mut score = Tensor::new(&[0 as f32], &self.device)?;
-616
-617        if self.config.pos_att_type.iter().any(|s| s == "c2p") {
-618            let pos_key_layer = pos_key_layer.context("c2p without pos_key_layer")?;
-619
-620            let scale = Tensor::new(
-621                &[(pos_key_layer.dim(D::Minus1)? * scale_factor) as f32],
-622                &self.device,
-623            )?
-624            .sqrt()?;
-625
-626            let mut c2p_att = query_layer.matmul(&pos_key_layer.t()?)?;
-627
-628            let c2p_pos = relative_pos
-629                .broadcast_add(&Tensor::new(&[att_span as i64], &self.device)?)?
-630                .clamp(0 as f32, (att_span * 2 - 1) as f32)?;
-631
-632            c2p_att = c2p_att.gather(
-633                &c2p_pos
-634                    .squeeze(0)?
-635                    .expand(&[
-636                        query_layer.dim(0)?,
-637                        query_layer.dim(1)?,
-638                        relative_pos.dim(D::Minus1)?,
-639                    ])?
-640                    .contiguous()?,
-641                D::Minus1,
-642            )?;
-643
-644            score = score.broadcast_add(
-645                &c2p_att.broadcast_div(scale.to_dtype(c2p_att.dtype())?.as_ref())?,
-646            )?;
-647        }
-648
-649        if self.config.pos_att_type.iter().any(|s| s == "p2c") {
-650            let pos_query_layer = pos_query_layer.context("p2c without pos_key_layer")?;
-651
-652            let scale = Tensor::new(
-653                &[(pos_query_layer.dim(D::Minus1)? * scale_factor) as f32],
-654                &self.device,
-655            )?
-656            .sqrt()?;
-657
-658            let r_pos = {
-659                if key_layer.dim(D::Minus2)? != query_layer.dim(D::Minus2)? {
-660                    build_relative_position(
-661                        key_layer.dim(D::Minus2)?,
-662                        key_layer.dim(D::Minus2)?,
-663                        &self.device,
-664                        Some(self.position_buckets),
-665                        Some(self.max_relative_positions),
-666                    )?
-667                    .unsqueeze(0)?
-668                } else {
-669                    relative_pos
-670                }
-671            };
-672
-673            let p2c_pos = r_pos
-674                .to_dtype(DType::F32)?
-675                .neg()?
-676                .broadcast_add(&Tensor::new(&[att_span as f32], &self.device)?)?
-677                .clamp(0f32, (att_span * 2 - 1) as f32)?;
-678
-679            let p2c_att = key_layer
-680                .matmul(&pos_query_layer.t()?)?
-681                .gather(
-682                    &p2c_pos
-683                        .squeeze(0)?
-684                        .expand(&[
-685                            query_layer.dim(0)?,
-686                            key_layer.dim(D::Minus2)?,
-687                            key_layer.dim(D::Minus2)?,
-688                        ])?
-689                        .contiguous()?
-690                        .to_dtype(DType::U32)?,
-691                    D::Minus1,
-692                )?
-693                .t()?;
-694
-695            score =
-696                score.broadcast_add(&p2c_att.broadcast_div(&scale.to_dtype(p2c_att.dtype())?)?)?;
-697        }
-698
-699        Ok(score)
-700    }
-701}
-702
-703// https://github.com/huggingface/transformers/blob/78b2929c0554b79e0489b451ce4ece14d265ead2/src/transformers/models/deberta_v2/modeling_deberta_v2.py#L270
-704pub struct DebertaV2Attention {
-705    dsa: DebertaV2DisentangledSelfAttention,
-706    output: DebertaV2SelfOutput,
-707}
-708
-709impl DebertaV2Attention {
-710    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-711        let dsa = DebertaV2DisentangledSelfAttention::load(vb.pp("attention.self"), config)?;
-712        let output = DebertaV2SelfOutput::load(vb.pp("attention.output"), config)?;
-713        Ok(Self { dsa, output })
-714    }
-715
-716    fn forward(
-717        &self,
-718        hidden_states: &Tensor,
-719        attention_mask: &Tensor,
-720        query_states: Option<&Tensor>,
-721        relative_pos: Option<&Tensor>,
-722        rel_embeddings: Option<&Tensor>,
-723    ) -> Result<Tensor> {
-724        let self_output = self.dsa.forward(
-725            hidden_states,
-726            attention_mask,
-727            query_states,
-728            relative_pos,
-729            rel_embeddings,
-730        )?;
-731
-732        self.output
-733            .forward(&self_output, query_states.unwrap_or(hidden_states))
-734    }
-735}
-736
-737// https://github.com/huggingface/transformers/blob/78b2929c0554b79e0489b451ce4ece14d265ead2/src/transformers/models/deberta_v2/modeling_deberta_v2.py#L255
-738pub struct DebertaV2SelfOutput {
-739    dense: candle_nn::Linear,
-740    layer_norm: LayerNorm,
-741    dropout: StableDropout,
-742}
-743
-744impl DebertaV2SelfOutput {
-745    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-746        let dense = candle_nn::linear(config.hidden_size, config.hidden_size, vb.pp("dense"))?;
-747        let layer_norm = candle_nn::layer_norm(
-748            config.hidden_size,
-749            config.layer_norm_eps,
-750            vb.pp("LayerNorm"),
-751        )?;
-752        let dropout = StableDropout::new(config.hidden_dropout_prob);
-753        Ok(Self {
-754            dense,
-755            layer_norm,
-756            dropout,
-757        })
-758    }
-759
-760    pub fn forward(&self, hidden_states: &Tensor, input_tensor: &Tensor) -> Result<Tensor> {
-761        let mut hidden_states = self.dense.forward(hidden_states)?;
-762        hidden_states = self.dropout.forward(&hidden_states)?;
-763        self.layer_norm
-764            .forward(&hidden_states.broadcast_add(input_tensor)?)
-765    }
-766}
-767
-768// https://github.com/huggingface/transformers/blob/78b2929c0554b79e0489b451ce4ece14d265ead2/src/transformers/models/deberta_v2/modeling_deberta_v2.py#L307
-769pub struct DebertaV2Intermediate {
-770    dense: candle_nn::Linear,
-771    intermediate_act: HiddenActLayer,
-772}
-773
-774impl DebertaV2Intermediate {
-775    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-776        let dense = candle_nn::linear(
-777            config.hidden_size,
-778            config.intermediate_size,
-779            vb.pp("intermediate.dense"),
-780        )?;
-781        let intermediate_act = HiddenActLayer::new(config.hidden_act);
-782        Ok(Self {
-783            dense,
-784            intermediate_act,
-785        })
-786    }
-787
-788    pub fn forward(&self, hidden_states: &Tensor) -> Result<Tensor> {
-789        self.intermediate_act
-790            .forward(&self.dense.forward(hidden_states)?)
-791    }
-792}
-793
-794// https://github.com/huggingface/transformers/blob/78b2929c0554b79e0489b451ce4ece14d265ead2/src/transformers/models/deberta_v2/modeling_deberta_v2.py#L323
-795pub struct DebertaV2Output {
-796    dense: candle_nn::Linear,
-797    layer_norm: LayerNorm,
-798    dropout: StableDropout,
-799}
-800
-801impl DebertaV2Output {
-802    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-803        let dense = candle_nn::linear(
-804            config.intermediate_size,
-805            config.hidden_size,
-806            vb.pp("output.dense"),
-807        )?;
-808        let layer_norm = candle_nn::layer_norm(
-809            config.hidden_size,
-810            config.layer_norm_eps,
-811            vb.pp("output.LayerNorm"),
-812        )?;
-813        let dropout = StableDropout::new(config.hidden_dropout_prob);
-814        Ok(Self {
-815            dense,
-816            layer_norm,
-817            dropout,
-818        })
-819    }
-820
-821    pub fn forward(&self, hidden_states: &Tensor, input_tensor: &Tensor) -> Result<Tensor> {
-822        let mut hidden_states = self.dense.forward(hidden_states)?;
-823        hidden_states = self.dropout.forward(&hidden_states)?;
-824        hidden_states = {
-825            let to_norm = hidden_states.broadcast_add(input_tensor)?;
-826            self.layer_norm.forward(&to_norm)?
-827        };
-828        Ok(hidden_states)
-829    }
-830}
-831
-832// https://github.com/huggingface/transformers/blob/78b2929c0554b79e0489b451ce4ece14d265ead2/src/transformers/models/deberta_v2/modeling_deberta_v2.py#L339
-833pub struct DebertaV2Layer {
-834    attention: DebertaV2Attention,
-835    intermediate: DebertaV2Intermediate,
-836    output: DebertaV2Output,
-837}
-838
-839impl DebertaV2Layer {
-840    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-841        let attention = DebertaV2Attention::load(vb.clone(), config)?;
-842        let intermediate = DebertaV2Intermediate::load(vb.clone(), config)?;
-843        let output = DebertaV2Output::load(vb.clone(), config)?;
-844        Ok(Self {
-845            attention,
-846            intermediate,
-847            output,
-848        })
-849    }
-850
-851    fn forward(
-852        &self,
-853        hidden_states: &Tensor,
-854        attention_mask: &Tensor,
-855        query_states: Option<&Tensor>,
-856        relative_pos: Option<&Tensor>,
-857        rel_embeddings: Option<&Tensor>,
-858    ) -> Result<Tensor> {
-859        let attention_output = self.attention.forward(
-860            hidden_states,
-861            attention_mask,
-862            query_states,
-863            relative_pos,
-864            rel_embeddings,
-865        )?;
-866
-867        let intermediate_output = self.intermediate.forward(&attention_output)?;
-868
-869        let layer_output = self
-870            .output
-871            .forward(&intermediate_output, &attention_output)?;
-872
-873        Ok(layer_output)
-874    }
-875}
-876
-877// TODO: In order to fully test ConvLayer a model needs to be found has a configuration where `conv_kernel_size` exists and is > 0
-878// https://github.com/huggingface/transformers/blob/78b2929c0554b79e0489b451ce4ece14d265ead2/src/transformers/models/deberta_v2/modeling_deberta_v2.py#L373
-879pub struct ConvLayer {
-880    _conv_act: String,
-881    _conv: Conv1d,
-882    _layer_norm: LayerNorm,
-883    _dropout: StableDropout,
-884    _config: Config,
-885}
-886
-887impl ConvLayer {
-888    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-889        let config = config.clone();
-890        let kernel_size = config.conv_kernel_size.unwrap_or(3);
-891        let groups = config.conv_groups.unwrap_or(1);
-892        let conv_act: String = config.conv_act.clone().unwrap_or("tanh".to_string());
-893
-894        let conv_conf = Conv1dConfig {
-895            padding: (kernel_size - 1) / 2,
-896            groups,
-897            ..Default::default()
-898        };
-899
-900        let conv = conv1d(
-901            config.hidden_size,
-902            config.hidden_size,
-903            kernel_size,
-904            conv_conf,
-905            vb.pp("conv"),
-906        )?;
-907
-908        let layer_norm = layer_norm(
-909            config.hidden_size,
-910            config.layer_norm_eps,
-911            vb.pp("LayerNorm"),
-912        )?;
-913
-914        let dropout = StableDropout::new(config.hidden_dropout_prob);
-915
-916        Ok(Self {
-917            _conv_act: conv_act,
-918            _conv: conv,
-919            _layer_norm: layer_norm,
-920            _dropout: dropout,
-921            _config: config,
-922        })
-923    }
-924
-925    pub fn forward(
-926        &self,
-927        _hidden_states: &Tensor,
-928        _residual_states: &Tensor,
-929        _input_mask: &Tensor,
-930    ) -> Result<Tensor> {
-931        todo!("Need a model that contains a conv layer to test against.")
-932    }
-933}
-934
-935// https://github.com/huggingface/transformers/blob/78b2929c0554b79e0489b451ce4ece14d265ead2/src/transformers/models/deberta_v2/modeling_deberta_v2.py#L409
-936pub struct DebertaV2Encoder {
-937    layer: Vec<DebertaV2Layer>,
-938    relative_attention: bool,
-939    max_relative_positions: isize,
-940    position_buckets: isize,
-941    rel_embeddings: Option<Embedding>,
-942    norm_rel_ebd: String,
-943    layer_norm: Option<LayerNorm>,
-944    conv: Option<ConvLayer>,
-945    device: Device,
-946}
-947
-948impl DebertaV2Encoder {
-949    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-950        let layer = (0..config.num_hidden_layers)
-951            .map(|index| DebertaV2Layer::load(vb.pp(format!("layer.{index}")), config))
-952            .collect::<Result<Vec<_>>>()?;
-953
-954        let relative_attention = config.relative_attention;
-955        let mut max_relative_positions = config.max_relative_positions;
-956
-957        let position_buckets = config.position_buckets.unwrap_or(-1);
-958
-959        let mut rel_embeddings: Option<Embedding> = None;
-960
-961        if relative_attention {
-962            if max_relative_positions < 1 {
-963                max_relative_positions = config.max_position_embeddings as isize;
-964            }
-965
-966            let mut pos_ebd_size = max_relative_positions * 2;
-967
-968            if position_buckets > 0 {
-969                pos_ebd_size = position_buckets * 2;
-970            }
-971
-972            rel_embeddings = Some(embedding(
-973                pos_ebd_size as usize,
-974                config.hidden_size,
-975                vb.pp("rel_embeddings"),
-976            )?);
-977        }
-978
-979        // NOTE: The Python code assumes that the config attribute "norm_rel_ebd" is an array of some kind, but most examples have it as a string.
-980        // So it might need to be updated at some point.
-981        let norm_rel_ebd = match config.norm_rel_ebd.as_ref() {
-982            Some(nre) => nre.trim().to_string(),
-983            None => "none".to_string(),
-984        };
-985
-986        let layer_norm: Option<LayerNorm> = if norm_rel_ebd == "layer_norm" {
-987            Some(layer_norm(
-988                config.hidden_size,
-989                config.layer_norm_eps,
-990                vb.pp("LayerNorm"),
-991            )?)
-992        } else {
-993            None
-994        };
-995
-996        let conv: Option<ConvLayer> = if config.conv_kernel_size.unwrap_or(0) > 0 {
-997            Some(ConvLayer::load(vb.pp("conv"), config)?)
-998        } else {
-999            None
-1000        };
-1001
-1002        Ok(Self {
-1003            layer,
-1004            relative_attention,
-1005            max_relative_positions,
-1006            position_buckets,
-1007            rel_embeddings,
-1008            norm_rel_ebd,
-1009            layer_norm,
-1010            conv,
-1011            device: vb.device().clone(),
-1012        })
-1013    }
-1014
-1015    pub fn forward(
-1016        &self,
-1017        hidden_states: &Tensor,
-1018        attention_mask: &Tensor,
-1019        query_states: Option<&Tensor>,
-1020        relative_pos: Option<&Tensor>,
-1021    ) -> Result<Tensor> {
-1022        let input_mask = if attention_mask.dims().len() <= 2 {
-1023            attention_mask.clone()
-1024        } else {
-1025            attention_mask
-1026                .sum_keepdim(attention_mask.rank() - 2)?
-1027                .gt(0.)?
-1028        };
-1029
-1030        let attention_mask = self.get_attention_mask(attention_mask.clone())?;
-1031
-1032        let relative_pos = self.get_rel_pos(hidden_states, query_states, relative_pos)?;
-1033
-1034        let mut next_kv: Tensor = hidden_states.clone();
-1035        let rel_embeddings = self.get_rel_embedding()?;
-1036        let mut output_states = next_kv.to_owned();
-1037        let mut query_states: Option<Tensor> = query_states.cloned();
-1038
-1039        for (i, layer_module) in self.layer.iter().enumerate() {
-1040            // NOTE: The original python code branches here if this model is being
-1041            // used for training vs. inferencing. For now, we will only handle the
-1042            // inferencing side of things
-1043
-1044            output_states = layer_module.forward(
-1045                next_kv.as_ref(),
-1046                &attention_mask,
-1047                query_states.as_ref(),
-1048                relative_pos.as_ref(),
-1049                rel_embeddings.as_ref(),
-1050            )?;
-1051
-1052            if i == 0 {
-1053                if let Some(conv) = &self.conv {
-1054                    output_states = conv.forward(hidden_states, &output_states, &input_mask)?;
-1055                }
-1056            }
-1057
-1058            if query_states.is_some() {
-1059                query_states = Some(output_states.clone());
-1060            } else {
-1061                next_kv = output_states.clone();
-1062            }
-1063        }
-1064
-1065        Ok(output_states)
-1066    }
-1067
-1068    fn get_attention_mask(&self, mut attention_mask: Tensor) -> Result<Tensor> {
-1069        match attention_mask.dims().len() {
-1070            0..=2 => {
-1071                let extended_attention_mask = attention_mask.unsqueeze(1)?.unsqueeze(2)?;
-1072                attention_mask = extended_attention_mask.broadcast_mul(
-1073                    &extended_attention_mask
-1074                        .squeeze(D::Minus2)?
-1075                        .unsqueeze(D::Minus1)?,
-1076                )?;
-1077            }
-1078            3 => attention_mask = attention_mask.unsqueeze(1)?,
-1079            len => bail!("Unsupported attentiom mask size length: {len}"),
-1080        }
-1081
-1082        Ok(attention_mask)
-1083    }
-1084
-1085    fn get_rel_pos(
-1086        &self,
-1087        hidden_states: &Tensor,
-1088        query_states: Option<&Tensor>,
-1089        relative_pos: Option<&Tensor>,
-1090    ) -> Result<Option<Tensor>> {
-1091        if self.relative_attention && relative_pos.is_none() {
-1092            let q = if let Some(query_states) = query_states {
-1093                query_states.dim(D::Minus2)?
-1094            } else {
-1095                hidden_states.dim(D::Minus2)?
-1096            };
-1097
-1098            return Ok(Some(build_relative_position(
-1099                q,
-1100                hidden_states.dim(D::Minus2)?,
-1101                &self.device,
-1102                Some(self.position_buckets),
-1103                Some(self.max_relative_positions),
-1104            )?));
-1105        }
-1106
-1107        if relative_pos.is_some() {
-1108            Ok(relative_pos.cloned())
-1109        } else {
-1110            Ok(None)
-1111        }
-1112    }
-1113    fn get_rel_embedding(&self) -> Result<Option<Tensor>> {
-1114        if !self.relative_attention {
-1115            return Ok(None);
-1116        }
-1117
-1118        let rel_embeddings = self
-1119            .rel_embeddings
-1120            .as_ref()
-1121            .context("self.rel_embeddings not present when using relative_attention")?
-1122            .embeddings()
-1123            .clone();
-1124
-1125        if !self.norm_rel_ebd.contains("layer_norm") {
-1126            return Ok(Some(rel_embeddings));
-1127        }
-1128
-1129        let layer_normed_embeddings = self
-1130            .layer_norm
-1131            .as_ref()
-1132            .context("DebertaV2Encoder layer_norm is None when norm_rel_ebd contains layer_norm")?
-1133            .forward(&rel_embeddings)?;
-1134
-1135        Ok(Some(layer_normed_embeddings))
-1136    }
-1137}
-1138
-1139// https://github.com/huggingface/transformers/blob/78b2929c0554b79e0489b451ce4ece14d265ead2/src/transformers/models/deberta_v2/modeling_deberta_v2.py#L991
-1140pub struct DebertaV2Model {
-1141    embeddings: DebertaV2Embeddings,
-1142    encoder: DebertaV2Encoder,
-1143    z_steps: usize,
-1144    pub device: Device,
-1145}
-1146
-1147impl DebertaV2Model {
-1148    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-1149        let vb = vb.clone();
-1150        let embeddings = DebertaV2Embeddings::load(vb.pp("embeddings"), config)?;
-1151        let encoder = DebertaV2Encoder::load(vb.pp("encoder"), config)?;
-1152        let z_steps: usize = 0;
-1153
-1154        Ok(Self {
-1155            embeddings,
-1156            encoder,
-1157            z_steps,
-1158            device: vb.device().clone(),
-1159        })
-1160    }
-1161
-1162    pub fn forward(
-1163        &self,
-1164        input_ids: &Tensor,
-1165        token_type_ids: Option<Tensor>,
-1166        attention_mask: Option<Tensor>,
-1167    ) -> Result<Tensor> {
-1168        let input_ids_shape = input_ids.shape();
-1169
-1170        let attention_mask = match attention_mask {
-1171            Some(mask) => mask,
-1172            None => Tensor::ones(input_ids_shape, DType::I64, &self.device)?,
-1173        };
-1174
-1175        let token_type_ids = match token_type_ids {
-1176            Some(ids) => ids,
-1177            None => Tensor::zeros(input_ids_shape, DType::U32, &self.device)?,
-1178        };
-1179
-1180        let embedding_output = self.embeddings.forward(
-1181            Some(input_ids),
-1182            Some(&token_type_ids),
-1183            None,
-1184            Some(&attention_mask),
-1185            None,
-1186        )?;
-1187
-1188        let encoder_output =
-1189            self.encoder
-1190                .forward(&embedding_output, &attention_mask, None, None)?;
-1191
-1192        if self.z_steps > 1 {
-1193            todo!("Complete DebertaV2Model forward() when z_steps > 1 -- Needs a model to test this situation.")
-1194        }
-1195
-1196        Ok(encoder_output)
-1197    }
-1198}
-1199
-1200#[derive(Debug)]
-1201pub struct NERItem {
-1202    pub entity: String,
-1203    pub word: String,
-1204    pub score: f32,
-1205    pub start: usize,
-1206    pub end: usize,
-1207    pub index: usize,
-1208}
-1209
-1210#[derive(Debug)]
-1211pub struct TextClassificationItem {
-1212    pub label: String,
-1213    pub score: f32,
-1214}
-1215
-1216pub struct DebertaV2NERModel {
-1217    pub device: Device,
-1218    deberta: DebertaV2Model,
-1219    dropout: candle_nn::Dropout,
-1220    classifier: candle_nn::Linear,
-1221}
-1222
-1223fn id2label_len(config: &Config, id2label: Option<HashMap<u32, String>>) -> Result<usize> {
-1224    let id2label_len = match (&config.id2label, id2label) {
-1225        (None, None) => bail!("Id2Label is either not present in the model configuration or not passed into DebertaV2NERModel::load as a parameter"),
-1226        (None, Some(id2label_p)) => id2label_p.len(),
-1227        (Some(id2label_c), None) => id2label_c.len(),
-1228        (Some(id2label_c), Some(id2label_p)) => {
-1229          if *id2label_c == id2label_p {
-1230            id2label_c.len()
-1231          } else {
-1232            bail!("Id2Label is both present in the model configuration and provided as a parameter, and they are different.")
-1233          }
-1234        }
-1235    };
-1236    Ok(id2label_len)
-1237}
-1238
-1239impl DebertaV2NERModel {
-1240    pub fn load(vb: VarBuilder, config: &Config, id2label: Option<Id2Label>) -> Result<Self> {
-1241        let id2label_len = id2label_len(config, id2label)?;
-1242
-1243        let deberta = DebertaV2Model::load(vb.clone(), config)?;
-1244        let dropout = candle_nn::Dropout::new(config.hidden_dropout_prob as f32);
-1245        let classifier: candle_nn::Linear = candle_nn::linear_no_bias(
-1246            config.hidden_size,
-1247            id2label_len,
-1248            vb.root().pp("classifier"),
-1249        )?;
-1250
-1251        Ok(Self {
-1252            device: vb.device().clone(),
-1253            deberta,
-1254            dropout,
-1255            classifier,
-1256        })
-1257    }
-1258
-1259    pub fn forward(
-1260        &self,
-1261        input_ids: &Tensor,
-1262        token_type_ids: Option<Tensor>,
-1263        attention_mask: Option<Tensor>,
-1264    ) -> Result<Tensor> {
-1265        let output = self
-1266            .deberta
-1267            .forward(input_ids, token_type_ids, attention_mask)?;
-1268        let output = self.dropout.forward(&output, false)?;
-1269        self.classifier.forward(&output)
-1270    }
-1271}
-1272
-1273pub struct DebertaV2SeqClassificationModel {
-1274    pub device: Device,
-1275    deberta: DebertaV2Model,
-1276    dropout: StableDropout,
-1277    pooler: DebertaV2ContextPooler,
-1278    classifier: candle_nn::Linear,
-1279}
-1280
-1281impl DebertaV2SeqClassificationModel {
-1282    pub fn load(vb: VarBuilder, config: &Config, id2label: Option<Id2Label>) -> Result<Self> {
-1283        let id2label_len = id2label_len(config, id2label)?;
-1284        let deberta = DebertaV2Model::load(vb.clone(), config)?;
-1285        let pooler = DebertaV2ContextPooler::load(vb.clone(), config)?;
-1286        let output_dim = pooler.output_dim()?;
-1287        let classifier = candle_nn::linear(output_dim, id2label_len, vb.root().pp("classifier"))?;
-1288        let dropout = match config.cls_dropout {
-1289            Some(cls_dropout) => StableDropout::new(cls_dropout),
-1290            None => StableDropout::new(config.hidden_dropout_prob),
-1291        };
-1292
-1293        Ok(Self {
-1294            device: vb.device().clone(),
-1295            deberta,
-1296            dropout,
-1297            pooler,
-1298            classifier,
-1299        })
-1300    }
-1301
-1302    pub fn forward(
-1303        &self,
-1304        input_ids: &Tensor,
-1305        token_type_ids: Option<Tensor>,
-1306        attention_mask: Option<Tensor>,
-1307    ) -> Result<Tensor> {
-1308        let encoder_layer = self
-1309            .deberta
-1310            .forward(input_ids, token_type_ids, attention_mask)?;
-1311        let pooled_output = self.pooler.forward(&encoder_layer)?;
-1312        let pooled_output = self.dropout.forward(&pooled_output)?;
-1313        self.classifier.forward(&pooled_output)
-1314    }
-1315}
-1316
-1317pub struct DebertaV2ContextPooler {
-1318    dense: candle_nn::Linear,
-1319    dropout: StableDropout,
-1320    config: Config,
-1321}
-1322
-1323// https://github.com/huggingface/transformers/blob/78b2929c0554b79e0489b451ce4ece14d265ead2/src/transformers/models/deberta_v2/modeling_deberta_v2.py#L49
-1324impl DebertaV2ContextPooler {
-1325    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-1326        let pooler_hidden_size = config
-1327            .pooler_hidden_size
-1328            .context("config.pooler_hidden_size is required for DebertaV2ContextPooler")?;
-1329
-1330        let pooler_dropout = config
-1331            .pooler_dropout
-1332            .context("config.pooler_dropout is required for DebertaV2ContextPooler")?;
-1333
-1334        let dense = candle_nn::linear(
-1335            pooler_hidden_size,
-1336            pooler_hidden_size,
-1337            vb.root().pp("pooler.dense"),
-1338        )?;
-1339
-1340        let dropout = StableDropout::new(pooler_dropout);
-1341
-1342        Ok(Self {
-1343            dense,
-1344            dropout,
-1345            config: config.clone(),
-1346        })
-1347    }
-1348
-1349    pub fn forward(&self, hidden_states: &Tensor) -> Result<Tensor> {
-1350        let context_token = hidden_states.narrow(1, 0, 1)?.squeeze(1)?;
-1351        let context_token = self.dropout.forward(&context_token)?;
-1352
-1353        let pooled_output = self.dense.forward(&context_token.contiguous()?)?;
-1354        let pooler_hidden_act = self
-1355            .config
-1356            .pooler_hidden_act
-1357            .context("Could not obtain pooler hidden act from config")?;
-1358
-1359        HiddenActLayer::new(pooler_hidden_act).forward(&pooled_output)
-1360    }
-1361
-1362    pub fn output_dim(&self) -> Result<usize> {
-1363        self.config.pooler_hidden_size.context("DebertaV2ContextPooler cannot return output_dim (pooler_hidden_size) since it is not specified in the model config")
-1364    }
-1365}
-1366
-1367// https://github.com/huggingface/transformers/blob/78b2929c0554b79e0489b451ce4ece14d265ead2/src/transformers/models/deberta_v2/modeling_deberta_v2.py#L557
-1368pub(crate) fn build_relative_position(
-1369    query_size: usize,
-1370    key_size: usize,
-1371    device: &Device,
-1372    bucket_size: Option<isize>,
-1373    max_position: Option<isize>,
-1374) -> Result<Tensor> {
-1375    let q_ids = Tensor::arange(0, query_size as i64, device)?.unsqueeze(0)?;
-1376    let k_ids: Tensor = Tensor::arange(0, key_size as i64, device)?.unsqueeze(D::Minus1)?;
-1377    let mut rel_pos_ids = k_ids.broadcast_sub(&q_ids)?;
-1378    let bucket_size = bucket_size.unwrap_or(-1);
-1379    let max_position = max_position.unwrap_or(-1);
-1380
-1381    if bucket_size > 0 && max_position > 0 {
-1382        rel_pos_ids = make_log_bucket_position(rel_pos_ids, bucket_size, max_position, device)?;
-1383    }
-1384
-1385    rel_pos_ids = rel_pos_ids.to_dtype(DType::I64)?;
-1386    rel_pos_ids = rel_pos_ids.narrow(0, 0, query_size)?;
-1387    rel_pos_ids.unsqueeze(0)
-1388}
-1389
-1390// https://github.com/huggingface/transformers/blob/78b2929c0554b79e0489b451ce4ece14d265ead2/src/transformers/models/deberta_v2/modeling_deberta_v2.py#L542
-1391pub(crate) fn make_log_bucket_position(
-1392    relative_pos: Tensor,
-1393    bucket_size: isize,
-1394    max_position: isize,
-1395    device: &Device,
-1396) -> Result<Tensor> {
-1397    let sign = relative_pos.to_dtype(DType::F32)?.sign()?;
-1398
-1399    let mid = bucket_size / 2;
-1400
-1401    let lt_mid = relative_pos.lt(mid as i64)?;
-1402    let gt_neg_mid = relative_pos.gt(-mid as i64)?;
-1403
-1404    let condition = lt_mid
-1405        .to_dtype(candle::DType::F32)?
-1406        .mul(&gt_neg_mid.to_dtype(candle::DType::F32)?)?
-1407        .to_dtype(DType::U8)?;
-1408
-1409    let on_true = Tensor::new(&[(mid - 1) as u32], device)?
-1410        .broadcast_as(relative_pos.shape())?
-1411        .to_dtype(relative_pos.dtype())?;
-1412
-1413    let on_false = relative_pos
-1414        .to_dtype(DType::F32)?
-1415        .abs()?
-1416        .to_dtype(DType::I64)?;
-1417
-1418    let abs_pos = condition.where_cond(&on_true, &on_false)?;
-1419
-1420    let mid_as_tensor = Tensor::from_slice(&[mid as f32], (1,), device)?;
-1421
-1422    let log_pos = {
-1423        let first_log = abs_pos
-1424            .to_dtype(DType::F32)?
-1425            .broadcast_div(&mid_as_tensor)?
-1426            .log()?;
-1427
-1428        let second_log =
-1429            Tensor::from_slice(&[((max_position as f32 - 1.0) / mid as f32)], (1,), device)?
-1430                .log()?;
-1431
-1432        let first_div_second = first_log.broadcast_div(&second_log)?;
-1433
-1434        let to_ceil = first_div_second
-1435            .broadcast_mul(Tensor::from_slice(&[(mid - 1) as f32], (1,), device)?.as_ref())?;
-1436
-1437        let ceil = to_ceil.ceil()?;
-1438
-1439        ceil.broadcast_add(&mid_as_tensor)?
-1440    };
-1441
-1442    Ok({
-1443        let abs_pos_lte_mid = abs_pos.to_dtype(DType::F32)?.broadcast_le(&mid_as_tensor)?;
-1444        let relative_pos = relative_pos.to_dtype(relative_pos.dtype())?;
-1445        let log_pos_mul_sign = log_pos.broadcast_mul(&sign.to_dtype(DType::F32)?)?;
-1446        abs_pos_lte_mid.where_cond(&relative_pos.to_dtype(DType::F32)?, &log_pos_mul_sign)?
-1447    })
-1448}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/deepseek2.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/deepseek2.rs.html deleted file mode 100644 index 5c1804f..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/deepseek2.rs.html +++ /dev/null @@ -1,1052 +0,0 @@ -deepseek2.rs - source

candle_transformers/models/
deepseek2.rs

1#![allow(clippy::cast_possible_truncation, clippy::cast_precision_loss)]
-2
-3use std::{f32::consts::PI, sync::Arc};
-4
-5use candle::{
-6    shape::Dim, CpuStorage, CustomOp1, DType, Device, Error, IndexOp, Layout, Result, Shape,
-7    Tensor, WithDType, D,
-8};
-9use candle_nn::{embedding, rms_norm, Activation, Embedding, Linear, Module, RmsNorm, VarBuilder};
-10use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
-11use serde::Deserialize;
-12
-13struct NonZero {}
-14
-15impl NonZero {
-16    // Sequential version
-17    fn nonzero<T: WithDType>(&self, vs: &[T], layout: &Layout) -> Vec<u32> {
-18        let n = layout.dims().len();
-19        let mut result = Vec::new();
-20        let mut indices = vec![0u32; n];
-21        for (i, v) in vs.iter().enumerate() {
-22            if !v.is_zero() {
-23                let mut idx = i;
-24                for (dim_index, dim) in layout.dims().iter().enumerate().rev() {
-25                    let d = idx % dim;
-26                    indices[dim_index] = u32::try_from(d).unwrap();
-27                    idx /= dim;
-28                }
-29                result.extend_from_slice(&indices);
-30            }
-31        }
-32        result
-33    }
-34}
-35
-36impl CustomOp1 for NonZero {
-37    fn name(&self) -> &'static str {
-38        "nonzero"
-39    }
-40
-41    fn cpu_fwd(&self, storage: &CpuStorage, layout: &Layout) -> Result<(CpuStorage, Shape)> {
-42        if !layout.is_contiguous() {
-43            return Err(Error::RequiresContiguous { op: "nonzero" });
-44        }
-45        let result = match storage {
-46            candle::CpuStorage::U8(vs) => self.nonzero(vs, layout),
-47            candle::CpuStorage::U32(vs) => self.nonzero(vs, layout),
-48            candle::CpuStorage::I64(vs) => self.nonzero(vs, layout),
-49            candle::CpuStorage::BF16(vs) => self.nonzero(vs, layout),
-50            candle::CpuStorage::F16(vs) => self.nonzero(vs, layout),
-51            candle::CpuStorage::F32(vs) => self.nonzero(vs, layout),
-52            candle::CpuStorage::F64(vs) => self.nonzero(vs, layout),
-53        };
-54        let index_len = layout.dims().len();
-55        let result_len = result.len() / index_len;
-56        let result = CpuStorage::U32(result);
-57        let shape = Shape::from_dims(&[result_len, index_len]);
-58        Ok((result, shape))
-59    }
-60}
-61
-62pub trait NonZeroOp {
-63    fn nonzero(&self) -> Result<Tensor>;
-64}
-65
-66impl NonZeroOp for Tensor {
-67    fn nonzero(&self) -> Result<Tensor> {
-68        if !self.is_contiguous() {
-69            return Err(candle::Error::RequiresContiguous { op: "nonzero" });
-70        }
-71        let original_device = self.device();
-72        self.to_device(&candle::Device::Cpu)?
-73            .apply_op1_no_bwd(&NonZero {})?
-74            .to_device(original_device)
-75    }
-76}
-77
-78pub struct TopKOutput {
-79    pub values: Tensor,
-80    pub indices: Tensor,
-81}
-82
-83pub trait TopKLastDimOp {
-84    /// Topk in the last dim. `values` retains a gradient but `indices` has none w.r.t self.
-85    /// This expects a contiguous tensor.
-86    /// Note: this implements torch.topk with sorted=True.
-87    fn topk(&self, topk: usize) -> Result<TopKOutput>;
-88
-89    /// Topk in the last dim. `values` retains a gradient but `indices` has none w.r.t self.
-90    /// This expects a contiguous tensor.
-91    /// Note: this implements torch.topk with sorted=False.
-92    fn topk_unsorted(&self, topk: usize) -> Result<TopKOutput>;
-93}
-94
-95impl TopKLastDimOp for Tensor {
-96    fn topk(&self, topk: usize) -> Result<TopKOutput> {
-97        // Sorted descending
-98        let sorted_indices = self.arg_sort_last_dim(false)?;
-99        let topk_indices = sorted_indices.narrow(D::Minus1, 0, topk)?.contiguous()?;
-100        Ok(TopKOutput {
-101            values: self.gather(&topk_indices, D::Minus1)?,
-102            indices: topk_indices,
-103        })
-104    }
-105
-106    fn topk_unsorted(&self, topk: usize) -> Result<TopKOutput> {
-107        // Sorted descending
-108        let sorted_indices_all = self.arg_sort_last_dim(false)?;
-109        let topk_indices_sorted = sorted_indices_all
-110            .narrow(D::Minus1, 0, topk)?
-111            .contiguous()?;
-112        let topk_values_sorted = self.gather(&topk_indices_sorted, D::Minus1)?;
-113
-114        // Reorder the indices ascending
-115        let reorder_indices = topk_indices_sorted.arg_sort_last_dim(true)?;
-116        let topk_indices_unsorted = topk_indices_sorted.gather(&reorder_indices, D::Minus1)?;
-117        let topk_values_unsorted = topk_values_sorted.gather(&reorder_indices, D::Minus1)?;
-118        Ok(TopKOutput {
-119            values: topk_values_unsorted,
-120            indices: topk_indices_unsorted,
-121        })
-122    }
-123}
-124
-125pub trait SplitOp {
-126    fn split<D: Dim>(&self, splits: &[usize], dim: D) -> Result<Vec<Tensor>>;
-127}
-128
-129impl SplitOp for Tensor {
-130    fn split<D: Dim>(&self, splits: &[usize], dim: D) -> Result<Vec<Tensor>> {
-131        let dim = dim.to_index(self.shape(), "split")?;
-132        let mut split_res = Vec::new();
-133        let mut index = 0;
-134        for split in splits {
-135            split_res.push(self.narrow(dim, index, *split)?);
-136            index += *split;
-137        }
-138        Ok(split_res)
-139    }
-140}
-141
-142pub trait BincountOp {
-143    fn bincount(&self, minlength: u32) -> Result<Vec<u32>>;
-144}
-145
-146fn bincount(values: &[u32], minlength: u32) -> Vec<u32> {
-147    // Find the maximum value in `values` (or zero if empty)
-148    let max_val = values.par_iter().max().copied().unwrap_or(0);
-149
-150    // The final size of the bin counts must be at least `minlength`
-151    // and large enough to include the largest value in `values`.
-152    let result_len = (max_val + 1).max(minlength);
-153
-154    // Each thread creates a local histogram (`fold`),
-155    // and then they are merged together (`reduce`).
-156    values
-157        .par_iter()
-158        .fold(
-159            // Create a local histogram
-160            || vec![0u32; result_len as usize],
-161            // Update the local histogram
-162            |mut local_counts, &val| {
-163                local_counts[val as usize] += 1;
-164                local_counts
-165            },
-166        )
-167        // Merge histograms from all threads
-168        .reduce(
-169            // Identity (empty histogram)
-170            || vec![0u32; result_len as usize],
-171            // Combine two histograms
-172            |mut global_counts, local_counts| {
-173                for (g, l) in global_counts.iter_mut().zip(local_counts) {
-174                    *g += l;
-175                }
-176                global_counts
-177            },
-178        )
-179}
-180
-181impl BincountOp for Tensor {
-182    fn bincount(&self, minlength: u32) -> Result<Vec<u32>> {
-183        let values = self.to_vec1::<u32>()?;
-184
-185        Ok(bincount(&values, minlength))
-186    }
-187}
-188
-189fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: f32) -> Result<Tensor> {
-190    let shape = mask.shape();
-191    let on_true = Tensor::new(on_true, on_false.device())?.broadcast_as(shape.dims())?;
-192    let m = mask.where_cond(&on_true, on_false)?;
-193    Ok(m)
-194}
-195
-196#[doc(hidden)]
-197#[macro_export]
-198macro_rules! serde_default_fn {
-199    ($t:ty, $name:ident, $v:expr) => {
-200        fn $name() -> $t {
-201            $v
-202        }
-203    };
-204}
-205
-206serde_default_fn!(f64, routed_scaling_factor, 1.0);
-207serde_default_fn!(TopkMethod, topk_method, TopkMethod::Greedy);
-208serde_default_fn!(usize, moe_layer_freq, 1);
-209serde_default_fn!(usize, first_k_dense_replace, 0);
-210serde_default_fn!(bool, norm_topk_prob, false);
-211serde_default_fn!(ScoringFunc, scoring_func, ScoringFunc::Softmax);
-212serde_default_fn!(Activation, hidden_act, Activation::Silu);
-213serde_default_fn!(bool, tie_word_embeddings, false);
-214
-215#[derive(Deserialize, Clone, Debug)]
-216enum TopkMethod {
-217    #[serde(rename = "greedy")]
-218    Greedy,
-219    #[serde(rename = "group_limited_greedy")]
-220    GroupLimitedGreedy,
-221}
-222
-223#[derive(Deserialize, Clone, Debug)]
-224enum ScoringFunc {
-225    #[serde(rename = "softmax")]
-226    Softmax,
-227}
-228
-229#[derive(Deserialize, Clone, Debug)]
-230pub struct DeepSeekV2Config {
-231    pub(crate) vocab_size: usize,
-232    pub(crate) hidden_size: usize,
-233    pub(crate) intermediate_size: usize,
-234    pub(crate) moe_intermediate_size: usize,
-235    pub(crate) num_hidden_layers: usize,
-236    pub(crate) num_attention_heads: usize,
-237    pub(crate) n_shared_experts: Option<usize>,
-238    pub(crate) n_routed_experts: Option<usize>,
-239    #[serde(default = "routed_scaling_factor")]
-240    pub(crate) routed_scaling_factor: f64,
-241    #[serde(default = "topk_method")]
-242    topk_method: TopkMethod,
-243    pub(crate) num_experts_per_tok: Option<usize>,
-244    #[serde(default = "moe_layer_freq")]
-245    pub(crate) moe_layer_freq: usize,
-246    #[serde(default = "first_k_dense_replace")]
-247    pub(crate) first_k_dense_replace: usize,
-248    // k dense layers
-249    #[serde(default = "norm_topk_prob")]
-250    pub(crate) norm_topk_prob: bool,
-251    #[serde(default = "scoring_func")]
-252    scoring_func: ScoringFunc,
-253    #[serde(default = "hidden_act")]
-254    pub(crate) hidden_act: Activation,
-255    pub(crate) max_position_embeddings: usize,
-256    pub(crate) rms_norm_eps: f64,
-257    #[serde(default = "tie_word_embeddings")]
-258    pub(crate) tie_word_embeddings: bool,
-259    pub(crate) rope_theta: f32,
-260    pub(crate) rope_scaling: Option<DeepSeekV2RopeScaling>,
-261    pub(crate) attention_bias: bool,
-262    pub(crate) q_lora_rank: Option<usize>,
-263    pub(crate) qk_rope_head_dim: usize,
-264    pub(crate) kv_lora_rank: usize,
-265    pub(crate) v_head_dim: usize,
-266    pub(crate) qk_nope_head_dim: usize,
-267    pub(crate) n_group: usize,
-268    pub(crate) topk_group: usize,
-269}
-270
-271#[derive(Debug, Clone, Deserialize)]
-272#[serde(rename_all = "lowercase")]
-273pub enum ScaledRopeType {
-274    #[serde(alias = "su")]
-275    #[serde(alias = "longrope")]
-276    Su,
-277    #[serde(alias = "yarn")]
-278    Yarn,
-279    #[serde(alias = "dynamic")]
-280    Dynamic,
-281    #[serde(alias = "linear")]
-282    Linear,
-283}
-284
-285#[derive(Debug, Clone)]
-286pub struct DeepSeekV2RotaryEmbedding {
-287    sin: Tensor,
-288    cos: Tensor,
-289}
-290
-291#[derive(Debug, Clone, Deserialize)]
-292#[serde(untagged)]
-293pub enum DeepSeekV2RopeScaling {
-294    Yarn {
-295        original_max_position_embeddings: usize,
-296        beta_fast: f32,
-297        beta_slow: f32,
-298        mscale: f32,
-299        mscale_all_dim: f32,
-300        factor: f32,
-301        #[serde(rename = "type")]
-302        scaling_type: ScaledRopeType,
-303    },
-304    LinearOrDynamic {
-305        #[serde(rename = "type")]
-306        scaling_type: ScaledRopeType,
-307        factor: f64,
-308    },
-309}
-310
-311pub struct DeepSeekV2RopeConfig {
-312    pub rope_scaling: Option<DeepSeekV2RopeScaling>,
-313    pub max_position_embeddings: usize,
-314    pub rope_theta: f32,
-315    pub qk_rope_head_dim: usize,
-316}
-317
-318impl DeepSeekV2RotaryEmbedding {
-319    fn new_unscaled(cfg: &DeepSeekV2RopeConfig, dtype: DType, dev: &Device) -> Result<Self> {
-320        let max_seq_len = cfg.max_position_embeddings;
-321        let dim = cfg.qk_rope_head_dim;
-322
-323        let inv_freq: Vec<_> = (0..dim)
-324            .step_by(2)
-325            .map(|i| 1f32 / cfg.rope_theta.powf(i as f32 / dim as f32))
-326            .collect();
-327        let inv_freq_len = inv_freq.len();
-328        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?;
-329        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-330            .to_dtype(DType::F32)?
-331            .reshape((max_seq_len, 1))?;
-332        let freqs = t.matmul(&inv_freq)?;
-333
-334        let sin = freqs.sin()?.to_dtype(dtype)?;
-335        let cos = freqs.cos()?.to_dtype(dtype)?;
-336
-337        Ok(Self { sin, cos })
-338    }
-339
-340    fn yarn_find_correction_dim(
-341        num_rot: f32,
-342        dim: usize,
-343        base: f32,
-344        max_position_embeddings: usize,
-345    ) -> f32 {
-346        (dim as f32 * (max_position_embeddings as f32 / (num_rot * 2. * PI)).ln())
-347            / (2. * base.ln())
-348    }
-349
-350    fn yarn_find_correction_range(
-351        low_rot: f32,
-352        high_rot: f32,
-353        dim: usize,
-354        base: f32,
-355        max_position_embeddings: usize,
-356    ) -> (f32, f32) {
-357        let low =
-358            Self::yarn_find_correction_dim(low_rot, dim, base, max_position_embeddings).floor();
-359        let high =
-360            Self::yarn_find_correction_dim(high_rot, dim, base, max_position_embeddings).ceil();
-361        (low.max(0.), high.min(dim as f32 - 1.))
-362    }
-363
-364    fn yarn_linear_ramp_mask(min: f32, mut max: f32, dim: usize, dev: &Device) -> Result<Tensor> {
-365        if min == max {
-366            // https://huggingface.co/deepseek-ai/DeepSeek-V2-Lite/blob/604d5664dddd88a0433dbae533b7fe9472482de0/modeling_deepseek.py#L255
-367            max += 0.001;
-368        }
-369        let linear_func =
-370            ((Tensor::arange(0f32, dim as f32, dev)? - min as f64)? / (max as f64 - min as f64))?;
-371        linear_func.clamp(0., 1.)
-372    }
-373
-374    pub(crate) fn yarn_get_mscale(scale: f32, mscale: f32) -> f32 {
-375        if scale <= 1. {
-376            return 1.;
-377        }
-378        0.1 * mscale * scale.ln() + 1.
-379    }
-380
-381    #[allow(clippy::too_many_arguments)]
-382    fn new_yarn(
-383        cfg: &DeepSeekV2RopeConfig,
-384        dtype: DType,
-385        dev: &Device,
-386        original_max_position_embeddings: usize,
-387        beta_fast: f32,
-388        beta_slow: f32,
-389        factor: f32,
-390        mscale: f32,
-391        mscale_all_dim: f32,
-392    ) -> Result<Self> {
-393        let freq_extra: Vec<_> = (0..cfg.qk_rope_head_dim)
-394            .step_by(2)
-395            .map(|i| 1f32 / cfg.rope_theta.powf(i as f32 / cfg.qk_rope_head_dim as f32))
-396            .collect();
-397        let freq_extra_len = freq_extra.len();
-398        let freq_extra = Tensor::from_vec(freq_extra, freq_extra_len, dev)?;
-399        let freq_inter: Vec<_> = (0..cfg.qk_rope_head_dim)
-400            .step_by(2)
-401            .map(|i| 1f32 / (factor * cfg.rope_theta.powf(i as f32 / cfg.qk_rope_head_dim as f32)))
-402            .collect();
-403        let freq_inter_len = freq_inter.len();
-404        let freq_inter = Tensor::from_vec(freq_inter, (1, freq_inter_len), dev)?;
-405
-406        let (low, high) = Self::yarn_find_correction_range(
-407            beta_fast,
-408            beta_slow,
-409            cfg.qk_rope_head_dim,
-410            cfg.rope_theta,
-411            original_max_position_embeddings,
-412        );
-413        let inv_freq_mask =
-414            (1. - Self::yarn_linear_ramp_mask(low, high, cfg.qk_rope_head_dim / 2, dev)?)?;
-415        let inv_freq = freq_inter
-416            .broadcast_mul(&(1. - &inv_freq_mask)?)?
-417            .broadcast_add(&freq_extra.broadcast_mul(&inv_freq_mask)?)?;
-418
-419        let t = Tensor::arange(0u32, cfg.max_position_embeddings as u32, dev)?
-420            .to_dtype(DType::F32)?
-421            .reshape((cfg.max_position_embeddings, 1))?;
-422        let freqs = t.matmul(&inv_freq)?;
-423
-424        let mscale =
-425            Self::yarn_get_mscale(factor, mscale) / Self::yarn_get_mscale(factor, mscale_all_dim);
-426        let sin = (freqs.sin()? * mscale as f64)?.to_dtype(dtype)?;
-427        let cos = (freqs.cos()? * mscale as f64)?.to_dtype(dtype)?;
-428
-429        Ok(Self { sin, cos })
-430    }
-431
-432    pub fn new(cfg: &DeepSeekV2RopeConfig, dtype: DType, dev: &Device) -> Result<Self> {
-433        match &cfg.rope_scaling {
-434            Some(DeepSeekV2RopeScaling::LinearOrDynamic {
-435                scaling_type: _,
-436                factor: _,
-437            }) => candle::bail!("linear and dynamic rope are not implemented yet!"),
-438            Some(DeepSeekV2RopeScaling::Yarn {
-439                original_max_position_embeddings,
-440                beta_fast,
-441                beta_slow,
-442                factor,
-443                mscale,
-444                mscale_all_dim,
-445                scaling_type: _,
-446            }) => Self::new_yarn(
-447                cfg,
-448                dtype,
-449                dev,
-450                *original_max_position_embeddings,
-451                *beta_fast,
-452                *beta_slow,
-453                *factor,
-454                *mscale,
-455                *mscale_all_dim,
-456            ),
-457            None => Self::new_unscaled(cfg, dtype, dev),
-458        }
-459    }
-460
-461    pub fn forward(
-462        &self,
-463        q: &Tensor,
-464        k: &Tensor,
-465        seqlen_offset: usize,
-466    ) -> Result<(Tensor, Tensor)> {
-467        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-468
-469        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-470        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-471
-472        let q_embed = candle_nn::rotary_emb::rope_i(&q.contiguous()?, &cos, &sin)?;
-473        let k_embed = candle_nn::rotary_emb::rope_i(&k.contiguous()?, &cos, &sin)?;
-474
-475        Ok((q_embed, k_embed))
-476    }
-477}
-478
-479impl DeepSeekV2Config {
-480    pub(crate) fn q_head_dim(&self) -> usize {
-481        self.qk_rope_head_dim + self.qk_nope_head_dim
-482    }
-483
-484    fn softmax_scale(&self) -> f32 {
-485        let mut softmax_scale = 1.0 / (self.q_head_dim() as f32).sqrt();
-486        if let Some(DeepSeekV2RopeScaling::Yarn {
-487            mscale_all_dim,
-488            factor,
-489            ..
-490        }) = self.rope_scaling
-491        {
-492            let mscale = DeepSeekV2RotaryEmbedding::yarn_get_mscale(factor, mscale_all_dim);
-493            softmax_scale = softmax_scale * mscale * mscale;
-494        }
-495        softmax_scale
-496    }
-497}
-498
-499enum QProj {
-500    Plain(Linear),
-501    Lora { a: Linear, norm: RmsNorm, b: Linear },
-502}
-503
-504impl QProj {
-505    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-506        match self {
-507            Self::Lora { a, norm, b } => b.forward(&norm.forward(&a.forward(xs)?)?),
-508            Self::Plain(lin) => lin.forward(xs),
-509        }
-510    }
-511}
-512
-513struct Attention {
-514    q: QProj,
-515    kv_a_proj_with_mqa: Linear,
-516    kv_a_layernorm: RmsNorm,
-517    kv_b_proj: Linear,
-518    o_proj: Linear,
-519    rotary_emb: Arc<DeepSeekV2RotaryEmbedding>,
-520    cfg: DeepSeekV2Config,
-521    q_head_dim: usize,
-522    softmax_scale: f64,
-523    kv_cache: Option<(Tensor, Tensor)>,
-524}
-525
-526impl Attention {
-527    fn new(
-528        rotary_emb: Arc<DeepSeekV2RotaryEmbedding>,
-529        cfg: &DeepSeekV2Config,
-530        vb: VarBuilder,
-531    ) -> Result<Self> {
-532        let q_head_dim = cfg.q_head_dim();
-533        let q = match cfg.q_lora_rank {
-534            Some(lora_rank) => {
-535                let a = candle_nn::linear_b(
-536                    cfg.hidden_size,
-537                    lora_rank,
-538                    cfg.attention_bias,
-539                    vb.pp("q_a_proj"),
-540                )?;
-541                let norm = rms_norm(lora_rank, cfg.rms_norm_eps, vb.pp("q_a_layernorm"))?;
-542                let b = candle_nn::linear_no_bias(
-543                    lora_rank,
-544                    cfg.num_attention_heads * q_head_dim,
-545                    vb.pp("q_b_proj"),
-546                )?;
-547                QProj::Lora { a, norm, b }
-548            }
-549            None => QProj::Plain(candle_nn::linear_no_bias(
-550                cfg.hidden_size,
-551                cfg.num_attention_heads * q_head_dim,
-552                vb.pp("q_proj"),
-553            )?),
-554        };
-555
-556        let kv_a_proj_with_mqa = candle_nn::linear_b(
-557            cfg.hidden_size,
-558            cfg.kv_lora_rank + cfg.qk_rope_head_dim,
-559            cfg.attention_bias,
-560            vb.pp("kv_a_proj_with_mqa"),
-561        )?;
-562        let kv_a_layernorm = rms_norm(cfg.kv_lora_rank, cfg.rms_norm_eps, vb.pp("kv_a_layernorm"))?;
-563        let kv_b_proj = candle_nn::linear_no_bias(
-564            cfg.kv_lora_rank,
-565            cfg.num_attention_heads * (q_head_dim - cfg.qk_rope_head_dim + cfg.v_head_dim),
-566            vb.pp("kv_b_proj"),
-567        )?;
-568
-569        let o_proj = candle_nn::linear_b(
-570            cfg.num_attention_heads * cfg.v_head_dim,
-571            cfg.hidden_size,
-572            cfg.attention_bias,
-573            vb.pp("o_proj"),
-574        )?;
-575
-576        Ok(Self {
-577            q,
-578            kv_a_proj_with_mqa,
-579            kv_a_layernorm,
-580            kv_b_proj,
-581            o_proj,
-582            rotary_emb,
-583            cfg: cfg.clone(),
-584            q_head_dim,
-585            softmax_scale: cfg.softmax_scale() as f64,
-586            kv_cache: None,
-587        })
-588    }
-589
-590    fn forward(
-591        &mut self,
-592        xs: &Tensor,
-593        attention_mask: Option<&Tensor>,
-594        seqlen_offset: usize,
-595    ) -> Result<Tensor> {
-596        let (bs, seq_len, _) = xs.dims3()?;
-597
-598        let q = {
-599            let q = self.q.forward(xs)?;
-600            q.reshape((bs, seq_len, self.cfg.num_attention_heads, self.q_head_dim))?
-601                .transpose(1, 2)?
-602        };
-603        let q_split = q.split(
-604            &[self.cfg.qk_nope_head_dim, self.cfg.qk_rope_head_dim],
-605            D::Minus1,
-606        )?;
-607        let q_nope = q_split[0].clone();
-608        let q_pe = q_split[1].clone();
-609
-610        let compressed_kv = self.kv_a_proj_with_mqa.forward(xs)?;
-611        let ckv_split = compressed_kv.split(
-612            &[self.cfg.kv_lora_rank, self.cfg.qk_rope_head_dim],
-613            D::Minus1,
-614        )?;
-615        let compressed_kv = ckv_split[0].clone();
-616        let k_pe = {
-617            let k_pe = ckv_split[1].clone();
-618            k_pe.reshape((bs, seq_len, 1, self.cfg.qk_rope_head_dim))?
-619                .transpose(1, 2)?
-620        };
-621        let kv = {
-622            let kv = self
-623                .kv_b_proj
-624                .forward(&self.kv_a_layernorm.forward(&compressed_kv)?)?;
-625            kv.reshape((
-626                bs,
-627                seq_len,
-628                self.cfg.num_attention_heads,
-629                self.cfg.qk_nope_head_dim + self.cfg.v_head_dim,
-630            ))?
-631            .transpose(1, 2)?
-632        };
-633
-634        let kv_split = kv.split(&[self.cfg.qk_nope_head_dim, self.cfg.v_head_dim], D::Minus1)?;
-635        let k_nope = kv_split[0].clone();
-636        let v = kv_split[1].clone();
-637
-638        let (q_pe, k_pe) = self.rotary_emb.forward(&q_pe, &k_pe, seqlen_offset)?;
-639
-640        let q = Tensor::cat(&[q_nope, q_pe], D::Minus1)?;
-641        let k = Tensor::cat(&[k_nope, k_pe.repeat((1, q.dim(1)?, 1, 1))?], D::Minus1)?;
-642
-643        let (k, v) = match &self.kv_cache {
-644            None => (k, v),
-645            Some((prev_k, prev_v)) => {
-646                let key_states = Tensor::cat(&[prev_k, &k], 2)?;
-647                let value_states = Tensor::cat(&[prev_v, &v], 2)?;
-648                (key_states, value_states)
-649            }
-650        };
-651        self.kv_cache = Some((k.clone(), v.clone()));
-652
-653        let attn_out = {
-654            let att = (q.contiguous()?.matmul(&k.t()?.contiguous()?)? * self.softmax_scale)?;
-655            let att = match attention_mask {
-656                Some(mask) => att.broadcast_add(mask)?,
-657                None => att,
-658            };
-659
-660            let att = candle_nn::ops::softmax_last_dim(&att)?;
-661            // Convert to contiguous as matmul doesn't support strided vs for now.
-662            att.matmul(&v.contiguous()?)?
-663        };
-664
-665        let attn_out = if attention_mask.is_some() {
-666            attn_out.transpose(1, 2)?.reshape((bs, seq_len, ()))?
-667        } else {
-668            attn_out.reshape((bs, seq_len, ()))?
-669        };
-670
-671        self.o_proj.forward(&attn_out)
-672    }
-673
-674    fn clear_kv_cache(&mut self) {
-675        self.kv_cache = None
-676    }
-677}
-678
-679struct Mlp {
-680    gate: Linear,
-681    up: Linear,
-682    down: Linear,
-683    act: Activation,
-684}
-685
-686impl Mlp {
-687    fn new(
-688        cfg: &DeepSeekV2Config,
-689        vb: VarBuilder,
-690        hidden_size: Option<usize>,
-691        intermediate_size: Option<usize>,
-692    ) -> Result<Self> {
-693        let hidden_size = hidden_size.unwrap_or(cfg.hidden_size);
-694        let intermediate_size = intermediate_size.unwrap_or(cfg.intermediate_size);
-695
-696        Ok(Self {
-697            gate: candle_nn::linear_no_bias(hidden_size, intermediate_size, vb.pp("gate_proj"))?,
-698            up: candle_nn::linear_no_bias(hidden_size, intermediate_size, vb.pp("up_proj"))?,
-699            down: candle_nn::linear_no_bias(intermediate_size, hidden_size, vb.pp("down_proj"))?,
-700            act: cfg.hidden_act,
-701        })
-702    }
-703
-704    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-705        let lhs = self.gate.forward(xs)?.apply(&self.act)?;
-706        let rhs = self.up.forward(xs)?;
-707        self.down.forward(&(&lhs * &rhs)?)
-708    }
-709}
-710
-711struct MoeGate {
-712    weight: Tensor,
-713    cfg: DeepSeekV2Config,
-714    top_k: usize,
-715    n_routed_experts: usize,
-716}
-717
-718impl MoeGate {
-719    fn new(cfg: &DeepSeekV2Config, vb: VarBuilder, n_routed_experts: usize) -> Result<Self> {
-720        let weight = vb.get((n_routed_experts, cfg.hidden_size), "weight")?;
-721        Ok(Self {
-722            weight,
-723            cfg: cfg.clone(),
-724            top_k: cfg.num_experts_per_tok.unwrap(),
-725            n_routed_experts,
-726        })
-727    }
-728
-729    /// (topk_idx, topk_weight)
-730    fn forward(&self, xs: &Tensor) -> Result<(Tensor, Tensor)> {
-731        let (bs, seq_len, h) = xs.dims3()?;
-732        // Compute gating score
-733        let xs = xs.reshape(((), h))?;
-734        let logits = xs
-735            .to_dtype(DType::F32)?
-736            .broadcast_matmul(&self.weight.t()?.to_dtype(DType::F32)?)?;
-737        let scores = match self.cfg.scoring_func {
-738            ScoringFunc::Softmax => candle_nn::ops::softmax_last_dim(&logits)?,
-739        };
-740
-741        // Select top-k experts
-742        let (mut topk_weight, topk_idx) = match self.cfg.topk_method {
-743            TopkMethod::Greedy => {
-744                let TopKOutput { values, indices } = scores.topk_unsorted(self.top_k)?;
-745                (values, indices)
-746            }
-747            TopkMethod::GroupLimitedGreedy => {
-748                // (n, n_group)
-749                let group_scores = scores
-750                    .reshape((bs * seq_len, self.cfg.n_group, ()))?
-751                    .max(D::Minus1)?;
-752                // (n, topk_group)
-753                let group_idx = scores.topk_unsorted(self.cfg.topk_group)?.indices;
-754                // (n, n_group)
-755                let group_mask = group_scores.zeros_like()?.scatter_add(
-756                    &group_idx,
-757                    &group_idx.ones_like()?.to_dtype(group_scores.dtype())?,
-758                    1,
-759                )?;
-760                // (n, e)
-761                let score_mask = group_mask
-762                    .unsqueeze(D::Minus1)?
-763                    .expand((
-764                        bs * seq_len,
-765                        self.cfg.n_group,
-766                        self.n_routed_experts / self.cfg.n_group,
-767                    ))?
-768                    .reshape((bs, seq_len, ()))?;
-769                // (n, e)
-770                // Invert the mask
-771                let tmp_scores = masked_fill(&score_mask, &(1. - &score_mask.ne(0.)?)?, 0.)?;
-772                let TopKOutput { values, indices } = tmp_scores.topk_unsorted(self.top_k)?;
-773                (values, indices)
-774            }
-775        };
-776
-777        if self.top_k > 1 && self.cfg.norm_topk_prob {
-778            let denominator = (topk_weight.sum_keepdim(D::Minus1)? + 1e-20)?;
-779            topk_weight = (topk_weight / denominator)?;
-780        } else {
-781            topk_weight = (topk_weight * self.cfg.routed_scaling_factor)?;
-782        }
-783        Ok((topk_idx, topk_weight))
-784    }
-785}
-786
-787struct Moe {
-788    experts: Vec<Mlp>,
-789    shared_experts: Option<Mlp>,
-790    gate: MoeGate,
-791}
-792
-793impl Moe {
-794    fn new(
-795        cfg: &DeepSeekV2Config,
-796        vb: VarBuilder,
-797
-798        n_shared_experts: Option<usize>,
-799        n_routed_experts: usize,
-800    ) -> Result<Self> {
-801        let mut experts = Vec::with_capacity(n_routed_experts);
-802        for i in 0..n_routed_experts {
-803            let vb_e = vb.pp("experts").pp(i);
-804            experts.push(Mlp::new(cfg, vb_e, None, Some(cfg.moe_intermediate_size))?);
-805        }
-806        let shared_experts = if let Some(n_shared_experts) = n_shared_experts {
-807            let intermediate_size = cfg.moe_intermediate_size * n_shared_experts;
-808            Some(Mlp::new(
-809                cfg,
-810                vb.pp("shared_experts"),
-811                None,
-812                Some(intermediate_size),
-813            )?)
-814        } else {
-815            None
-816        };
-817        let gate = MoeGate::new(cfg, vb.pp("gate"), n_routed_experts)?;
-818        Ok(Self {
-819            experts,
-820            shared_experts,
-821            gate,
-822        })
-823    }
-824
-825    fn moe_infer(&self, xs: &Tensor, topk_ids: &Tensor, topk_weight: &Tensor) -> Result<Tensor> {
-826        let mut y = xs.zeros_like()?;
-827        let counts = topk_ids
-828            .flatten_all()?
-829            .bincount(self.experts.len() as u32)?;
-830        for (i, expert) in self.experts.iter().enumerate() {
-831            if counts[i] == 0 {
-832                continue;
-833            }
-834            let idx_top = topk_ids.eq(i as f64)?.nonzero()?.t()?;
-835            let idx = &idx_top.i(0)?.contiguous()?;
-836            let top = &idx_top.i(1)?.contiguous()?;
-837
-838            y = y.index_add(
-839                idx,
-840                &expert.forward(&xs.index_select(idx, 0)?)?.broadcast_mul(
-841                    &topk_weight
-842                        .index_select(idx, 0)?
-843                        .gather(&top.unsqueeze(1)?, 1)?
-844                        .squeeze(1)?
-845                        .unsqueeze(D::Minus1)?
-846                        .to_dtype(xs.dtype())?,
-847                )?,
-848                0,
-849            )?;
-850        }
-851
-852        Ok(y)
-853    }
-854
-855    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-856        let identity = xs.clone();
-857        let orig_shape = xs.shape();
-858        let (topk_idx, topk_weight) = self.gate.forward(xs)?;
-859        let xs = xs.reshape(((), xs.dim(D::Minus1)?))?;
-860
-861        let mut y = self
-862            .moe_infer(&xs, &topk_idx, &topk_weight)?
-863            .reshape(orig_shape)?;
-864        if let Some(ref shared_experts) = self.shared_experts {
-865            y = (y + shared_experts.forward(&identity)?)?;
-866        }
-867        Ok(y)
-868    }
-869}
-870
-871enum MoeOrMlp {
-872    Moe(Moe),
-873    Mlp(Mlp),
-874}
-875
-876impl MoeOrMlp {
-877    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-878        match self {
-879            Self::Mlp(mlp) => mlp.forward(xs),
-880            Self::Moe(moe) => moe.forward(xs),
-881        }
-882    }
-883}
-884
-885struct DecoderLayer {
-886    input_layernorm: RmsNorm,
-887    post_attention_layernorm: RmsNorm,
-888    attn: Attention,
-889    moe_or_mlp: MoeOrMlp,
-890}
-891
-892impl DecoderLayer {
-893    fn new(
-894        rotary_emb: Arc<DeepSeekV2RotaryEmbedding>,
-895        cfg: &DeepSeekV2Config,
-896        vb: VarBuilder,
-897        layer_idx: usize,
-898    ) -> Result<Self> {
-899        let attn = Attention::new(rotary_emb, cfg, vb.pp("self_attn"))?;
-900        let input_layernorm =
-901            rms_norm(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("input_layernorm"))?;
-902        let post_attention_layernorm = rms_norm(
-903            cfg.hidden_size,
-904            cfg.rms_norm_eps,
-905            vb.pp("post_attention_layernorm"),
-906        )?;
-907        let moe_or_mlp = if cfg.n_routed_experts.is_some()
-908            && layer_idx >= cfg.first_k_dense_replace
-909            && layer_idx % cfg.moe_layer_freq == 0
-910        {
-911            MoeOrMlp::Moe(Moe::new(
-912                cfg,
-913                vb.pp("mlp"),
-914                cfg.n_shared_experts,
-915                cfg.n_routed_experts.unwrap(),
-916            )?)
-917        } else {
-918            MoeOrMlp::Mlp(Mlp::new(cfg, vb.pp("mlp"), None, None)?)
-919        };
-920
-921        Ok(Self {
-922            input_layernorm,
-923            post_attention_layernorm,
-924            attn,
-925            moe_or_mlp,
-926        })
-927    }
-928
-929    fn forward(
-930        &mut self,
-931        xs: &Tensor,
-932        attention_mask: Option<&Tensor>,
-933        seqlen_offset: usize,
-934    ) -> Result<Tensor> {
-935        let residual = xs;
-936        let xs = self.input_layernorm.forward(xs)?;
-937        let xs = self.attn.forward(&xs, attention_mask, seqlen_offset)?;
-938        let xs = (xs + residual)?;
-939        let residual = &xs;
-940        let xs = self
-941            .moe_or_mlp
-942            .forward(&xs.apply(&self.post_attention_layernorm)?)?;
-943        residual + xs
-944    }
-945
-946    fn clear_kv_cache(&mut self) {
-947        self.attn.clear_kv_cache();
-948    }
-949}
-950
-951pub struct DeepSeekV2 {
-952    lm_head: Linear,
-953    embed_tokens: Embedding,
-954    norm: RmsNorm,
-955    layers: Vec<DecoderLayer>,
-956    dtype: DType,
-957    device: Device,
-958}
-959
-960impl DeepSeekV2 {
-961    pub fn new(cfg: &DeepSeekV2Config, vb: VarBuilder) -> Result<Self> {
-962        let vb_m = vb.pp("model");
-963
-964        let embed_tokens = embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-965        let lm_head = if !cfg.tie_word_embeddings {
-966            candle_nn::linear_no_bias(cfg.hidden_size, cfg.vocab_size, vb.pp("lm_head"))?
-967        } else {
-968            candle_nn::Linear::new(embed_tokens.embeddings().clone(), None)
-969        };
-970        let norm = rms_norm(cfg.hidden_size, cfg.rms_norm_eps, vb_m.pp("norm"))?;
-971
-972        let rope_cfg = DeepSeekV2RopeConfig {
-973            rope_scaling: cfg.rope_scaling.clone(),
-974            max_position_embeddings: cfg.max_position_embeddings,
-975            rope_theta: cfg.rope_theta,
-976            qk_rope_head_dim: cfg.qk_rope_head_dim,
-977        };
-978        let rotary_emb = Arc::new(DeepSeekV2RotaryEmbedding::new(
-979            &rope_cfg,
-980            vb.dtype(),
-981            vb.device(),
-982        )?);
-983
-984        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-985        let vb_l = vb_m.pp("layers");
-986        for layer_idx in 0..cfg.num_hidden_layers {
-987            let layer = DecoderLayer::new(rotary_emb.clone(), cfg, vb_l.pp(layer_idx), layer_idx)?;
-988            layers.push(layer)
-989        }
-990
-991        Ok(Self {
-992            lm_head,
-993            embed_tokens,
-994            norm,
-995            layers,
-996            dtype: vb.dtype(),
-997            device: vb.device().clone(),
-998        })
-999    }
-1000
-1001    fn prepare_decoder_attention_mask(
-1002        &self,
-1003        b_size: usize,
-1004        tgt_len: usize,
-1005        seqlen_offset: usize,
-1006    ) -> Result<Tensor> {
-1007        let mask: Vec<_> = (0..tgt_len)
-1008            .flat_map(|i| (0..tgt_len).map(move |j| if i < j { f32::NEG_INFINITY } else { 0. }))
-1009            .collect();
-1010        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-1011        let mask = if seqlen_offset > 0 {
-1012            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-1013            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-1014        } else {
-1015            mask
-1016        };
-1017        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-1018            .to_dtype(self.dtype)
-1019    }
-1020
-1021    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-1022        let (bs, seq_len) = input_ids.dims2()?;
-1023        let mut xs = self.embed_tokens.forward(input_ids)?;
-1024        let attention_mask = if seq_len == 1 {
-1025            None
-1026        } else {
-1027            let mask = self.prepare_decoder_attention_mask(bs, seq_len, seqlen_offset)?;
-1028            Some(mask)
-1029        };
-1030        for layer in &mut self.layers {
-1031            xs = layer.forward(
-1032                &xs,
-1033                attention_mask
-1034                    .as_ref()
-1035                    .map(|m| m.to_device(xs.device()).unwrap())
-1036                    .as_ref(),
-1037                seqlen_offset,
-1038            )?;
-1039        }
-1040        let xs = xs.apply(&self.norm)?;
-1041        let xs = xs.i((.., seq_len - 1, ..))?.contiguous()?;
-1042        let logits = self.lm_head.forward(&xs)?;
-1043        logits.to_dtype(DType::F32)
-1044    }
-1045
-1046    pub fn clear_kv_cache(&mut self) {
-1047        for layer in self.layers.iter_mut() {
-1048            layer.clear_kv_cache();
-1049        }
-1050    }
-1051}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/depth_anything_v2.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/depth_anything_v2.rs.html deleted file mode 100644 index c2d50a5..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/depth_anything_v2.rs.html +++ /dev/null @@ -1,566 +0,0 @@ -depth_anything_v2.rs - source

candle_transformers/models/
depth_anything_v2.rs

1//! Implementation of the Depth Anything model from FAIR.
-2//!
-3//! See:
-4//! - ["Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data"](https://github.com/LiheYoung/Depth-Anything)
-5//!
-6
-7use std::sync::Arc;
-8
-9use candle::D::Minus1;
-10use candle::{Module, Result, Tensor};
-11use candle_nn::ops::Identity;
-12use candle_nn::{
-13    batch_norm, conv2d, conv2d_no_bias, conv_transpose2d, linear, seq, Activation, BatchNorm,
-14    BatchNormConfig, Conv2d, Conv2dConfig, ConvTranspose2dConfig, Sequential, VarBuilder,
-15};
-16
-17use crate::models::dinov2::DinoVisionTransformer;
-18
-19pub struct DepthAnythingV2Config {
-20    out_channel_sizes: [usize; 4],
-21    in_channel_size: usize, // embed_dim in the Dino model
-22    num_features: usize,
-23    use_batch_norm: bool,
-24    use_class_token: bool,
-25    layer_ids_vits: Vec<usize>,
-26    input_image_size: usize,
-27    target_patch_size: usize,
-28}
-29
-30impl DepthAnythingV2Config {
-31    #[allow(clippy::too_many_arguments)]
-32    pub fn new(
-33        out_channel_sizes: [usize; 4],
-34        in_channel_size: usize,
-35        num_features: usize,
-36        use_batch_norm: bool,
-37        use_class_token: bool,
-38        layer_ids_vits: Vec<usize>,
-39        input_image_size: usize,
-40        target_patch_size: usize,
-41    ) -> Self {
-42        Self {
-43            out_channel_sizes,
-44            in_channel_size,
-45            num_features,
-46            use_batch_norm,
-47            use_class_token,
-48            layer_ids_vits,
-49            input_image_size,
-50            target_patch_size,
-51        }
-52    }
-53
-54    pub fn vit_small() -> Self {
-55        Self {
-56            out_channel_sizes: [48, 96, 192, 384],
-57            in_channel_size: 384,
-58            num_features: 64,
-59            use_batch_norm: false,
-60            use_class_token: false,
-61            layer_ids_vits: vec![2, 5, 8, 11],
-62            input_image_size: 518,
-63            target_patch_size: 518 / 14,
-64        }
-65    }
-66
-67    pub fn vit_base() -> Self {
-68        Self {
-69            out_channel_sizes: [96, 192, 384, 768],
-70            in_channel_size: 768,
-71            num_features: 128,
-72            use_batch_norm: false,
-73            use_class_token: false,
-74            layer_ids_vits: vec![2, 5, 8, 11],
-75            input_image_size: 518,
-76            target_patch_size: 518 / 14,
-77        }
-78    }
-79
-80    pub fn vit_large() -> Self {
-81        Self {
-82            out_channel_sizes: [256, 512, 1024, 1024],
-83            in_channel_size: 1024,
-84            num_features: 256,
-85            use_batch_norm: false,
-86            use_class_token: false,
-87            layer_ids_vits: vec![4, 11, 17, 23],
-88            input_image_size: 518,
-89            target_patch_size: 518 / 14,
-90        }
-91    }
-92
-93    pub fn vit_giant() -> Self {
-94        Self {
-95            out_channel_sizes: [1536, 1536, 1536, 1536],
-96            in_channel_size: 1536,
-97            num_features: 384,
-98            use_batch_norm: false,
-99            use_class_token: false,
-100            layer_ids_vits: vec![9, 19, 29, 39],
-101            input_image_size: 518,
-102            target_patch_size: 518 / 14,
-103        }
-104    }
-105}
-106
-107pub struct ResidualConvUnit {
-108    activation: Activation,
-109    conv1: Conv2d,
-110    conv2: Conv2d,
-111    batch_norm1: Option<BatchNorm>,
-112    batch_norm2: Option<BatchNorm>,
-113}
-114
-115impl ResidualConvUnit {
-116    pub fn new(
-117        conf: &DepthAnythingV2Config,
-118        activation: Activation,
-119        vb: VarBuilder,
-120    ) -> Result<Self> {
-121        const KERNEL_SIZE: usize = 3;
-122        let conv_cfg = Conv2dConfig {
-123            padding: 1,
-124            stride: 1,
-125            dilation: 1,
-126            groups: 1,
-127        };
-128        let conv1 = conv2d(
-129            conf.num_features,
-130            conf.num_features,
-131            KERNEL_SIZE,
-132            conv_cfg,
-133            vb.pp("conv1"),
-134        )?;
-135        let conv2 = conv2d(
-136            conf.num_features,
-137            conf.num_features,
-138            KERNEL_SIZE,
-139            conv_cfg,
-140            vb.pp("conv2"),
-141        )?;
-142
-143        let (batch_norm1, batch_norm2) = match conf.use_batch_norm {
-144            true => {
-145                let batch_norm_cfg = BatchNormConfig {
-146                    eps: 1e-05,
-147                    remove_mean: false,
-148                    affine: true,
-149                    momentum: 0.1,
-150                };
-151                (
-152                    Some(batch_norm(conf.num_features, batch_norm_cfg, vb.pp("bn1"))?),
-153                    Some(batch_norm(conf.num_features, batch_norm_cfg, vb.pp("bn2"))?),
-154                )
-155            }
-156            false => (None, None),
-157        };
-158
-159        Ok(Self {
-160            activation,
-161            conv1,
-162            conv2,
-163            batch_norm1,
-164            batch_norm2,
-165        })
-166    }
-167}
-168
-169impl Module for ResidualConvUnit {
-170    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-171        let out = self.activation.forward(xs)?;
-172        let out = self.conv1.forward(&out)?;
-173        let out = if let Some(batch_norm1) = &self.batch_norm1 {
-174            batch_norm1.forward_train(&out)?
-175        } else {
-176            out
-177        };
-178
-179        let out = self.activation.forward(&out)?;
-180        let out = self.conv2.forward(&out)?;
-181        let out = if let Some(batch_norm2) = &self.batch_norm2 {
-182            batch_norm2.forward_train(&out)?
-183        } else {
-184            out
-185        };
-186
-187        out + xs
-188    }
-189}
-190
-191pub struct FeatureFusionBlock {
-192    res_conv_unit1: ResidualConvUnit,
-193    res_conv_unit2: ResidualConvUnit,
-194    output_conv: Conv2d,
-195    target_patch_size: usize,
-196}
-197
-198impl FeatureFusionBlock {
-199    pub fn new(
-200        conf: &DepthAnythingV2Config,
-201        target_patch_size: usize,
-202        activation: Activation,
-203        vb: VarBuilder,
-204    ) -> Result<Self> {
-205        const KERNEL_SIZE: usize = 1;
-206        let conv_cfg = Conv2dConfig {
-207            padding: 0,
-208            stride: 1,
-209            dilation: 1,
-210            groups: 1,
-211        };
-212        let output_conv = conv2d(
-213            conf.num_features,
-214            conf.num_features,
-215            KERNEL_SIZE,
-216            conv_cfg,
-217            vb.pp("out_conv"),
-218        )?;
-219        let res_conv_unit1 = ResidualConvUnit::new(conf, activation, vb.pp("resConfUnit1"))?;
-220        let res_conv_unit2 = ResidualConvUnit::new(conf, activation, vb.pp("resConfUnit2"))?;
-221
-222        Ok(Self {
-223            res_conv_unit1,
-224            res_conv_unit2,
-225            output_conv,
-226            target_patch_size,
-227        })
-228    }
-229}
-230
-231impl Module for FeatureFusionBlock {
-232    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-233        let out = self.res_conv_unit2.forward(xs)?;
-234        let out = out.interpolate2d(self.target_patch_size, self.target_patch_size)?;
-235
-236        self.output_conv.forward(&out)
-237    }
-238}
-239
-240pub struct Scratch {
-241    layer1_rn: Conv2d,
-242    layer2_rn: Conv2d,
-243    layer3_rn: Conv2d,
-244    layer4_rn: Conv2d,
-245    refine_net1: FeatureFusionBlock,
-246    refine_net2: FeatureFusionBlock,
-247    refine_net3: FeatureFusionBlock,
-248    refine_net4: FeatureFusionBlock,
-249    output_conv1: Conv2d,
-250    output_conv2: Sequential,
-251}
-252
-253impl Scratch {
-254    pub fn new(conf: &DepthAnythingV2Config, vb: VarBuilder) -> Result<Self> {
-255        const KERNEL_SIZE: usize = 3;
-256        let conv_cfg = Conv2dConfig {
-257            padding: 1,
-258            stride: 1,
-259            dilation: 1,
-260            groups: 1,
-261        };
-262
-263        let layer1_rn = conv2d_no_bias(
-264            conf.out_channel_sizes[0],
-265            conf.num_features,
-266            KERNEL_SIZE,
-267            conv_cfg,
-268            vb.pp("layer1_rn"),
-269        )?;
-270        let layer2_rn = conv2d_no_bias(
-271            conf.out_channel_sizes[1],
-272            conf.num_features,
-273            KERNEL_SIZE,
-274            conv_cfg,
-275            vb.pp("layer2_rn"),
-276        )?;
-277        let layer3_rn = conv2d_no_bias(
-278            conf.out_channel_sizes[2],
-279            conf.num_features,
-280            KERNEL_SIZE,
-281            conv_cfg,
-282            vb.pp("layer3_rn"),
-283        )?;
-284        let layer4_rn = conv2d_no_bias(
-285            conf.out_channel_sizes[3],
-286            conf.num_features,
-287            KERNEL_SIZE,
-288            conv_cfg,
-289            vb.pp("layer4_rn"),
-290        )?;
-291
-292        let refine_net1 = FeatureFusionBlock::new(
-293            conf,
-294            conf.target_patch_size * 8,
-295            Activation::Relu,
-296            vb.pp("refinenet1"),
-297        )?;
-298        let refine_net2 = FeatureFusionBlock::new(
-299            conf,
-300            conf.target_patch_size * 4,
-301            Activation::Relu,
-302            vb.pp("refinenet2"),
-303        )?;
-304        let refine_net3 = FeatureFusionBlock::new(
-305            conf,
-306            conf.target_patch_size * 2,
-307            Activation::Relu,
-308            vb.pp("refinenet3"),
-309        )?;
-310        let refine_net4 = FeatureFusionBlock::new(
-311            conf,
-312            conf.target_patch_size,
-313            Activation::Relu,
-314            vb.pp("refinenet4"),
-315        )?;
-316
-317        let conv_cfg = Conv2dConfig {
-318            padding: 1,
-319            stride: 1,
-320            dilation: 1,
-321            groups: 1,
-322        };
-323        let output_conv1 = conv2d(
-324            conf.num_features,
-325            conf.num_features / 2,
-326            KERNEL_SIZE,
-327            conv_cfg,
-328            vb.pp("output_conv1"),
-329        )?;
-330
-331        let output_conv2 = seq();
-332        const HEAD_FEATURES_2: usize = 32;
-333        const OUT_CHANNELS_2: usize = 1;
-334        const KERNEL_SIZE_2: usize = 1;
-335        let output_conv2 = output_conv2.add(conv2d(
-336            conf.num_features / 2,
-337            HEAD_FEATURES_2,
-338            KERNEL_SIZE,
-339            conv_cfg,
-340            vb.pp("output_conv2").pp("0"),
-341        )?);
-342        let output_conv2 = output_conv2
-343            .add(Activation::Relu)
-344            .add(conv2d(
-345                HEAD_FEATURES_2,
-346                OUT_CHANNELS_2,
-347                KERNEL_SIZE_2,
-348                conv_cfg,
-349                vb.pp("output_conv2").pp("2"),
-350            )?)
-351            .add(Activation::Relu);
-352
-353        Ok(Self {
-354            layer1_rn,
-355            layer2_rn,
-356            layer3_rn,
-357            layer4_rn,
-358            refine_net1,
-359            refine_net2,
-360            refine_net3,
-361            refine_net4,
-362            output_conv1,
-363            output_conv2,
-364        })
-365    }
-366}
-367
-368const NUM_CHANNELS: usize = 4;
-369
-370pub struct DPTHead {
-371    projections: Vec<Conv2d>,
-372    resize_layers: Vec<Box<dyn Module>>,
-373    readout_projections: Vec<Sequential>,
-374    scratch: Scratch,
-375    use_class_token: bool,
-376    input_image_size: usize,
-377    target_patch_size: usize,
-378}
-379
-380impl DPTHead {
-381    pub fn new(conf: &DepthAnythingV2Config, vb: VarBuilder) -> Result<Self> {
-382        let mut projections: Vec<Conv2d> = Vec::with_capacity(conf.out_channel_sizes.len());
-383        for (conv_index, out_channel_size) in conf.out_channel_sizes.iter().enumerate() {
-384            projections.push(conv2d(
-385                conf.in_channel_size,
-386                *out_channel_size,
-387                1,
-388                Default::default(),
-389                vb.pp("projects").pp(conv_index.to_string()),
-390            )?);
-391        }
-392
-393        let resize_layers: Vec<Box<dyn Module>> = vec![
-394            Box::new(conv_transpose2d(
-395                conf.out_channel_sizes[0],
-396                conf.out_channel_sizes[0],
-397                4,
-398                ConvTranspose2dConfig {
-399                    padding: 0,
-400                    stride: 4,
-401                    dilation: 1,
-402                    output_padding: 0,
-403                },
-404                vb.pp("resize_layers").pp("0"),
-405            )?),
-406            Box::new(conv_transpose2d(
-407                conf.out_channel_sizes[1],
-408                conf.out_channel_sizes[1],
-409                2,
-410                ConvTranspose2dConfig {
-411                    padding: 0,
-412                    stride: 2,
-413                    dilation: 1,
-414                    output_padding: 0,
-415                },
-416                vb.pp("resize_layers").pp("1"),
-417            )?),
-418            Box::new(Identity::new()),
-419            Box::new(conv2d(
-420                conf.out_channel_sizes[3],
-421                conf.out_channel_sizes[3],
-422                3,
-423                Conv2dConfig {
-424                    padding: 1,
-425                    stride: 2,
-426                    dilation: 1,
-427                    groups: 1,
-428                },
-429                vb.pp("resize_layers").pp("3"),
-430            )?),
-431        ];
-432
-433        let readout_projections = if conf.use_class_token {
-434            let rop = Vec::with_capacity(NUM_CHANNELS);
-435            for rop_index in 0..NUM_CHANNELS {
-436                seq()
-437                    .add(linear(
-438                        2 * conf.in_channel_size,
-439                        conf.in_channel_size,
-440                        vb.pp("readout_projects").pp(rop_index.to_string()),
-441                    )?)
-442                    .add(Activation::Gelu);
-443            }
-444            rop
-445        } else {
-446            vec![]
-447        };
-448
-449        let scratch = Scratch::new(conf, vb.pp("scratch"))?;
-450
-451        Ok(Self {
-452            projections,
-453            resize_layers,
-454            readout_projections,
-455            scratch,
-456            use_class_token: conf.use_class_token,
-457            input_image_size: conf.input_image_size,
-458            target_patch_size: conf.target_patch_size,
-459        })
-460    }
-461}
-462
-463impl Module for DPTHead {
-464    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-465        let mut out: Vec<Tensor> = Vec::with_capacity(NUM_CHANNELS);
-466        for i in 0..NUM_CHANNELS {
-467            let x = if self.use_class_token {
-468                let x = xs.get(i)?.get(0)?;
-469                let class_token = xs.get(i)?.get(1)?;
-470                let readout = class_token.unsqueeze(1)?.expand(x.shape())?;
-471                let to_cat = [x, readout];
-472                let cat = Tensor::cat(&to_cat, Minus1)?;
-473                self.readout_projections[i].forward(&cat)?
-474            } else {
-475                xs.get(i)?
-476            };
-477            let x_dims = x.dims();
-478
-479            let x = x.permute((0, 2, 1))?.reshape((
-480                x_dims[0],
-481                x_dims[x_dims.len() - 1],
-482                self.target_patch_size,
-483                self.target_patch_size,
-484            ))?;
-485            let x = self.projections[i].forward(&x)?;
-486
-487            let x = self.resize_layers[i].forward(&x)?;
-488            out.push(x);
-489        }
-490
-491        let layer_1_rn = self.scratch.layer1_rn.forward(&out[0])?;
-492        let layer_2_rn = self.scratch.layer2_rn.forward(&out[1])?;
-493        let layer_3_rn = self.scratch.layer3_rn.forward(&out[2])?;
-494        let layer_4_rn = self.scratch.layer4_rn.forward(&out[3])?;
-495
-496        let path4 = self.scratch.refine_net4.forward(&layer_4_rn)?;
-497
-498        let res3_out = self
-499            .scratch
-500            .refine_net3
-501            .res_conv_unit1
-502            .forward(&layer_3_rn)?;
-503        let res3_out = path4.add(&res3_out)?;
-504        let path3 = self.scratch.refine_net3.forward(&res3_out)?;
-505
-506        let res2_out = self
-507            .scratch
-508            .refine_net2
-509            .res_conv_unit1
-510            .forward(&layer_2_rn)?;
-511        let res2_out = path3.add(&res2_out)?;
-512        let path2 = self.scratch.refine_net2.forward(&res2_out)?;
-513
-514        let res1_out = self
-515            .scratch
-516            .refine_net1
-517            .res_conv_unit1
-518            .forward(&layer_1_rn)?;
-519        let res1_out = path2.add(&res1_out)?;
-520        let path1 = self.scratch.refine_net1.forward(&res1_out)?;
-521
-522        let out = self.scratch.output_conv1.forward(&path1)?;
-523
-524        let out = out.interpolate2d(self.input_image_size, self.input_image_size)?;
-525
-526        self.scratch.output_conv2.forward(&out)
-527    }
-528}
-529
-530pub struct DepthAnythingV2 {
-531    pretrained: Arc<DinoVisionTransformer>,
-532    depth_head: DPTHead,
-533    conf: DepthAnythingV2Config,
-534}
-535
-536impl DepthAnythingV2 {
-537    pub fn new(
-538        pretrained: Arc<DinoVisionTransformer>,
-539        conf: DepthAnythingV2Config,
-540        vb: VarBuilder,
-541    ) -> Result<Self> {
-542        let depth_head = DPTHead::new(&conf, vb.pp("depth_head"))?;
-543
-544        Ok(Self {
-545            pretrained,
-546            depth_head,
-547            conf,
-548        })
-549    }
-550}
-551
-552impl Module for DepthAnythingV2 {
-553    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-554        let features = self.pretrained.get_intermediate_layers(
-555            xs,
-556            &self.conf.layer_ids_vits,
-557            false,
-558            false,
-559            true,
-560        )?;
-561        let depth = self.depth_head.forward(&features)?;
-562
-563        depth.relu()
-564    }
-565}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/dinov2.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/dinov2.rs.html deleted file mode 100644 index ba719df..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/dinov2.rs.html +++ /dev/null @@ -1,397 +0,0 @@ -dinov2.rs - source

candle_transformers/models/
dinov2.rs

1//! Implementation of the DINOv2 models from Meta Research.
-2//!
-3//! This module implements the DINOv2 vision transformer model from Meta AI Research.
-4//! DINOv2 is a self-supervised learning model that can learn visual features
-5//! without using any labeled data. See: ["DINOv2: Learning Robust Visual Features without Supervision"](https://github.com/facebookresearch/dinov2)
-6//!
-7//! ## Running an example with color map and CUDA
-8//!
-9//! ```bash
-10//! cargo run \
-11//!   --features cuda,depth_anything_v2 \
-12//!   --package candle-examples \
-13//!   --example depth_anything_v2 \
-14//!   -- --color-map \
-15//!   --image candle-examples/examples/yolo-v8/assets/bike.jpg
-16//! ```
-17//!
-18//! ## Running as an ImageNet classifier
-19//!
-20//! The model returns the probability for the image to belong to each of the 1000 ImageNet categories.
-21//!
-22//! <div align=center>
-23//!   <img src="https://github.com/huggingface/candle/raw/main/candle-examples/examples/yolo-v8/assets/bike.jpg" alt="" width=640>
-24//! </div>
-25//!
-26//! ```bash
-27//! cargo run \
-28//!   --example dinov2 \
-29//!   --release \
-30//!   -- --image candle-examples/examples/yolo-v8/assets/bike.jpg
-31//!
-32//! > mountain bike, all-terrain bike, off-roader: 43.67%
-33//! > bicycle-built-for-two, tandem bicycle, tandem: 33.20%
-34//! > crash helmet            : 13.23%
-35//! > unicycle, monocycle     : 2.44%
-36//! > maillot                 : 2.42%
-37//! ```
-38//!
-39
-40use candle::{IndexOp, Result, Tensor, D};
-41use candle_nn::{layer_norm, LayerNorm, Linear, Module, VarBuilder};
-42
-43const IMG_SIZE: usize = 518;
-44const PATCH_SIZE: usize = 14;
-45const NUM_CLASSES: usize = 1000;
-46
-47fn linear(vb: VarBuilder, in_dim: usize, out_dim: usize, bias: bool) -> Result<Linear> {
-48    if bias {
-49        candle_nn::linear(in_dim, out_dim, vb)
-50    } else {
-51        candle_nn::linear_no_bias(in_dim, out_dim, vb)
-52    }
-53}
-54
-55#[derive(Debug)]
-56struct Attention {
-57    qkv: Linear,
-58    proj: Linear,
-59    num_heads: usize,
-60    scale: f64,
-61}
-62
-63impl Attention {
-64    fn new(
-65        vb: VarBuilder,
-66        dim: usize,
-67        num_heads: usize,
-68        qkv_bias: bool,
-69        proj_bias: bool,
-70    ) -> Result<Self> {
-71        let qkv = linear(vb.pp("qkv"), dim, dim * 3, qkv_bias)?;
-72        let proj = linear(vb.pp("proj"), dim, dim, proj_bias)?;
-73        let scale = 1. / ((dim / num_heads) as f64).sqrt();
-74        Ok(Self {
-75            qkv,
-76            proj,
-77            num_heads,
-78            scale,
-79        })
-80    }
-81}
-82
-83impl Module for Attention {
-84    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-85        let (b, n, c) = xs.dims3()?;
-86        let qkv = self
-87            .qkv
-88            .forward(xs)?
-89            .reshape((b, n, 3, self.num_heads, c / self.num_heads))?
-90            .transpose(1, 2)? // 02134
-91            .transpose(0, 1)? // 20134
-92            .transpose(2, 3)?; // 20314
-93        let q = (qkv.i(0)? * self.scale)?;
-94        let k = qkv.i(1)?.contiguous()?;
-95        let v = qkv.i(2)?.contiguous()?;
-96        let attn = candle_nn::ops::softmax(&q.matmul(&k.t()?)?, D::Minus1)?;
-97        let attn = attn.matmul(&v)?.transpose(1, 2)?.reshape((b, n, c))?;
-98        self.proj.forward(&attn)
-99    }
-100}
-101
-102#[derive(Debug)]
-103struct LayerScale {
-104    gamma: Tensor,
-105}
-106
-107impl LayerScale {
-108    fn new(vb: VarBuilder, dim: usize) -> Result<Self> {
-109        let gamma = vb.get(dim, "gamma")?;
-110        Ok(Self { gamma })
-111    }
-112}
-113
-114impl Module for LayerScale {
-115    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-116        xs.broadcast_mul(&self.gamma)
-117    }
-118}
-119
-120#[derive(Debug)]
-121struct Mlp {
-122    fc1: Linear,
-123    fc2: Linear,
-124}
-125
-126impl Mlp {
-127    fn new(vb: VarBuilder, in_features: usize, hidden_features: usize, bias: bool) -> Result<Self> {
-128        let out_features = in_features;
-129        let fc1 = linear(vb.pp("fc1"), in_features, hidden_features, bias)?;
-130        let fc2 = linear(vb.pp("fc2"), hidden_features, out_features, bias)?;
-131        Ok(Self { fc1, fc2 })
-132    }
-133}
-134
-135impl Module for Mlp {
-136    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-137        let xs = self.fc1.forward(xs)?.gelu()?;
-138        self.fc2.forward(&xs)
-139    }
-140}
-141
-142#[derive(Debug)]
-143struct Block {
-144    norm1: LayerNorm,
-145    attn: Attention,
-146    ls1: LayerScale,
-147    norm2: LayerNorm,
-148    mlp: Mlp,
-149    ls2: LayerScale,
-150}
-151
-152impl Block {
-153    fn new(vb: VarBuilder, dim: usize, num_heads: usize) -> Result<Self> {
-154        let norm1 = layer_norm(dim, 1e-5, vb.pp("norm1"))?;
-155        let attn = Attention::new(vb.pp("attn"), dim, num_heads, true, true)?;
-156        let ls1 = LayerScale::new(vb.pp("ls1"), dim)?;
-157        let norm2 = layer_norm(dim, 1e-5, vb.pp("norm2"))?;
-158        let mlp = Mlp::new(vb.pp("mlp"), dim, dim * 4, true)?;
-159        let ls2 = LayerScale::new(vb.pp("ls2"), dim)?;
-160        Ok(Self {
-161            norm1,
-162            attn,
-163            ls1,
-164            norm2,
-165            mlp,
-166            ls2,
-167        })
-168    }
-169}
-170
-171impl Module for Block {
-172    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-173        let residual = xs;
-174        let xs = self
-175            .ls1
-176            .forward(&self.attn.forward(&self.norm1.forward(xs)?)?)?;
-177        let xs = (xs + residual)?;
-178        let residual = &xs;
-179        let xs = self
-180            .ls2
-181            .forward(&self.mlp.forward(&self.norm2.forward(&xs)?)?)?;
-182        xs + residual
-183    }
-184}
-185
-186#[derive(Debug)]
-187struct PatchEmbed {
-188    proj: candle_nn::Conv2d,
-189    patch_size: (usize, usize),
-190    num_patches: usize,
-191}
-192
-193impl PatchEmbed {
-194    fn new(
-195        vb: VarBuilder,
-196        img_size: usize,
-197        patch_size: usize,
-198        in_chans: usize,
-199        embed_dim: usize,
-200    ) -> Result<Self> {
-201        let config = candle_nn::Conv2dConfig {
-202            stride: patch_size,
-203            ..Default::default()
-204        };
-205        let proj = candle_nn::conv2d(in_chans, embed_dim, patch_size, config, vb.pp("proj"))?;
-206        let num_patches = (img_size / patch_size) * (img_size / patch_size);
-207        Ok(Self {
-208            proj,
-209            patch_size: (patch_size, patch_size),
-210            num_patches,
-211        })
-212    }
-213}
-214
-215impl Module for PatchEmbed {
-216    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-217        let (_b, _c, h, w) = xs.dims4()?;
-218        let (patch_h, patch_w) = self.patch_size;
-219        if (h % patch_h) != 0 {
-220            candle::bail!("image height {h} is not a multiple of patch height {patch_h}")
-221        }
-222        if (w % patch_w) != 0 {
-223            candle::bail!("image width {w} is not a multiple of patch width {patch_w}")
-224        }
-225        let xs = self.proj.forward(xs)?;
-226        let (b, c, h, w) = xs.dims4()?;
-227        // flatten embeddings.
-228        xs.reshape((b, c, h * w))?.transpose(1, 2)
-229    }
-230}
-231
-232#[derive(Debug)]
-233pub struct DinoVisionTransformer {
-234    patch_embed: PatchEmbed,
-235    cls_token: Tensor,
-236    pos_embed: Tensor,
-237    blocks: Vec<Block>,
-238    norm: LayerNorm,
-239    head: Linear,
-240}
-241
-242impl DinoVisionTransformer {
-243    pub fn new(vb: VarBuilder, depth: usize, embed_dim: usize, num_heads: usize) -> Result<Self> {
-244        let patch_embed =
-245            PatchEmbed::new(vb.pp("patch_embed"), IMG_SIZE, PATCH_SIZE, 3, embed_dim)?;
-246        let cls_token = vb.get((1, 1, embed_dim), "cls_token")?;
-247        let num_tokens = 1;
-248        let pos_embed = vb.get(
-249            (1, patch_embed.num_patches + num_tokens, embed_dim),
-250            "pos_embed",
-251        )?;
-252        let head = linear(vb.pp("head"), 2 * embed_dim, NUM_CLASSES, true)?;
-253        let norm = layer_norm(embed_dim, 1e-5, vb.pp("norm"))?;
-254        let vb_b = vb.pp("blocks");
-255        let blocks = (0..depth)
-256            .map(|i| Block::new(vb_b.pp(i.to_string()), embed_dim, num_heads))
-257            .collect::<Result<Vec<_>>>()?;
-258        Ok(Self {
-259            patch_embed,
-260            cls_token,
-261            pos_embed,
-262            blocks,
-263            norm,
-264            head,
-265        })
-266    }
-267
-268    fn interpolate_pos_encoding(&self, xs: &Tensor, w: usize, h: usize) -> Result<Tensor> {
-269        let npatch = xs.dim(1)? - 1;
-270        let n = self.pos_embed.dim(1)? - 1;
-271        let sqrt_n = (n as f64).sqrt();
-272        if npatch == n && w == h {
-273            return Ok(xs.clone());
-274        }
-275        let class_pos_embed = self.pos_embed.i((.., ..1))?;
-276        let patch_pos_embed = self.pos_embed.i((.., 1..))?;
-277        let dim = xs.dim(D::Minus1)?;
-278        let (w0, h0) = ((w / PATCH_SIZE) as f64 + 0.1, (h / PATCH_SIZE) as f64 + 0.1);
-279        let patch_pos_embed = patch_pos_embed
-280            .reshape((1, sqrt_n as usize, sqrt_n as usize, dim))?
-281            .transpose(2, 3)?
-282            .transpose(1, 2)?;
-283        // This uses bicubic interpolation in the original implementation.
-284        let patch_pos_embed = patch_pos_embed.upsample_nearest2d(h0 as usize, w0 as usize)?;
-285        let el_count = patch_pos_embed.shape().elem_count();
-286        let patch_pos_embed =
-287            patch_pos_embed
-288                .transpose(1, 2)?
-289                .transpose(2, 3)?
-290                .reshape((1, el_count / dim, dim))?;
-291        Tensor::cat(&[&class_pos_embed, &patch_pos_embed], 1)
-292    }
-293
-294    fn prepare_tokens_with_mask(&self, xs: &Tensor) -> Result<Tensor> {
-295        let (_b, _nc, w, h) = xs.dims4()?;
-296        let xs = self.patch_embed.forward(xs)?;
-297        let xs = Tensor::cat(&[&self.cls_token, &xs], 1)?;
-298        &xs + &self.interpolate_pos_encoding(&xs, w, h)?
-299    }
-300
-301    fn get_intermediate_layers_not_chunked(
-302        &self,
-303        xs: &Tensor,
-304        blocks_to_take: &[usize],
-305    ) -> Result<Vec<Tensor>> {
-306        let mut xs = self.prepare_tokens_with_mask(xs)?;
-307        let mut output = Vec::new();
-308        for (i, blk) in self.blocks.iter().enumerate() {
-309            xs = blk.forward(&xs)?;
-310            if blocks_to_take.contains(&i) {
-311                output.push(xs.clone());
-312            }
-313        }
-314        if output.len() != blocks_to_take.len() {
-315            candle::bail!(
-316                "only {} / {} blocks found",
-317                output.len(),
-318                blocks_to_take.len()
-319            );
-320        }
-321        Ok(output)
-322    }
-323
-324    pub fn get_intermediate_layers(
-325        &self,
-326        xs: &Tensor,
-327        blocks_to_take: &[usize],
-328        reshape: bool,
-329        return_class_token: bool,
-330        norm: bool,
-331    ) -> Result<Tensor> {
-332        let outputs = self.get_intermediate_layers_not_chunked(xs, blocks_to_take)?;
-333        let outputs = if norm {
-334            outputs
-335                .iter()
-336                .map(|out| self.norm.forward(out))
-337                .collect::<Result<Vec<_>>>()?
-338        } else {
-339            outputs
-340        };
-341        let class_tokens = outputs
-342            .iter()
-343            .map(|out| out.i((.., 0)))
-344            .collect::<Result<Vec<_>>>()?;
-345        let outputs = outputs
-346            .iter()
-347            .map(|out| out.i((.., 1..)))
-348            .collect::<Result<Vec<_>>>()?;
-349
-350        let outputs = if reshape {
-351            let (b, _c, w, h) = xs.dims4()?;
-352            let patch_size = self.patch_embed.patch_size.0;
-353            let num_channels = outputs[0].elem_count() / (b * (w / patch_size) * (h / patch_size));
-354            outputs
-355                .iter()
-356                .map(|out| {
-357                    out.reshape((b, w / patch_size, h / patch_size, num_channels))?
-358                        .transpose(2, 3)?
-359                        .transpose(1, 2)
-360                })
-361                .collect::<Result<Vec<_>>>()?
-362        } else {
-363            outputs
-364        };
-365
-366        let outputs = if return_class_token {
-367            outputs
-368                .iter()
-369                .zip(class_tokens.iter())
-370                .map(|(out, class_token)| Tensor::cat(&[out, class_token], D::Minus1))
-371                .collect::<Result<Vec<_>>>()?
-372        } else {
-373            outputs
-374        };
-375
-376        Tensor::stack(&outputs[..], 0)
-377    }
-378}
-379
-380impl Module for DinoVisionTransformer {
-381    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-382        let mut xs = self.prepare_tokens_with_mask(xs)?;
-383        for blk in self.blocks.iter() {
-384            xs = blk.forward(&xs)?
-385        }
-386        let xs = self.norm.forward(&xs)?;
-387        let xs_norm_clstoken = xs.i((.., 0))?;
-388        let xs_norm_patchtokens = xs.i((.., 1..))?.mean(1)?;
-389        let xs = Tensor::cat(&[xs_norm_clstoken, xs_norm_patchtokens], D::Minus1)?;
-390        self.head.forward(&xs)
-391    }
-392}
-393
-394pub fn vit_small(vb: VarBuilder) -> Result<DinoVisionTransformer> {
-395    DinoVisionTransformer::new(vb, 12, 384, 6)
-396}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/dinov2reg4.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/dinov2reg4.rs.html deleted file mode 100644 index dc7af7c..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/dinov2reg4.rs.html +++ /dev/null @@ -1,314 +0,0 @@ -dinov2reg4.rs - source

candle_transformers/models/
dinov2reg4.rs

1//! Implementation of the DINOv2 revision (4 regularization)
-2//!
-3//! The DINOv2-reg4 model is a variant of DINOv2 that adds 4 regularization tokens to the
-4//! original architecture. This implementation is specifically trained for plant species
-5//! classification on the PlantCLEF2024 dataset with 7,806 classes.
-6//!
-7//! - [Paper](https://arxiv.org/abs/2309.16588). DINOv2: Learning Robust Visual Features without Supervision
-8//! - [GH Repo](https://github.com/facebookresearch/dinov2)
-9//!
-10//! # Example
-11//!
-12//! ```bash
-13//! # Download classes names and a plant picture to identify
-14//! # see candle/examples/dinov2reg4 for full code.
-15//!
-16//! # Perform inference
-17//! cargo run \
-18//!   --example dinov2reg4 \
-19//!   --release -- \
-20//!   --image <orchid-file>
-21//!
-22//! > Orchis simia Lam.       : 45.55%
-23//! > Orchis × bergonii Nanteuil: 9.80%
-24//! > Orchis italica Poir.    : 9.66%
-25//! > Orchis × angusticruris Franch.: 2.76%
-26//! > Orchis × bivonae Tod.   : 2.54%
-27//! ```
-28//!
-29//! <div align=center>
-30//!   <img src="https://bs.plantnet.org/image/o/bd2d3830ac3270218ba82fd24e2290becd01317c" alt="" width=320>
-31//! </div>
-32//!
-33use candle::{IndexOp, Result, Tensor, D};
-34use candle_nn::{layer_norm, LayerNorm, Linear, Module, VarBuilder};
-35
-36const IMG_SIZE: usize = 518;
-37const PATCH_SIZE: usize = 14;
-38const NUM_CLASSES: usize = 7806; // PlantCLEF2024 DINOv2 (https://zenodo.org/records/10848263)
-39
-40fn linear(vb: VarBuilder, in_dim: usize, out_dim: usize, bias: bool) -> Result<Linear> {
-41    if bias {
-42        candle_nn::linear(in_dim, out_dim, vb)
-43    } else {
-44        candle_nn::linear_no_bias(in_dim, out_dim, vb)
-45    }
-46}
-47
-48#[derive(Debug)]
-49struct Attention {
-50    qkv: Linear,
-51    proj: Linear,
-52    num_heads: usize,
-53    scale: f64,
-54}
-55
-56impl Attention {
-57    fn new(
-58        vb: VarBuilder,
-59        dim: usize,
-60        num_heads: usize,
-61        qkv_bias: bool,
-62        proj_bias: bool,
-63    ) -> Result<Self> {
-64        let qkv = linear(vb.pp("qkv"), dim, dim * 3, qkv_bias)?;
-65        let proj = linear(vb.pp("proj"), dim, dim, proj_bias)?;
-66        let scale = 1. / ((dim / num_heads) as f64).sqrt();
-67        Ok(Self {
-68            qkv,
-69            proj,
-70            num_heads,
-71            scale,
-72        })
-73    }
-74}
-75
-76impl Module for Attention {
-77    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-78        let (b, n, c) = xs.dims3()?;
-79        let qkv = self
-80            .qkv
-81            .forward(xs)?
-82            .reshape((b, n, 3, self.num_heads, c / self.num_heads))?
-83            .transpose(1, 2)? // 02134
-84            .transpose(0, 1)? // 20134
-85            .transpose(2, 3)?; // 20314
-86        let q = (qkv.i(0)? * self.scale)?;
-87        let k = qkv.i(1)?.contiguous()?;
-88        let v = qkv.i(2)?.contiguous()?;
-89        let attn = candle_nn::ops::softmax(&q.matmul(&k.t()?)?, D::Minus1)?;
-90        let attn = attn.matmul(&v)?.transpose(1, 2)?.reshape((b, n, c))?;
-91        self.proj.forward(&attn)
-92    }
-93}
-94
-95#[derive(Debug)]
-96struct LayerScale {
-97    gamma: Tensor,
-98}
-99
-100impl LayerScale {
-101    fn new(vb: VarBuilder, dim: usize) -> Result<Self> {
-102        let gamma = vb.get(dim, "gamma")?;
-103        Ok(Self { gamma })
-104    }
-105}
-106
-107impl Module for LayerScale {
-108    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-109        xs.broadcast_mul(&self.gamma)
-110    }
-111}
-112
-113#[derive(Debug)]
-114struct Mlp {
-115    fc1: Linear,
-116    fc2: Linear,
-117}
-118
-119impl Mlp {
-120    fn new(vb: VarBuilder, in_features: usize, hidden_features: usize, bias: bool) -> Result<Self> {
-121        let out_features = in_features;
-122        let fc1 = linear(vb.pp("fc1"), in_features, hidden_features, bias)?;
-123        let fc2 = linear(vb.pp("fc2"), hidden_features, out_features, bias)?;
-124        Ok(Self { fc1, fc2 })
-125    }
-126}
-127
-128impl Module for Mlp {
-129    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-130        let xs = self.fc1.forward(xs)?.gelu()?;
-131        self.fc2.forward(&xs)
-132    }
-133}
-134
-135#[derive(Debug)]
-136struct Block {
-137    norm1: LayerNorm,
-138    attn: Attention,
-139    ls1: LayerScale,
-140    norm2: LayerNorm,
-141    mlp: Mlp,
-142    ls2: LayerScale,
-143}
-144
-145impl Block {
-146    fn new(vb: VarBuilder, dim: usize, num_heads: usize) -> Result<Self> {
-147        let norm1 = layer_norm(dim, 1e-6, vb.pp("norm1"))?;
-148        let attn = Attention::new(vb.pp("attn"), dim, num_heads, true, true)?;
-149        let ls1 = LayerScale::new(vb.pp("ls1"), dim)?;
-150        let norm2 = layer_norm(dim, 1e-6, vb.pp("norm2"))?;
-151        let mlp = Mlp::new(vb.pp("mlp"), dim, dim * 4, true)?;
-152        let ls2 = LayerScale::new(vb.pp("ls2"), dim)?;
-153        Ok(Self {
-154            norm1,
-155            attn,
-156            ls1,
-157            norm2,
-158            mlp,
-159            ls2,
-160        })
-161    }
-162}
-163
-164impl Module for Block {
-165    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-166        let residual = xs;
-167        let xs = self
-168            .ls1
-169            .forward(&self.attn.forward(&self.norm1.forward(xs)?)?)?;
-170        let xs = (xs + residual)?;
-171        let residual = &xs;
-172        let xs = self
-173            .ls2
-174            .forward(&self.mlp.forward(&self.norm2.forward(&xs)?)?)?;
-175        xs + residual
-176    }
-177}
-178
-179#[derive(Debug)]
-180struct PatchEmbed {
-181    proj: candle_nn::Conv2d,
-182    patch_size: (usize, usize),
-183    num_patches: usize,
-184}
-185
-186impl PatchEmbed {
-187    fn new(
-188        vb: VarBuilder,
-189        img_size: usize,
-190        patch_size: usize,
-191        in_chans: usize,
-192        embed_dim: usize,
-193    ) -> Result<Self> {
-194        let config = candle_nn::Conv2dConfig {
-195            stride: patch_size,
-196            ..Default::default()
-197        };
-198        let proj = candle_nn::conv2d(in_chans, embed_dim, patch_size, config, vb.pp("proj"))?;
-199        let num_patches = (img_size / patch_size) * (img_size / patch_size);
-200        Ok(Self {
-201            proj,
-202            patch_size: (patch_size, patch_size),
-203            num_patches,
-204        })
-205    }
-206}
-207
-208impl Module for PatchEmbed {
-209    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-210        let (_b, _c, h, w) = xs.dims4()?;
-211        let (patch_h, patch_w) = self.patch_size;
-212        if (h % patch_h) != 0 {
-213            candle::bail!("image height {h} is not a multiple of patch height {patch_h}")
-214        }
-215        if (w % patch_w) != 0 {
-216            candle::bail!("image width {w} is not a multiple of patch width {patch_w}")
-217        }
-218        let xs = self.proj.forward(xs)?;
-219        let (b, c, h, w) = xs.dims4()?;
-220        // flatten embeddings.
-221        xs.reshape((b, c, h * w))?.transpose(1, 2)
-222    }
-223}
-224
-225#[derive(Debug)]
-226pub struct DinoVisionTransformer {
-227    patch_embed: PatchEmbed,
-228    cls_token: Tensor,
-229    reg_token: Tensor,
-230    pos_embed: Tensor,
-231    blocks: Vec<Block>,
-232    norm: LayerNorm,
-233    head: Linear,
-234}
-235
-236impl DinoVisionTransformer {
-237    pub fn new(vb: VarBuilder, depth: usize, embed_dim: usize, num_heads: usize) -> Result<Self> {
-238        let patch_embed =
-239            PatchEmbed::new(vb.pp("patch_embed"), IMG_SIZE, PATCH_SIZE, 3, embed_dim)?;
-240        let cls_token = vb.get((1, 1, embed_dim), "cls_token")?;
-241        let reg_token = vb.get((1, 4, embed_dim), "reg_token")?;
-242        let pos_embed = vb.get((1, patch_embed.num_patches, embed_dim), "pos_embed")?;
-243        let head = linear(vb.pp("head"), embed_dim, NUM_CLASSES, true)?;
-244        let norm = layer_norm(embed_dim, 1e-6, vb.pp("norm"))?;
-245        let vb_b = vb.pp("blocks");
-246        let blocks = (0..depth)
-247            .map(|i| Block::new(vb_b.pp(i.to_string()), embed_dim, num_heads))
-248            .collect::<Result<Vec<_>>>()?;
-249        Ok(Self {
-250            patch_embed,
-251            cls_token,
-252            reg_token,
-253            pos_embed,
-254            blocks,
-255            norm,
-256            head,
-257        })
-258    }
-259
-260    fn interpolate_pos_encoding(&self, xs: &Tensor, w: usize, h: usize) -> Result<Tensor> {
-261        let npatch = xs.dim(1)? - 1;
-262        let n = self.pos_embed.dim(1)? - 1;
-263        let sqrt_n = (n as f64).sqrt();
-264        if npatch == n && w == h {
-265            return Ok(self.pos_embed.clone());
-266        }
-267        let patch_pos_embed = &self.pos_embed;
-268        let dim = xs.dim(D::Minus1)?;
-269        let (w0, h0) = ((w / PATCH_SIZE) as f64 + 0.1, (h / PATCH_SIZE) as f64 + 0.1);
-270        let patch_pos_embed = patch_pos_embed
-271            .reshape((1, sqrt_n as usize, sqrt_n as usize, dim))?
-272            .transpose(2, 3)?
-273            .transpose(1, 2)?;
-274        // This uses bicubic interpolation in the original implementation.
-275        let patch_pos_embed = patch_pos_embed.upsample_nearest2d(h0 as usize, w0 as usize)?;
-276        let el_count = patch_pos_embed.shape().elem_count();
-277        patch_pos_embed
-278            .transpose(1, 2)?
-279            .transpose(2, 3)?
-280            .reshape((1, el_count / dim, dim))
-281    }
-282
-283    fn prepare_tokens_with_mask(&self, xs: &Tensor) -> Result<Tensor> {
-284        let (_b, _nc, w, h) = xs.dims4()?;
-285        if (w != IMG_SIZE) || (h != IMG_SIZE) {
-286            panic!("Error: The input tensor should have the shape: Bx3x518x518.");
-287        }
-288        let xs = self.patch_embed.forward(xs)?;
-289        let xs = (&xs + &self.interpolate_pos_encoding(&xs, w, h)?)?;
-290        let xs = Tensor::cat(&[&self.cls_token, &self.reg_token, &xs], 1)?;
-291        Ok(xs)
-292    }
-293}
-294
-295impl Module for DinoVisionTransformer {
-296    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-297        let mut xs = self.prepare_tokens_with_mask(xs)?;
-298        for blk in self.blocks.iter() {
-299            xs = blk.forward(&xs)?
-300        }
-301        let xs = self.norm.forward(&xs)?;
-302        let xs_norm_clstoken = xs.i((.., 0))?;
-303        self.head.forward(&xs_norm_clstoken)
-304    }
-305}
-306
-307pub fn vit_small(vb: VarBuilder) -> Result<DinoVisionTransformer> {
-308    DinoVisionTransformer::new(vb, 12, 384, 6)
-309}
-310
-311pub fn vit_base(vb: VarBuilder) -> Result<DinoVisionTransformer> {
-312    DinoVisionTransformer::new(vb, 12, 768, 12)
-313}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/distilbert.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/distilbert.rs.html deleted file mode 100644 index 92c7518..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/distilbert.rs.html +++ /dev/null @@ -1,348 +0,0 @@ -distilbert.rs - source

candle_transformers/models/
distilbert.rs

1//! Implementation of DistilBert, a distilled version of BERT.
-2//!
-3//! See:
-4//! - ["DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter"](https://arxiv.org/abs/1910.01108)
-5//!
-6use super::with_tracing::{layer_norm, linear, LayerNorm, Linear};
-7use candle::{DType, Device, Result, Tensor};
-8use candle_nn::{Embedding, Module, VarBuilder};
-9use serde::Deserialize;
-10
-11pub const DTYPE: DType = DType::F32;
-12
-13fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: f32) -> Result<Tensor> {
-14    let shape = mask.shape();
-15    let on_true = Tensor::new(on_true, on_false.device())?.broadcast_as(shape.dims())?;
-16    let m = mask.where_cond(&on_true, on_false)?;
-17    Ok(m)
-18}
-19
-20#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)]
-21#[serde(rename_all = "lowercase")]
-22enum HiddenAct {
-23    Gelu,
-24    Relu,
-25}
-26
-27struct HiddenActLayer {
-28    act: HiddenAct,
-29    span: tracing::Span,
-30}
-31
-32impl HiddenActLayer {
-33    fn new(act: HiddenAct) -> Self {
-34        let span = tracing::span!(tracing::Level::TRACE, "hidden-act");
-35        Self { act, span }
-36    }
-37}
-38
-39impl Module for HiddenActLayer {
-40    fn forward(&self, xs: &Tensor) -> candle::Result<Tensor> {
-41        let _enter = self.span.enter();
-42        match self.act {
-43            // https://github.com/huggingface/transformers/blob/cd4584e3c809bb9e1392ccd3fe38b40daba5519a/src/transformers/activations.py#L213
-44            HiddenAct::Gelu => xs.gelu(),
-45            HiddenAct::Relu => xs.relu(),
-46        }
-47    }
-48}
-49
-50#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Default)]
-51#[serde(rename_all = "lowercase")]
-52enum PositionEmbeddingType {
-53    #[default]
-54    Absolute,
-55}
-56
-57#[derive(Debug, Clone, PartialEq, Deserialize)]
-58pub struct Config {
-59    vocab_size: usize,
-60    dim: usize,
-61    n_layers: usize,
-62    n_heads: usize,
-63    hidden_dim: usize,
-64    activation: HiddenAct,
-65    max_position_embeddings: usize,
-66    initializer_range: f64,
-67    pad_token_id: usize,
-68    #[serde(default)]
-69    position_embedding_type: PositionEmbeddingType,
-70    #[serde(default)]
-71    use_cache: bool,
-72    model_type: Option<String>,
-73}
-74
-75impl Default for Config {
-76    fn default() -> Self {
-77        Self {
-78            vocab_size: 30522,
-79            dim: 768,
-80            n_layers: 12,
-81            n_heads: 12,
-82            hidden_dim: 3072,
-83            activation: HiddenAct::Gelu,
-84            max_position_embeddings: 512,
-85            initializer_range: 0.02,
-86            pad_token_id: 0,
-87            position_embedding_type: PositionEmbeddingType::Absolute,
-88            use_cache: true,
-89            model_type: Some("distilbert".to_string()),
-90        }
-91    }
-92}
-93
-94struct Embeddings {
-95    word_embeddings: Embedding,
-96    position_embeddings: Embedding,
-97    layer_norm: LayerNorm,
-98    span: tracing::Span,
-99}
-100
-101impl Embeddings {
-102    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-103        let word_embeddings =
-104            candle_nn::embedding(config.vocab_size, config.dim, vb.pp("word_embeddings"))?;
-105        let position_embeddings = candle_nn::embedding(
-106            config.max_position_embeddings,
-107            config.dim,
-108            vb.pp("position_embeddings"),
-109        )?;
-110        let layer_norm = layer_norm(config.dim, 1e-12, vb.pp("LayerNorm"))?;
-111        Ok(Self {
-112            word_embeddings,
-113            position_embeddings,
-114            layer_norm,
-115            span: tracing::span!(tracing::Level::TRACE, "embeddings"),
-116        })
-117    }
-118
-119    fn forward(&self, input_ids: &Tensor) -> Result<Tensor> {
-120        let _enter = self.span.enter();
-121        let (_bsize, seq_len) = input_ids.dims2()?;
-122        let input_embeddings = self.word_embeddings.forward(input_ids)?;
-123        let position_ids = (0..seq_len as u32).collect::<Vec<_>>();
-124        let position_ids = Tensor::new(&position_ids[..], input_ids.device())?;
-125        let embeddings =
-126            input_embeddings.broadcast_add(&self.position_embeddings.forward(&position_ids)?)?;
-127
-128        let embeddings = self.layer_norm.forward(&embeddings)?;
-129        Ok(embeddings)
-130    }
-131}
-132
-133struct MultiHeadSelfAttention {
-134    q_lin: Linear,
-135    k_lin: Linear,
-136    v_lin: Linear,
-137    out_lin: Linear,
-138    n_heads: usize,
-139    attention_head_size: usize,
-140    span: tracing::Span,
-141}
-142
-143impl MultiHeadSelfAttention {
-144    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-145        let attention_head_size = config.dim / config.n_heads;
-146        let all_head_size = config.n_heads * attention_head_size;
-147        let dim = config.dim;
-148        let q_lin = linear(dim, all_head_size, vb.pp("q_lin"))?;
-149        let v_lin = linear(dim, all_head_size, vb.pp("v_lin"))?;
-150        let k_lin = linear(dim, all_head_size, vb.pp("k_lin"))?;
-151        let out_lin = linear(all_head_size, dim, vb.pp("out_lin"))?;
-152        Ok(Self {
-153            q_lin,
-154            k_lin,
-155            v_lin,
-156            out_lin,
-157            n_heads: config.n_heads,
-158            attention_head_size,
-159            span: tracing::span!(tracing::Level::TRACE, "attention"),
-160        })
-161    }
-162}
-163
-164impl MultiHeadSelfAttention {
-165    fn forward(&self, hidden_states: &Tensor, attention_mask: &Tensor) -> Result<Tensor> {
-166        let _enter = self.span.enter();
-167        let (bs, q_length, _dim) = hidden_states.dims3()?;
-168
-169        let dim_per_head = self.attention_head_size;
-170        let q = self.q_lin.forward(hidden_states)?;
-171        let k = self.k_lin.forward(hidden_states)?;
-172        let v = self.v_lin.forward(hidden_states)?;
-173
-174        let q = q
-175            .reshape((bs, q_length, self.n_heads, dim_per_head))?
-176            .transpose(1, 2)?;
-177        let k = k
-178            .reshape((bs, q_length, self.n_heads, dim_per_head))?
-179            .transpose(1, 2)?;
-180        let v = v
-181            .reshape((bs, q_length, self.n_heads, dim_per_head))?
-182            .transpose(1, 2)?;
-183
-184        let q: Tensor = (q / (dim_per_head as f64).sqrt())?;
-185        let scores = q.matmul(&k.transpose(2, 3)?.contiguous()?)?;
-186        let mask = attention_mask.broadcast_as(scores.shape())?;
-187
-188        let scores = masked_fill(&scores.to_dtype(DType::F32)?, &mask, f32::NEG_INFINITY)?;
-189        let weights = candle_nn::ops::softmax(&scores, candle::D::Minus1)?;
-190
-191        let context = weights.matmul(&v.contiguous()?)?;
-192        let context = context
-193            .transpose(1, 2)?
-194            .reshape((bs, q_length, self.n_heads * dim_per_head))?
-195            .contiguous()?;
-196        let context = self.out_lin.forward(&context)?;
-197
-198        Ok(context)
-199    }
-200}
-201
-202#[allow(clippy::upper_case_acronyms)]
-203struct FFN {
-204    lin1: Linear,
-205    lin2: Linear,
-206    activation: HiddenActLayer,
-207    span: tracing::Span,
-208}
-209
-210impl FFN {
-211    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-212        let lin1 = linear(config.dim, config.hidden_dim, vb.pp("lin1"))?;
-213        let lin2 = linear(config.hidden_dim, config.dim, vb.pp("lin2"))?;
-214        Ok(Self {
-215            lin1,
-216            lin2,
-217            activation: HiddenActLayer::new(config.activation),
-218            span: tracing::span!(tracing::Level::TRACE, "ffn"),
-219        })
-220    }
-221}
-222
-223impl Module for FFN {
-224    fn forward(&self, hidden_states: &Tensor) -> Result<Tensor> {
-225        let _enter = self.span.enter();
-226        hidden_states
-227            .apply(&self.lin1)?
-228            .apply(&self.activation)?
-229            .apply(&self.lin2)
-230    }
-231}
-232
-233struct TransformerBlock {
-234    attention: MultiHeadSelfAttention,
-235    sa_layer_norm: LayerNorm,
-236    ffn: FFN,
-237    output_layer_norm: LayerNorm,
-238    span: tracing::Span,
-239}
-240
-241impl TransformerBlock {
-242    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-243        let attention = MultiHeadSelfAttention::load(vb.pp("attention"), config)?;
-244        let sa_layer_norm = layer_norm(config.dim, 1e-12, vb.pp("sa_layer_norm"))?;
-245        let ffn = FFN::load(vb.pp("ffn"), config)?;
-246        let output_layer_norm = layer_norm(config.dim, 1e-12, vb.pp("output_layer_norm"))?;
-247        Ok(Self {
-248            attention,
-249            sa_layer_norm,
-250            ffn,
-251            output_layer_norm,
-252            span: tracing::span!(tracing::Level::TRACE, "layer"),
-253        })
-254    }
-255}
-256
-257impl TransformerBlock {
-258    fn forward(&self, hidden_states: &Tensor, attention_mask: &Tensor) -> Result<Tensor> {
-259        let _enter = self.span.enter();
-260        let sa_output = self.attention.forward(hidden_states, attention_mask)?;
-261        // TODO: Support cross-attention?
-262        // https://github.com/huggingface/transformers/blob/6eedfa6dd15dc1e22a55ae036f681914e5a0d9a1/src/transformers/models/bert/modeling_bert.py#L523
-263        // TODO: Support something similar to `apply_chunking_to_forward`?
-264        let sa_output = sa_output.broadcast_add(hidden_states)?;
-265        let sa_output = self.sa_layer_norm.forward(&sa_output)?;
-266
-267        let ffn_output = self.ffn.forward(&sa_output)?;
-268        let ffn_output = (&ffn_output + sa_output)?;
-269        let output = self.output_layer_norm.forward(&ffn_output)?;
-270        Ok(output)
-271    }
-272}
-273
-274// https://github.com/huggingface/transformers/blob/6eedfa6dd15dc1e22a55ae036f681914e5a0d9a1/src/transformers/models/bert/modeling_bert.py#L556
-275struct Transformer {
-276    layers: Vec<TransformerBlock>,
-277    span: tracing::Span,
-278}
-279
-280impl Transformer {
-281    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-282        let layers = (0..config.n_layers)
-283            .map(|index| TransformerBlock::load(vb.pp(format!("layer.{index}")), config))
-284            .collect::<Result<Vec<_>>>()?;
-285        let span = tracing::span!(tracing::Level::TRACE, "encoder");
-286        Ok(Transformer { layers, span })
-287    }
-288}
-289
-290impl Transformer {
-291    fn forward(&self, hidden_states: &Tensor, attention_mask: &Tensor) -> Result<Tensor> {
-292        let _enter = self.span.enter();
-293        let mut hidden_states = hidden_states.clone();
-294        // Use a loop rather than a fold as it's easier to modify when adding debug/...
-295        for layer in self.layers.iter() {
-296            hidden_states = layer.forward(&hidden_states, attention_mask)?;
-297        }
-298        Ok(hidden_states)
-299    }
-300}
-301
-302pub struct DistilBertModel {
-303    embeddings: Embeddings,
-304    transformer: Transformer,
-305    pub device: Device,
-306    span: tracing::Span,
-307}
-308
-309impl DistilBertModel {
-310    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-311        let (embeddings, transformer) = match (
-312            Embeddings::load(vb.pp("embeddings"), config),
-313            Transformer::load(vb.pp("transformer"), config),
-314        ) {
-315            (Ok(embeddings), Ok(encoder)) => (embeddings, encoder),
-316            (Err(err), _) | (_, Err(err)) => {
-317                if let Some(model_type) = &config.model_type {
-318                    if let (Ok(embeddings), Ok(encoder)) = (
-319                        Embeddings::load(vb.pp(format!("{model_type}.embeddings")), config),
-320                        Transformer::load(vb.pp(format!("{model_type}.transformer")), config),
-321                    ) {
-322                        (embeddings, encoder)
-323                    } else {
-324                        return Err(err);
-325                    }
-326                } else {
-327                    return Err(err);
-328                }
-329            }
-330        };
-331        Ok(Self {
-332            embeddings,
-333            transformer,
-334            device: vb.device().clone(),
-335            span: tracing::span!(tracing::Level::TRACE, "model"),
-336        })
-337    }
-338
-339    pub fn forward(&self, input_ids: &Tensor, attention_mask: &Tensor) -> Result<Tensor> {
-340        let _enter = self.span.enter();
-341        let embedding_output = self.embeddings.forward(input_ids)?;
-342        let sequence_output = self
-343            .transformer
-344            .forward(&embedding_output, attention_mask)?;
-345        Ok(sequence_output)
-346    }
-347}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/efficientnet.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/efficientnet.rs.html deleted file mode 100644 index 013df73..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/efficientnet.rs.html +++ /dev/null @@ -1,336 +0,0 @@ -efficientnet.rs - source

candle_transformers/models/
efficientnet.rs

1//! Implementation of EfficientBert, an efficient variant of BERT for computer vision tasks.
-2//!
-3//! See:
-4//! - ["EfficientBERT: Progressively Searching Multilayer Perceptron Architectures for BERT"](https://arxiv.org/abs/2201.00462)
-5//!
-6use candle::{Context, Result, Tensor, D};
-7use candle_nn as nn;
-8use nn::{Module, VarBuilder};
-9
-10// Based on the Python version from torchvision.
-11// https://github.com/pytorch/vision/blob/0d75d9e5516f446c9c0ef93bd4ed9fea13992d06/torchvision/models/efficientnet.py#L47
-12#[derive(Debug, Clone, Copy)]
-13pub struct MBConvConfig {
-14    expand_ratio: f64,
-15    kernel: usize,
-16    stride: usize,
-17    input_channels: usize,
-18    out_channels: usize,
-19    num_layers: usize,
-20}
-21
-22fn make_divisible(v: f64, divisor: usize) -> usize {
-23    let min_value = divisor;
-24    let new_v = usize::max(
-25        min_value,
-26        (v + divisor as f64 * 0.5) as usize / divisor * divisor,
-27    );
-28    if (new_v as f64) < 0.9 * v {
-29        new_v + divisor
-30    } else {
-31        new_v
-32    }
-33}
-34
-35fn bneck_confs(width_mult: f64, depth_mult: f64) -> Vec<MBConvConfig> {
-36    let bneck_conf = |e, k, s, i, o, n| {
-37        let input_channels = make_divisible(i as f64 * width_mult, 8);
-38        let out_channels = make_divisible(o as f64 * width_mult, 8);
-39        let num_layers = (n as f64 * depth_mult).ceil() as usize;
-40        MBConvConfig {
-41            expand_ratio: e,
-42            kernel: k,
-43            stride: s,
-44            input_channels,
-45            out_channels,
-46            num_layers,
-47        }
-48    };
-49    vec![
-50        bneck_conf(1., 3, 1, 32, 16, 1),
-51        bneck_conf(6., 3, 2, 16, 24, 2),
-52        bneck_conf(6., 5, 2, 24, 40, 2),
-53        bneck_conf(6., 3, 2, 40, 80, 3),
-54        bneck_conf(6., 5, 1, 80, 112, 3),
-55        bneck_conf(6., 5, 2, 112, 192, 4),
-56        bneck_conf(6., 3, 1, 192, 320, 1),
-57    ]
-58}
-59
-60impl MBConvConfig {
-61    pub fn b0() -> Vec<Self> {
-62        bneck_confs(1.0, 1.0)
-63    }
-64    pub fn b1() -> Vec<Self> {
-65        bneck_confs(1.0, 1.1)
-66    }
-67    pub fn b2() -> Vec<Self> {
-68        bneck_confs(1.1, 1.2)
-69    }
-70    pub fn b3() -> Vec<Self> {
-71        bneck_confs(1.2, 1.4)
-72    }
-73    pub fn b4() -> Vec<Self> {
-74        bneck_confs(1.4, 1.8)
-75    }
-76    pub fn b5() -> Vec<Self> {
-77        bneck_confs(1.6, 2.2)
-78    }
-79    pub fn b6() -> Vec<Self> {
-80        bneck_confs(1.8, 2.6)
-81    }
-82    pub fn b7() -> Vec<Self> {
-83        bneck_confs(2.0, 3.1)
-84    }
-85}
-86
-87/// Conv2D with same padding.
-88#[derive(Debug)]
-89struct Conv2DSame {
-90    conv2d: nn::Conv2d,
-91    s: usize,
-92    k: usize,
-93}
-94
-95impl Conv2DSame {
-96    fn new(
-97        vb: VarBuilder,
-98        i: usize,
-99        o: usize,
-100        k: usize,
-101        stride: usize,
-102        groups: usize,
-103        bias: bool,
-104    ) -> Result<Self> {
-105        let conv_config = nn::Conv2dConfig {
-106            stride,
-107            groups,
-108            ..Default::default()
-109        };
-110        let conv2d = if bias {
-111            nn::conv2d(i, o, k, conv_config, vb)?
-112        } else {
-113            nn::conv2d_no_bias(i, o, k, conv_config, vb)?
-114        };
-115        Ok(Self {
-116            conv2d,
-117            s: stride,
-118            k,
-119        })
-120    }
-121}
-122
-123impl Module for Conv2DSame {
-124    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-125        let s = self.s;
-126        let k = self.k;
-127        let (_, _, ih, iw) = xs.dims4()?;
-128        let oh = ih.div_ceil(s);
-129        let ow = iw.div_ceil(s);
-130        let pad_h = usize::max((oh - 1) * s + k - ih, 0);
-131        let pad_w = usize::max((ow - 1) * s + k - iw, 0);
-132        if pad_h > 0 || pad_w > 0 {
-133            let xs = xs.pad_with_zeros(2, pad_h / 2, pad_h - pad_h / 2)?;
-134            let xs = xs.pad_with_zeros(3, pad_w / 2, pad_w - pad_w / 2)?;
-135            self.conv2d.forward(&xs)
-136        } else {
-137            self.conv2d.forward(xs)
-138        }
-139    }
-140}
-141
-142#[derive(Debug)]
-143struct ConvNormActivation {
-144    conv2d: Conv2DSame,
-145    bn2d: nn::BatchNorm,
-146    activation: bool,
-147}
-148
-149impl ConvNormActivation {
-150    fn new(
-151        vb: VarBuilder,
-152        i: usize,
-153        o: usize,
-154        k: usize,
-155        stride: usize,
-156        groups: usize,
-157    ) -> Result<Self> {
-158        let conv2d = Conv2DSame::new(vb.pp("0"), i, o, k, stride, groups, false)?;
-159        let bn2d = nn::batch_norm(o, 1e-3, vb.pp("1"))?;
-160        Ok(Self {
-161            conv2d,
-162            bn2d,
-163            activation: true,
-164        })
-165    }
-166
-167    fn no_activation(self) -> Self {
-168        Self {
-169            activation: false,
-170            ..self
-171        }
-172    }
-173}
-174
-175impl Module for ConvNormActivation {
-176    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-177        let xs = self.conv2d.forward(xs)?.apply_t(&self.bn2d, false)?;
-178        if self.activation {
-179            swish(&xs)
-180        } else {
-181            Ok(xs)
-182        }
-183    }
-184}
-185
-186#[derive(Debug)]
-187struct SqueezeExcitation {
-188    fc1: Conv2DSame,
-189    fc2: Conv2DSame,
-190}
-191
-192impl SqueezeExcitation {
-193    fn new(vb: VarBuilder, in_channels: usize, squeeze_channels: usize) -> Result<Self> {
-194        let fc1 = Conv2DSame::new(vb.pp("fc1"), in_channels, squeeze_channels, 1, 1, 1, true)?;
-195        let fc2 = Conv2DSame::new(vb.pp("fc2"), squeeze_channels, in_channels, 1, 1, 1, true)?;
-196        Ok(Self { fc1, fc2 })
-197    }
-198}
-199
-200impl Module for SqueezeExcitation {
-201    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-202        let residual = xs;
-203        // equivalent to adaptive_avg_pool2d([1, 1])
-204        let xs = xs.mean_keepdim(D::Minus2)?.mean_keepdim(D::Minus1)?;
-205        let xs = self.fc1.forward(&xs)?;
-206        let xs = swish(&xs)?;
-207        let xs = self.fc2.forward(&xs)?;
-208        let xs = nn::ops::sigmoid(&xs)?;
-209        residual.broadcast_mul(&xs)
-210    }
-211}
-212
-213#[derive(Debug)]
-214struct MBConv {
-215    expand_cna: Option<ConvNormActivation>,
-216    depthwise_cna: ConvNormActivation,
-217    squeeze_excitation: SqueezeExcitation,
-218    project_cna: ConvNormActivation,
-219    config: MBConvConfig,
-220}
-221
-222impl MBConv {
-223    fn new(vb: VarBuilder, c: MBConvConfig) -> Result<Self> {
-224        let vb = vb.pp("block");
-225        let exp = make_divisible(c.input_channels as f64 * c.expand_ratio, 8);
-226        let expand_cna = if exp != c.input_channels {
-227            Some(ConvNormActivation::new(
-228                vb.pp("0"),
-229                c.input_channels,
-230                exp,
-231                1,
-232                1,
-233                1,
-234            )?)
-235        } else {
-236            None
-237        };
-238        let start_index = if expand_cna.is_some() { 1 } else { 0 };
-239        let depthwise_cna =
-240            ConvNormActivation::new(vb.pp(start_index), exp, exp, c.kernel, c.stride, exp)?;
-241        let squeeze_channels = usize::max(1, c.input_channels / 4);
-242        let squeeze_excitation =
-243            SqueezeExcitation::new(vb.pp(start_index + 1), exp, squeeze_channels)?;
-244        let project_cna =
-245            ConvNormActivation::new(vb.pp(start_index + 2), exp, c.out_channels, 1, 1, 1)?
-246                .no_activation();
-247        Ok(Self {
-248            expand_cna,
-249            depthwise_cna,
-250            squeeze_excitation,
-251            project_cna,
-252            config: c,
-253        })
-254    }
-255}
-256
-257impl Module for MBConv {
-258    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-259        let use_res_connect =
-260            self.config.stride == 1 && self.config.input_channels == self.config.out_channels;
-261        let ys = match &self.expand_cna {
-262            Some(expand_cna) => expand_cna.forward(xs)?,
-263            None => xs.clone(),
-264        };
-265        let ys = self.depthwise_cna.forward(&ys)?;
-266        let ys = self.squeeze_excitation.forward(&ys)?;
-267        let ys = self.project_cna.forward(&ys)?;
-268        if use_res_connect {
-269            ys + xs
-270        } else {
-271            Ok(ys)
-272        }
-273    }
-274}
-275
-276fn swish(s: &Tensor) -> Result<Tensor> {
-277    s * nn::ops::sigmoid(s)?
-278}
-279
-280#[derive(Debug)]
-281pub struct EfficientNet {
-282    init_cna: ConvNormActivation,
-283    blocks: Vec<MBConv>,
-284    final_cna: ConvNormActivation,
-285    classifier: nn::Linear,
-286}
-287
-288impl EfficientNet {
-289    pub fn new(p: VarBuilder, configs: Vec<MBConvConfig>, nclasses: usize) -> Result<Self> {
-290        let f_p = p.pp("features");
-291        let first_in_c = configs[0].input_channels;
-292        let last_out_c = configs.last().context("no last")?.out_channels;
-293        let final_out_c = 4 * last_out_c;
-294        let init_cna = ConvNormActivation::new(f_p.pp(0), 3, first_in_c, 3, 2, 1)?;
-295        let nconfigs = configs.len();
-296        let mut blocks = vec![];
-297        for (index, cnf) in configs.into_iter().enumerate() {
-298            let f_p = f_p.pp(index + 1);
-299            for r_index in 0..cnf.num_layers {
-300                let cnf = if r_index == 0 {
-301                    cnf
-302                } else {
-303                    MBConvConfig {
-304                        input_channels: cnf.out_channels,
-305                        stride: 1,
-306                        ..cnf
-307                    }
-308                };
-309                blocks.push(MBConv::new(f_p.pp(r_index), cnf)?)
-310            }
-311        }
-312        let final_cna =
-313            ConvNormActivation::new(f_p.pp(nconfigs + 1), last_out_c, final_out_c, 1, 1, 1)?;
-314        let classifier = nn::linear(final_out_c, nclasses, p.pp("classifier.1"))?;
-315        Ok(Self {
-316            init_cna,
-317            blocks,
-318            final_cna,
-319            classifier,
-320        })
-321    }
-322}
-323
-324impl Module for EfficientNet {
-325    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-326        let mut xs = self.init_cna.forward(xs)?;
-327        for block in self.blocks.iter() {
-328            xs = block.forward(&xs)?
-329        }
-330        let xs = self.final_cna.forward(&xs)?;
-331        // Equivalent to adaptive_avg_pool2d([1, 1]) -> squeeze(-1) -> squeeze(-1)
-332        let xs = xs.mean(D::Minus1)?.mean(D::Minus1)?;
-333        self.classifier.forward(&xs)
-334    }
-335}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/efficientvit.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/efficientvit.rs.html deleted file mode 100644 index eba29ad..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/efficientvit.rs.html +++ /dev/null @@ -1,491 +0,0 @@ -efficientvit.rs - source

candle_transformers/models/
efficientvit.rs

1//! EfficientViT (MSRA) inference implementation based on timm.
-2//!
-3//! This crate provides an implementation of the EfficientViT model from Microsoft Research Asia
-4//! for efficient image classification. The model uses cascaded group attention modules
-5//! to achieve strong performance while maintaining low memory usage.
-6//!
-7//! The model was originally described in the paper:
-8//! ["EfficientViT: Memory Efficient Vision Transformer with Cascaded Group Attention"](https://arxiv.org/abs/2305.07027)
-9//!
-10//! This implementation is based on the reference implementation from
-11//! [pytorch-image-models](https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/efficientvit_msra.py).
-12//!
-13//! # Example Usage
-14//!
-15//! This candle implementation uses a pre-trained EfficientViT (from Microsoft Research Asia) network for inference.
-16//! The classification head has been trained on the ImageNet dataset and returns the probabilities for the top-5 classes.
-17//!
-18//!
-19//! ```bash
-20//! cargo run
-21//!   --example efficientvit \
-22//!   --release -- \
-23//!   --image candle-examples/examples/yolo-v8/assets/bike.jpg --which m1
-24//!
-25//! > loaded image Tensor[dims 3, 224, 224; f32]
-26//! > model built
-27//! > mountain bike, all-terrain bike, off-roader: 69.80%
-28//! > unicycle, monocycle     : 13.03%
-29//! > bicycle-built-for-two, tandem bicycle, tandem: 9.28%
-30//! > crash helmet            : 2.25%
-31//! > alp                     : 0.46%
-32//! ```
-33//!
-34//! <div align=center>
-35//!   <img src="https://github.com/huggingface/candle/raw/main/candle-examples/examples/yolo-v8/assets/bike.jpg" alt="" width=640>
-36//! </div>
-37//!
-38use candle::{Result, Tensor, D};
-39use candle_nn::{
-40    batch_norm, conv2d, conv2d_no_bias, linear, ops::sigmoid, ops::softmax, Conv2dConfig, Func,
-41    VarBuilder,
-42};
-43
-44#[derive(Clone)]
-45pub struct Config {
-46    channels: [usize; 3],
-47    blocks: [usize; 3],
-48    heads: [usize; 3],
-49    kernels: [usize; 4],
-50}
-51
-52impl Config {
-53    pub fn m0() -> Self {
-54        Self {
-55            channels: [64, 128, 192],
-56            blocks: [1, 2, 3],
-57            heads: [4, 4, 4],
-58            kernels: [5, 5, 5, 5],
-59        }
-60    }
-61    pub fn m1() -> Self {
-62        Self {
-63            channels: [128, 144, 192],
-64            blocks: [1, 2, 3],
-65            heads: [2, 3, 3],
-66            kernels: [7, 5, 3, 3],
-67        }
-68    }
-69    pub fn m2() -> Self {
-70        Self {
-71            channels: [128, 192, 224],
-72            blocks: [1, 2, 3],
-73            heads: [4, 3, 2],
-74            kernels: [7, 5, 3, 3],
-75        }
-76    }
-77    pub fn m3() -> Self {
-78        Self {
-79            channels: [128, 240, 320],
-80            blocks: [1, 2, 3],
-81            heads: [4, 3, 4],
-82            kernels: [5, 5, 5, 5],
-83        }
-84    }
-85    pub fn m4() -> Self {
-86        Self {
-87            channels: [128, 256, 384],
-88            blocks: [1, 2, 3],
-89            heads: [4, 4, 4],
-90            kernels: [7, 5, 3, 3],
-91        }
-92    }
-93
-94    pub fn m5() -> Self {
-95        Self {
-96            channels: [192, 288, 384],
-97            blocks: [1, 3, 4],
-98            heads: [3, 3, 4],
-99            kernels: [7, 5, 3, 3],
-100        }
-101    }
-102}
-103
-104fn efficientvit_stemblock(
-105    in_channels: usize,
-106    out_channels: usize,
-107    vb: VarBuilder,
-108) -> Result<Func<'static>> {
-109    let conv2d_cfg = Conv2dConfig {
-110        stride: 2,
-111        padding: 1,
-112        ..Default::default()
-113    };
-114
-115    let bn = batch_norm(out_channels, 1e-5, vb.pp("bn"))?;
-116    let conv = conv2d_no_bias(in_channels, out_channels, 3, conv2d_cfg, vb.pp("conv"))?;
-117
-118    Ok(Func::new(move |xs| {
-119        let xs = xs.apply(&conv)?.apply_t(&bn, false)?;
-120        Ok(xs)
-121    }))
-122}
-123
-124fn efficientvit_stem(dim: usize, vb: VarBuilder) -> Result<Func<'static>> {
-125    let conv1 = efficientvit_stemblock(3, dim / 8, vb.pp("conv1"))?;
-126    let conv2 = efficientvit_stemblock(dim / 8, dim / 4, vb.pp("conv2"))?;
-127    let conv3 = efficientvit_stemblock(dim / 4, dim / 2, vb.pp("conv3"))?;
-128    let conv4 = efficientvit_stemblock(dim / 2, dim, vb.pp("conv4"))?;
-129
-130    Ok(Func::new(move |xs| {
-131        let xs = xs
-132            .apply(&conv1)?
-133            .relu()?
-134            .apply(&conv2)?
-135            .relu()?
-136            .apply(&conv3)?
-137            .relu()?
-138            .apply(&conv4)?;
-139
-140        Ok(xs)
-141    }))
-142}
-143
-144fn depthwise_conv(
-145    channels: usize,
-146    kernel: usize,
-147    stride: usize,
-148    padding: usize,
-149    vb: VarBuilder,
-150) -> Result<Func<'static>> {
-151    let conv2d_cfg = Conv2dConfig {
-152        stride,
-153        padding,
-154        groups: channels,
-155        ..Default::default()
-156    };
-157
-158    let bn = batch_norm(channels, 1e-5, vb.pp("bn"))?;
-159    let conv = conv2d_no_bias(channels, channels, kernel, conv2d_cfg, vb.pp("conv"))?;
-160
-161    Ok(Func::new(move |xs| xs.apply(&conv)?.apply_t(&bn, false)))
-162}
-163
-164fn pointwise_conv(
-165    in_channels: usize,
-166    out_channels: usize,
-167    vb: VarBuilder,
-168) -> Result<Func<'static>> {
-169    let conv2d_cfg = Conv2dConfig {
-170        ..Default::default()
-171    };
-172
-173    let bn = batch_norm(out_channels, 1e-5, vb.pp("bn"))?;
-174    let conv = conv2d_no_bias(in_channels, out_channels, 1, conv2d_cfg, vb.pp("conv"))?;
-175
-176    Ok(Func::new(move |xs| xs.apply(&conv)?.apply_t(&bn, false)))
-177}
-178
-179fn conv_mlp(in_channels: usize, out_channels: usize, vb: VarBuilder) -> Result<Func<'static>> {
-180    let pw1 = pointwise_conv(in_channels, out_channels, vb.pp("pw1"))?;
-181    let pw2 = pointwise_conv(out_channels, in_channels, vb.pp("pw2"))?;
-182
-183    Ok(Func::new(move |xs| {
-184        let xs = xs.apply(&pw1)?.relu()?.apply(&pw2)?;
-185        Ok(xs)
-186    }))
-187}
-188
-189// Fixed per-stage resolutions
-190const RESOLUTIONS: [usize; 3] = [14, 7, 4];
-191
-192// Attention block
-193fn efficientvit_attn(
-194    cfg: &Config,
-195    stage: usize,
-196    in_channels: usize,
-197    vb: VarBuilder,
-198) -> Result<Func<'static>> {
-199    let cga = cascaded_group_attn(cfg, stage, in_channels, vb)?;
-200
-201    Ok(Func::new(move |xs| {
-202        let mut xs = xs.clone();
-203
-204        let (b, c, h, w) = xs.dims4()?;
-205        let win_res = 7; // Fixed window resolution
-206        let pad_b = (win_res - h % win_res) % win_res;
-207        let pad_r = (win_res - w % win_res) % win_res;
-208        let ph = h + pad_b;
-209        let pw = w + pad_r;
-210        let nh = ph / win_res;
-211        let nw = pw / win_res;
-212
-213        if RESOLUTIONS[stage] > win_res {
-214            xs = xs.permute((0, 2, 3, 1))?;
-215            xs = xs.pad_with_zeros(D::Minus1, 0, pad_r)?;
-216            xs = xs.pad_with_zeros(D::Minus2, 0, pad_b)?;
-217            xs = xs
-218                .reshape((b, nh, win_res, nw, win_res, c))?
-219                .transpose(2, 3)?;
-220            xs = xs
-221                .reshape((b * nh * nw, win_res, win_res, c))?
-222                .permute((0, 3, 1, 2))?;
-223        }
-224
-225        xs = xs.apply(&cga)?;
-226
-227        if RESOLUTIONS[stage] > win_res {
-228            xs = xs
-229                .permute((0, 2, 3, 1))?
-230                .reshape((b, nh, nw, win_res, win_res, c))?;
-231            xs = xs.transpose(2, 3)?.reshape((b, ph, pw, c))?;
-232            xs = xs.permute((0, 3, 1, 2))?;
-233        }
-234
-235        Ok(xs)
-236    }))
-237}
-238
-239// Cascaded group attention
-240fn cascaded_group_attn(
-241    cfg: &Config,
-242    stage: usize,
-243    in_channels: usize,
-244    vb: VarBuilder,
-245) -> Result<Func<'static>> {
-246    let heads = cfg.heads[stage];
-247    let key_dim = 16;
-248
-249    let val_dim = in_channels / heads;
-250
-251    let scale = (key_dim as f64).powf(-0.5);
-252
-253    let mut dws = Vec::with_capacity(heads);
-254    let mut qkvs = Vec::with_capacity(heads);
-255    for i in 0..heads {
-256        dws.push(depthwise_conv(
-257            key_dim,
-258            cfg.kernels[i],
-259            1,
-260            cfg.kernels[i] / 2,
-261            vb.pp(format!("dws.{i}")),
-262        )?);
-263
-264        qkvs.push(pointwise_conv(
-265            in_channels / heads,
-266            in_channels / heads + 2 * key_dim,
-267            vb.pp(format!("qkvs.{i}")),
-268        )?);
-269    }
-270    let proj = pointwise_conv(in_channels, in_channels, vb.pp("proj.1"))?;
-271
-272    Ok(Func::new(move |xs| {
-273        let (b, _, h, w) = xs.dims4()?;
-274        let feats_in = xs.chunk(heads, 1)?;
-275        let mut feats_out = Vec::with_capacity(heads);
-276        let mut feat = feats_in[0].clone();
-277
-278        for i in 0..heads {
-279            if i > 0 {
-280                feat = (&feat + &feats_in[i])?;
-281            }
-282            feat = feat.apply(&qkvs[i])?;
-283            let res = feat.reshape((b, (), h, w))?;
-284            let q = res.narrow(1, 0, key_dim)?;
-285            let k = res.narrow(1, key_dim, key_dim)?;
-286            let v = res.narrow(1, 2 * key_dim, val_dim)?;
-287
-288            let q = q.apply(&dws[i])?;
-289
-290            let q = q.flatten_from(2)?;
-291            let k = k.flatten_from(2)?;
-292            let v = v.flatten_from(2)?;
-293            let q = (q * scale)?;
-294
-295            let att = q.transpose(D::Minus2, D::Minus1)?.matmul(&k)?;
-296            let att = softmax(&att, D::Minus1)?;
-297            feat = v.matmul(&att.transpose(D::Minus2, D::Minus1)?)?;
-298            feat = feat.reshape((b, val_dim, h, w))?;
-299            feats_out.push(feat.clone());
-300        }
-301
-302        let xs = Tensor::cat(&feats_out, 1)?;
-303        let xs = xs.relu()?.apply(&proj)?;
-304
-305        Ok(xs)
-306    }))
-307}
-308
-309// Used by the downsampling layer
-310fn squeeze_and_excitation(
-311    in_channels: usize,
-312    squeeze_channels: usize,
-313    vb: VarBuilder,
-314) -> Result<Func<'static>> {
-315    let conv2d_cfg = Conv2dConfig {
-316        ..Default::default()
-317    };
-318    let fc1 = conv2d(in_channels, squeeze_channels, 1, conv2d_cfg, vb.pp("fc1"))?;
-319    let fc2 = conv2d(squeeze_channels, in_channels, 1, conv2d_cfg, vb.pp("fc2"))?;
-320
-321    Ok(Func::new(move |xs| {
-322        let residual = xs;
-323        let xs = xs.mean_keepdim(D::Minus2)?.mean_keepdim(D::Minus1)?;
-324        let xs = sigmoid(&xs.apply(&fc1)?.relu()?.apply(&fc2)?)?;
-325
-326        residual.broadcast_mul(&xs)
-327    }))
-328}
-329
-330// Used by the downsampling layer
-331fn patchmerge(in_channels: usize, out_channels: usize, vb: VarBuilder) -> Result<Func<'static>> {
-332    let dim = in_channels;
-333    let hid_dim = in_channels * 4;
-334    let conv1 = pointwise_conv(dim, hid_dim, vb.pp("conv1"))?;
-335    let conv2 = depthwise_conv(hid_dim, 3, 2, 1, vb.pp("conv2"))?;
-336    let conv3 = pointwise_conv(hid_dim, out_channels, vb.pp("conv3"))?;
-337    let se = squeeze_and_excitation(hid_dim, hid_dim / 4, vb.pp("se"))?;
-338    Ok(Func::new(move |xs| {
-339        let xs = xs
-340            .apply(&conv1)?
-341            .relu()?
-342            .apply(&conv2)?
-343            .relu()?
-344            .apply(&se)?
-345            .apply(&conv3)?;
-346        Ok(xs)
-347    }))
-348}
-349
-350// Used by the downsampling layer
-351fn res(dim: usize, vb: VarBuilder) -> Result<Func<'static>> {
-352    let dw = depthwise_conv(dim, 3, 1, 1, vb.pp("0.m"))?;
-353    let mlp = conv_mlp(dim, dim * 2, vb.pp("1.m"))?;
-354    Ok(Func::new(move |xs| {
-355        let mut xs = xs.clone();
-356        xs = (&xs + &xs.apply(&dw)?)?;
-357        xs = (&xs + &xs.apply(&mlp)?)?;
-358        Ok(xs)
-359    }))
-360}
-361
-362// Downsampling
-363fn efficientvit_downsample(
-364    in_channels: usize,
-365    out_channels: usize,
-366    vb: VarBuilder,
-367) -> Result<Func<'static>> {
-368    let res1 = res(in_channels, vb.pp("res1"))?;
-369    let res2 = res(out_channels, vb.pp("res2"))?;
-370    let patchmerge = patchmerge(in_channels, out_channels, vb.pp("patchmerge"))?;
-371    Ok(Func::new(move |xs| {
-372        let xs = xs.apply(&res1)?.apply(&patchmerge)?.apply(&res2)?;
-373        Ok(xs)
-374    }))
-375}
-376
-377fn efficientvit_block(
-378    cfg: &Config,
-379    stage: usize,
-380    dim: usize,
-381    vb: VarBuilder,
-382) -> Result<Func<'static>> {
-383    let dw0 = depthwise_conv(dim, 3, 1, 1, vb.pp("dw0.m"))?;
-384    let dw1 = depthwise_conv(dim, 3, 1, 1, vb.pp("dw1.m"))?;
-385    let ffn0 = conv_mlp(dim, dim * 2, vb.pp("ffn0.m"))?;
-386    let ffn1 = conv_mlp(dim, dim * 2, vb.pp("ffn1.m"))?;
-387    let attn = efficientvit_attn(cfg, stage, dim, vb.pp("mixer.m.attn"))?;
-388    Ok(Func::new(move |xs| {
-389        let mut xs = xs.clone();
-390        xs = (&xs + &xs.apply(&dw0)?)?;
-391        xs = (&xs + &xs.apply(&ffn0)?)?;
-392        xs = (&xs + &xs.apply(&attn)?)?;
-393        xs = (&xs + &xs.apply(&dw1)?)?;
-394        xs = (&xs + &xs.apply(&ffn1)?)?;
-395        Ok(xs)
-396    }))
-397}
-398
-399// Each stage is made of blocks. There is a downsampling layer between stages.
-400fn efficientvit_stage(cfg: &Config, stage: usize, vb: VarBuilder) -> Result<Func<'static>> {
-401    let nblocks = cfg.blocks[stage];
-402    let mut blocks = Vec::with_capacity(nblocks + 1);
-403
-404    let in_channels = if stage > 0 {
-405        cfg.channels[stage - 1]
-406    } else {
-407        cfg.channels[0]
-408    };
-409    let out_channels = cfg.channels[stage];
-410
-411    if stage > 0 {
-412        blocks.push(efficientvit_downsample(
-413            in_channels,
-414            out_channels,
-415            vb.pp("downsample"),
-416        )?);
-417    }
-418
-419    for i in 0..nblocks {
-420        blocks.push(efficientvit_block(
-421            cfg,
-422            stage,
-423            out_channels,
-424            vb.pp(format!("blocks.{i}")),
-425        )?);
-426    }
-427
-428    Ok(Func::new(move |xs| {
-429        let mut xs = xs.clone();
-430        for block in blocks.iter() {
-431            xs = xs.apply(block)?
-432        }
-433        Ok(xs)
-434    }))
-435}
-436
-437// Classification head.
-438fn efficientvit_head(outputs: usize, nclasses: usize, vb: VarBuilder) -> Result<Func<'static>> {
-439    let norm = batch_norm(outputs, 1e-6, vb.pp("bn"))?;
-440    let linear = linear(outputs, nclasses, vb.pp("linear"))?;
-441    Ok(Func::new(move |xs| {
-442        xs.apply_t(&norm, false)?.apply(&linear)
-443    }))
-444}
-445
-446// Build a efficientvit model for a given configuration.
-447fn efficientvit_model(
-448    config: &Config,
-449    nclasses: Option<usize>,
-450    vb: VarBuilder,
-451) -> Result<Func<'static>> {
-452    let cls = match nclasses {
-453        None => None,
-454        Some(nclasses) => {
-455            let outputs = config.channels[2];
-456            let head = efficientvit_head(outputs, nclasses, vb.pp("head"))?;
-457            Some(head)
-458        }
-459    };
-460
-461    let stem_dim = config.channels[0];
-462    let stem = efficientvit_stem(stem_dim, vb.pp("patch_embed"))?;
-463
-464    let vb = vb.pp("stages");
-465    let stage1 = efficientvit_stage(config, 0, vb.pp(0))?;
-466    let stage2 = efficientvit_stage(config, 1, vb.pp(1))?;
-467    let stage3 = efficientvit_stage(config, 2, vb.pp(2))?;
-468
-469    Ok(Func::new(move |xs| {
-470        let xs = xs
-471            .apply(&stem)?
-472            .apply(&stage1)?
-473            .apply(&stage2)?
-474            .apply(&stage3)?
-475            .mean(D::Minus2)?
-476            .mean(D::Minus1)?;
-477        match &cls {
-478            None => Ok(xs),
-479            Some(cls) => xs.apply(cls),
-480        }
-481    }))
-482}
-483
-484pub fn efficientvit(cfg: &Config, nclasses: usize, vb: VarBuilder) -> Result<Func<'static>> {
-485    efficientvit_model(cfg, Some(nclasses), vb)
-486}
-487
-488pub fn efficientvit_no_final_layer(cfg: &Config, vb: VarBuilder) -> Result<Func<'static>> {
-489    efficientvit_model(cfg, None, vb)
-490}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/encodec.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/encodec.rs.html deleted file mode 100644 index 0cc9a72..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/encodec.rs.html +++ /dev/null @@ -1,780 +0,0 @@ -encodec.rs - source

candle_transformers/models/
encodec.rs

1//! EnCodec neural audio codec based on the Encodec implementation.
-2//!
-3//! See ["High Fidelity Neural Audio Compression"](https://arxiv.org/abs/2210.13438)
-4//!
-5//! Based on implementation from [huggingface/transformers](https://github.com/huggingface/transformers/blob/main/src/transformers/models/encodec/modeling_encodec.py)
-6
-7use candle::{DType, IndexOp, Layout, Module, Result, Shape, Tensor, D};
-8use candle_nn::{conv1d, Conv1d, ConvTranspose1d, VarBuilder};
-9
-10// Encodec Model
-11// https://github.com/huggingface/transformers/blob/main/src/transformers/models/encodec/modeling_encodec.py
-12
-13#[derive(Debug, Copy, Clone, PartialEq, Eq, serde::Deserialize)]
-14pub enum NormType {
-15    WeightNorm,
-16    TimeGroupNorm,
-17    None,
-18}
-19
-20#[derive(Debug, Copy, Clone, PartialEq, Eq, serde::Deserialize)]
-21pub enum PadMode {
-22    Constant,
-23    Reflect,
-24    Replicate,
-25}
-26
-27#[derive(Debug, Clone, PartialEq, serde::Deserialize)]
-28pub struct Config {
-29    pub target_bandwidths: Vec<f64>,
-30    pub sampling_rate: usize,
-31    pub audio_channels: usize,
-32    pub normalize: bool,
-33    pub chunk_length_s: Option<usize>,
-34    pub overlap: Option<usize>,
-35    pub hidden_size: usize,
-36    pub num_filters: usize,
-37    pub num_residual_layers: usize,
-38    pub upsampling_ratios: Vec<usize>,
-39    pub norm_type: NormType,
-40    pub kernel_size: usize,
-41    pub last_kernel_size: usize,
-42    pub residual_kernel_size: usize,
-43    pub dilation_growth_rate: usize,
-44    pub use_causal_conv: bool,
-45    pub pad_mode: PadMode,
-46    pub compress: usize,
-47    pub num_lstm_layers: usize,
-48    pub trim_right_ratio: f64,
-49    pub codebook_size: usize,
-50    pub codebook_dim: Option<usize>,
-51    pub use_conv_shortcut: bool,
-52}
-53
-54impl Default for Config {
-55    fn default() -> Self {
-56        Self {
-57            target_bandwidths: vec![1.5, 3.0, 6.0, 12.0, 24.0],
-58            sampling_rate: 24_000,
-59            audio_channels: 1,
-60            normalize: false,
-61            chunk_length_s: None,
-62            overlap: None,
-63            hidden_size: 128,
-64            num_filters: 32,
-65            num_residual_layers: 1,
-66            upsampling_ratios: vec![8, 5, 4, 2],
-67            norm_type: NormType::WeightNorm,
-68            kernel_size: 7,
-69            last_kernel_size: 7,
-70            residual_kernel_size: 3,
-71            dilation_growth_rate: 2,
-72            use_causal_conv: true,
-73            // This should be PadMode::Reflect which is currently unsupported in candle.
-74            pad_mode: PadMode::Replicate,
-75            compress: 2,
-76            num_lstm_layers: 2,
-77            trim_right_ratio: 1.0,
-78            codebook_size: 1024,
-79            codebook_dim: None,
-80            use_conv_shortcut: true,
-81        }
-82    }
-83}
-84
-85impl Config {
-86    fn codebook_dim(&self) -> usize {
-87        self.codebook_dim.unwrap_or(self.hidden_size)
-88    }
-89
-90    fn frame_rate(&self) -> usize {
-91        let hop_length: usize = self.upsampling_ratios.iter().product();
-92        self.sampling_rate.div_ceil(hop_length)
-93    }
-94
-95    fn num_quantizers(&self) -> usize {
-96        let num = 1000f64
-97            * self
-98                .target_bandwidths
-99                .last()
-100                .expect("empty target_bandwidths");
-101        (num as usize) / (self.frame_rate() * 10)
-102    }
-103}
-104
-105fn get_extra_padding_for_conv1d(
-106    xs: &Tensor,
-107    k_size: usize,
-108    stride: usize,
-109    padding_total: usize,
-110) -> Result<usize> {
-111    let len = xs.dim(D::Minus1)?;
-112    let n_frames = (len + padding_total).saturating_sub(k_size) as f64 / stride as f64 + 1.0;
-113    let ideal_len =
-114        ((n_frames.ceil() as usize - 1) * stride + k_size).saturating_sub(padding_total);
-115    Ok(ideal_len.saturating_sub(len))
-116}
-117
-118fn pad1d(xs: &Tensor, pad_l: usize, pad_r: usize, mode: PadMode) -> Result<Tensor> {
-119    match mode {
-120        PadMode::Constant => xs.pad_with_zeros(D::Minus1, pad_l, pad_r),
-121        PadMode::Reflect => candle::bail!("pad-mode 'reflect' is not supported"),
-122        PadMode::Replicate => xs.pad_with_same(D::Minus1, pad_l, pad_r),
-123    }
-124}
-125
-126// Applies weight norm for inference by recomputing the weight tensor. This
-127// does not apply to training.
-128// https://pytorch.org/docs/stable/generated/torch.nn.utils.weight_norm.html
-129pub fn conv1d_weight_norm(
-130    in_c: usize,
-131    out_c: usize,
-132    kernel_size: usize,
-133    config: candle_nn::Conv1dConfig,
-134    vb: VarBuilder,
-135) -> Result<Conv1d> {
-136    let weight_g = vb.get((out_c, 1, 1), "weight_g")?;
-137    let weight_v = vb.get((out_c, in_c, kernel_size), "weight_v")?;
-138    let norm_v = weight_v.sqr()?.sum_keepdim((1, 2))?.sqrt()?;
-139    let weight = weight_v.broadcast_mul(&weight_g)?.broadcast_div(&norm_v)?;
-140    let bias = vb.get(out_c, "bias")?;
-141    Ok(Conv1d::new(weight, Some(bias), config))
-142}
-143
-144pub fn conv_transpose1d_weight_norm(
-145    in_c: usize,
-146    out_c: usize,
-147    kernel_size: usize,
-148    bias: bool,
-149    config: candle_nn::ConvTranspose1dConfig,
-150    vb: VarBuilder,
-151) -> Result<ConvTranspose1d> {
-152    let weight_g = vb.get((in_c, 1, 1), "weight_g")?;
-153    let weight_v = vb.get((in_c, out_c, kernel_size), "weight_v")?;
-154    let norm_v = weight_v.sqr()?.sum_keepdim((1, 2))?.sqrt()?;
-155    let weight = weight_v.broadcast_mul(&weight_g)?.broadcast_div(&norm_v)?;
-156    let bias = if bias {
-157        Some(vb.get(out_c, "bias")?)
-158    } else {
-159        None
-160    };
-161    Ok(ConvTranspose1d::new(weight, bias, config))
-162}
-163
-164struct CodebookEncode;
-165
-166impl candle::CustomOp2 for CodebookEncode {
-167    fn name(&self) -> &'static str {
-168        "cb"
-169    }
-170
-171    fn cpu_fwd(
-172        &self,
-173        lhs_storage: &candle::CpuStorage,
-174        lhs_layout: &Layout,
-175        rhs_storage: &candle::CpuStorage,
-176        rhs_layout: &Layout,
-177    ) -> Result<(candle::CpuStorage, Shape)> {
-178        use rayon::prelude::*;
-179
-180        let (lhs_dim1, lhs_dim2) = lhs_layout.shape().dims2()?;
-181        let (rhs_dim1, rhs_dim2) = rhs_layout.shape().dims2()?;
-182        if lhs_dim2 != rhs_dim2 {
-183            candle::bail!("CodebookEncode, mismatch on last dim, {lhs_layout:?} {rhs_layout:?}");
-184        }
-185        if lhs_dim2 == 0 {
-186            candle::bail!("CodebookEncode, empty last dim {lhs_layout:?}")
-187        }
-188        let lhs = match lhs_layout.contiguous_offsets() {
-189            None => candle::bail!("CodebookEncode, lhs has to be contiguous, got {lhs_layout:?}"),
-190            Some((o1, o2)) => {
-191                let slice = lhs_storage.as_slice::<f32>()?;
-192                &slice[o1..o2]
-193            }
-194        };
-195        let rhs = match rhs_layout.contiguous_offsets() {
-196            None => candle::bail!("CodebookEncode, rhs has to be contiguous, got {rhs_layout:?}"),
-197            Some((o1, o2)) => {
-198                let slice = rhs_storage.as_slice::<f32>()?;
-199                &slice[o1..o2]
-200            }
-201        };
-202        let dst = (0..lhs_dim1)
-203            .into_par_iter()
-204            .map(|idx1| {
-205                let mut where_min = 0;
-206                let mut min_dist = f32::INFINITY;
-207                let lhs = &lhs[idx1 * lhs_dim2..(idx1 + 1) * lhs_dim2];
-208                for idx2 in 0..rhs_dim1 {
-209                    let rhs = &rhs[idx2 * rhs_dim2..(idx2 + 1) * rhs_dim2];
-210                    let mut dist = 0f32;
-211                    for (a, b) in lhs.iter().zip(rhs.iter()) {
-212                        dist += (a - b) * (a - b)
-213                    }
-214                    if dist < min_dist {
-215                        min_dist = dist;
-216                        where_min = idx2;
-217                    }
-218                }
-219                where_min as u32
-220            })
-221            .collect();
-222        let storage = candle::WithDType::to_cpu_storage_owned(dst);
-223        Ok((storage, (lhs_dim1,).into()))
-224    }
-225}
-226
-227// https://github.com/huggingface/transformers/blob/abaca9f9432a84cfaa95531de4c72334f38a42f2/src/transformers/models/encodec/modeling_encodec.py#L340
-228#[allow(unused)]
-229#[derive(Clone, Debug)]
-230pub struct EuclideanCodebook {
-231    inited: Tensor,
-232    cluster_size: Tensor,
-233    embed: candle_nn::Embedding,
-234    embed_avg: Tensor,
-235    c2: Tensor,
-236}
-237
-238impl EuclideanCodebook {
-239    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-240        let inited = vb.get(1, "inited")?;
-241        let cluster_size = vb.get(cfg.codebook_size, "cluster_size")?;
-242        let e_shape = (cfg.codebook_size, cfg.codebook_dim());
-243        let embed = vb.get(e_shape, "embed")?;
-244        let c2 = ((&embed * &embed)?.sum(D::Minus1)? / 2.0)?;
-245        let embed_avg = vb.get(e_shape, "embed_avg")?;
-246        Ok(Self {
-247            inited,
-248            cluster_size,
-249            embed: candle_nn::Embedding::new(embed, cfg.codebook_dim()),
-250            embed_avg,
-251            c2,
-252        })
-253    }
-254
-255    pub fn encode_slow(&self, xs: &Tensor) -> Result<Tensor> {
-256        let mut target_shape = xs.dims().to_vec();
-257        target_shape.pop();
-258        let xs = xs.flatten_to(D::Minus2)?;
-259        let _ = xs.dims2()?;
-260        let dot_prod = xs.matmul(&self.embed.embeddings().t()?)?;
-261        let codes = self.c2.broadcast_sub(&dot_prod)?.argmin(D::Minus1)?;
-262        codes.reshape(target_shape)
-263    }
-264
-265    pub fn encode(&self, xs: &Tensor) -> Result<Tensor> {
-266        let mut target_shape = xs.dims().to_vec();
-267        target_shape.pop();
-268        let xs = xs.flatten_to(D::Minus2)?;
-269        let _ = xs.dims2()?;
-270        let codes = Tensor::apply_op2(&xs, self.embed.embeddings(), CodebookEncode)?;
-271        codes.reshape(target_shape)
-272    }
-273
-274    pub fn decode(&self, embed_ind: &Tensor) -> Result<Tensor> {
-275        let quantize = self.embed.forward(embed_ind)?;
-276        Ok(quantize)
-277    }
-278}
-279
-280#[derive(Clone, Debug)]
-281pub struct VectorQuantization {
-282    codebook: EuclideanCodebook,
-283}
-284
-285impl VectorQuantization {
-286    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-287        let codebook = EuclideanCodebook::new(cfg, vb.pp("codebook"))?;
-288        Ok(Self { codebook })
-289    }
-290
-291    pub fn encode(&self, xs: &Tensor) -> Result<Tensor> {
-292        let xs = xs.transpose(1, 2)?;
-293        self.codebook.encode_slow(&xs)
-294    }
-295
-296    pub fn decode(&self, embed_ind: &Tensor) -> Result<Tensor> {
-297        let quantize = self.codebook.decode(embed_ind)?;
-298        let quantize = quantize.transpose(1, 2)?;
-299        Ok(quantize)
-300    }
-301}
-302
-303#[derive(Clone, Debug)]
-304pub struct ResidualVectorQuantizer {
-305    layers: Vec<VectorQuantization>,
-306    dtype: DType,
-307}
-308
-309impl ResidualVectorQuantizer {
-310    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-311        let vb = &vb.pp("layers");
-312        let layers = (0..cfg.num_quantizers())
-313            .map(|i| VectorQuantization::new(cfg, vb.pp(i)))
-314            .collect::<Result<Vec<_>>>()?;
-315        Ok(Self {
-316            layers,
-317            dtype: vb.dtype(),
-318        })
-319    }
-320
-321    pub fn encode(&self, xs: &Tensor) -> Result<Tensor> {
-322        let mut codes = Vec::with_capacity(self.layers.len());
-323        let mut residual = xs.clone();
-324        for layer in self.layers.iter() {
-325            let indices = layer.encode(&residual)?;
-326            let quantized = layer.decode(&indices)?;
-327            residual = (residual - quantized)?;
-328            codes.push(indices)
-329        }
-330        Tensor::stack(&codes, 0)
-331    }
-332
-333    pub fn decode(&self, codes: &Tensor) -> Result<Tensor> {
-334        let mut quantized_out = Tensor::zeros((), self.dtype, codes.device())?;
-335        let ncodes = codes.dim(0)?;
-336        if ncodes > self.layers.len() {
-337            candle::bail!(
-338                "codes shape {:?} does not match the number of quantization layers {}",
-339                codes.shape(),
-340                self.layers.len()
-341            )
-342        }
-343        for (i, layer) in self.layers.iter().take(ncodes).enumerate() {
-344            let quantized = layer.decode(&codes.i(i)?)?;
-345            quantized_out = quantized.broadcast_add(&quantized_out)?;
-346        }
-347        Ok(quantized_out)
-348    }
-349}
-350
-351// https://github.com/huggingface/transformers/blob/abaca9f9432a84cfaa95531de4c72334f38a42f2/src/transformers/models/encodec/modeling_encodec.py#L226
-352#[derive(Clone, Debug)]
-353pub struct EncodecLSTM {
-354    layers: Vec<candle_nn::LSTM>,
-355}
-356
-357impl EncodecLSTM {
-358    pub fn new(dim: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-359        let vb = &vb.pp("lstm");
-360        let mut layers = vec![];
-361        for layer_idx in 0..cfg.num_lstm_layers {
-362            let config = candle_nn::LSTMConfig {
-363                layer_idx,
-364                ..Default::default()
-365            };
-366            let lstm = candle_nn::lstm(dim, dim, config, vb.clone())?;
-367            layers.push(lstm)
-368        }
-369        Ok(Self { layers })
-370    }
-371}
-372
-373impl Module for EncodecLSTM {
-374    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-375        use candle_nn::RNN;
-376        // This is different from the Python transformers version as candle LSTM is batch first.
-377        let xs = xs.t()?;
-378        let residual = &xs;
-379        let mut xs = xs.clone();
-380        for layer in self.layers.iter() {
-381            let states = layer.seq(&xs)?;
-382            xs = layer.states_to_tensor(&states)?;
-383        }
-384        let xs = (xs + residual)?.t()?;
-385        Ok(xs)
-386    }
-387}
-388
-389#[derive(Clone, Debug)]
-390pub struct EncodecConvTranspose1d {
-391    conv: ConvTranspose1d,
-392}
-393
-394impl EncodecConvTranspose1d {
-395    fn new(
-396        in_c: usize,
-397        out_c: usize,
-398        k: usize,
-399        stride: usize,
-400        _cfg: &Config,
-401        vb: VarBuilder,
-402    ) -> Result<Self> {
-403        let cfg = candle_nn::ConvTranspose1dConfig {
-404            stride,
-405            ..Default::default()
-406        };
-407        let conv = conv_transpose1d_weight_norm(in_c, out_c, k, true, cfg, vb.pp("conv"))?;
-408        Ok(Self { conv })
-409    }
-410}
-411
-412impl Module for EncodecConvTranspose1d {
-413    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-414        xs.apply(&self.conv)
-415    }
-416}
-417
-418#[derive(Clone, Debug)]
-419pub struct EncodecConv1d {
-420    causal: bool,
-421    conv: Conv1d,
-422    norm: Option<candle_nn::GroupNorm>,
-423    pad_mode: PadMode,
-424}
-425
-426impl EncodecConv1d {
-427    pub fn new(
-428        in_c: usize,
-429        out_c: usize,
-430        kernel_size: usize,
-431        stride: usize,
-432        dilation: usize,
-433        cfg: &Config,
-434        vb: VarBuilder,
-435    ) -> Result<Self> {
-436        let conv = match cfg.norm_type {
-437            NormType::WeightNorm => conv1d_weight_norm(
-438                in_c,
-439                out_c,
-440                kernel_size,
-441                candle_nn::Conv1dConfig {
-442                    stride,
-443                    dilation,
-444                    ..Default::default()
-445                },
-446                vb.pp("conv"),
-447            )?,
-448            NormType::None | NormType::TimeGroupNorm => conv1d(
-449                in_c,
-450                out_c,
-451                kernel_size,
-452                candle_nn::Conv1dConfig {
-453                    padding: 0,
-454                    stride,
-455                    groups: 1,
-456                    dilation: 1,
-457                },
-458                vb.pp("conv"),
-459            )?,
-460        };
-461        let norm = match cfg.norm_type {
-462            NormType::None | NormType::WeightNorm => None,
-463            NormType::TimeGroupNorm => {
-464                let gn = candle_nn::group_norm(1, out_c, 1e-5, vb.pp("norm"))?;
-465                Some(gn)
-466            }
-467        };
-468        Ok(Self {
-469            causal: cfg.use_causal_conv,
-470            conv,
-471            norm,
-472            pad_mode: cfg.pad_mode,
-473        })
-474    }
-475}
-476
-477impl Module for EncodecConv1d {
-478    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-479        let (_b, _t, _c) = xs.dims3()?;
-480        let k_size = self.conv.weight().dim(D::Minus1)?;
-481        let conv_cfg = self.conv.config();
-482        // Effective kernel size with dilations.
-483        let k_size = (k_size - 1) * conv_cfg.dilation + 1;
-484        let padding_total = k_size - conv_cfg.stride;
-485        let extra_padding =
-486            get_extra_padding_for_conv1d(xs, k_size, conv_cfg.stride, padding_total)?;
-487        let xs = if self.causal {
-488            pad1d(xs, padding_total, extra_padding, self.pad_mode)?
-489        } else {
-490            let padding_right = padding_total / 2;
-491            let padding_left = padding_total - padding_right;
-492            pad1d(
-493                xs,
-494                padding_left,
-495                padding_right + extra_padding,
-496                self.pad_mode,
-497            )?
-498        };
-499        let xs = self.conv.forward(&xs)?;
-500        match &self.norm {
-501            None => Ok(xs),
-502            Some(norm) => xs.apply(norm),
-503        }
-504    }
-505}
-506
-507#[derive(Clone, Debug)]
-508pub struct EncodecResnetBlock {
-509    block_conv1: EncodecConv1d,
-510    block_conv2: EncodecConv1d,
-511    shortcut: Option<EncodecConv1d>,
-512}
-513
-514impl EncodecResnetBlock {
-515    pub fn new(
-516        dim: usize,
-517        (dilation1, dilation2): (usize, usize),
-518        cfg: &Config,
-519        vb: VarBuilder,
-520    ) -> Result<Self> {
-521        let h = dim / cfg.compress;
-522        let mut layer = Layer::new(vb.pp("block"));
-523        // TODO: Apply dilations!
-524        layer.inc();
-525        let block_conv1 = EncodecConv1d::new(
-526            dim,
-527            h,
-528            cfg.residual_kernel_size,
-529            1,
-530            dilation1,
-531            cfg,
-532            layer.next(),
-533        )?;
-534        layer.inc();
-535        let block_conv2 = EncodecConv1d::new(h, dim, 1, 1, dilation2, cfg, layer.next())?;
-536        let shortcut = if cfg.use_conv_shortcut {
-537            let conv = EncodecConv1d::new(dim, dim, 1, 1, 1, cfg, vb.pp("shortcut"))?;
-538            Some(conv)
-539        } else {
-540            None
-541        };
-542        Ok(Self {
-543            block_conv1,
-544            block_conv2,
-545            shortcut,
-546        })
-547    }
-548}
-549
-550impl Module for EncodecResnetBlock {
-551    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-552        let residual = xs.clone();
-553        let xs = xs.elu(1.)?;
-554        let xs = self.block_conv1.forward(&xs)?;
-555        let xs = xs.elu(1.)?;
-556        let xs = self.block_conv2.forward(&xs)?;
-557        let xs = match &self.shortcut {
-558            None => (xs + residual)?,
-559            Some(shortcut) => xs.add(&shortcut.forward(&residual)?)?,
-560        };
-561        Ok(xs)
-562    }
-563}
-564
-565struct Layer<'a> {
-566    vb: VarBuilder<'a>,
-567    cnt: usize,
-568}
-569
-570impl<'a> Layer<'a> {
-571    fn new(vb: VarBuilder<'a>) -> Self {
-572        Self { vb, cnt: 0 }
-573    }
-574
-575    fn inc(&mut self) {
-576        self.cnt += 1;
-577    }
-578
-579    fn next(&mut self) -> VarBuilder {
-580        let vb = self.vb.pp(self.cnt.to_string());
-581        self.cnt += 1;
-582        vb
-583    }
-584}
-585
-586#[derive(Clone, Debug)]
-587pub struct Encoder {
-588    init_conv: EncodecConv1d,
-589    sampling_layers: Vec<(Vec<EncodecResnetBlock>, EncodecConv1d)>,
-590    final_lstm: EncodecLSTM,
-591    final_conv: EncodecConv1d,
-592}
-593
-594impl Encoder {
-595    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-596        let mut layer = Layer::new(vb.pp("layers"));
-597        let init_conv = EncodecConv1d::new(
-598            cfg.audio_channels,
-599            cfg.num_filters,
-600            cfg.kernel_size,
-601            1,
-602            1,
-603            cfg,
-604            layer.next(),
-605        )?;
-606        let mut sampling_layers = vec![];
-607        let mut scaling = 1;
-608        for &ratio in cfg.upsampling_ratios.iter().rev() {
-609            let current_scale = scaling * cfg.num_filters;
-610            let mut resnets = vec![];
-611            for j in 0..(cfg.num_residual_layers as u32) {
-612                let resnet = EncodecResnetBlock::new(
-613                    current_scale,
-614                    (cfg.dilation_growth_rate.pow(j), 1),
-615                    cfg,
-616                    layer.next(),
-617                )?;
-618                resnets.push(resnet)
-619            }
-620            layer.inc(); // ELU
-621            let conv1d = EncodecConv1d::new(
-622                current_scale,
-623                current_scale * 2,
-624                ratio * 2,
-625                ratio,
-626                1,
-627                cfg,
-628                layer.next(),
-629            )?;
-630            sampling_layers.push((resnets, conv1d));
-631            scaling *= 2;
-632        }
-633        let final_lstm = EncodecLSTM::new(cfg.num_filters * scaling, cfg, layer.next())?;
-634        layer.inc(); // ELU
-635        let final_conv = EncodecConv1d::new(
-636            cfg.num_filters * scaling,
-637            cfg.hidden_size,
-638            cfg.last_kernel_size,
-639            1,
-640            1,
-641            cfg,
-642            layer.next(),
-643        )?;
-644        Ok(Self {
-645            init_conv,
-646            sampling_layers,
-647            final_conv,
-648            final_lstm,
-649        })
-650    }
-651}
-652
-653impl Module for Encoder {
-654    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-655        let mut xs = xs.apply(&self.init_conv)?;
-656        for (resnets, conv) in self.sampling_layers.iter() {
-657            for resnet in resnets.iter() {
-658                xs = xs.apply(resnet)?;
-659            }
-660            xs = xs.elu(1.0)?.apply(conv)?;
-661        }
-662        xs.apply(&self.final_lstm)?
-663            .elu(1.0)?
-664            .apply(&self.final_conv)
-665    }
-666}
-667
-668#[derive(Clone, Debug)]
-669pub struct Decoder {
-670    init_conv: EncodecConv1d,
-671    init_lstm: EncodecLSTM,
-672    sampling_layers: Vec<(EncodecConvTranspose1d, Vec<EncodecResnetBlock>)>,
-673    final_conv: EncodecConv1d,
-674}
-675
-676impl Decoder {
-677    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-678        let mut layer = Layer::new(vb.pp("layers"));
-679        let mut scaling = usize::pow(2, cfg.upsampling_ratios.len() as u32);
-680        let init_conv = EncodecConv1d::new(
-681            cfg.hidden_size,
-682            cfg.num_filters * scaling,
-683            cfg.last_kernel_size,
-684            1,
-685            1,
-686            cfg,
-687            layer.next(),
-688        )?;
-689        let init_lstm = EncodecLSTM::new(cfg.num_filters * scaling, cfg, layer.next())?;
-690        let mut sampling_layers = vec![];
-691        for &ratio in cfg.upsampling_ratios.iter() {
-692            let current_scale = scaling * cfg.num_filters;
-693            layer.inc(); // ELU
-694            let conv1d = EncodecConvTranspose1d::new(
-695                current_scale,
-696                current_scale / 2,
-697                ratio * 2,
-698                ratio,
-699                cfg,
-700                layer.next(),
-701            )?;
-702            let mut resnets = vec![];
-703            for j in 0..(cfg.num_residual_layers as u32) {
-704                let resnet = EncodecResnetBlock::new(
-705                    current_scale / 2,
-706                    (cfg.dilation_growth_rate.pow(j), 1),
-707                    cfg,
-708                    layer.next(),
-709                )?;
-710                resnets.push(resnet)
-711            }
-712            sampling_layers.push((conv1d, resnets));
-713            scaling /= 2;
-714        }
-715        layer.inc(); // ELU
-716        let final_conv = EncodecConv1d::new(
-717            cfg.num_filters,
-718            cfg.audio_channels,
-719            cfg.last_kernel_size,
-720            1,
-721            1,
-722            cfg,
-723            layer.next(),
-724        )?;
-725        Ok(Self {
-726            init_conv,
-727            init_lstm,
-728            sampling_layers,
-729            final_conv,
-730        })
-731    }
-732}
-733
-734impl Module for Decoder {
-735    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-736        let mut xs = xs.apply(&self.init_conv)?.apply(&self.init_lstm)?;
-737        for (conv, resnets) in self.sampling_layers.iter() {
-738            xs = xs.elu(1.)?.apply(conv)?;
-739            for resnet in resnets.iter() {
-740                xs = xs.apply(resnet)?
-741            }
-742        }
-743        xs.elu(1.)?.apply(&self.final_conv)
-744    }
-745}
-746
-747#[derive(Debug)]
-748pub struct Model {
-749    encoder: Encoder,
-750    decoder: Decoder,
-751    quantizer: ResidualVectorQuantizer,
-752}
-753
-754impl Model {
-755    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-756        let encoder = Encoder::new(cfg, vb.pp("encoder"))?;
-757        let decoder = Decoder::new(cfg, vb.pp("decoder"))?;
-758        let quantizer = ResidualVectorQuantizer::new(cfg, vb.pp("quantizer"))?;
-759        Ok(Self {
-760            encoder,
-761            decoder,
-762            quantizer,
-763        })
-764    }
-765
-766    pub fn encode(&self, xs: &Tensor) -> Result<Tensor> {
-767        let xs = self.encoder.forward(xs)?;
-768        let codes = self.quantizer.encode(&xs)?;
-769        codes.transpose(0, 1)
-770    }
-771
-772    pub fn decode(&self, codes: &Tensor) -> Result<Tensor> {
-773        let (_b_sz, _codebooks, _seqlen) = codes.dims3()?;
-774        let codes = codes.transpose(0, 1)?;
-775        let embeddings = self.quantizer.decode(&codes)?;
-776        let outputs = self.decoder.forward(&embeddings)?;
-777        Ok(outputs)
-778    }
-779}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/eva2.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/eva2.rs.html deleted file mode 100644 index 5245c4c..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/eva2.rs.html +++ /dev/null @@ -1,440 +0,0 @@ -eva2.rs - source

candle_transformers/models/
eva2.rs

1//! EVA-2 inference implementation.
-2//!
-3//! EVA-02 is a computer vision model that can be used as an ImageNet classifier.
-4//! The model returns the probability for an image to belong to each of the 1000
-5//! ImageNet categories.
-6//!
-7//! - [Paper](https://arxiv.org/abs/2303.11331). EVA-02: A Visual Representation for Neon Genesis
-8//! - [Code](https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/eva2.py)
-9//!
-10//! # Example
-11//!
-12//! ```bash
-13//! cargo run \
-14//!   --example eva2 \
-15//!   --release -- \
-16//!   --image candle-examples/examples/yolo-v8/assets/bike.jpg
-17//!
-18//! > mountain bike, all-terrain bike, off-roader: 37.09%
-19//! > maillot                 : 8.30%
-20//! > alp                     : 2.13%
-21//! > bicycle-built-for-two, tandem bicycle, tandem: 0.84%
-22//! > crash helmet            : 0.73%
-23//! ```
-24//!
-25//! <div align=center>
-26//!   <img src="https://github.com/huggingface/candle/raw/main/candle-examples/examples/yolo-v8/assets/bike.jpg" alt="" width=640>
-27//! </div>
-28//!
-29use candle::{IndexOp, Result, Tensor, D};
-30use candle_nn::{layer_norm, LayerNorm, Linear, Module, VarBuilder};
-31
-32const IMG_SIZE: usize = 448;
-33const PATCH_SIZE: usize = 14;
-34const NUM_CLASSES: usize = 1000;
-35
-36fn linear(vb: VarBuilder, in_dim: usize, out_dim: usize, bias: bool) -> Result<Linear> {
-37    if bias {
-38        candle_nn::linear(in_dim, out_dim, vb)
-39    } else {
-40        candle_nn::linear_no_bias(in_dim, out_dim, vb)
-41    }
-42}
-43
-44#[derive(Debug)]
-45struct Attention {
-46    q: Linear,
-47    k: Linear,
-48    v: Linear,
-49    proj: Linear,
-50    rot_pos_embed: Tensor,
-51    num_heads: usize,
-52    scale: f64,
-53}
-54
-55impl Attention {
-56    fn new(
-57        vb: VarBuilder,
-58        dim: usize,
-59        num_heads: usize,
-60        qkv_bias: bool,
-61        proj_bias: bool,
-62        rot_pos_embed: &Tensor,
-63    ) -> Result<Self> {
-64        let q = linear(vb.pp("q_proj"), dim, dim, qkv_bias)?;
-65        let k = linear(vb.pp("k_proj"), dim, dim, false)?; // no bias for Key
-66        let v = linear(vb.pp("v_proj"), dim, dim, qkv_bias)?;
-67        let proj = linear(vb.pp("proj"), dim, dim, proj_bias)?;
-68        let rot_pos_embed = rot_pos_embed.clone();
-69        let scale = 1. / ((dim / num_heads) as f64).sqrt();
-70        Ok(Self {
-71            q,
-72            k,
-73            v,
-74            proj,
-75            rot_pos_embed,
-76            num_heads,
-77            scale,
-78        })
-79    }
-80}
-81
-82impl Attention {
-83    // See: https://github.com/huggingface/pytorch-image-models/blob/main/timm/layers/pos_embed_sincos.py#L210
-84    fn apply_rot_embed_cat(x: &Tensor, emb: &Tensor) -> Result<Tensor> {
-85        let cos_emb = emb.i((0.., 64..128))?; //.transpose(0, 1)?;
-86        let sin_emb = emb.i((0.., 0..64))?; //.transpose(0, 1)?;
-87        let index_even: [u32; 32] = (0u32..=63)
-88            .step_by(2)
-89            .collect::<Vec<_>>()
-90            .try_into()
-91            .expect("wrong size iterator");
-92        let index_odd: [u32; 32] = (1u32..=63)
-93            .step_by(2)
-94            .collect::<Vec<_>>()
-95            .try_into()
-96            .expect("wrong size iterator");
-97        let t_index_even = Tensor::new(&index_even, x.device())?;
-98        let t_index_odd = Tensor::new(&index_odd, x.device())?;
-99        let x_c = x.contiguous()?;
-100        let rot_x_even = x_c.index_select(&t_index_even, D::Minus1)?;
-101        let rot_x_odd_minus = (-1.0 * x_c.index_select(&t_index_odd, D::Minus1)?)?;
-102        let rot_x =
-103            Tensor::stack(&[&rot_x_odd_minus, &rot_x_even], D::Minus1)?.reshape(x.shape())?;
-104        x.broadcast_mul(&cos_emb)? + rot_x.broadcast_mul(&sin_emb)?
-105    }
-106}
-107
-108impl Module for Attention {
-109    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-110        let (b, n, c) = xs.dims3()?;
-111        let qkv = Tensor::cat(
-112            &[
-113                &self.q.forward(xs)?,
-114                &self.k.forward(xs)?,
-115                &self.v.forward(xs)?,
-116            ],
-117            2,
-118        )?
-119        .reshape((b, n, 3, self.num_heads, c / self.num_heads))?
-120        .transpose(1, 2)? // 02134
-121        .transpose(0, 1)? // 20134
-122        .transpose(2, 3)?; // 20314
-123        let q = qkv.i(0)?;
-124        let k = qkv.i(1)?.contiguous()?;
-125        let v = qkv.i(2)?.contiguous()?;
-126
-127        let npt = 1; // num_prefix_tokens = 1 for CLS token
-128        let q = Tensor::cat(
-129            &[
-130                &q.i((0.., 0.., ..npt, 0..))?,
-131                &Self::apply_rot_embed_cat(&q.i((0.., 0.., npt.., 0..))?, &self.rot_pos_embed)?,
-132            ],
-133            2,
-134        )?;
-135        let k = Tensor::cat(
-136            &[
-137                &k.i((0.., 0.., ..npt, 0..))?,
-138                &Self::apply_rot_embed_cat(&k.i((0.., 0.., npt.., 0..))?, &self.rot_pos_embed)?,
-139            ],
-140            2,
-141        )?;
-142
-143        let q = (q * self.scale)?;
-144        let attn = &q.matmul(&k.t()?)?;
-145        let attn = candle_nn::ops::softmax(attn, D::Minus1)?;
-146        let attn = attn.matmul(&v)?.transpose(1, 2)?.reshape((b, n, c))?;
-147        self.proj.forward(&attn)
-148    }
-149}
-150
-151#[derive(Debug)]
-152struct Mlp {
-153    fc1_g: Linear,
-154    fc1_x: Linear,
-155    norm: LayerNorm,
-156    fc2: Linear,
-157}
-158
-159impl Mlp {
-160    fn new(vb: VarBuilder, in_features: usize, hidden_features: usize, bias: bool) -> Result<Self> {
-161        let out_features = in_features;
-162        let fc1_g = linear(vb.pp("fc1_g"), in_features, hidden_features, bias)?;
-163        let fc1_x = linear(vb.pp("fc1_x"), in_features, hidden_features, bias)?;
-164        let norm = layer_norm(hidden_features, 1e-6, vb.pp("norm"))?;
-165        let fc2 = linear(vb.pp("fc2"), hidden_features, out_features, bias)?;
-166        Ok(Self {
-167            fc1_g,
-168            fc1_x,
-169            norm,
-170            fc2,
-171        })
-172    }
-173}
-174
-175impl Module for Mlp {
-176    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-177        let xs_g = self.fc1_g.forward(xs)?.silu()?;
-178        let xs = self.fc1_x.forward(xs)?;
-179        let xs = self.norm.forward(&(xs_g.mul(&xs)?))?;
-180        self.fc2.forward(&xs)
-181    }
-182}
-183
-184#[derive(Debug)]
-185struct Block {
-186    norm1: LayerNorm,
-187    attn: Attention,
-188    norm2: LayerNorm,
-189    mlp: Mlp,
-190}
-191
-192impl Block {
-193    fn new(vb: VarBuilder, dim: usize, num_heads: usize, rot_pos_embed: &Tensor) -> Result<Self> {
-194        let norm1 = layer_norm(dim, 1e-6, vb.pp("norm1"))?;
-195        let attn = Attention::new(vb.pp("attn"), dim, num_heads, true, true, rot_pos_embed)?;
-196        let norm2 = layer_norm(dim, 1e-6, vb.pp("norm2"))?;
-197        let hidden_dim = dim * 4 * 2 / 3; // 768 * 4 * 2 / 3 = 3072 * 2 / 3 = 2048
-198        let mlp = Mlp::new(vb.pp("mlp"), dim, hidden_dim, true)?;
-199        Ok(Self {
-200            norm1,
-201            attn,
-202            norm2,
-203            mlp,
-204        })
-205    }
-206}
-207
-208impl Module for Block {
-209    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-210        let residual = xs;
-211        let xs = &self.attn.forward(&self.norm1.forward(xs)?)?;
-212        let xs = (xs + residual)?;
-213        let residual = &xs;
-214        let xs = &self.mlp.forward(&self.norm2.forward(&xs)?)?;
-215        xs + residual
-216    }
-217}
-218
-219#[derive(Debug)]
-220struct PatchEmbed {
-221    proj: candle_nn::Conv2d,
-222    patch_size: (usize, usize),
-223    num_patches: usize,
-224}
-225
-226impl PatchEmbed {
-227    fn new(
-228        vb: VarBuilder,
-229        img_size: usize,
-230        patch_size: usize,
-231        in_chans: usize,
-232        embed_dim: usize,
-233    ) -> Result<Self> {
-234        let config = candle_nn::Conv2dConfig {
-235            stride: patch_size,
-236            ..Default::default()
-237        };
-238        let proj = candle_nn::conv2d(in_chans, embed_dim, patch_size, config, vb.pp("proj"))?;
-239        let num_patches = (img_size / patch_size) * (img_size / patch_size);
-240        Ok(Self {
-241            proj,
-242            patch_size: (patch_size, patch_size),
-243            num_patches,
-244        })
-245    }
-246}
-247
-248impl Module for PatchEmbed {
-249    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-250        let (_b, _c, h, w) = xs.dims4()?;
-251        let (patch_h, patch_w) = self.patch_size;
-252        if (h % patch_h) != 0 {
-253            candle::bail!("image height {h} is not a multiple of patch height {patch_h}")
-254        }
-255        if (w % patch_w) != 0 {
-256            candle::bail!("image width {w} is not a multiple of patch width {patch_w}")
-257        }
-258        let xs = self.proj.forward(xs)?;
-259        let (b, c, h, w) = xs.dims4()?;
-260        // flatten embeddings.
-261        xs.reshape((b, c, h * w))?.transpose(1, 2)
-262    }
-263}
-264
-265#[derive(Debug)]
-266pub struct EVA2VisionTransformer {
-267    patch_embed: PatchEmbed,
-268    cls_token: Tensor,
-269    pos_embed: Tensor,
-270    blocks: Vec<Block>,
-271    norm: LayerNorm,
-272    head: Linear,
-273}
-274
-275impl EVA2VisionTransformer {
-276    pub fn new(vb: VarBuilder, depth: usize, embed_dim: usize, num_heads: usize) -> Result<Self> {
-277        let patch_embed =
-278            PatchEmbed::new(vb.pp("patch_embed"), IMG_SIZE, PATCH_SIZE, 3, embed_dim)?;
-279        let cls_token = vb.get((1, 1, embed_dim), "cls_token")?;
-280        let pos_embed = vb.get((1, patch_embed.num_patches + 1, embed_dim), "pos_embed")?;
-281        let rot_pos_embed = vb.get((patch_embed.num_patches, 128), "rot_pos_embed")?;
-282        let head = linear(vb.pp("head"), embed_dim, NUM_CLASSES, true)?;
-283        let norm = layer_norm(embed_dim, 1e-6, vb.pp("norm"))?;
-284        let vb_b = vb.pp("blocks");
-285        let blocks = (0..depth)
-286            .map(|i| Block::new(vb_b.pp(i.to_string()), embed_dim, num_heads, &rot_pos_embed))
-287            .collect::<Result<Vec<_>>>()?;
-288        Ok(Self {
-289            patch_embed,
-290            cls_token,
-291            pos_embed,
-292            blocks,
-293            norm,
-294            head,
-295        })
-296    }
-297
-298    fn interpolate_pos_encoding(
-299        &self,
-300        xs: &Tensor,
-301        w: usize,
-302        h: usize,
-303        num_prefix_tokens: usize,
-304    ) -> Result<Tensor> {
-305        let npatch = xs.dim(1)? - 1;
-306        let n = self.pos_embed.dim(1)? - 1;
-307        let sqrt_n = (n as f64).sqrt();
-308        if npatch == n && w == h {
-309            return Ok(self.pos_embed.clone());
-310        }
-311        // Interpolate only local tokens, i.e. those after the CLS token
-312        let prefix_tokens_pos_embed = self.pos_embed.i((0.., ..num_prefix_tokens, 0..))?.clone();
-313        let patch_pos_embed = &self.pos_embed.i((0.., num_prefix_tokens.., 0..))?;
-314        let dim = xs.dim(D::Minus1)?;
-315        let (w0, h0) = ((w / PATCH_SIZE) as f64 + 0.1, (h / PATCH_SIZE) as f64 + 0.1);
-316        let patch_pos_embed = patch_pos_embed
-317            .reshape((1, sqrt_n as usize, sqrt_n as usize, dim))?
-318            .transpose(2, 3)?
-319            .transpose(1, 2)?;
-320        // This uses bicubic interpolation in the original implementation.
-321        let patch_pos_embed = patch_pos_embed.upsample_nearest2d(h0 as usize, w0 as usize)?;
-322        let el_count = patch_pos_embed.shape().elem_count();
-323        let patch_pos_embed =
-324            patch_pos_embed
-325                .transpose(1, 2)?
-326                .transpose(2, 3)?
-327                .reshape((1, el_count / dim, dim))?;
-328        Tensor::cat(&[&prefix_tokens_pos_embed, &patch_pos_embed], 1)
-329    }
-330
-331    fn prepare_tokens_with_mask(&self, xs: &Tensor) -> Result<Tensor> {
-332        let (_b, _nc, w, h) = xs.dims4()?;
-333        if (w != IMG_SIZE) || (h != IMG_SIZE) {
-334            panic!("Error: The input tensor should have the shape: Bx3x518x518.");
-335        }
-336        let xs = self.patch_embed.forward(xs)?;
-337        let xs = Tensor::cat(&[&self.cls_token, &xs], 1)?;
-338        let xs = (&xs + &self.interpolate_pos_encoding(&xs, w, h, 1)?)?;
-339        Ok(xs)
-340    }
-341
-342    fn get_intermediate_layers_not_chunked(
-343        &self,
-344        xs: &Tensor,
-345        blocks_to_take: &[usize],
-346    ) -> Result<Vec<Tensor>> {
-347        let mut xs = self.prepare_tokens_with_mask(xs)?;
-348        let mut output = Vec::new();
-349        for (i, blk) in self.blocks.iter().enumerate() {
-350            xs = blk.forward(&xs)?;
-351            if blocks_to_take.contains(&i) {
-352                output.push(xs.clone());
-353            }
-354        }
-355        if output.len() != blocks_to_take.len() {
-356            candle::bail!(
-357                "only {} / {} blocks found",
-358                output.len(),
-359                blocks_to_take.len()
-360            );
-361        }
-362        Ok(output)
-363    }
-364
-365    pub fn get_intermediate_layers(
-366        &self,
-367        xs: &Tensor,
-368        blocks_to_take: &[usize],
-369        reshape: bool,
-370        return_class_token: bool,
-371        norm: bool,
-372    ) -> Result<Tensor> {
-373        let outputs = self.get_intermediate_layers_not_chunked(xs, blocks_to_take)?;
-374        let outputs = if norm {
-375            outputs
-376                .iter()
-377                .map(|out| self.norm.forward(out))
-378                .collect::<Result<Vec<_>>>()?
-379        } else {
-380            outputs
-381        };
-382        let class_tokens = outputs
-383            .iter()
-384            .map(|out| out.i((.., 0)))
-385            .collect::<Result<Vec<_>>>()?;
-386        let outputs = outputs
-387            .iter()
-388            .map(|out| out.i((.., 1..)))
-389            .collect::<Result<Vec<_>>>()?;
-390
-391        let outputs = if reshape {
-392            let (b, _c, w, h) = xs.dims4()?;
-393            let patch_size = self.patch_embed.patch_size.0;
-394            let num_channels = outputs[0].elem_count() / (b * (w / patch_size) * (h / patch_size));
-395            outputs
-396                .iter()
-397                .map(|out| {
-398                    out.reshape((b, w / patch_size, h / patch_size, num_channels))?
-399                        .transpose(2, 3)?
-400                        .transpose(1, 2)
-401                })
-402                .collect::<Result<Vec<_>>>()?
-403        } else {
-404            outputs
-405        };
-406
-407        let outputs = if return_class_token {
-408            outputs
-409                .iter()
-410                .zip(class_tokens.iter())
-411                .map(|(out, class_token)| Tensor::cat(&[out, class_token], D::Minus1))
-412                .collect::<Result<Vec<_>>>()?
-413        } else {
-414            outputs
-415        };
-416
-417        Tensor::stack(&outputs[..], 0)
-418    }
-419}
-420
-421impl Module for EVA2VisionTransformer {
-422    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-423        let mut xs = self.prepare_tokens_with_mask(xs)?;
-424        for blk in self.blocks.iter() {
-425            xs = blk.forward(&xs)?
-426        }
-427        let xs_moy_local_tokens = xs.i((.., 1..))?.mean(1)?;
-428        let xs_norm = self.norm.forward(&xs_moy_local_tokens)?;
-429        self.head.forward(&xs_norm)
-430    }
-431}
-432
-433pub fn vit_base(vb: VarBuilder) -> Result<EVA2VisionTransformer> {
-434    EVA2VisionTransformer::new(vb, 12, 768, 12)
-435}
-436
-437pub fn vit_large(vb: VarBuilder) -> Result<EVA2VisionTransformer> {
-438    EVA2VisionTransformer::new(vb, 24, 1024, 16)
-439}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/falcon.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/falcon.rs.html deleted file mode 100644 index 622e6ab..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/falcon.rs.html +++ /dev/null @@ -1,501 +0,0 @@ -falcon.rs - source

candle_transformers/models/
falcon.rs

1//! Falcon language model inference implementation
-2//!
-3//! See ["Falcon: a new approach to large language models"](https://huggingface.co/blog/falcon)
-4//!
-5//! Based on implementation from [Huggingface Transformers](https://github.com/huggingface/transformers/blob/main/src/transformers/models/falcon)
-6
-7use candle::{DType, Device, Result, Tensor, D};
-8use candle_nn::{embedding, linear_b as linear, Embedding, LayerNorm, Linear, Module, VarBuilder};
-9use serde::Deserialize;
-10
-11const MAX_SEQ_LEN: usize = 5000;
-12
-13fn layer_norm(size: usize, eps: f64, vb: VarBuilder) -> Result<LayerNorm> {
-14    let (weight, bias) = match (vb.get(size, "weight"), vb.get(size, "bias")) {
-15        (Ok(weight), Ok(bias)) => (weight, bias),
-16        (Err(err), _) | (_, Err(err)) => {
-17            if let (Ok(weight), Ok(bias)) = (vb.get(size, "gamma"), vb.get(size, "beta")) {
-18                (weight, bias)
-19            } else {
-20                return Err(err);
-21            }
-22        }
-23    };
-24    Ok(LayerNorm::new(weight, bias, eps))
-25}
-26
-27// https://raw.githubusercontent.com/huggingface/transformers/030c863aaa0165e98352b61697430bf69bf33755/src/transformers/models/falcon/configuration_falcon.py
-28#[derive(Clone, Debug, Deserialize)]
-29pub struct Config {
-30    pub vocab_size: usize,
-31    pub hidden_size: usize,
-32    pub num_hidden_layers: usize,
-33    pub num_attention_heads: usize,
-34    pub layer_norm_epsilon: f64,
-35    pub initializer_range: f64,
-36    pub use_cache: bool,
-37    pub bos_token_id: u32,
-38    pub eos_token_id: u32,
-39    pub hidden_dropout: f64,
-40    pub attention_dropout: f64,
-41    pub n_head_kv: Option<usize>,
-42    pub alibi: bool,
-43    pub new_decoder_architecture: bool,
-44    pub multi_query: bool,
-45    pub parallel_attn: bool,
-46    pub bias: bool,
-47}
-48
-49impl Default for Config {
-50    fn default() -> Self {
-51        Self {
-52            vocab_size: 65024,
-53            hidden_size: 4544,
-54            num_hidden_layers: 32,
-55            num_attention_heads: 71,
-56            layer_norm_epsilon: 1e-5,
-57            initializer_range: 0.02,
-58            use_cache: true,
-59            bos_token_id: 11,
-60            eos_token_id: 11,
-61            hidden_dropout: 0.0,
-62            attention_dropout: 0.0,
-63            n_head_kv: None,
-64            alibi: false,
-65            new_decoder_architecture: false,
-66            multi_query: true,
-67            parallel_attn: true,
-68            bias: false,
-69        }
-70    }
-71}
-72
-73impl Config {
-74    pub fn validate(&self) -> Result<()> {
-75        if self.alibi {
-76            candle::bail!("alibi is not supported");
-77        }
-78        if self.new_decoder_architecture {
-79            candle::bail!("new_decoder_architecture is not supported");
-80        }
-81        if self.n_head_kv.is_some() {
-82            candle::bail!("n_head_kv is not supported");
-83        }
-84        Ok(())
-85    }
-86
-87    // https://huggingface.co/tiiuae/falcon-7b/blob/main/config.json
-88    pub fn falcon7b() -> Self {
-89        // This is currently on par with the defaults, the defaults come from the Python default
-90        // arguments for the config initialization whereas the following come from the json config.
-91        Self {
-92            vocab_size: 65024,
-93            hidden_size: 4544,
-94            num_hidden_layers: 32,
-95            num_attention_heads: 71,
-96            layer_norm_epsilon: 1e-5,
-97            initializer_range: 0.02,
-98            use_cache: true,
-99            bos_token_id: 11,
-100            eos_token_id: 11,
-101            hidden_dropout: 0.,
-102            attention_dropout: 0.,
-103            n_head_kv: None,
-104            alibi: false,
-105            new_decoder_architecture: false,
-106            multi_query: true,
-107            parallel_attn: true,
-108            bias: false,
-109        }
-110    }
-111
-112    fn head_dim(&self) -> usize {
-113        self.hidden_size / self.num_attention_heads
-114    }
-115
-116    fn rotary(&self) -> bool {
-117        !self.alibi
-118    }
-119}
-120
-121fn rotate_half(x: &Tensor) -> Result<Tensor> {
-122    let l = x.dim(D::Minus1)?;
-123    let x1 = x.narrow(D::Minus1, 0, l / 2)?;
-124    let x2 = x.narrow(D::Minus1, l / 2, l - l / 2)?;
-125    let x21 = Tensor::cat(&[&x2.neg()?, &x1], D::Minus1)?;
-126    Ok(x21)
-127}
-128
-129#[derive(Debug, Clone)]
-130struct FalconRotaryEmbedding {
-131    inv_freq: Tensor,
-132    cache: Option<(usize, Tensor, Tensor)>,
-133}
-134
-135impl FalconRotaryEmbedding {
-136    fn load(device: &Device, cfg: &Config) -> Result<Self> {
-137        let head_dim = cfg.head_dim();
-138        let inv_freq: Vec<_> = (0..head_dim)
-139            .step_by(2)
-140            .map(|i| 1f32 / 10000f32.powf(i as f32 / head_dim as f32))
-141            .collect();
-142        Ok(Self {
-143            inv_freq: Tensor::new(inv_freq.as_slice(), device)?,
-144            cache: None,
-145        })
-146    }
-147
-148    fn cos_sin(
-149        &mut self,
-150        seq_len: usize,
-151        device: &Device,
-152        dtype: DType,
-153    ) -> Result<(Tensor, Tensor)> {
-154        match &self.cache {
-155            Some((s, cos, sin)) if *s == seq_len => {
-156                return Ok((cos.clone(), sin.clone()));
-157            }
-158            _ => {}
-159        }
-160        let t = Tensor::arange(0, seq_len as u32, device)?.to_dtype(dtype)?;
-161        let inv_freq = self.inv_freq.to_dtype(dtype)?;
-162        let freqs = t.unsqueeze(1)?.matmul(&inv_freq.unsqueeze(0)?)?;
-163        let emb = Tensor::cat(&[&freqs, &freqs], D::Minus1)?;
-164        let cos = emb.cos()?;
-165        let sin = emb.sin()?;
-166        self.cache = Some((seq_len, cos.clone(), sin.clone()));
-167        Ok((cos, sin))
-168    }
-169
-170    fn forward(
-171        &mut self,
-172        query: &Tensor,
-173        key: &Tensor,
-174        past_kv_len: usize,
-175    ) -> Result<(Tensor, Tensor)> {
-176        let (_batch, seq_len, _head_dim) = query.dims3()?;
-177        let (cos, sin) = self.cos_sin(MAX_SEQ_LEN, query.device(), query.dtype())?;
-178        let cos = cos.narrow(0, past_kv_len, seq_len)?;
-179        let sin = sin.narrow(0, past_kv_len, seq_len)?;
-180        let qs = (query.broadcast_mul(&cos)? + &rotate_half(query)?.broadcast_mul(&sin)?)?;
-181        let ks = (key.broadcast_mul(&cos)? + &rotate_half(key)?.broadcast_mul(&sin)?)?;
-182        Ok((qs, ks))
-183    }
-184}
-185
-186fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: f32) -> Result<Tensor> {
-187    let shape = mask.shape();
-188    let on_true = Tensor::new(on_true, on_false.device())?
-189        .to_dtype(on_false.dtype())?
-190        .broadcast_as(shape.dims())?;
-191    let m = mask.where_cond(&on_true, on_false)?;
-192    Ok(m)
-193}
-194
-195#[derive(Debug, Clone)]
-196struct FalconAttention {
-197    query_key_value: Linear,
-198    dense: Linear,
-199    maybe_rotary: Option<FalconRotaryEmbedding>,
-200    kv_cache: Option<(Tensor, Tensor)>,
-201    inv_norm_factor: f64,
-202    multi_query: bool,
-203    use_cache: bool,
-204    num_heads: usize,
-205    head_dim: usize,
-206    n_head_kv: usize,
-207}
-208
-209impl FalconAttention {
-210    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-211        let maybe_rotary = if cfg.rotary() {
-212            let rotary = FalconRotaryEmbedding::load(vb.device(), cfg)?;
-213            Some(rotary)
-214        } else {
-215            None
-216        };
-217        let head_dim = cfg.head_dim();
-218        let hidden_size = cfg.hidden_size;
-219        let qkv_out_dim = if cfg.multi_query {
-220            hidden_size + 2 * head_dim
-221        } else {
-222            3 * hidden_size
-223        };
-224        let query_key_value = linear(hidden_size, qkv_out_dim, cfg.bias, vb.pp("query_key_value"))?;
-225        let dense = linear(hidden_size, hidden_size, cfg.bias, vb.pp("dense"))?;
-226        Ok(Self {
-227            query_key_value,
-228            dense,
-229            maybe_rotary,
-230            kv_cache: None,
-231            inv_norm_factor: 1. / (head_dim as f64).sqrt(),
-232            multi_query: cfg.multi_query,
-233            use_cache: cfg.use_cache,
-234            num_heads: cfg.num_attention_heads,
-235            n_head_kv: cfg.n_head_kv.unwrap_or(1),
-236            head_dim,
-237        })
-238    }
-239
-240    fn split_heads(&self, fused_qkv: &Tensor) -> Result<(Tensor, Tensor, Tensor)> {
-241        let (b_sz, seq_len, _) = fused_qkv.dims3()?;
-242        if !self.multi_query {
-243            let fused_qkv = fused_qkv.reshape((b_sz, seq_len, self.num_heads, 3, self.head_dim))?;
-244            let q = fused_qkv.narrow(D::Minus2, 0, 1)?.squeeze(D::Minus2)?;
-245            let k = fused_qkv.narrow(D::Minus2, 1, 1)?.squeeze(D::Minus2)?;
-246            let v = fused_qkv.narrow(D::Minus2, 2, 1)?.squeeze(D::Minus2)?;
-247            Ok((q, k, v))
-248        } else {
-249            let fused_qkv =
-250                fused_qkv.reshape((b_sz, seq_len, self.num_heads + 2, self.head_dim))?;
-251            let d = fused_qkv.dim(D::Minus2)?;
-252            let q = fused_qkv.narrow(D::Minus2, 0, d - 2)?;
-253            let k = fused_qkv.narrow(D::Minus2, d - 2, 1)?;
-254            let v = fused_qkv.narrow(D::Minus2, d - 1, 1)?;
-255            Ok((q, k, v))
-256        }
-257    }
-258
-259    fn forward(&mut self, x: &Tensor, mask: Option<&Tensor>, past_kv_len: usize) -> Result<Tensor> {
-260        let fused_qkv = self.query_key_value.forward(x)?;
-261        let head_dim = self.head_dim;
-262        let (query, key, value) = self.split_heads(&fused_qkv)?;
-263        let (b_sz, seq_len, _, _) = query.dims4()?;
-264        let query = query
-265            .transpose(1, 2)?
-266            .reshape((b_sz * self.num_heads, seq_len, head_dim))?;
-267        let key = key
-268            .transpose(1, 2)?
-269            .reshape((b_sz * self.n_head_kv, seq_len, head_dim))?;
-270        let value = value
-271            .transpose(1, 2)?
-272            .reshape((b_sz * self.n_head_kv, seq_len, head_dim))?;
-273        let (query, key) = if let Some(r) = &mut self.maybe_rotary {
-274            r.forward(&query, &key, past_kv_len)?
-275        } else {
-276            (query, key)
-277        };
-278        let (mut key, mut value) = (key, value);
-279        if self.use_cache {
-280            if let Some((cache_k, cache_v)) = &self.kv_cache {
-281                // TODO: we could trim the tensors to MAX_SEQ_LEN so that this would work for
-282                // arbitrarily large sizes.
-283                key = Tensor::cat(&[cache_k, &key], 1)?.contiguous()?;
-284                value = Tensor::cat(&[cache_v, &value], 1)?.contiguous()?;
-285            }
-286            self.kv_cache = Some((key.clone(), value.clone()))
-287        }
-288        let query = query.reshape((b_sz * self.num_heads, seq_len, head_dim))?;
-289        let all_len = past_kv_len + seq_len;
-290        let key = key.reshape((b_sz * self.n_head_kv, all_len, head_dim))?;
-291        let value = value.reshape((b_sz * self.n_head_kv, all_len, head_dim))?;
-292
-293        let (key, value) = if self.n_head_kv == 1 {
-294            (
-295                key.broadcast_as((b_sz * self.num_heads, all_len, head_dim))?,
-296                value.broadcast_as((b_sz * self.num_heads, all_len, head_dim))?,
-297            )
-298        } else {
-299            (key, value)
-300        };
-301
-302        // Only handle the case where alibi is None here, and non-flash attention.
-303        let attention_scores = (query.matmul(&key.t()?)? * self.inv_norm_factor)?;
-304        let attention_scores = match mask {
-305            None => attention_scores,
-306            Some(mask) => {
-307                let mask = masked_fill(&mask.to_dtype(DType::F32)?, mask, -1e9)?
-308                    .to_dtype(query.dtype())?;
-309                attention_scores.broadcast_add(&mask.squeeze(1)?)?
-310            }
-311        };
-312
-313        let attention_scores =
-314            candle_nn::ops::softmax(&attention_scores.to_dtype(DType::F32)?, D::Minus1)?
-315                .to_dtype(x.dtype())?;
-316        let attn_output = attention_scores
-317            .matmul(&value)?
-318            .reshape((b_sz, self.num_heads, seq_len, head_dim))?
-319            .transpose(1, 2)?
-320            .reshape((b_sz, seq_len, self.num_heads * head_dim))?;
-321        let attn_output = self.dense.forward(&attn_output)?;
-322        Ok(attn_output)
-323    }
-324
-325    fn clear_kv_cache(&mut self) {
-326        self.kv_cache = None
-327    }
-328}
-329
-330#[derive(Debug, Clone)]
-331struct FalconMlp {
-332    dense_h_to_4h: Linear,
-333    dense_4h_to_h: Linear,
-334}
-335
-336impl FalconMlp {
-337    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-338        let h = cfg.hidden_size;
-339        let b = cfg.bias;
-340        let dense_h_to_4h = linear(h, 4 * h, b, vb.pp("dense_h_to_4h"))?;
-341        let dense_4h_to_h = linear(4 * h, h, b, vb.pp("dense_4h_to_h"))?;
-342        Ok(Self {
-343            dense_h_to_4h,
-344            dense_4h_to_h,
-345        })
-346    }
-347
-348    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-349        let x = self.dense_h_to_4h.forward(x)?.gelu()?;
-350        let x = self.dense_4h_to_h.forward(&x)?;
-351        Ok(x)
-352    }
-353}
-354
-355#[derive(Debug, Clone)]
-356struct FalconDecoderLayer {
-357    inp_layernorm: LayerNorm,
-358    self_attention: FalconAttention,
-359    post_attention_layernorm: Option<LayerNorm>,
-360    mlp: FalconMlp,
-361    parallel_attn: bool,
-362}
-363
-364impl FalconDecoderLayer {
-365    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-366        let mlp = FalconMlp::load(vb.pp("mlp"), cfg)?;
-367        let inp_layernorm = layer_norm(
-368            cfg.hidden_size,
-369            cfg.layer_norm_epsilon,
-370            vb.pp("input_layernorm"),
-371        )?;
-372        let self_attention = FalconAttention::load(vb.pp("self_attention"), cfg)?;
-373        let post_attention_layernorm = if cfg.parallel_attn {
-374            None
-375        } else {
-376            let ln = layer_norm(
-377                cfg.hidden_size,
-378                cfg.layer_norm_epsilon,
-379                vb.pp("post_attention_layernorm"),
-380            )?;
-381            Some(ln)
-382        };
-383        Ok(Self {
-384            inp_layernorm,
-385            self_attention,
-386            post_attention_layernorm,
-387            mlp,
-388            parallel_attn: cfg.parallel_attn,
-389        })
-390    }
-391
-392    fn forward(&mut self, x: &Tensor, mask: Option<&Tensor>, past_kv_len: usize) -> Result<Tensor> {
-393        let residual = x.clone();
-394        let ln_attn = self.inp_layernorm.forward(x)?;
-395        let attn_output = self.self_attention.forward(&ln_attn, mask, past_kv_len)?;
-396        let (residual, ln_mlp) = match &self.post_attention_layernorm {
-397            None => (residual, ln_attn),
-398            Some(pal) => {
-399                // This should include some dropout.
-400                let residual = (&attn_output + &residual)?;
-401                let ln_mlp = pal.forward(&residual)?;
-402                (residual, ln_mlp)
-403            }
-404        };
-405        let mlp_output = self.mlp.forward(&ln_mlp)?;
-406
-407        let mlp_output = if self.parallel_attn {
-408            (mlp_output + attn_output)?
-409        } else {
-410            mlp_output
-411        };
-412        let output = (mlp_output + residual)?;
-413        Ok(output)
-414    }
-415
-416    pub fn clear_kv_cache(&mut self) {
-417        self.self_attention.clear_kv_cache()
-418    }
-419}
-420
-421#[derive(Debug, Clone)]
-422pub struct Falcon {
-423    word_embeddings: Embedding,
-424    blocks: Vec<FalconDecoderLayer>,
-425    ln_f: LayerNorm,
-426    lm_head: Linear,
-427    config: Config,
-428}
-429
-430fn make_causal_mask(t: usize) -> Result<Tensor> {
-431    let mask: Vec<_> = (0..t)
-432        .flat_map(|i| (0..t).map(move |j| u8::from(j > i)))
-433        .collect();
-434    let mask = Tensor::from_slice(&mask, (t, t), &Device::Cpu)?;
-435    Ok(mask)
-436}
-437
-438fn prepare_attn_mask(b_sz: usize, seq_len: usize) -> Result<Tensor> {
-439    // let mask = Tensor::ones((b_sz, seq_len), DType::U32, &Device::Cpu)?;
-440    let mask = make_causal_mask(seq_len)?;
-441    let mask = mask.broadcast_as((b_sz, 1, seq_len, seq_len))?;
-442    Ok(mask)
-443}
-444
-445impl Falcon {
-446    pub fn config(&self) -> &Config {
-447        &self.config
-448    }
-449
-450    pub fn load(vb: VarBuilder, cfg: Config) -> Result<Self> {
-451        let word_embeddings = embedding(
-452            cfg.vocab_size,
-453            cfg.hidden_size,
-454            vb.pp("transformer.word_embeddings"),
-455        )?;
-456        let blocks = (0..cfg.num_hidden_layers)
-457            .map(|i| FalconDecoderLayer::load(vb.pp(format!("transformer.h.{i}")), &cfg))
-458            .collect::<Result<Vec<_>>>()?;
-459        let ln_f = layer_norm(
-460            cfg.hidden_size,
-461            cfg.layer_norm_epsilon,
-462            vb.pp("transformer.ln_f"),
-463        )?;
-464        let lm_head = linear(cfg.hidden_size, cfg.vocab_size, false, vb.pp("lm_head"))?;
-465        Ok(Self {
-466            word_embeddings,
-467            blocks,
-468            ln_f,
-469            lm_head,
-470            config: cfg,
-471        })
-472    }
-473
-474    pub fn forward(&mut self, input_ids: &Tensor) -> Result<Tensor> {
-475        let (b_sz, seq_len) = input_ids.dims2()?;
-476        let mut hidden_state = self.word_embeddings.forward(input_ids)?;
-477        let past_kv_len = match &self.blocks[0].self_attention.kv_cache {
-478            Some((k, _)) => k.dim(1)?,
-479            None => 0,
-480        };
-481        let causal_mask = if seq_len <= 1 {
-482            None
-483        } else {
-484            Some(prepare_attn_mask(b_sz, seq_len)?.to_device(input_ids.device())?)
-485        };
-486        for block in self.blocks.iter_mut() {
-487            hidden_state = block.forward(&hidden_state, causal_mask.as_ref(), past_kv_len)?;
-488        }
-489        let hidden_state = self.ln_f.forward(&hidden_state)?;
-490        let hidden_state = hidden_state.narrow(1, seq_len - 1, 1)?;
-491        let logits = self.lm_head.forward(&hidden_state)?.squeeze(1)?;
-492        Ok(logits)
-493    }
-494
-495    pub fn clear_kv_cache(&mut self) {
-496        for block in self.blocks.iter_mut() {
-497            block.clear_kv_cache()
-498        }
-499    }
-500}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/fastvit.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/fastvit.rs.html deleted file mode 100644 index 8bb8aa5..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/fastvit.rs.html +++ /dev/null @@ -1,512 +0,0 @@ -fastvit.rs - source

candle_transformers/models/
fastvit.rs

1//! # FastViT inference implementation based on timm
-2//!
-3//! ## Description
-4//! See ["FastViT: A Fast Hybrid Vision Transformer using Structural Reparameterization"](https://arxiv.org/pdf/2303.14189)
-5//!
-6//! Implementation based on [timm model](https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/fastvit.py)
-7
-8use candle::{Context, DType, Result, Tensor, D};
-9use candle_nn::{
-10    batch_norm, conv2d, conv2d_no_bias, linear, linear_no_bias, ops::sigmoid, ops::softmax,
-11    BatchNorm, Conv2d, Conv2dConfig, Func, VarBuilder,
-12};
-13
-14#[derive(serde::Serialize, serde::Deserialize, Clone, Debug)]
-15pub struct Config {
-16    pub exp_ratio: usize,
-17    pub in_channels: usize,
-18    pub blocks: [usize; 4],
-19    pub attn: bool,
-20    pub lkc_use_act: bool,
-21}
-22
-23impl Config {
-24    pub fn t8() -> Self {
-25        Self {
-26            exp_ratio: 3,
-27            in_channels: 48,
-28            blocks: [2, 2, 4, 2],
-29            attn: false,
-30            lkc_use_act: false,
-31        }
-32    }
-33
-34    pub fn t12() -> Self {
-35        Self {
-36            exp_ratio: 3,
-37            in_channels: 64,
-38            blocks: [2, 2, 6, 2],
-39            attn: false,
-40            lkc_use_act: false,
-41        }
-42    }
-43    pub fn s12() -> Self {
-44        Self {
-45            exp_ratio: 4,
-46            in_channels: 64,
-47            blocks: [2, 2, 6, 2],
-48            attn: false,
-49            lkc_use_act: false,
-50        }
-51    }
-52    pub fn sa12() -> Self {
-53        Self {
-54            exp_ratio: 4,
-55            in_channels: 64,
-56            blocks: [2, 2, 6, 2],
-57            attn: true,
-58            lkc_use_act: false,
-59        }
-60    }
-61    pub fn sa24() -> Self {
-62        Self {
-63            exp_ratio: 4,
-64            in_channels: 64,
-65            blocks: [4, 4, 12, 4],
-66            attn: true,
-67            lkc_use_act: false,
-68        }
-69    }
-70    pub fn sa36() -> Self {
-71        Self {
-72            exp_ratio: 4,
-73            in_channels: 64,
-74            blocks: [6, 6, 18, 6],
-75            attn: true,
-76            lkc_use_act: false,
-77        }
-78    }
-79    pub fn ma36() -> Self {
-80        Self {
-81            exp_ratio: 4,
-82            in_channels: 76,
-83            blocks: [6, 6, 18, 6],
-84            attn: true,
-85            lkc_use_act: false,
-86        }
-87    }
-88
-89    // configs used by MobileCLIP's image encoder
-90    pub fn mci0() -> Self {
-91        Self {
-92            exp_ratio: 3,
-93            in_channels: 64,
-94            blocks: [2, 6, 10, 2],
-95            attn: true,
-96            lkc_use_act: true,
-97        }
-98    }
-99    pub fn mci1() -> Self {
-100        Self {
-101            exp_ratio: 3,
-102            in_channels: 64,
-103            blocks: [4, 12, 20, 4],
-104            attn: true,
-105            lkc_use_act: true,
-106        }
-107    }
-108    pub fn mci2() -> Self {
-109        Self {
-110            exp_ratio: 3,
-111            in_channels: 80,
-112            blocks: [4, 12, 24, 4],
-113            attn: true,
-114            lkc_use_act: true,
-115        }
-116    }
-117}
-118
-119fn conv_norm(
-120    in_channels: usize,
-121    out_channels: usize,
-122    kernel: usize,
-123    stride: usize,
-124    vb: VarBuilder,
-125) -> Result<Func<'static>> {
-126    let conv2d_cfg = Conv2dConfig {
-127        stride,
-128        padding: kernel / 2,
-129        groups: in_channels,
-130        ..Default::default()
-131    };
-132
-133    let bn = batch_norm(out_channels, 1e-5, vb.pp("bn"))?;
-134    let conv = conv2d_no_bias(in_channels, out_channels, kernel, conv2d_cfg, vb.pp("conv"))?;
-135    let conv = conv.absorb_bn(&bn)?;
-136    Ok(Func::new(move |xs| {
-137        let xs = xs.apply(&conv)?;
-138        Ok(xs)
-139    }))
-140}
-141
-142fn conv_mlp(dim: usize, exp_ratio: usize, vb: VarBuilder) -> Result<Func<'static>> {
-143    let conv2d_cfg = Conv2dConfig {
-144        ..Default::default()
-145    };
-146
-147    let conv = conv_norm(dim, dim, 7, 1, vb.pp("conv"))?;
-148    let fc1 = conv2d(dim, dim * exp_ratio, 1, conv2d_cfg, vb.pp("fc1"))?;
-149    let fc2 = conv2d(dim * exp_ratio, dim, 1, conv2d_cfg, vb.pp("fc2"))?;
-150
-151    Ok(Func::new(move |xs| {
-152        let xs = xs.apply(&conv)?.apply(&fc1)?.gelu_erf()?.apply(&fc2)?;
-153        Ok(xs)
-154    }))
-155}
-156
-157fn squeeze_and_excitation(
-158    in_channels: usize,
-159    squeeze_channels: usize,
-160    vb: VarBuilder,
-161) -> Result<Func<'static>> {
-162    let conv2d_cfg = Conv2dConfig {
-163        ..Default::default()
-164    };
-165    let fc1 = conv2d(in_channels, squeeze_channels, 1, conv2d_cfg, vb.pp("fc1"))?;
-166    let fc2 = conv2d(squeeze_channels, in_channels, 1, conv2d_cfg, vb.pp("fc2"))?;
-167
-168    Ok(Func::new(move |xs| {
-169        let residual = xs;
-170        let xs = xs.mean_keepdim(D::Minus2)?.mean_keepdim(D::Minus1)?;
-171        let xs = sigmoid(&xs.apply(&fc1)?.relu()?.apply(&fc2)?)?;
-172
-173        residual.broadcast_mul(&xs)
-174    }))
-175}
-176
-177// fuses a convolutional kernel and a batchnorm layer into a convolutional layer
-178// based on the _fuse_bn_tensor method in timm
-179// see https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/byobnet.py#L602
-180fn fuse_conv_bn(weights: &Tensor, bn: BatchNorm) -> Result<(Tensor, Tensor)> {
-181    let (gamma, beta) = bn.weight_and_bias().context("no weight-bias")?;
-182    let mu = bn.running_mean();
-183    let sigma = (bn.running_var() + bn.eps())?.sqrt();
-184    let gps = (gamma / sigma)?;
-185    let bias = (beta - mu * &gps)?;
-186    let weights = weights.broadcast_mul(&gps.reshape(((), 1, 1, 1))?)?;
-187
-188    Ok((weights, bias))
-189}
-190
-191fn mobileone_block(
-192    in_channels: usize,
-193    out_channels: usize,
-194    kernel: usize,
-195    stride: usize,
-196    group_size: usize,
-197    use_act: bool,
-198    vb: VarBuilder,
-199) -> Result<Func<'static>> {
-200    let groups = if group_size == 0 {
-201        1
-202    } else {
-203        in_channels / group_size
-204    };
-205
-206    let padding = kernel / 2;
-207    let conv2d_cfg = Conv2dConfig {
-208        stride,
-209        groups,
-210        padding,
-211        ..Default::default()
-212    };
-213
-214    let mut w = Tensor::zeros(
-215        (out_channels, in_channels / groups, kernel, kernel),
-216        DType::F32,
-217        vb.device(),
-218    )?;
-219    let dim = out_channels;
-220
-221    let mut b = Tensor::zeros(dim, DType::F32, vb.device())?;
-222
-223    let conv_kxk_bn = batch_norm(dim, 1e-5, vb.pp("conv_kxk.0.bn"));
-224    let conv_kxk = conv2d_no_bias(
-225        in_channels,
-226        out_channels,
-227        kernel,
-228        conv2d_cfg,
-229        vb.pp("conv_kxk.0.conv"),
-230    );
-231
-232    if let (Ok(conv), Ok(bn)) = (conv_kxk, conv_kxk_bn) {
-233        let (wk, bk) = fuse_conv_bn(conv.weight(), bn)?;
-234        w = (w + wk)?;
-235        b = (b + bk)?;
-236    };
-237
-238    let conv_scale_bn = batch_norm(dim, 1e-5, vb.pp("conv_scale.bn"));
-239    let conv_scale = conv2d_no_bias(
-240        in_channels,
-241        out_channels,
-242        1,
-243        conv2d_cfg,
-244        vb.pp("conv_scale.conv"),
-245    );
-246
-247    if let (Ok(conv), Ok(bn)) = (conv_scale, conv_scale_bn) {
-248        let (ws, bs) = fuse_conv_bn(conv.weight(), bn)?;
-249        // pad to 3x3
-250        let ws = ws
-251            .pad_with_zeros(D::Minus1, 1, 1)?
-252            .pad_with_zeros(D::Minus2, 1, 1)?;
-253
-254        w = (w + ws)?;
-255        b = (b + bs)?;
-256    };
-257
-258    let se = squeeze_and_excitation(out_channels, out_channels / 16, vb.pp("se"));
-259
-260    // read and reparameterize the identity bn into wi and bi
-261    let identity_bn = batch_norm(dim, 1e-5, vb.pp("identity"));
-262
-263    if let Ok(id_bn) = identity_bn {
-264        let mut weights: Vec<f32> = vec![0.0; w.elem_count()];
-265        let id = in_channels / groups;
-266        // See https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/byobnet.py#L809
-267        for i in 0..in_channels {
-268            if kernel > 1 {
-269                weights[i * kernel * kernel + 4] = 1.0;
-270            } else {
-271                weights[i * (id + 1)] = 1.0;
-272            }
-273        }
-274
-275        let weights = &Tensor::from_vec(weights, w.shape(), w.device())?;
-276        let (wi, bi) = fuse_conv_bn(weights, id_bn)?;
-277
-278        w = (w + wi)?;
-279        b = (b + bi)?;
-280    };
-281    let reparam_conv = Conv2d::new(w, Some(b), conv2d_cfg);
-282
-283    Ok(Func::new(move |xs| {
-284        let mut xs = xs.apply(&reparam_conv)?;
-285        if let Ok(f) = &se {
-286            xs = xs.apply(f)?;
-287        }
-288        if use_act {
-289            xs = xs.gelu_erf()?;
-290        };
-291        Ok(xs)
-292    }))
-293}
-294
-295fn repmixer(dim: usize, kernel: usize, vb: VarBuilder) -> Result<Func<'static>> {
-296    let gamma = vb.get((dim, 1, 1), "layer_scale.gamma")?;
-297    let norm = mobileone_block(dim, dim, kernel, 1, 1, false, vb.pp("norm"))?;
-298    let mixer = mobileone_block(dim, dim, kernel, 1, 1, false, vb.pp("mixer"))?;
-299
-300    Ok(Func::new(move |xs| {
-301        let residual = xs.clone();
-302        let xs = (xs.apply(&mixer)? - xs.apply(&norm)?)?;
-303        let xs = xs.broadcast_mul(&gamma.reshape((1, (), 1, 1))?)?;
-304        let xs = (xs + residual)?;
-305        Ok(xs)
-306    }))
-307}
-308
-309fn repmixer_block(dim: usize, exp_ratio: usize, vb: VarBuilder) -> Result<Func<'static>> {
-310    let gamma = vb.get((dim, 1, 1), "layer_scale.gamma")?;
-311    let token_mixer = repmixer(dim, 3, vb.pp("token_mixer"))?;
-312    let mlp = conv_mlp(dim, exp_ratio, vb.pp("mlp"))?;
-313
-314    Ok(Func::new(move |xs| {
-315        let residual = xs.apply(&token_mixer)?;
-316        let mut xs = residual.apply(&mlp)?;
-317        xs = xs.broadcast_mul(&gamma.reshape((1, (), 1, 1))?)?;
-318        let xs = (xs + residual)?;
-319        Ok(xs)
-320    }))
-321}
-322
-323fn positional_encoding(dim: usize, vb: VarBuilder) -> Result<Func<'static>> {
-324    let conv2d_cfg = Conv2dConfig {
-325        stride: 1,
-326        padding: 3,
-327        groups: dim,
-328        ..Default::default()
-329    };
-330
-331    let conv = conv2d(dim, dim, 7, conv2d_cfg, vb.pp("pos_enc"))?;
-332
-333    Ok(Func::new(move |xs| {
-334        let xs = (xs + xs.apply(&conv)?)?;
-335        Ok(xs)
-336    }))
-337}
-338
-339fn attention(dim: usize, vb: VarBuilder) -> Result<Func<'static>> {
-340    let qkv = linear_no_bias(dim, dim * 3, vb.pp("qkv"))?;
-341    let proj = linear(dim, dim, vb.pp("proj"))?;
-342    let head_dim = 32;
-343    let num_heads = dim / head_dim;
-344    let scale = (head_dim as f64).powf(-0.5);
-345
-346    Ok(Func::new(move |xs| {
-347        let xs = xs.clone();
-348        let (b, c, h, w) = xs.dims4()?;
-349        let n = h * w;
-350        let xs = xs.flatten_from(2)?.transpose(D::Minus1, D::Minus2)?;
-351        let qkv = xs
-352            .apply(&qkv)?
-353            .reshape((b, n, 3, num_heads, head_dim))?
-354            .permute((2, 0, 3, 1, 4))?;
-355
-356        let q = qkv.get(0)?;
-357        let k = qkv.get(1)?;
-358        let v = qkv.get(2)?;
-359
-360        let q = (q * scale)?;
-361
-362        let att = q.matmul(&k.transpose(D::Minus2, D::Minus1)?)?;
-363        let att = softmax(&att, D::Minus1)?;
-364        let xs = att.matmul(&v)?;
-365
-366        let xs = xs.transpose(1, 2)?.reshape((b, n, c))?;
-367        let xs = xs.apply(&proj)?;
-368        let xs = xs.transpose(D::Minus1, D::Minus2)?.reshape((b, c, h, w))?;
-369
-370        Ok(xs)
-371    }))
-372}
-373
-374fn attention_block(dim: usize, exp_ratio: usize, vb: VarBuilder) -> Result<Func<'static>> {
-375    let gamma1 = vb.get((dim, 1, 1), "layer_scale_1.gamma")?;
-376    let gamma2 = vb.get((dim, 1, 1), "layer_scale_2.gamma")?;
-377    let norm = batch_norm(dim, 1e-5, vb.pp("norm"))?;
-378    let token_mixer = attention(dim, vb.pp("token_mixer"))?;
-379    let mlp = conv_mlp(dim, exp_ratio, vb.pp("mlp"))?;
-380
-381    Ok(Func::new(move |xs| {
-382        let xs = xs.clone();
-383        let xs = (&xs
-384            + &xs
-385                .apply_t(&norm, false)?
-386                .apply(&token_mixer)?
-387                .broadcast_mul(&gamma1.reshape((1, (), 1, 1))?)?)?;
-388
-389        let xs = (&xs
-390            + &xs
-391                .apply(&mlp)?
-392                .broadcast_mul(&gamma2.reshape((1, (), 1, 1))?)?)?;
-393
-394        Ok(xs)
-395    }))
-396}
-397
-398fn fastvit_stage(cfg: &Config, idx: usize, vb: VarBuilder) -> Result<Func<'static>> {
-399    let nblocks = cfg.blocks[idx];
-400    let mut blocks = Vec::with_capacity(nblocks);
-401
-402    let dim = cfg.in_channels << idx;
-403    let downsample = fastvit_patch_embed(dim / 2, dim, cfg.lkc_use_act, vb.pp("downsample"));
-404    for block_idx in 0..nblocks {
-405        let block = if cfg.attn && idx == 3 {
-406            attention_block(dim, cfg.exp_ratio, vb.pp(format!("blocks.{block_idx}")))?
-407        } else {
-408            repmixer_block(dim, cfg.exp_ratio, vb.pp(format!("blocks.{block_idx}")))?
-409        };
-410        blocks.push(block);
-411    }
-412    let pos_emb = positional_encoding(dim, vb.pp("pos_emb"));
-413
-414    Ok(Func::new(move |xs| {
-415        let mut xs = xs.clone();
-416        if let Ok(ds) = &downsample {
-417            xs = xs.apply(ds)?;
-418        }
-419        if let Ok(pos) = &pos_emb {
-420            xs = xs.apply(pos)?;
-421        }
-422        for block in blocks.iter() {
-423            xs = xs.apply(block)?;
-424        }
-425        Ok(xs)
-426    }))
-427}
-428
-429fn fastvit_patch_embed(
-430    in_channels: usize,
-431    out_channels: usize,
-432    use_act: bool,
-433    vb: VarBuilder,
-434) -> Result<Func<'static>> {
-435    let lk = conv_norm(in_channels, out_channels, 7, 2, vb.pp("proj.0.large_conv"))?;
-436    let sk = conv_norm(in_channels, out_channels, 3, 2, vb.pp("proj.0.small_conv"))?;
-437    let se = squeeze_and_excitation(out_channels, out_channels / 4, vb.pp("proj.0.se"));
-438    let mb = mobileone_block(out_channels, out_channels, 1, 1, 0, true, vb.pp("proj.1"))?;
-439
-440    Ok(Func::new(move |xs| {
-441        let mut xs = (xs.apply(&lk)? + xs.apply(&sk)?)?;
-442        if let Ok(f) = &se {
-443            xs = xs.apply(f)?;
-444        }
-445        if use_act {
-446            xs = xs.gelu_erf()?;
-447        };
-448        let xs = xs.apply(&mb)?;
-449        Ok(xs)
-450    }))
-451}
-452
-453fn fastvit_stem(in_channels: usize, out_channels: usize, vb: VarBuilder) -> Result<Func<'static>> {
-454    let mb0 = mobileone_block(in_channels, out_channels, 3, 2, 0, true, vb.pp(0))?;
-455    let mb1 = mobileone_block(out_channels, out_channels, 3, 2, 1, true, vb.pp(1))?;
-456    let mb2 = mobileone_block(out_channels, out_channels, 1, 1, 0, true, vb.pp(2))?;
-457    Ok(Func::new(move |xs| {
-458        let xs = xs.apply(&mb0)?.apply(&mb1)?.apply(&mb2)?;
-459        Ok(xs)
-460    }))
-461}
-462
-463// Build a fastvit model for a given configuration.
-464fn fastvit_model(cfg: &Config, nclasses: Option<usize>, vb: VarBuilder) -> Result<Func<'static>> {
-465    let cls = match nclasses {
-466        None => None,
-467        Some(nclasses) => {
-468            let linear = linear(cfg.in_channels * 16, nclasses, vb.pp("head.fc"))?;
-469            Some(linear)
-470        }
-471    };
-472
-473    let stem = fastvit_stem(3, cfg.in_channels, vb.pp("stem"))?;
-474    let final_conv = mobileone_block(
-475        cfg.in_channels * 8,
-476        cfg.in_channels * 16,
-477        3,
-478        1,
-479        1,
-480        true,
-481        vb.pp("final_conv"),
-482    )?;
-483
-484    let vb = vb.pp("stages");
-485    let stage1 = fastvit_stage(cfg, 0, vb.pp(0))?;
-486    let stage2 = fastvit_stage(cfg, 1, vb.pp(1))?;
-487    let stage3 = fastvit_stage(cfg, 2, vb.pp(2))?;
-488    let stage4 = fastvit_stage(cfg, 3, vb.pp(3))?;
-489
-490    Ok(Func::new(move |xs| {
-491        let xs = xs
-492            .apply(&stem)?
-493            .apply(&stage1)?
-494            .apply(&stage2)?
-495            .apply(&stage3)?
-496            .apply(&stage4)?
-497            .apply(&final_conv)?;
-498        match &cls {
-499            None => Ok(xs),
-500            Some(cls) => xs.mean(D::Minus2)?.mean(D::Minus1)?.apply(cls),
-501        }
-502    }))
-503}
-504
-505pub fn fastvit(cfg: &Config, nclasses: usize, vb: VarBuilder) -> Result<Func<'static>> {
-506    fastvit_model(cfg, Some(nclasses), vb)
-507}
-508
-509pub fn fastvit_no_final_layer(cfg: &Config, vb: VarBuilder) -> Result<Func<'static>> {
-510    fastvit_model(cfg, None, vb)
-511}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/flux/autoencoder.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/flux/autoencoder.rs.html deleted file mode 100644 index 87af193..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/flux/autoencoder.rs.html +++ /dev/null @@ -1,441 +0,0 @@ -autoencoder.rs - source

candle_transformers/models/flux/
autoencoder.rs

1use candle::{Result, Tensor, D};
-2use candle_nn::{conv2d, group_norm, Conv2d, GroupNorm, VarBuilder};
-3
-4// https://github.com/black-forest-labs/flux/blob/727e3a71faf37390f318cf9434f0939653302b60/src/flux/modules/autoencoder.py#L9
-5#[derive(Debug, Clone)]
-6pub struct Config {
-7    pub resolution: usize,
-8    pub in_channels: usize,
-9    pub ch: usize,
-10    pub out_ch: usize,
-11    pub ch_mult: Vec<usize>,
-12    pub num_res_blocks: usize,
-13    pub z_channels: usize,
-14    pub scale_factor: f64,
-15    pub shift_factor: f64,
-16}
-17
-18impl Config {
-19    // https://github.com/black-forest-labs/flux/blob/727e3a71faf37390f318cf9434f0939653302b60/src/flux/util.py#L47
-20    pub fn dev() -> Self {
-21        Self {
-22            resolution: 256,
-23            in_channels: 3,
-24            ch: 128,
-25            out_ch: 3,
-26            ch_mult: vec![1, 2, 4, 4],
-27            num_res_blocks: 2,
-28            z_channels: 16,
-29            scale_factor: 0.3611,
-30            shift_factor: 0.1159,
-31        }
-32    }
-33
-34    // https://github.com/black-forest-labs/flux/blob/727e3a71faf37390f318cf9434f0939653302b60/src/flux/util.py#L79
-35    pub fn schnell() -> Self {
-36        Self {
-37            resolution: 256,
-38            in_channels: 3,
-39            ch: 128,
-40            out_ch: 3,
-41            ch_mult: vec![1, 2, 4, 4],
-42            num_res_blocks: 2,
-43            z_channels: 16,
-44            scale_factor: 0.3611,
-45            shift_factor: 0.1159,
-46        }
-47    }
-48}
-49
-50fn scaled_dot_product_attention(q: &Tensor, k: &Tensor, v: &Tensor) -> Result<Tensor> {
-51    let dim = q.dim(D::Minus1)?;
-52    let scale_factor = 1.0 / (dim as f64).sqrt();
-53    let attn_weights = (q.matmul(&k.t()?)? * scale_factor)?;
-54    candle_nn::ops::softmax_last_dim(&attn_weights)?.matmul(v)
-55}
-56
-57#[derive(Debug, Clone)]
-58struct AttnBlock {
-59    q: Conv2d,
-60    k: Conv2d,
-61    v: Conv2d,
-62    proj_out: Conv2d,
-63    norm: GroupNorm,
-64}
-65
-66impl AttnBlock {
-67    fn new(in_c: usize, vb: VarBuilder) -> Result<Self> {
-68        let q = conv2d(in_c, in_c, 1, Default::default(), vb.pp("q"))?;
-69        let k = conv2d(in_c, in_c, 1, Default::default(), vb.pp("k"))?;
-70        let v = conv2d(in_c, in_c, 1, Default::default(), vb.pp("v"))?;
-71        let proj_out = conv2d(in_c, in_c, 1, Default::default(), vb.pp("proj_out"))?;
-72        let norm = group_norm(32, in_c, 1e-6, vb.pp("norm"))?;
-73        Ok(Self {
-74            q,
-75            k,
-76            v,
-77            proj_out,
-78            norm,
-79        })
-80    }
-81}
-82
-83impl candle::Module for AttnBlock {
-84    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-85        let init_xs = xs;
-86        let xs = xs.apply(&self.norm)?;
-87        let q = xs.apply(&self.q)?;
-88        let k = xs.apply(&self.k)?;
-89        let v = xs.apply(&self.v)?;
-90        let (b, c, h, w) = q.dims4()?;
-91        let q = q.flatten_from(2)?.t()?.unsqueeze(1)?;
-92        let k = k.flatten_from(2)?.t()?.unsqueeze(1)?;
-93        let v = v.flatten_from(2)?.t()?.unsqueeze(1)?;
-94        let xs = scaled_dot_product_attention(&q, &k, &v)?;
-95        let xs = xs.squeeze(1)?.t()?.reshape((b, c, h, w))?;
-96        xs.apply(&self.proj_out)? + init_xs
-97    }
-98}
-99
-100#[derive(Debug, Clone)]
-101struct ResnetBlock {
-102    norm1: GroupNorm,
-103    conv1: Conv2d,
-104    norm2: GroupNorm,
-105    conv2: Conv2d,
-106    nin_shortcut: Option<Conv2d>,
-107}
-108
-109impl ResnetBlock {
-110    fn new(in_c: usize, out_c: usize, vb: VarBuilder) -> Result<Self> {
-111        let conv_cfg = candle_nn::Conv2dConfig {
-112            padding: 1,
-113            ..Default::default()
-114        };
-115        let norm1 = group_norm(32, in_c, 1e-6, vb.pp("norm1"))?;
-116        let conv1 = conv2d(in_c, out_c, 3, conv_cfg, vb.pp("conv1"))?;
-117        let norm2 = group_norm(32, out_c, 1e-6, vb.pp("norm2"))?;
-118        let conv2 = conv2d(out_c, out_c, 3, conv_cfg, vb.pp("conv2"))?;
-119        let nin_shortcut = if in_c == out_c {
-120            None
-121        } else {
-122            Some(conv2d(
-123                in_c,
-124                out_c,
-125                1,
-126                Default::default(),
-127                vb.pp("nin_shortcut"),
-128            )?)
-129        };
-130        Ok(Self {
-131            norm1,
-132            conv1,
-133            norm2,
-134            conv2,
-135            nin_shortcut,
-136        })
-137    }
-138}
-139
-140impl candle::Module for ResnetBlock {
-141    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-142        let h = xs
-143            .apply(&self.norm1)?
-144            .apply(&candle_nn::Activation::Swish)?
-145            .apply(&self.conv1)?
-146            .apply(&self.norm2)?
-147            .apply(&candle_nn::Activation::Swish)?
-148            .apply(&self.conv2)?;
-149        match self.nin_shortcut.as_ref() {
-150            None => xs + h,
-151            Some(c) => xs.apply(c)? + h,
-152        }
-153    }
-154}
-155
-156#[derive(Debug, Clone)]
-157struct Downsample {
-158    conv: Conv2d,
-159}
-160
-161impl Downsample {
-162    fn new(in_c: usize, vb: VarBuilder) -> Result<Self> {
-163        let conv_cfg = candle_nn::Conv2dConfig {
-164            stride: 2,
-165            ..Default::default()
-166        };
-167        let conv = conv2d(in_c, in_c, 3, conv_cfg, vb.pp("conv"))?;
-168        Ok(Self { conv })
-169    }
-170}
-171
-172impl candle::Module for Downsample {
-173    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-174        let xs = xs.pad_with_zeros(D::Minus1, 0, 1)?;
-175        let xs = xs.pad_with_zeros(D::Minus2, 0, 1)?;
-176        xs.apply(&self.conv)
-177    }
-178}
-179
-180#[derive(Debug, Clone)]
-181struct Upsample {
-182    conv: Conv2d,
-183}
-184
-185impl Upsample {
-186    fn new(in_c: usize, vb: VarBuilder) -> Result<Self> {
-187        let conv_cfg = candle_nn::Conv2dConfig {
-188            padding: 1,
-189            ..Default::default()
-190        };
-191        let conv = conv2d(in_c, in_c, 3, conv_cfg, vb.pp("conv"))?;
-192        Ok(Self { conv })
-193    }
-194}
-195
-196impl candle::Module for Upsample {
-197    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-198        let (_, _, h, w) = xs.dims4()?;
-199        xs.upsample_nearest2d(h * 2, w * 2)?.apply(&self.conv)
-200    }
-201}
-202
-203#[derive(Debug, Clone)]
-204struct DownBlock {
-205    block: Vec<ResnetBlock>,
-206    downsample: Option<Downsample>,
-207}
-208
-209#[derive(Debug, Clone)]
-210pub struct Encoder {
-211    conv_in: Conv2d,
-212    mid_block_1: ResnetBlock,
-213    mid_attn_1: AttnBlock,
-214    mid_block_2: ResnetBlock,
-215    norm_out: GroupNorm,
-216    conv_out: Conv2d,
-217    down: Vec<DownBlock>,
-218}
-219
-220impl Encoder {
-221    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-222        let conv_cfg = candle_nn::Conv2dConfig {
-223            padding: 1,
-224            ..Default::default()
-225        };
-226        let mut block_in = cfg.ch;
-227        let conv_in = conv2d(cfg.in_channels, block_in, 3, conv_cfg, vb.pp("conv_in"))?;
-228
-229        let mut down = Vec::with_capacity(cfg.ch_mult.len());
-230        let vb_d = vb.pp("down");
-231        for (i_level, ch_mult) in cfg.ch_mult.iter().enumerate() {
-232            let mut block = Vec::with_capacity(cfg.num_res_blocks);
-233            let vb_d = vb_d.pp(i_level);
-234            let vb_b = vb_d.pp("block");
-235            let in_ch_mult = if i_level == 0 {
-236                1
-237            } else {
-238                cfg.ch_mult[i_level - 1]
-239            };
-240            block_in = cfg.ch * in_ch_mult;
-241            let block_out = cfg.ch * ch_mult;
-242            for i_block in 0..cfg.num_res_blocks {
-243                let b = ResnetBlock::new(block_in, block_out, vb_b.pp(i_block))?;
-244                block.push(b);
-245                block_in = block_out;
-246            }
-247            let downsample = if i_level != cfg.ch_mult.len() - 1 {
-248                Some(Downsample::new(block_in, vb_d.pp("downsample"))?)
-249            } else {
-250                None
-251            };
-252            let block = DownBlock { block, downsample };
-253            down.push(block)
-254        }
-255
-256        let mid_block_1 = ResnetBlock::new(block_in, block_in, vb.pp("mid.block_1"))?;
-257        let mid_attn_1 = AttnBlock::new(block_in, vb.pp("mid.attn_1"))?;
-258        let mid_block_2 = ResnetBlock::new(block_in, block_in, vb.pp("mid.block_2"))?;
-259        let conv_out = conv2d(block_in, 2 * cfg.z_channels, 3, conv_cfg, vb.pp("conv_out"))?;
-260        let norm_out = group_norm(32, block_in, 1e-6, vb.pp("norm_out"))?;
-261        Ok(Self {
-262            conv_in,
-263            mid_block_1,
-264            mid_attn_1,
-265            mid_block_2,
-266            norm_out,
-267            conv_out,
-268            down,
-269        })
-270    }
-271}
-272
-273impl candle_nn::Module for Encoder {
-274    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-275        let mut h = xs.apply(&self.conv_in)?;
-276        for block in self.down.iter() {
-277            for b in block.block.iter() {
-278                h = h.apply(b)?
-279            }
-280            if let Some(ds) = block.downsample.as_ref() {
-281                h = h.apply(ds)?
-282            }
-283        }
-284        h.apply(&self.mid_block_1)?
-285            .apply(&self.mid_attn_1)?
-286            .apply(&self.mid_block_2)?
-287            .apply(&self.norm_out)?
-288            .apply(&candle_nn::Activation::Swish)?
-289            .apply(&self.conv_out)
-290    }
-291}
-292
-293#[derive(Debug, Clone)]
-294struct UpBlock {
-295    block: Vec<ResnetBlock>,
-296    upsample: Option<Upsample>,
-297}
-298
-299#[derive(Debug, Clone)]
-300pub struct Decoder {
-301    conv_in: Conv2d,
-302    mid_block_1: ResnetBlock,
-303    mid_attn_1: AttnBlock,
-304    mid_block_2: ResnetBlock,
-305    norm_out: GroupNorm,
-306    conv_out: Conv2d,
-307    up: Vec<UpBlock>,
-308}
-309
-310impl Decoder {
-311    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-312        let conv_cfg = candle_nn::Conv2dConfig {
-313            padding: 1,
-314            ..Default::default()
-315        };
-316        let mut block_in = cfg.ch * cfg.ch_mult.last().unwrap_or(&1);
-317        let conv_in = conv2d(cfg.z_channels, block_in, 3, conv_cfg, vb.pp("conv_in"))?;
-318        let mid_block_1 = ResnetBlock::new(block_in, block_in, vb.pp("mid.block_1"))?;
-319        let mid_attn_1 = AttnBlock::new(block_in, vb.pp("mid.attn_1"))?;
-320        let mid_block_2 = ResnetBlock::new(block_in, block_in, vb.pp("mid.block_2"))?;
-321
-322        let mut up = Vec::with_capacity(cfg.ch_mult.len());
-323        let vb_u = vb.pp("up");
-324        for (i_level, ch_mult) in cfg.ch_mult.iter().enumerate().rev() {
-325            let block_out = cfg.ch * ch_mult;
-326            let vb_u = vb_u.pp(i_level);
-327            let vb_b = vb_u.pp("block");
-328            let mut block = Vec::with_capacity(cfg.num_res_blocks + 1);
-329            for i_block in 0..=cfg.num_res_blocks {
-330                let b = ResnetBlock::new(block_in, block_out, vb_b.pp(i_block))?;
-331                block.push(b);
-332                block_in = block_out;
-333            }
-334            let upsample = if i_level != 0 {
-335                Some(Upsample::new(block_in, vb_u.pp("upsample"))?)
-336            } else {
-337                None
-338            };
-339            let block = UpBlock { block, upsample };
-340            up.push(block)
-341        }
-342        up.reverse();
-343
-344        let norm_out = group_norm(32, block_in, 1e-6, vb.pp("norm_out"))?;
-345        let conv_out = conv2d(block_in, cfg.out_ch, 3, conv_cfg, vb.pp("conv_out"))?;
-346        Ok(Self {
-347            conv_in,
-348            mid_block_1,
-349            mid_attn_1,
-350            mid_block_2,
-351            norm_out,
-352            conv_out,
-353            up,
-354        })
-355    }
-356}
-357
-358impl candle_nn::Module for Decoder {
-359    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-360        let h = xs.apply(&self.conv_in)?;
-361        let mut h = h
-362            .apply(&self.mid_block_1)?
-363            .apply(&self.mid_attn_1)?
-364            .apply(&self.mid_block_2)?;
-365        for block in self.up.iter().rev() {
-366            for b in block.block.iter() {
-367                h = h.apply(b)?
-368            }
-369            if let Some(us) = block.upsample.as_ref() {
-370                h = h.apply(us)?
-371            }
-372        }
-373        h.apply(&self.norm_out)?
-374            .apply(&candle_nn::Activation::Swish)?
-375            .apply(&self.conv_out)
-376    }
-377}
-378
-379#[derive(Debug, Clone)]
-380pub struct DiagonalGaussian {
-381    sample: bool,
-382    chunk_dim: usize,
-383}
-384
-385impl DiagonalGaussian {
-386    pub fn new(sample: bool, chunk_dim: usize) -> Result<Self> {
-387        Ok(Self { sample, chunk_dim })
-388    }
-389}
-390
-391impl candle_nn::Module for DiagonalGaussian {
-392    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-393        let chunks = xs.chunk(2, self.chunk_dim)?;
-394        if self.sample {
-395            let std = (&chunks[1] * 0.5)?.exp()?;
-396            &chunks[0] + (std * chunks[0].randn_like(0., 1.))?
-397        } else {
-398            Ok(chunks[0].clone())
-399        }
-400    }
-401}
-402
-403#[derive(Debug, Clone)]
-404pub struct AutoEncoder {
-405    encoder: Encoder,
-406    decoder: Decoder,
-407    reg: DiagonalGaussian,
-408    shift_factor: f64,
-409    scale_factor: f64,
-410}
-411
-412impl AutoEncoder {
-413    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-414        let encoder = Encoder::new(cfg, vb.pp("encoder"))?;
-415        let decoder = Decoder::new(cfg, vb.pp("decoder"))?;
-416        let reg = DiagonalGaussian::new(true, 1)?;
-417        Ok(Self {
-418            encoder,
-419            decoder,
-420            reg,
-421            scale_factor: cfg.scale_factor,
-422            shift_factor: cfg.shift_factor,
-423        })
-424    }
-425
-426    pub fn encode(&self, xs: &Tensor) -> Result<Tensor> {
-427        let z = xs.apply(&self.encoder)?.apply(&self.reg)?;
-428        (z - self.shift_factor)? * self.scale_factor
-429    }
-430    pub fn decode(&self, xs: &Tensor) -> Result<Tensor> {
-431        let xs = ((xs / self.scale_factor)? + self.shift_factor)?;
-432        xs.apply(&self.decoder)
-433    }
-434}
-435
-436impl candle::Module for AutoEncoder {
-437    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-438        self.decode(&self.encode(xs)?)
-439    }
-440}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/flux/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/flux/mod.rs.html deleted file mode 100644 index 3cc4f57..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/flux/mod.rs.html +++ /dev/null @@ -1,44 +0,0 @@ -mod.rs - source

candle_transformers/models/flux/
mod.rs

1//! Flux  Model
-2//!
-3//! Flux is a 12B rectified flow transformer capable of generating images from text descriptions.
-4//!
-5//! - 🤗 [Hugging Face Model](https://huggingface.co/black-forest-labs/FLUX.1-schnell)
-6//! - 💻 [GitHub Repository](https://github.com/black-forest-labs/flux)
-7//! - 📝 [Blog Post](https://blackforestlabs.ai/announcing-black-forest-labs/)
-8//!
-9//! # Usage
-10//!
-11//! ```bash
-12//! cargo run --features cuda \
-13//!     --example flux -r -- \
-14//!     --height 1024 --width 1024 \
-15//!     --prompt "a rusty robot walking on a beach holding a small torch, \
-16//!               the robot has the word \"rust\" written on it, high quality, 4k"
-17//! ```
-18//!
-19//! <div align=center>
-20//!   <img src="https://github.com/huggingface/candle/raw/main/candle-examples/examples/flux/assets/flux-robot.jpg" alt="" width=320>
-21//! </div>
-22//!
-23
-24use candle::{Result, Tensor};
-25
-26pub trait WithForward {
-27    #[allow(clippy::too_many_arguments)]
-28    fn forward(
-29        &self,
-30        img: &Tensor,
-31        img_ids: &Tensor,
-32        txt: &Tensor,
-33        txt_ids: &Tensor,
-34        timesteps: &Tensor,
-35        y: &Tensor,
-36        guidance: Option<&Tensor>,
-37    ) -> Result<Tensor>;
-38}
-39
-40pub mod autoencoder;
-41pub mod model;
-42pub mod quantized_model;
-43pub mod sampling;
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/flux/model.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/flux/model.rs.html deleted file mode 100644 index 9869dff..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/flux/model.rs.html +++ /dev/null @@ -1,627 +0,0 @@ -model.rs - source

candle_transformers/models/flux/
model.rs

1use candle::{DType, IndexOp, Result, Tensor, D};
-2use candle_nn::{LayerNorm, Linear, RmsNorm, VarBuilder};
-3
-4// https://github.com/black-forest-labs/flux/blob/727e3a71faf37390f318cf9434f0939653302b60/src/flux/model.py#L12
-5#[derive(Debug, Clone)]
-6pub struct Config {
-7    pub in_channels: usize,
-8    pub vec_in_dim: usize,
-9    pub context_in_dim: usize,
-10    pub hidden_size: usize,
-11    pub mlp_ratio: f64,
-12    pub num_heads: usize,
-13    pub depth: usize,
-14    pub depth_single_blocks: usize,
-15    pub axes_dim: Vec<usize>,
-16    pub theta: usize,
-17    pub qkv_bias: bool,
-18    pub guidance_embed: bool,
-19}
-20
-21impl Config {
-22    // https://github.com/black-forest-labs/flux/blob/727e3a71faf37390f318cf9434f0939653302b60/src/flux/util.py#L32
-23    pub fn dev() -> Self {
-24        Self {
-25            in_channels: 64,
-26            vec_in_dim: 768,
-27            context_in_dim: 4096,
-28            hidden_size: 3072,
-29            mlp_ratio: 4.0,
-30            num_heads: 24,
-31            depth: 19,
-32            depth_single_blocks: 38,
-33            axes_dim: vec![16, 56, 56],
-34            theta: 10_000,
-35            qkv_bias: true,
-36            guidance_embed: true,
-37        }
-38    }
-39
-40    // https://github.com/black-forest-labs/flux/blob/727e3a71faf37390f318cf9434f0939653302b60/src/flux/util.py#L64
-41    pub fn schnell() -> Self {
-42        Self {
-43            in_channels: 64,
-44            vec_in_dim: 768,
-45            context_in_dim: 4096,
-46            hidden_size: 3072,
-47            mlp_ratio: 4.0,
-48            num_heads: 24,
-49            depth: 19,
-50            depth_single_blocks: 38,
-51            axes_dim: vec![16, 56, 56],
-52            theta: 10_000,
-53            qkv_bias: true,
-54            guidance_embed: false,
-55        }
-56    }
-57}
-58
-59fn layer_norm(dim: usize, vb: VarBuilder) -> Result<LayerNorm> {
-60    let ws = Tensor::ones(dim, vb.dtype(), vb.device())?;
-61    Ok(LayerNorm::new_no_bias(ws, 1e-6))
-62}
-63
-64fn scaled_dot_product_attention(q: &Tensor, k: &Tensor, v: &Tensor) -> Result<Tensor> {
-65    let dim = q.dim(D::Minus1)?;
-66    let scale_factor = 1.0 / (dim as f64).sqrt();
-67    let mut batch_dims = q.dims().to_vec();
-68    batch_dims.pop();
-69    batch_dims.pop();
-70    let q = q.flatten_to(batch_dims.len() - 1)?;
-71    let k = k.flatten_to(batch_dims.len() - 1)?;
-72    let v = v.flatten_to(batch_dims.len() - 1)?;
-73    let attn_weights = (q.matmul(&k.t()?)? * scale_factor)?;
-74    let attn_scores = candle_nn::ops::softmax_last_dim(&attn_weights)?.matmul(&v)?;
-75    batch_dims.push(attn_scores.dim(D::Minus2)?);
-76    batch_dims.push(attn_scores.dim(D::Minus1)?);
-77    attn_scores.reshape(batch_dims)
-78}
-79
-80fn rope(pos: &Tensor, dim: usize, theta: usize) -> Result<Tensor> {
-81    if dim % 2 == 1 {
-82        candle::bail!("dim {dim} is odd")
-83    }
-84    let dev = pos.device();
-85    let theta = theta as f64;
-86    let inv_freq: Vec<_> = (0..dim)
-87        .step_by(2)
-88        .map(|i| 1f32 / theta.powf(i as f64 / dim as f64) as f32)
-89        .collect();
-90    let inv_freq_len = inv_freq.len();
-91    let inv_freq = Tensor::from_vec(inv_freq, (1, 1, inv_freq_len), dev)?;
-92    let inv_freq = inv_freq.to_dtype(pos.dtype())?;
-93    let freqs = pos.unsqueeze(2)?.broadcast_mul(&inv_freq)?;
-94    let cos = freqs.cos()?;
-95    let sin = freqs.sin()?;
-96    let out = Tensor::stack(&[&cos, &sin.neg()?, &sin, &cos], 3)?;
-97    let (b, n, d, _ij) = out.dims4()?;
-98    out.reshape((b, n, d, 2, 2))
-99}
-100
-101fn apply_rope(x: &Tensor, freq_cis: &Tensor) -> Result<Tensor> {
-102    let dims = x.dims();
-103    let (b_sz, n_head, seq_len, n_embd) = x.dims4()?;
-104    let x = x.reshape((b_sz, n_head, seq_len, n_embd / 2, 2))?;
-105    let x0 = x.narrow(D::Minus1, 0, 1)?;
-106    let x1 = x.narrow(D::Minus1, 1, 1)?;
-107    let fr0 = freq_cis.get_on_dim(D::Minus1, 0)?;
-108    let fr1 = freq_cis.get_on_dim(D::Minus1, 1)?;
-109    (fr0.broadcast_mul(&x0)? + fr1.broadcast_mul(&x1)?)?.reshape(dims.to_vec())
-110}
-111
-112pub(crate) fn attention(q: &Tensor, k: &Tensor, v: &Tensor, pe: &Tensor) -> Result<Tensor> {
-113    let q = apply_rope(q, pe)?.contiguous()?;
-114    let k = apply_rope(k, pe)?.contiguous()?;
-115    let x = scaled_dot_product_attention(&q, &k, v)?;
-116    x.transpose(1, 2)?.flatten_from(2)
-117}
-118
-119pub(crate) fn timestep_embedding(t: &Tensor, dim: usize, dtype: DType) -> Result<Tensor> {
-120    const TIME_FACTOR: f64 = 1000.;
-121    const MAX_PERIOD: f64 = 10000.;
-122    if dim % 2 == 1 {
-123        candle::bail!("{dim} is odd")
-124    }
-125    let dev = t.device();
-126    let half = dim / 2;
-127    let t = (t * TIME_FACTOR)?;
-128    let arange = Tensor::arange(0, half as u32, dev)?.to_dtype(candle::DType::F32)?;
-129    let freqs = (arange * (-MAX_PERIOD.ln() / half as f64))?.exp()?;
-130    let args = t
-131        .unsqueeze(1)?
-132        .to_dtype(candle::DType::F32)?
-133        .broadcast_mul(&freqs.unsqueeze(0)?)?;
-134    let emb = Tensor::cat(&[args.cos()?, args.sin()?], D::Minus1)?.to_dtype(dtype)?;
-135    Ok(emb)
-136}
-137
-138#[derive(Debug, Clone)]
-139pub struct EmbedNd {
-140    #[allow(unused)]
-141    dim: usize,
-142    theta: usize,
-143    axes_dim: Vec<usize>,
-144}
-145
-146impl EmbedNd {
-147    pub fn new(dim: usize, theta: usize, axes_dim: Vec<usize>) -> Self {
-148        Self {
-149            dim,
-150            theta,
-151            axes_dim,
-152        }
-153    }
-154}
-155
-156impl candle::Module for EmbedNd {
-157    fn forward(&self, ids: &Tensor) -> Result<Tensor> {
-158        let n_axes = ids.dim(D::Minus1)?;
-159        let mut emb = Vec::with_capacity(n_axes);
-160        for idx in 0..n_axes {
-161            let r = rope(
-162                &ids.get_on_dim(D::Minus1, idx)?,
-163                self.axes_dim[idx],
-164                self.theta,
-165            )?;
-166            emb.push(r)
-167        }
-168        let emb = Tensor::cat(&emb, 2)?;
-169        emb.unsqueeze(1)
-170    }
-171}
-172
-173#[derive(Debug, Clone)]
-174pub struct MlpEmbedder {
-175    in_layer: Linear,
-176    out_layer: Linear,
-177}
-178
-179impl MlpEmbedder {
-180    fn new(in_sz: usize, h_sz: usize, vb: VarBuilder) -> Result<Self> {
-181        let in_layer = candle_nn::linear(in_sz, h_sz, vb.pp("in_layer"))?;
-182        let out_layer = candle_nn::linear(h_sz, h_sz, vb.pp("out_layer"))?;
-183        Ok(Self {
-184            in_layer,
-185            out_layer,
-186        })
-187    }
-188}
-189
-190impl candle::Module for MlpEmbedder {
-191    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-192        xs.apply(&self.in_layer)?.silu()?.apply(&self.out_layer)
-193    }
-194}
-195
-196#[derive(Debug, Clone)]
-197pub struct QkNorm {
-198    query_norm: RmsNorm,
-199    key_norm: RmsNorm,
-200}
-201
-202impl QkNorm {
-203    fn new(dim: usize, vb: VarBuilder) -> Result<Self> {
-204        let query_norm = vb.get(dim, "query_norm.scale")?;
-205        let query_norm = RmsNorm::new(query_norm, 1e-6);
-206        let key_norm = vb.get(dim, "key_norm.scale")?;
-207        let key_norm = RmsNorm::new(key_norm, 1e-6);
-208        Ok(Self {
-209            query_norm,
-210            key_norm,
-211        })
-212    }
-213}
-214
-215struct ModulationOut {
-216    shift: Tensor,
-217    scale: Tensor,
-218    gate: Tensor,
-219}
-220
-221impl ModulationOut {
-222    fn scale_shift(&self, xs: &Tensor) -> Result<Tensor> {
-223        xs.broadcast_mul(&(&self.scale + 1.)?)?
-224            .broadcast_add(&self.shift)
-225    }
-226
-227    fn gate(&self, xs: &Tensor) -> Result<Tensor> {
-228        self.gate.broadcast_mul(xs)
-229    }
-230}
-231
-232#[derive(Debug, Clone)]
-233struct Modulation1 {
-234    lin: Linear,
-235}
-236
-237impl Modulation1 {
-238    fn new(dim: usize, vb: VarBuilder) -> Result<Self> {
-239        let lin = candle_nn::linear(dim, 3 * dim, vb.pp("lin"))?;
-240        Ok(Self { lin })
-241    }
-242
-243    fn forward(&self, vec_: &Tensor) -> Result<ModulationOut> {
-244        let ys = vec_
-245            .silu()?
-246            .apply(&self.lin)?
-247            .unsqueeze(1)?
-248            .chunk(3, D::Minus1)?;
-249        if ys.len() != 3 {
-250            candle::bail!("unexpected len from chunk {ys:?}")
-251        }
-252        Ok(ModulationOut {
-253            shift: ys[0].clone(),
-254            scale: ys[1].clone(),
-255            gate: ys[2].clone(),
-256        })
-257    }
-258}
-259
-260#[derive(Debug, Clone)]
-261struct Modulation2 {
-262    lin: Linear,
-263}
-264
-265impl Modulation2 {
-266    fn new(dim: usize, vb: VarBuilder) -> Result<Self> {
-267        let lin = candle_nn::linear(dim, 6 * dim, vb.pp("lin"))?;
-268        Ok(Self { lin })
-269    }
-270
-271    fn forward(&self, vec_: &Tensor) -> Result<(ModulationOut, ModulationOut)> {
-272        let ys = vec_
-273            .silu()?
-274            .apply(&self.lin)?
-275            .unsqueeze(1)?
-276            .chunk(6, D::Minus1)?;
-277        if ys.len() != 6 {
-278            candle::bail!("unexpected len from chunk {ys:?}")
-279        }
-280        let mod1 = ModulationOut {
-281            shift: ys[0].clone(),
-282            scale: ys[1].clone(),
-283            gate: ys[2].clone(),
-284        };
-285        let mod2 = ModulationOut {
-286            shift: ys[3].clone(),
-287            scale: ys[4].clone(),
-288            gate: ys[5].clone(),
-289        };
-290        Ok((mod1, mod2))
-291    }
-292}
-293
-294#[derive(Debug, Clone)]
-295pub struct SelfAttention {
-296    qkv: Linear,
-297    norm: QkNorm,
-298    proj: Linear,
-299    num_heads: usize,
-300}
-301
-302impl SelfAttention {
-303    fn new(dim: usize, num_heads: usize, qkv_bias: bool, vb: VarBuilder) -> Result<Self> {
-304        let head_dim = dim / num_heads;
-305        let qkv = candle_nn::linear_b(dim, dim * 3, qkv_bias, vb.pp("qkv"))?;
-306        let norm = QkNorm::new(head_dim, vb.pp("norm"))?;
-307        let proj = candle_nn::linear(dim, dim, vb.pp("proj"))?;
-308        Ok(Self {
-309            qkv,
-310            norm,
-311            proj,
-312            num_heads,
-313        })
-314    }
-315
-316    fn qkv(&self, xs: &Tensor) -> Result<(Tensor, Tensor, Tensor)> {
-317        let qkv = xs.apply(&self.qkv)?;
-318        let (b, l, _khd) = qkv.dims3()?;
-319        let qkv = qkv.reshape((b, l, 3, self.num_heads, ()))?;
-320        let q = qkv.i((.., .., 0))?.transpose(1, 2)?;
-321        let k = qkv.i((.., .., 1))?.transpose(1, 2)?;
-322        let v = qkv.i((.., .., 2))?.transpose(1, 2)?;
-323        let q = q.apply(&self.norm.query_norm)?;
-324        let k = k.apply(&self.norm.key_norm)?;
-325        Ok((q, k, v))
-326    }
-327
-328    #[allow(unused)]
-329    fn forward(&self, xs: &Tensor, pe: &Tensor) -> Result<Tensor> {
-330        let (q, k, v) = self.qkv(xs)?;
-331        attention(&q, &k, &v, pe)?.apply(&self.proj)
-332    }
-333}
-334
-335#[derive(Debug, Clone)]
-336struct Mlp {
-337    lin1: Linear,
-338    lin2: Linear,
-339}
-340
-341impl Mlp {
-342    fn new(in_sz: usize, mlp_sz: usize, vb: VarBuilder) -> Result<Self> {
-343        let lin1 = candle_nn::linear(in_sz, mlp_sz, vb.pp("0"))?;
-344        let lin2 = candle_nn::linear(mlp_sz, in_sz, vb.pp("2"))?;
-345        Ok(Self { lin1, lin2 })
-346    }
-347}
-348
-349impl candle::Module for Mlp {
-350    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-351        xs.apply(&self.lin1)?.gelu()?.apply(&self.lin2)
-352    }
-353}
-354
-355#[derive(Debug, Clone)]
-356pub struct DoubleStreamBlock {
-357    img_mod: Modulation2,
-358    img_norm1: LayerNorm,
-359    img_attn: SelfAttention,
-360    img_norm2: LayerNorm,
-361    img_mlp: Mlp,
-362    txt_mod: Modulation2,
-363    txt_norm1: LayerNorm,
-364    txt_attn: SelfAttention,
-365    txt_norm2: LayerNorm,
-366    txt_mlp: Mlp,
-367}
-368
-369impl DoubleStreamBlock {
-370    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-371        let h_sz = cfg.hidden_size;
-372        let mlp_sz = (h_sz as f64 * cfg.mlp_ratio) as usize;
-373        let img_mod = Modulation2::new(h_sz, vb.pp("img_mod"))?;
-374        let img_norm1 = layer_norm(h_sz, vb.pp("img_norm1"))?;
-375        let img_attn = SelfAttention::new(h_sz, cfg.num_heads, cfg.qkv_bias, vb.pp("img_attn"))?;
-376        let img_norm2 = layer_norm(h_sz, vb.pp("img_norm2"))?;
-377        let img_mlp = Mlp::new(h_sz, mlp_sz, vb.pp("img_mlp"))?;
-378        let txt_mod = Modulation2::new(h_sz, vb.pp("txt_mod"))?;
-379        let txt_norm1 = layer_norm(h_sz, vb.pp("txt_norm1"))?;
-380        let txt_attn = SelfAttention::new(h_sz, cfg.num_heads, cfg.qkv_bias, vb.pp("txt_attn"))?;
-381        let txt_norm2 = layer_norm(h_sz, vb.pp("txt_norm2"))?;
-382        let txt_mlp = Mlp::new(h_sz, mlp_sz, vb.pp("txt_mlp"))?;
-383        Ok(Self {
-384            img_mod,
-385            img_norm1,
-386            img_attn,
-387            img_norm2,
-388            img_mlp,
-389            txt_mod,
-390            txt_norm1,
-391            txt_attn,
-392            txt_norm2,
-393            txt_mlp,
-394        })
-395    }
-396
-397    fn forward(
-398        &self,
-399        img: &Tensor,
-400        txt: &Tensor,
-401        vec_: &Tensor,
-402        pe: &Tensor,
-403    ) -> Result<(Tensor, Tensor)> {
-404        let (img_mod1, img_mod2) = self.img_mod.forward(vec_)?; // shift, scale, gate
-405        let (txt_mod1, txt_mod2) = self.txt_mod.forward(vec_)?; // shift, scale, gate
-406        let img_modulated = img.apply(&self.img_norm1)?;
-407        let img_modulated = img_mod1.scale_shift(&img_modulated)?;
-408        let (img_q, img_k, img_v) = self.img_attn.qkv(&img_modulated)?;
-409
-410        let txt_modulated = txt.apply(&self.txt_norm1)?;
-411        let txt_modulated = txt_mod1.scale_shift(&txt_modulated)?;
-412        let (txt_q, txt_k, txt_v) = self.txt_attn.qkv(&txt_modulated)?;
-413
-414        let q = Tensor::cat(&[txt_q, img_q], 2)?;
-415        let k = Tensor::cat(&[txt_k, img_k], 2)?;
-416        let v = Tensor::cat(&[txt_v, img_v], 2)?;
-417
-418        let attn = attention(&q, &k, &v, pe)?;
-419        let txt_attn = attn.narrow(1, 0, txt.dim(1)?)?;
-420        let img_attn = attn.narrow(1, txt.dim(1)?, attn.dim(1)? - txt.dim(1)?)?;
-421
-422        let img = (img + img_mod1.gate(&img_attn.apply(&self.img_attn.proj)?))?;
-423        let img = (&img
-424            + img_mod2.gate(
-425                &img_mod2
-426                    .scale_shift(&img.apply(&self.img_norm2)?)?
-427                    .apply(&self.img_mlp)?,
-428            )?)?;
-429
-430        let txt = (txt + txt_mod1.gate(&txt_attn.apply(&self.txt_attn.proj)?))?;
-431        let txt = (&txt
-432            + txt_mod2.gate(
-433                &txt_mod2
-434                    .scale_shift(&txt.apply(&self.txt_norm2)?)?
-435                    .apply(&self.txt_mlp)?,
-436            )?)?;
-437
-438        Ok((img, txt))
-439    }
-440}
-441
-442#[derive(Debug, Clone)]
-443pub struct SingleStreamBlock {
-444    linear1: Linear,
-445    linear2: Linear,
-446    norm: QkNorm,
-447    pre_norm: LayerNorm,
-448    modulation: Modulation1,
-449    h_sz: usize,
-450    mlp_sz: usize,
-451    num_heads: usize,
-452}
-453
-454impl SingleStreamBlock {
-455    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-456        let h_sz = cfg.hidden_size;
-457        let mlp_sz = (h_sz as f64 * cfg.mlp_ratio) as usize;
-458        let head_dim = h_sz / cfg.num_heads;
-459        let linear1 = candle_nn::linear(h_sz, h_sz * 3 + mlp_sz, vb.pp("linear1"))?;
-460        let linear2 = candle_nn::linear(h_sz + mlp_sz, h_sz, vb.pp("linear2"))?;
-461        let norm = QkNorm::new(head_dim, vb.pp("norm"))?;
-462        let pre_norm = layer_norm(h_sz, vb.pp("pre_norm"))?;
-463        let modulation = Modulation1::new(h_sz, vb.pp("modulation"))?;
-464        Ok(Self {
-465            linear1,
-466            linear2,
-467            norm,
-468            pre_norm,
-469            modulation,
-470            h_sz,
-471            mlp_sz,
-472            num_heads: cfg.num_heads,
-473        })
-474    }
-475
-476    fn forward(&self, xs: &Tensor, vec_: &Tensor, pe: &Tensor) -> Result<Tensor> {
-477        let mod_ = self.modulation.forward(vec_)?;
-478        let x_mod = mod_.scale_shift(&xs.apply(&self.pre_norm)?)?;
-479        let x_mod = x_mod.apply(&self.linear1)?;
-480        let qkv = x_mod.narrow(D::Minus1, 0, 3 * self.h_sz)?;
-481        let (b, l, _khd) = qkv.dims3()?;
-482        let qkv = qkv.reshape((b, l, 3, self.num_heads, ()))?;
-483        let q = qkv.i((.., .., 0))?.transpose(1, 2)?;
-484        let k = qkv.i((.., .., 1))?.transpose(1, 2)?;
-485        let v = qkv.i((.., .., 2))?.transpose(1, 2)?;
-486        let mlp = x_mod.narrow(D::Minus1, 3 * self.h_sz, self.mlp_sz)?;
-487        let q = q.apply(&self.norm.query_norm)?;
-488        let k = k.apply(&self.norm.key_norm)?;
-489        let attn = attention(&q, &k, &v, pe)?;
-490        let output = Tensor::cat(&[attn, mlp.gelu()?], 2)?.apply(&self.linear2)?;
-491        xs + mod_.gate(&output)
-492    }
-493}
-494
-495#[derive(Debug, Clone)]
-496pub struct LastLayer {
-497    norm_final: LayerNorm,
-498    linear: Linear,
-499    ada_ln_modulation: Linear,
-500}
-501
-502impl LastLayer {
-503    fn new(h_sz: usize, p_sz: usize, out_c: usize, vb: VarBuilder) -> Result<Self> {
-504        let norm_final = layer_norm(h_sz, vb.pp("norm_final"))?;
-505        let linear = candle_nn::linear(h_sz, p_sz * p_sz * out_c, vb.pp("linear"))?;
-506        let ada_ln_modulation = candle_nn::linear(h_sz, 2 * h_sz, vb.pp("adaLN_modulation.1"))?;
-507        Ok(Self {
-508            norm_final,
-509            linear,
-510            ada_ln_modulation,
-511        })
-512    }
-513
-514    fn forward(&self, xs: &Tensor, vec: &Tensor) -> Result<Tensor> {
-515        let chunks = vec.silu()?.apply(&self.ada_ln_modulation)?.chunk(2, 1)?;
-516        let (shift, scale) = (&chunks[0], &chunks[1]);
-517        let xs = xs
-518            .apply(&self.norm_final)?
-519            .broadcast_mul(&(scale.unsqueeze(1)? + 1.0)?)?
-520            .broadcast_add(&shift.unsqueeze(1)?)?;
-521        xs.apply(&self.linear)
-522    }
-523}
-524
-525#[derive(Debug, Clone)]
-526pub struct Flux {
-527    img_in: Linear,
-528    txt_in: Linear,
-529    time_in: MlpEmbedder,
-530    vector_in: MlpEmbedder,
-531    guidance_in: Option<MlpEmbedder>,
-532    pe_embedder: EmbedNd,
-533    double_blocks: Vec<DoubleStreamBlock>,
-534    single_blocks: Vec<SingleStreamBlock>,
-535    final_layer: LastLayer,
-536}
-537
-538impl Flux {
-539    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-540        let img_in = candle_nn::linear(cfg.in_channels, cfg.hidden_size, vb.pp("img_in"))?;
-541        let txt_in = candle_nn::linear(cfg.context_in_dim, cfg.hidden_size, vb.pp("txt_in"))?;
-542        let mut double_blocks = Vec::with_capacity(cfg.depth);
-543        let vb_d = vb.pp("double_blocks");
-544        for idx in 0..cfg.depth {
-545            let db = DoubleStreamBlock::new(cfg, vb_d.pp(idx))?;
-546            double_blocks.push(db)
-547        }
-548        let mut single_blocks = Vec::with_capacity(cfg.depth_single_blocks);
-549        let vb_s = vb.pp("single_blocks");
-550        for idx in 0..cfg.depth_single_blocks {
-551            let sb = SingleStreamBlock::new(cfg, vb_s.pp(idx))?;
-552            single_blocks.push(sb)
-553        }
-554        let time_in = MlpEmbedder::new(256, cfg.hidden_size, vb.pp("time_in"))?;
-555        let vector_in = MlpEmbedder::new(cfg.vec_in_dim, cfg.hidden_size, vb.pp("vector_in"))?;
-556        let guidance_in = if cfg.guidance_embed {
-557            let mlp = MlpEmbedder::new(256, cfg.hidden_size, vb.pp("guidance_in"))?;
-558            Some(mlp)
-559        } else {
-560            None
-561        };
-562        let final_layer =
-563            LastLayer::new(cfg.hidden_size, 1, cfg.in_channels, vb.pp("final_layer"))?;
-564        let pe_dim = cfg.hidden_size / cfg.num_heads;
-565        let pe_embedder = EmbedNd::new(pe_dim, cfg.theta, cfg.axes_dim.to_vec());
-566        Ok(Self {
-567            img_in,
-568            txt_in,
-569            time_in,
-570            vector_in,
-571            guidance_in,
-572            pe_embedder,
-573            double_blocks,
-574            single_blocks,
-575            final_layer,
-576        })
-577    }
-578}
-579
-580impl super::WithForward for Flux {
-581    #[allow(clippy::too_many_arguments)]
-582    fn forward(
-583        &self,
-584        img: &Tensor,
-585        img_ids: &Tensor,
-586        txt: &Tensor,
-587        txt_ids: &Tensor,
-588        timesteps: &Tensor,
-589        y: &Tensor,
-590        guidance: Option<&Tensor>,
-591    ) -> Result<Tensor> {
-592        if txt.rank() != 3 {
-593            candle::bail!("unexpected shape for txt {:?}", txt.shape())
-594        }
-595        if img.rank() != 3 {
-596            candle::bail!("unexpected shape for img {:?}", img.shape())
-597        }
-598        let dtype = img.dtype();
-599        let pe = {
-600            let ids = Tensor::cat(&[txt_ids, img_ids], 1)?;
-601            ids.apply(&self.pe_embedder)?
-602        };
-603        let mut txt = txt.apply(&self.txt_in)?;
-604        let mut img = img.apply(&self.img_in)?;
-605        let vec_ = timestep_embedding(timesteps, 256, dtype)?.apply(&self.time_in)?;
-606        let vec_ = match (self.guidance_in.as_ref(), guidance) {
-607            (Some(g_in), Some(guidance)) => {
-608                (vec_ + timestep_embedding(guidance, 256, dtype)?.apply(g_in))?
-609            }
-610            _ => vec_,
-611        };
-612        let vec_ = (vec_ + y.apply(&self.vector_in))?;
-613
-614        // Double blocks
-615        for block in self.double_blocks.iter() {
-616            (img, txt) = block.forward(&img, &txt, &vec_, &pe)?
-617        }
-618        // Single blocks
-619        let mut img = Tensor::cat(&[&txt, &img], 1)?;
-620        for block in self.single_blocks.iter() {
-621            img = block.forward(&img, &vec_, &pe)?;
-622        }
-623        let img = img.i((.., txt.dim(1)?..))?;
-624        self.final_layer.forward(&img, &vec_)
-625    }
-626}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/flux/quantized_model.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/flux/quantized_model.rs.html deleted file mode 100644 index 56d49df..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/flux/quantized_model.rs.html +++ /dev/null @@ -1,466 +0,0 @@ -quantized_model.rs - source

candle_transformers/models/flux/
quantized_model.rs

1use super::model::{attention, timestep_embedding, Config, EmbedNd};
-2use crate::quantized_nn::{linear, linear_b, Linear};
-3use crate::quantized_var_builder::VarBuilder;
-4use candle::{DType, IndexOp, Result, Tensor, D};
-5use candle_nn::{LayerNorm, RmsNorm};
-6
-7fn layer_norm(dim: usize, vb: VarBuilder) -> Result<LayerNorm> {
-8    let ws = Tensor::ones(dim, DType::F32, vb.device())?;
-9    Ok(LayerNorm::new_no_bias(ws, 1e-6))
-10}
-11
-12#[derive(Debug, Clone)]
-13pub struct MlpEmbedder {
-14    in_layer: Linear,
-15    out_layer: Linear,
-16}
-17
-18impl MlpEmbedder {
-19    fn new(in_sz: usize, h_sz: usize, vb: VarBuilder) -> Result<Self> {
-20        let in_layer = linear(in_sz, h_sz, vb.pp("in_layer"))?;
-21        let out_layer = linear(h_sz, h_sz, vb.pp("out_layer"))?;
-22        Ok(Self {
-23            in_layer,
-24            out_layer,
-25        })
-26    }
-27}
-28
-29impl candle::Module for MlpEmbedder {
-30    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-31        xs.apply(&self.in_layer)?.silu()?.apply(&self.out_layer)
-32    }
-33}
-34
-35#[derive(Debug, Clone)]
-36pub struct QkNorm {
-37    query_norm: RmsNorm,
-38    key_norm: RmsNorm,
-39}
-40
-41impl QkNorm {
-42    fn new(dim: usize, vb: VarBuilder) -> Result<Self> {
-43        let query_norm = vb.get(dim, "query_norm.scale")?.dequantize(vb.device())?;
-44        let query_norm = RmsNorm::new(query_norm, 1e-6);
-45        let key_norm = vb.get(dim, "key_norm.scale")?.dequantize(vb.device())?;
-46        let key_norm = RmsNorm::new(key_norm, 1e-6);
-47        Ok(Self {
-48            query_norm,
-49            key_norm,
-50        })
-51    }
-52}
-53
-54struct ModulationOut {
-55    shift: Tensor,
-56    scale: Tensor,
-57    gate: Tensor,
-58}
-59
-60impl ModulationOut {
-61    fn scale_shift(&self, xs: &Tensor) -> Result<Tensor> {
-62        xs.broadcast_mul(&(&self.scale + 1.)?)?
-63            .broadcast_add(&self.shift)
-64    }
-65
-66    fn gate(&self, xs: &Tensor) -> Result<Tensor> {
-67        self.gate.broadcast_mul(xs)
-68    }
-69}
-70
-71#[derive(Debug, Clone)]
-72struct Modulation1 {
-73    lin: Linear,
-74}
-75
-76impl Modulation1 {
-77    fn new(dim: usize, vb: VarBuilder) -> Result<Self> {
-78        let lin = linear(dim, 3 * dim, vb.pp("lin"))?;
-79        Ok(Self { lin })
-80    }
-81
-82    fn forward(&self, vec_: &Tensor) -> Result<ModulationOut> {
-83        let ys = vec_
-84            .silu()?
-85            .apply(&self.lin)?
-86            .unsqueeze(1)?
-87            .chunk(3, D::Minus1)?;
-88        if ys.len() != 3 {
-89            candle::bail!("unexpected len from chunk {ys:?}")
-90        }
-91        Ok(ModulationOut {
-92            shift: ys[0].clone(),
-93            scale: ys[1].clone(),
-94            gate: ys[2].clone(),
-95        })
-96    }
-97}
-98
-99#[derive(Debug, Clone)]
-100struct Modulation2 {
-101    lin: Linear,
-102}
-103
-104impl Modulation2 {
-105    fn new(dim: usize, vb: VarBuilder) -> Result<Self> {
-106        let lin = linear(dim, 6 * dim, vb.pp("lin"))?;
-107        Ok(Self { lin })
-108    }
-109
-110    fn forward(&self, vec_: &Tensor) -> Result<(ModulationOut, ModulationOut)> {
-111        let ys = vec_
-112            .silu()?
-113            .apply(&self.lin)?
-114            .unsqueeze(1)?
-115            .chunk(6, D::Minus1)?;
-116        if ys.len() != 6 {
-117            candle::bail!("unexpected len from chunk {ys:?}")
-118        }
-119        let mod1 = ModulationOut {
-120            shift: ys[0].clone(),
-121            scale: ys[1].clone(),
-122            gate: ys[2].clone(),
-123        };
-124        let mod2 = ModulationOut {
-125            shift: ys[3].clone(),
-126            scale: ys[4].clone(),
-127            gate: ys[5].clone(),
-128        };
-129        Ok((mod1, mod2))
-130    }
-131}
-132
-133#[derive(Debug, Clone)]
-134pub struct SelfAttention {
-135    qkv: Linear,
-136    norm: QkNorm,
-137    proj: Linear,
-138    num_heads: usize,
-139}
-140
-141impl SelfAttention {
-142    fn new(dim: usize, num_heads: usize, qkv_bias: bool, vb: VarBuilder) -> Result<Self> {
-143        let head_dim = dim / num_heads;
-144        let qkv = linear_b(dim, dim * 3, qkv_bias, vb.pp("qkv"))?;
-145        let norm = QkNorm::new(head_dim, vb.pp("norm"))?;
-146        let proj = linear(dim, dim, vb.pp("proj"))?;
-147        Ok(Self {
-148            qkv,
-149            norm,
-150            proj,
-151            num_heads,
-152        })
-153    }
-154
-155    fn qkv(&self, xs: &Tensor) -> Result<(Tensor, Tensor, Tensor)> {
-156        let qkv = xs.apply(&self.qkv)?;
-157        let (b, l, _khd) = qkv.dims3()?;
-158        let qkv = qkv.reshape((b, l, 3, self.num_heads, ()))?;
-159        let q = qkv.i((.., .., 0))?.transpose(1, 2)?;
-160        let k = qkv.i((.., .., 1))?.transpose(1, 2)?;
-161        let v = qkv.i((.., .., 2))?.transpose(1, 2)?;
-162        let q = q.apply(&self.norm.query_norm)?;
-163        let k = k.apply(&self.norm.key_norm)?;
-164        Ok((q, k, v))
-165    }
-166
-167    #[allow(unused)]
-168    fn forward(&self, xs: &Tensor, pe: &Tensor) -> Result<Tensor> {
-169        let (q, k, v) = self.qkv(xs)?;
-170        attention(&q, &k, &v, pe)?.apply(&self.proj)
-171    }
-172}
-173
-174#[derive(Debug, Clone)]
-175struct Mlp {
-176    lin1: Linear,
-177    lin2: Linear,
-178}
-179
-180impl Mlp {
-181    fn new(in_sz: usize, mlp_sz: usize, vb: VarBuilder) -> Result<Self> {
-182        let lin1 = linear(in_sz, mlp_sz, vb.pp("0"))?;
-183        let lin2 = linear(mlp_sz, in_sz, vb.pp("2"))?;
-184        Ok(Self { lin1, lin2 })
-185    }
-186}
-187
-188impl candle::Module for Mlp {
-189    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-190        xs.apply(&self.lin1)?.gelu()?.apply(&self.lin2)
-191    }
-192}
-193
-194#[derive(Debug, Clone)]
-195pub struct DoubleStreamBlock {
-196    img_mod: Modulation2,
-197    img_norm1: LayerNorm,
-198    img_attn: SelfAttention,
-199    img_norm2: LayerNorm,
-200    img_mlp: Mlp,
-201    txt_mod: Modulation2,
-202    txt_norm1: LayerNorm,
-203    txt_attn: SelfAttention,
-204    txt_norm2: LayerNorm,
-205    txt_mlp: Mlp,
-206}
-207
-208impl DoubleStreamBlock {
-209    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-210        let h_sz = cfg.hidden_size;
-211        let mlp_sz = (h_sz as f64 * cfg.mlp_ratio) as usize;
-212        let img_mod = Modulation2::new(h_sz, vb.pp("img_mod"))?;
-213        let img_norm1 = layer_norm(h_sz, vb.pp("img_norm1"))?;
-214        let img_attn = SelfAttention::new(h_sz, cfg.num_heads, cfg.qkv_bias, vb.pp("img_attn"))?;
-215        let img_norm2 = layer_norm(h_sz, vb.pp("img_norm2"))?;
-216        let img_mlp = Mlp::new(h_sz, mlp_sz, vb.pp("img_mlp"))?;
-217        let txt_mod = Modulation2::new(h_sz, vb.pp("txt_mod"))?;
-218        let txt_norm1 = layer_norm(h_sz, vb.pp("txt_norm1"))?;
-219        let txt_attn = SelfAttention::new(h_sz, cfg.num_heads, cfg.qkv_bias, vb.pp("txt_attn"))?;
-220        let txt_norm2 = layer_norm(h_sz, vb.pp("txt_norm2"))?;
-221        let txt_mlp = Mlp::new(h_sz, mlp_sz, vb.pp("txt_mlp"))?;
-222        Ok(Self {
-223            img_mod,
-224            img_norm1,
-225            img_attn,
-226            img_norm2,
-227            img_mlp,
-228            txt_mod,
-229            txt_norm1,
-230            txt_attn,
-231            txt_norm2,
-232            txt_mlp,
-233        })
-234    }
-235
-236    fn forward(
-237        &self,
-238        img: &Tensor,
-239        txt: &Tensor,
-240        vec_: &Tensor,
-241        pe: &Tensor,
-242    ) -> Result<(Tensor, Tensor)> {
-243        let (img_mod1, img_mod2) = self.img_mod.forward(vec_)?; // shift, scale, gate
-244        let (txt_mod1, txt_mod2) = self.txt_mod.forward(vec_)?; // shift, scale, gate
-245        let img_modulated = img.apply(&self.img_norm1)?;
-246        let img_modulated = img_mod1.scale_shift(&img_modulated)?;
-247        let (img_q, img_k, img_v) = self.img_attn.qkv(&img_modulated)?;
-248
-249        let txt_modulated = txt.apply(&self.txt_norm1)?;
-250        let txt_modulated = txt_mod1.scale_shift(&txt_modulated)?;
-251        let (txt_q, txt_k, txt_v) = self.txt_attn.qkv(&txt_modulated)?;
-252
-253        let q = Tensor::cat(&[txt_q, img_q], 2)?;
-254        let k = Tensor::cat(&[txt_k, img_k], 2)?;
-255        let v = Tensor::cat(&[txt_v, img_v], 2)?;
-256
-257        let attn = attention(&q, &k, &v, pe)?;
-258        let txt_attn = attn.narrow(1, 0, txt.dim(1)?)?;
-259        let img_attn = attn.narrow(1, txt.dim(1)?, attn.dim(1)? - txt.dim(1)?)?;
-260
-261        let img = (img + img_mod1.gate(&img_attn.apply(&self.img_attn.proj)?))?;
-262        let img = (&img
-263            + img_mod2.gate(
-264                &img_mod2
-265                    .scale_shift(&img.apply(&self.img_norm2)?)?
-266                    .apply(&self.img_mlp)?,
-267            )?)?;
-268
-269        let txt = (txt + txt_mod1.gate(&txt_attn.apply(&self.txt_attn.proj)?))?;
-270        let txt = (&txt
-271            + txt_mod2.gate(
-272                &txt_mod2
-273                    .scale_shift(&txt.apply(&self.txt_norm2)?)?
-274                    .apply(&self.txt_mlp)?,
-275            )?)?;
-276
-277        Ok((img, txt))
-278    }
-279}
-280
-281#[derive(Debug, Clone)]
-282pub struct SingleStreamBlock {
-283    linear1: Linear,
-284    linear2: Linear,
-285    norm: QkNorm,
-286    pre_norm: LayerNorm,
-287    modulation: Modulation1,
-288    h_sz: usize,
-289    mlp_sz: usize,
-290    num_heads: usize,
-291}
-292
-293impl SingleStreamBlock {
-294    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-295        let h_sz = cfg.hidden_size;
-296        let mlp_sz = (h_sz as f64 * cfg.mlp_ratio) as usize;
-297        let head_dim = h_sz / cfg.num_heads;
-298        let linear1 = linear(h_sz, h_sz * 3 + mlp_sz, vb.pp("linear1"))?;
-299        let linear2 = linear(h_sz + mlp_sz, h_sz, vb.pp("linear2"))?;
-300        let norm = QkNorm::new(head_dim, vb.pp("norm"))?;
-301        let pre_norm = layer_norm(h_sz, vb.pp("pre_norm"))?;
-302        let modulation = Modulation1::new(h_sz, vb.pp("modulation"))?;
-303        Ok(Self {
-304            linear1,
-305            linear2,
-306            norm,
-307            pre_norm,
-308            modulation,
-309            h_sz,
-310            mlp_sz,
-311            num_heads: cfg.num_heads,
-312        })
-313    }
-314
-315    fn forward(&self, xs: &Tensor, vec_: &Tensor, pe: &Tensor) -> Result<Tensor> {
-316        let mod_ = self.modulation.forward(vec_)?;
-317        let x_mod = mod_.scale_shift(&xs.apply(&self.pre_norm)?)?;
-318        let x_mod = x_mod.apply(&self.linear1)?;
-319        let qkv = x_mod.narrow(D::Minus1, 0, 3 * self.h_sz)?;
-320        let (b, l, _khd) = qkv.dims3()?;
-321        let qkv = qkv.reshape((b, l, 3, self.num_heads, ()))?;
-322        let q = qkv.i((.., .., 0))?.transpose(1, 2)?;
-323        let k = qkv.i((.., .., 1))?.transpose(1, 2)?;
-324        let v = qkv.i((.., .., 2))?.transpose(1, 2)?;
-325        let mlp = x_mod.narrow(D::Minus1, 3 * self.h_sz, self.mlp_sz)?;
-326        let q = q.apply(&self.norm.query_norm)?;
-327        let k = k.apply(&self.norm.key_norm)?;
-328        let attn = attention(&q, &k, &v, pe)?;
-329        let output = Tensor::cat(&[attn, mlp.gelu()?], 2)?.apply(&self.linear2)?;
-330        xs + mod_.gate(&output)
-331    }
-332}
-333
-334#[derive(Debug, Clone)]
-335pub struct LastLayer {
-336    norm_final: LayerNorm,
-337    linear: Linear,
-338    ada_ln_modulation: Linear,
-339}
-340
-341impl LastLayer {
-342    fn new(h_sz: usize, p_sz: usize, out_c: usize, vb: VarBuilder) -> Result<Self> {
-343        let norm_final = layer_norm(h_sz, vb.pp("norm_final"))?;
-344        let linear_ = linear(h_sz, p_sz * p_sz * out_c, vb.pp("linear"))?;
-345        let ada_ln_modulation = linear(h_sz, 2 * h_sz, vb.pp("adaLN_modulation.1"))?;
-346        Ok(Self {
-347            norm_final,
-348            linear: linear_,
-349            ada_ln_modulation,
-350        })
-351    }
-352
-353    fn forward(&self, xs: &Tensor, vec: &Tensor) -> Result<Tensor> {
-354        let chunks = vec.silu()?.apply(&self.ada_ln_modulation)?.chunk(2, 1)?;
-355        let (shift, scale) = (&chunks[0], &chunks[1]);
-356        let xs = xs
-357            .apply(&self.norm_final)?
-358            .broadcast_mul(&(scale.unsqueeze(1)? + 1.0)?)?
-359            .broadcast_add(&shift.unsqueeze(1)?)?;
-360        xs.apply(&self.linear)
-361    }
-362}
-363
-364#[derive(Debug, Clone)]
-365pub struct Flux {
-366    img_in: Linear,
-367    txt_in: Linear,
-368    time_in: MlpEmbedder,
-369    vector_in: MlpEmbedder,
-370    guidance_in: Option<MlpEmbedder>,
-371    pe_embedder: EmbedNd,
-372    double_blocks: Vec<DoubleStreamBlock>,
-373    single_blocks: Vec<SingleStreamBlock>,
-374    final_layer: LastLayer,
-375}
-376
-377impl Flux {
-378    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-379        let img_in = linear(cfg.in_channels, cfg.hidden_size, vb.pp("img_in"))?;
-380        let txt_in = linear(cfg.context_in_dim, cfg.hidden_size, vb.pp("txt_in"))?;
-381        let mut double_blocks = Vec::with_capacity(cfg.depth);
-382        let vb_d = vb.pp("double_blocks");
-383        for idx in 0..cfg.depth {
-384            let db = DoubleStreamBlock::new(cfg, vb_d.pp(idx))?;
-385            double_blocks.push(db)
-386        }
-387        let mut single_blocks = Vec::with_capacity(cfg.depth_single_blocks);
-388        let vb_s = vb.pp("single_blocks");
-389        for idx in 0..cfg.depth_single_blocks {
-390            let sb = SingleStreamBlock::new(cfg, vb_s.pp(idx))?;
-391            single_blocks.push(sb)
-392        }
-393        let time_in = MlpEmbedder::new(256, cfg.hidden_size, vb.pp("time_in"))?;
-394        let vector_in = MlpEmbedder::new(cfg.vec_in_dim, cfg.hidden_size, vb.pp("vector_in"))?;
-395        let guidance_in = if cfg.guidance_embed {
-396            let mlp = MlpEmbedder::new(256, cfg.hidden_size, vb.pp("guidance_in"))?;
-397            Some(mlp)
-398        } else {
-399            None
-400        };
-401        let final_layer =
-402            LastLayer::new(cfg.hidden_size, 1, cfg.in_channels, vb.pp("final_layer"))?;
-403        let pe_dim = cfg.hidden_size / cfg.num_heads;
-404        let pe_embedder = EmbedNd::new(pe_dim, cfg.theta, cfg.axes_dim.to_vec());
-405        Ok(Self {
-406            img_in,
-407            txt_in,
-408            time_in,
-409            vector_in,
-410            guidance_in,
-411            pe_embedder,
-412            double_blocks,
-413            single_blocks,
-414            final_layer,
-415        })
-416    }
-417}
-418
-419impl super::WithForward for Flux {
-420    #[allow(clippy::too_many_arguments)]
-421    fn forward(
-422        &self,
-423        img: &Tensor,
-424        img_ids: &Tensor,
-425        txt: &Tensor,
-426        txt_ids: &Tensor,
-427        timesteps: &Tensor,
-428        y: &Tensor,
-429        guidance: Option<&Tensor>,
-430    ) -> Result<Tensor> {
-431        if txt.rank() != 3 {
-432            candle::bail!("unexpected shape for txt {:?}", txt.shape())
-433        }
-434        if img.rank() != 3 {
-435            candle::bail!("unexpected shape for img {:?}", img.shape())
-436        }
-437        let dtype = img.dtype();
-438        let pe = {
-439            let ids = Tensor::cat(&[txt_ids, img_ids], 1)?;
-440            ids.apply(&self.pe_embedder)?
-441        };
-442        let mut txt = txt.apply(&self.txt_in)?;
-443        let mut img = img.apply(&self.img_in)?;
-444        let vec_ = timestep_embedding(timesteps, 256, dtype)?.apply(&self.time_in)?;
-445        let vec_ = match (self.guidance_in.as_ref(), guidance) {
-446            (Some(g_in), Some(guidance)) => {
-447                (vec_ + timestep_embedding(guidance, 256, dtype)?.apply(g_in))?
-448            }
-449            _ => vec_,
-450        };
-451        let vec_ = (vec_ + y.apply(&self.vector_in))?;
-452
-453        // Double blocks
-454        for block in self.double_blocks.iter() {
-455            (img, txt) = block.forward(&img, &txt, &vec_, &pe)?
-456        }
-457        // Single blocks
-458        let mut img = Tensor::cat(&[&txt, &img], 1)?;
-459        for block in self.single_blocks.iter() {
-460            img = block.forward(&img, &vec_, &pe)?;
-461        }
-462        let img = img.i((.., txt.dim(1)?..))?;
-463        self.final_layer.forward(&img, &vec_)
-464    }
-465}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/flux/sampling.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/flux/sampling.rs.html deleted file mode 100644 index c734f20..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/flux/sampling.rs.html +++ /dev/null @@ -1,120 +0,0 @@ -sampling.rs - source

candle_transformers/models/flux/
sampling.rs

1use candle::{Device, Result, Tensor};
-2
-3pub fn get_noise(
-4    num_samples: usize,
-5    height: usize,
-6    width: usize,
-7    device: &Device,
-8) -> Result<Tensor> {
-9    let height = (height + 15) / 16 * 2;
-10    let width = (width + 15) / 16 * 2;
-11    Tensor::randn(0f32, 1., (num_samples, 16, height, width), device)
-12}
-13
-14#[derive(Debug, Clone)]
-15pub struct State {
-16    pub img: Tensor,
-17    pub img_ids: Tensor,
-18    pub txt: Tensor,
-19    pub txt_ids: Tensor,
-20    pub vec: Tensor,
-21}
-22
-23impl State {
-24    pub fn new(t5_emb: &Tensor, clip_emb: &Tensor, img: &Tensor) -> Result<Self> {
-25        let dtype = img.dtype();
-26        let (bs, c, h, w) = img.dims4()?;
-27        let dev = img.device();
-28        let img = img.reshape((bs, c, h / 2, 2, w / 2, 2))?; // (b, c, h, ph, w, pw)
-29        let img = img.permute((0, 2, 4, 1, 3, 5))?; // (b, h, w, c, ph, pw)
-30        let img = img.reshape((bs, h / 2 * w / 2, c * 4))?;
-31        let img_ids = Tensor::stack(
-32            &[
-33                Tensor::full(0u32, (h / 2, w / 2), dev)?,
-34                Tensor::arange(0u32, h as u32 / 2, dev)?
-35                    .reshape(((), 1))?
-36                    .broadcast_as((h / 2, w / 2))?,
-37                Tensor::arange(0u32, w as u32 / 2, dev)?
-38                    .reshape((1, ()))?
-39                    .broadcast_as((h / 2, w / 2))?,
-40            ],
-41            2,
-42        )?
-43        .to_dtype(dtype)?;
-44        let img_ids = img_ids.reshape((1, h / 2 * w / 2, 3))?;
-45        let img_ids = img_ids.repeat((bs, 1, 1))?;
-46        let txt = t5_emb.repeat(bs)?;
-47        let txt_ids = Tensor::zeros((bs, txt.dim(1)?, 3), dtype, dev)?;
-48        let vec = clip_emb.repeat(bs)?;
-49        Ok(Self {
-50            img,
-51            img_ids,
-52            txt,
-53            txt_ids,
-54            vec,
-55        })
-56    }
-57}
-58
-59fn time_shift(mu: f64, sigma: f64, t: f64) -> f64 {
-60    let e = mu.exp();
-61    e / (e + (1. / t - 1.).powf(sigma))
-62}
-63
-64/// `shift` is a triple `(image_seq_len, base_shift, max_shift)`.
-65pub fn get_schedule(num_steps: usize, shift: Option<(usize, f64, f64)>) -> Vec<f64> {
-66    let timesteps: Vec<f64> = (0..=num_steps)
-67        .map(|v| v as f64 / num_steps as f64)
-68        .rev()
-69        .collect();
-70    match shift {
-71        None => timesteps,
-72        Some((image_seq_len, y1, y2)) => {
-73            let (x1, x2) = (256., 4096.);
-74            let m = (y2 - y1) / (x2 - x1);
-75            let b = y1 - m * x1;
-76            let mu = m * image_seq_len as f64 + b;
-77            timesteps
-78                .into_iter()
-79                .map(|v| time_shift(mu, 1., v))
-80                .collect()
-81        }
-82    }
-83}
-84
-85pub fn unpack(xs: &Tensor, height: usize, width: usize) -> Result<Tensor> {
-86    let (b, _h_w, c_ph_pw) = xs.dims3()?;
-87    let height = (height + 15) / 16;
-88    let width = (width + 15) / 16;
-89    xs.reshape((b, height, width, c_ph_pw / 4, 2, 2))? // (b, h, w, c, ph, pw)
-90        .permute((0, 3, 1, 4, 2, 5))? // (b, c, h, ph, w, pw)
-91        .reshape((b, c_ph_pw / 4, height * 2, width * 2))
-92}
-93
-94#[allow(clippy::too_many_arguments)]
-95pub fn denoise<M: super::WithForward>(
-96    model: &M,
-97    img: &Tensor,
-98    img_ids: &Tensor,
-99    txt: &Tensor,
-100    txt_ids: &Tensor,
-101    vec_: &Tensor,
-102    timesteps: &[f64],
-103    guidance: f64,
-104) -> Result<Tensor> {
-105    let b_sz = img.dim(0)?;
-106    let dev = img.device();
-107    let guidance = Tensor::full(guidance as f32, b_sz, dev)?;
-108    let mut img = img.clone();
-109    for window in timesteps.windows(2) {
-110        let (t_curr, t_prev) = match window {
-111            [a, b] => (a, b),
-112            _ => continue,
-113        };
-114        let t_vec = Tensor::full(*t_curr as f32, b_sz, dev)?;
-115        let pred = model.forward(&img, img_ids, txt, txt_ids, &t_vec, vec_, Some(&guidance))?;
-116        img = (img + pred * (t_prev - t_curr))?
-117    }
-118    Ok(img)
-119}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/gemma.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/gemma.rs.html deleted file mode 100644 index 0d0bf32..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/gemma.rs.html +++ /dev/null @@ -1,449 +0,0 @@ -gemma.rs - source

candle_transformers/models/
gemma.rs

1//! Gemma inference implementation.
-2//!
-3//! See ["Gemma: Open Models Based on Gemini Technology"](https://blog.google/technology/developers/gemma-open-ai-model/)
-4//!
-5//! Based on implementation from Google and PyTorch
-6
-7use std::sync::Arc;
-8
-9use candle::{DType, Device, Module, Result, Tensor, D};
-10use candle_nn::{linear_b as linear, Activation, Linear, VarBuilder};
-11
-12fn default_max_position_embeddings() -> usize {
-13    4096
-14}
-15
-16#[derive(serde::Deserialize, Debug, Clone)]
-17pub struct Config {
-18    pub attention_bias: bool,
-19    pub head_dim: usize,
-20    // The code gemma configs include both hidden_act and hidden_activation.
-21    pub hidden_act: Option<Activation>,
-22    pub hidden_activation: Option<Activation>,
-23    pub hidden_size: usize,
-24    pub intermediate_size: usize,
-25    pub num_attention_heads: usize,
-26    pub num_hidden_layers: usize,
-27    pub num_key_value_heads: usize,
-28    pub rms_norm_eps: f64,
-29    pub rope_theta: f64,
-30    pub vocab_size: usize,
-31
-32    #[serde(default = "default_max_position_embeddings")]
-33    pub max_position_embeddings: usize,
-34}
-35
-36impl Config {
-37    fn hidden_act(&self) -> Result<Activation> {
-38        match (self.hidden_act, self.hidden_activation) {
-39            (None, Some(act)) | (Some(act), None) => Ok(act),
-40            (Some(_), Some(_)) => candle::bail!("both hidden_act and hidden_activation are set"),
-41            (None, None) => candle::bail!("none of hidden_act and hidden_activation are set"),
-42        }
-43    }
-44}
-45
-46#[derive(Debug, Clone)]
-47struct RmsNorm {
-48    weight: Tensor,
-49    eps: f64,
-50}
-51
-52impl RmsNorm {
-53    fn new(dim: usize, eps: f64, vb: VarBuilder) -> Result<Self> {
-54        let weight = vb.get(dim, "weight")?;
-55        Ok(Self { weight, eps })
-56    }
-57}
-58
-59impl Module for RmsNorm {
-60    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-61        let x_dtype = x.dtype();
-62        let internal_dtype = match x_dtype {
-63            DType::F16 | DType::BF16 => DType::F32,
-64            d => d,
-65        };
-66        let hidden_size = x.dim(D::Minus1)?;
-67        let x = x.to_dtype(internal_dtype)?;
-68        let norm_x = (x.sqr()?.sum_keepdim(D::Minus1)? / hidden_size as f64)?;
-69        let x_normed = x.broadcast_div(&(norm_x + self.eps)?.sqrt()?)?;
-70        x_normed
-71            .to_dtype(x_dtype)?
-72            .broadcast_mul(&(&self.weight + 1.0)?)
-73    }
-74}
-75
-76#[derive(Debug, Clone)]
-77struct RotaryEmbedding {
-78    sin: Tensor,
-79    cos: Tensor,
-80}
-81
-82impl RotaryEmbedding {
-83    fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-84        let dim = cfg.head_dim;
-85        let max_seq_len = cfg.max_position_embeddings;
-86        let inv_freq: Vec<_> = (0..dim)
-87            .step_by(2)
-88            .map(|i| 1f32 / cfg.rope_theta.powf(i as f64 / dim as f64) as f32)
-89            .collect();
-90        let inv_freq_len = inv_freq.len();
-91        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-92        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-93            .to_dtype(dtype)?
-94            .reshape((max_seq_len, 1))?;
-95        let freqs = t.matmul(&inv_freq)?;
-96        Ok(Self {
-97            sin: freqs.sin()?,
-98            cos: freqs.cos()?,
-99        })
-100    }
-101
-102    fn apply_rotary_emb_qkv(
-103        &self,
-104        q: &Tensor,
-105        k: &Tensor,
-106        seqlen_offset: usize,
-107    ) -> Result<(Tensor, Tensor)> {
-108        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-109        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-110        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-111        let q_embed = candle_nn::rotary_emb::rope(&q.contiguous()?, &cos, &sin)?;
-112        let k_embed = candle_nn::rotary_emb::rope(&k.contiguous()?, &cos, &sin)?;
-113        Ok((q_embed, k_embed))
-114    }
-115}
-116
-117#[derive(Debug, Clone)]
-118#[allow(clippy::upper_case_acronyms)]
-119struct MLP {
-120    gate_proj: Linear,
-121    up_proj: Linear,
-122    down_proj: Linear,
-123    act_fn: candle_nn::Activation,
-124}
-125
-126impl MLP {
-127    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-128        let hidden_sz = cfg.hidden_size;
-129        let intermediate_sz = cfg.intermediate_size;
-130        let gate_proj = linear(hidden_sz, intermediate_sz, false, vb.pp("gate_proj"))?;
-131        let up_proj = linear(hidden_sz, intermediate_sz, false, vb.pp("up_proj"))?;
-132        let down_proj = linear(intermediate_sz, hidden_sz, false, vb.pp("down_proj"))?;
-133        Ok(Self {
-134            gate_proj,
-135            up_proj,
-136            down_proj,
-137            act_fn: cfg.hidden_act()?,
-138        })
-139    }
-140}
-141
-142impl Module for MLP {
-143    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-144        let lhs = xs.apply(&self.gate_proj)?.apply(&self.act_fn)?;
-145        let rhs = xs.apply(&self.up_proj)?;
-146        (lhs * rhs)?.apply(&self.down_proj)
-147    }
-148}
-149
-150#[derive(Debug, Clone)]
-151struct Attention {
-152    q_proj: Linear,
-153    k_proj: Linear,
-154    v_proj: Linear,
-155    o_proj: Linear,
-156    num_heads: usize,
-157    num_kv_heads: usize,
-158    num_kv_groups: usize,
-159    head_dim: usize,
-160    rotary_emb: Arc<RotaryEmbedding>,
-161    kv_cache: Option<(Tensor, Tensor)>,
-162    use_flash_attn: bool,
-163}
-164
-165impl Attention {
-166    fn new(
-167        rotary_emb: Arc<RotaryEmbedding>,
-168        use_flash_attn: bool,
-169        cfg: &Config,
-170        vb: VarBuilder,
-171    ) -> Result<Self> {
-172        let hidden_sz = cfg.hidden_size;
-173        let num_heads = cfg.num_attention_heads;
-174        let num_kv_heads = cfg.num_key_value_heads;
-175        let num_kv_groups = num_heads / num_kv_heads;
-176        let head_dim = cfg.head_dim;
-177        let bias = cfg.attention_bias;
-178        let q_proj = linear(hidden_sz, num_heads * head_dim, bias, vb.pp("q_proj"))?;
-179        let k_proj = linear(hidden_sz, num_kv_heads * head_dim, bias, vb.pp("k_proj"))?;
-180        let v_proj = linear(hidden_sz, num_kv_heads * head_dim, bias, vb.pp("v_proj"))?;
-181        let o_proj = linear(num_heads * head_dim, hidden_sz, bias, vb.pp("o_proj"))?;
-182        Ok(Self {
-183            q_proj,
-184            k_proj,
-185            v_proj,
-186            o_proj,
-187            num_heads,
-188            num_kv_heads,
-189            num_kv_groups,
-190            head_dim,
-191            rotary_emb,
-192            kv_cache: None,
-193            use_flash_attn,
-194        })
-195    }
-196
-197    fn forward(
-198        &mut self,
-199        xs: &Tensor,
-200        attention_mask: Option<&Tensor>,
-201        seqlen_offset: usize,
-202    ) -> Result<Tensor> {
-203        let (b_sz, q_len, _) = xs.dims3()?;
-204
-205        let query_states = self.q_proj.forward(xs)?;
-206        let key_states = self.k_proj.forward(xs)?;
-207        let value_states = self.v_proj.forward(xs)?;
-208
-209        let query_states = query_states
-210            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-211            .transpose(1, 2)?;
-212        let key_states = key_states
-213            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-214            .transpose(1, 2)?;
-215        let value_states = value_states
-216            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-217            .transpose(1, 2)?;
-218
-219        let (query_states, key_states) =
-220            self.rotary_emb
-221                .apply_rotary_emb_qkv(&query_states, &key_states, seqlen_offset)?;
-222
-223        let (key_states, value_states) = match &self.kv_cache {
-224            None => (key_states, value_states),
-225            Some((prev_k, prev_v)) => {
-226                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-227                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-228                (key_states, value_states)
-229            }
-230        };
-231        self.kv_cache = Some((key_states.clone(), value_states.clone()));
-232
-233        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?.contiguous()?;
-234        let value_states =
-235            crate::utils::repeat_kv(value_states, self.num_kv_groups)?.contiguous()?;
-236
-237        let attn_output = if self.use_flash_attn {
-238            // flash-attn expects (b_sz, seq_len, nheads, head_dim)
-239            let q = query_states.transpose(1, 2)?;
-240            let k = key_states.transpose(1, 2)?;
-241            let v = value_states.transpose(1, 2)?;
-242            let scale = 1f32 / (self.head_dim as f32).sqrt();
-243            flash_attn(&q, &k, &v, scale, attention_mask.is_some())?.transpose(1, 2)?
-244        } else {
-245            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-246            let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-247
-248            let attn_weights = match attention_mask {
-249                None => attn_weights,
-250                Some(mask) => attn_weights.broadcast_add(mask)?,
-251            };
-252            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-253            attn_weights.matmul(&value_states)?
-254        };
-255        attn_output
-256            .transpose(1, 2)?
-257            .reshape((b_sz, q_len, ()))?
-258            .apply(&self.o_proj)
-259    }
-260
-261    fn clear_kv_cache(&mut self) {
-262        self.kv_cache = None
-263    }
-264}
-265
-266#[cfg(feature = "flash-attn")]
-267fn flash_attn(
-268    q: &Tensor,
-269    k: &Tensor,
-270    v: &Tensor,
-271    softmax_scale: f32,
-272    causal: bool,
-273) -> Result<Tensor> {
-274    candle_flash_attn::flash_attn(q, k, v, softmax_scale, causal)
-275}
-276
-277#[cfg(not(feature = "flash-attn"))]
-278fn flash_attn(_: &Tensor, _: &Tensor, _: &Tensor, _: f32, _: bool) -> Result<Tensor> {
-279    unimplemented!("compile with '--features flash-attn'")
-280}
-281
-282#[derive(Debug, Clone)]
-283struct DecoderLayer {
-284    self_attn: Attention,
-285    mlp: MLP,
-286    input_layernorm: RmsNorm,
-287    post_attention_layernorm: RmsNorm,
-288}
-289
-290impl DecoderLayer {
-291    fn new(
-292        rotary_emb: Arc<RotaryEmbedding>,
-293        use_flash_attn: bool,
-294        cfg: &Config,
-295        vb: VarBuilder,
-296    ) -> Result<Self> {
-297        let self_attn = Attention::new(rotary_emb, use_flash_attn, cfg, vb.pp("self_attn"))?;
-298        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-299        let input_layernorm =
-300            RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("input_layernorm"))?;
-301        let post_attention_layernorm = RmsNorm::new(
-302            cfg.hidden_size,
-303            cfg.rms_norm_eps,
-304            vb.pp("post_attention_layernorm"),
-305        )?;
-306        Ok(Self {
-307            self_attn,
-308            mlp,
-309            input_layernorm,
-310            post_attention_layernorm,
-311        })
-312    }
-313
-314    fn forward(
-315        &mut self,
-316        xs: &Tensor,
-317        attention_mask: Option<&Tensor>,
-318        seqlen_offset: usize,
-319    ) -> Result<Tensor> {
-320        let residual = xs;
-321        let xs = self.input_layernorm.forward(xs)?;
-322        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-323        let xs = (xs + residual)?;
-324        let residual = &xs;
-325        let xs = xs.apply(&self.post_attention_layernorm)?.apply(&self.mlp)?;
-326        residual + xs
-327    }
-328
-329    fn clear_kv_cache(&mut self) {
-330        self.self_attn.clear_kv_cache()
-331    }
-332}
-333
-334#[derive(Debug, Clone)]
-335pub struct Model {
-336    embed_tokens: candle_nn::Embedding,
-337    layers: Vec<DecoderLayer>,
-338    norm: RmsNorm,
-339    lm_head: Linear,
-340    device: Device,
-341    dtype: DType,
-342    hidden_size: usize,
-343}
-344
-345impl Model {
-346    pub fn new(use_flash_attn: bool, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-347        let vb_m = vb.pp("model");
-348        let embed_tokens =
-349            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-350        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb_m.device())?);
-351        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-352        let vb_l = vb_m.pp("layers");
-353        for layer_idx in 0..cfg.num_hidden_layers {
-354            let layer =
-355                DecoderLayer::new(rotary_emb.clone(), use_flash_attn, cfg, vb_l.pp(layer_idx))?;
-356            layers.push(layer)
-357        }
-358        let norm = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb_m.pp("norm"))?;
-359        let lm_head = Linear::new(embed_tokens.embeddings().clone(), None);
-360        Ok(Self {
-361            embed_tokens,
-362            layers,
-363            norm,
-364            lm_head,
-365            device: vb.device().clone(),
-366            dtype: vb.dtype(),
-367            hidden_size: cfg.hidden_size,
-368        })
-369    }
-370
-371    pub fn embed_tokens(&self) -> &candle_nn::Embedding {
-372        &self.embed_tokens
-373    }
-374
-375    fn prepare_decoder_attention_mask(
-376        &self,
-377        b_size: usize,
-378        tgt_len: usize,
-379        seqlen_offset: usize,
-380    ) -> Result<Tensor> {
-381        let mask: Vec<_> = (0..tgt_len)
-382            .flat_map(|i| (0..tgt_len).map(move |j| if i < j { f32::NEG_INFINITY } else { 0. }))
-383            .collect();
-384        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-385        let mask = if seqlen_offset > 0 {
-386            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-387            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-388        } else {
-389            mask
-390        };
-391        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-392            .to_dtype(self.dtype)
-393    }
-394
-395    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-396        let (b_size, seq_len) = input_ids.dims2()?;
-397        let attention_mask = if seq_len <= 1 {
-398            None
-399        } else {
-400            let mask = self.prepare_decoder_attention_mask(b_size, seq_len, seqlen_offset)?;
-401            Some(mask)
-402        };
-403        let xs = self.embed_tokens.forward(input_ids)?;
-404        let mut xs = (xs * (self.hidden_size as f64).sqrt())?;
-405        for layer in self.layers.iter_mut() {
-406            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-407        }
-408        xs.narrow(1, seq_len - 1, 1)?
-409            .apply(&self.norm)?
-410            .apply(&self.lm_head)
-411    }
-412    pub fn forward_embeds(
-413        &mut self,
-414        xs: &Tensor,
-415        attn_mask: Option<&Tensor>,
-416        seqlen_offset: usize,
-417    ) -> Result<Tensor> {
-418        let (_, seq_len, _) = xs.dims3()?;
-419        let mut xs = (xs * (self.hidden_size as f64).sqrt())?;
-420        for layer in self.layers.iter_mut() {
-421            xs = layer.forward(&xs, attn_mask, seqlen_offset)?
-422        }
-423        xs.narrow(1, seq_len - 1, 1)?
-424            .apply(&self.norm)?
-425            .apply(&self.lm_head)
-426    }
-427
-428    // Forward the model and return the hidden states without the lm_head
-429    pub fn forward_embeds_without_projection(
-430        &mut self,
-431        xs: &Tensor,
-432        attn_mask: Option<&Tensor>,
-433        seqlen_offset: usize,
-434    ) -> Result<Tensor> {
-435        let (_, _, _) = xs.dims3()?;
-436        let mut xs = (xs * (self.hidden_size as f64).sqrt())?;
-437        for layer in self.layers.iter_mut() {
-438            xs = layer.forward(&xs, attn_mask, seqlen_offset)?
-439        }
-440        Ok(xs)
-441    }
-442
-443    pub fn clear_kv_cache(&mut self) {
-444        for layer in self.layers.iter_mut() {
-445            layer.clear_kv_cache()
-446        }
-447    }
-448}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/gemma2.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/gemma2.rs.html deleted file mode 100644 index a52e002..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/gemma2.rs.html +++ /dev/null @@ -1,456 +0,0 @@ -gemma2.rs - source

candle_transformers/models/
gemma2.rs

1//! Gemma LLM architecture (Google) inference implementation.
-2//!
-3//! See ["Gemma: Open Models Based on Gemini Technology"](https://blog.google/technology/developers/gemma-open-models/)
-4//!
-5//! Based on implementations from Google and OpenLLM
-6
-7use std::sync::Arc;
-8
-9use candle::{DType, Device, Module, Result, Tensor, D};
-10use candle_nn::{linear_b as linear, Activation, Linear, VarBuilder};
-11
-12fn default_max_position_embeddings() -> usize {
-13    4096
-14}
-15
-16#[derive(serde::Deserialize, Debug, Clone)]
-17pub struct Config {
-18    pub attention_bias: bool,
-19    pub head_dim: usize,
-20    pub hidden_activation: Activation,
-21    pub hidden_size: usize,
-22    pub intermediate_size: usize,
-23    pub num_attention_heads: usize,
-24    pub num_hidden_layers: usize,
-25    pub num_key_value_heads: usize,
-26    pub rms_norm_eps: f64,
-27    pub rope_theta: f64,
-28    pub vocab_size: usize,
-29    pub final_logit_softcapping: Option<f64>,
-30    pub attn_logit_softcapping: Option<f64>,
-31    pub query_pre_attn_scalar: usize,
-32    // TODO: Handle the sliding window in the attention mask.
-33    pub sliding_window: Option<usize>,
-34
-35    #[serde(default = "default_max_position_embeddings")]
-36    pub max_position_embeddings: usize,
-37}
-38
-39#[derive(Debug, Clone)]
-40struct RmsNorm {
-41    weight: Tensor,
-42    eps: f64,
-43}
-44
-45impl RmsNorm {
-46    fn new(dim: usize, eps: f64, vb: VarBuilder) -> Result<Self> {
-47        let weight = vb.get(dim, "weight")?;
-48        Ok(Self { weight, eps })
-49    }
-50}
-51
-52impl Module for RmsNorm {
-53    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-54        let x_dtype = x.dtype();
-55        let internal_dtype = match x_dtype {
-56            DType::F16 | DType::BF16 => DType::F32,
-57            d => d,
-58        };
-59        let hidden_size = x.dim(D::Minus1)?;
-60        let x = x.to_dtype(internal_dtype)?;
-61        let norm_x = (x.sqr()?.sum_keepdim(D::Minus1)? / hidden_size as f64)?;
-62        let x_normed = x.broadcast_div(&(norm_x + self.eps)?.sqrt()?)?;
-63        x_normed
-64            .to_dtype(x_dtype)?
-65            .broadcast_mul(&(&self.weight + 1.0)?)
-66    }
-67}
-68
-69#[derive(Debug, Clone)]
-70struct RotaryEmbedding {
-71    sin: Tensor,
-72    cos: Tensor,
-73}
-74
-75impl RotaryEmbedding {
-76    fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-77        let dim = cfg.head_dim;
-78        let max_seq_len = cfg.max_position_embeddings;
-79        let inv_freq: Vec<_> = (0..dim)
-80            .step_by(2)
-81            .map(|i| 1f32 / cfg.rope_theta.powf(i as f64 / dim as f64) as f32)
-82            .collect();
-83        let inv_freq_len = inv_freq.len();
-84        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-85        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-86            .to_dtype(dtype)?
-87            .reshape((max_seq_len, 1))?;
-88        let freqs = t.matmul(&inv_freq)?;
-89        Ok(Self {
-90            sin: freqs.sin()?,
-91            cos: freqs.cos()?,
-92        })
-93    }
-94
-95    fn apply_rotary_emb_qkv(
-96        &self,
-97        q: &Tensor,
-98        k: &Tensor,
-99        seqlen_offset: usize,
-100    ) -> Result<(Tensor, Tensor)> {
-101        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-102        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-103        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-104        let q_embed = candle_nn::rotary_emb::rope(&q.contiguous()?, &cos, &sin)?;
-105        let k_embed = candle_nn::rotary_emb::rope(&k.contiguous()?, &cos, &sin)?;
-106        Ok((q_embed, k_embed))
-107    }
-108}
-109
-110#[derive(Debug, Clone)]
-111#[allow(clippy::upper_case_acronyms)]
-112struct MLP {
-113    gate_proj: Linear,
-114    up_proj: Linear,
-115    down_proj: Linear,
-116    act_fn: candle_nn::Activation,
-117}
-118
-119impl MLP {
-120    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-121        let hidden_sz = cfg.hidden_size;
-122        let intermediate_sz = cfg.intermediate_size;
-123        let gate_proj = linear(hidden_sz, intermediate_sz, false, vb.pp("gate_proj"))?;
-124        let up_proj = linear(hidden_sz, intermediate_sz, false, vb.pp("up_proj"))?;
-125        let down_proj = linear(intermediate_sz, hidden_sz, false, vb.pp("down_proj"))?;
-126        Ok(Self {
-127            gate_proj,
-128            up_proj,
-129            down_proj,
-130            act_fn: cfg.hidden_activation,
-131        })
-132    }
-133}
-134
-135impl Module for MLP {
-136    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-137        let lhs = xs.apply(&self.gate_proj)?.apply(&self.act_fn)?;
-138        let rhs = xs.apply(&self.up_proj)?;
-139        (lhs * rhs)?.apply(&self.down_proj)
-140    }
-141}
-142
-143#[derive(Debug, Clone)]
-144struct Attention {
-145    q_proj: Linear,
-146    k_proj: Linear,
-147    v_proj: Linear,
-148    o_proj: Linear,
-149    num_heads: usize,
-150    num_kv_heads: usize,
-151    num_kv_groups: usize,
-152    head_dim: usize,
-153    attn_logit_softcapping: Option<f64>,
-154    rotary_emb: Arc<RotaryEmbedding>,
-155    kv_cache: Option<(Tensor, Tensor)>,
-156    use_flash_attn: bool,
-157}
-158
-159impl Attention {
-160    fn new(
-161        rotary_emb: Arc<RotaryEmbedding>,
-162        use_flash_attn: bool,
-163        cfg: &Config,
-164        vb: VarBuilder,
-165    ) -> Result<Self> {
-166        let hidden_sz = cfg.hidden_size;
-167        let num_heads = cfg.num_attention_heads;
-168        let num_kv_heads = cfg.num_key_value_heads;
-169        let num_kv_groups = num_heads / num_kv_heads;
-170        let head_dim = cfg.head_dim;
-171        let bias = cfg.attention_bias;
-172        let q_proj = linear(hidden_sz, num_heads * head_dim, bias, vb.pp("q_proj"))?;
-173        let k_proj = linear(hidden_sz, num_kv_heads * head_dim, bias, vb.pp("k_proj"))?;
-174        let v_proj = linear(hidden_sz, num_kv_heads * head_dim, bias, vb.pp("v_proj"))?;
-175        let o_proj = linear(num_heads * head_dim, hidden_sz, bias, vb.pp("o_proj"))?;
-176        Ok(Self {
-177            q_proj,
-178            k_proj,
-179            v_proj,
-180            o_proj,
-181            num_heads,
-182            num_kv_heads,
-183            num_kv_groups,
-184            head_dim,
-185            attn_logit_softcapping: cfg.attn_logit_softcapping,
-186            rotary_emb,
-187            kv_cache: None,
-188            use_flash_attn,
-189        })
-190    }
-191
-192    fn forward(
-193        &mut self,
-194        xs: &Tensor,
-195        attention_mask: Option<&Tensor>,
-196        seqlen_offset: usize,
-197    ) -> Result<Tensor> {
-198        let (b_sz, q_len, _) = xs.dims3()?;
-199
-200        let query_states = self.q_proj.forward(xs)?;
-201        let key_states = self.k_proj.forward(xs)?;
-202        let value_states = self.v_proj.forward(xs)?;
-203
-204        let query_states = query_states
-205            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-206            .transpose(1, 2)?;
-207        let key_states = key_states
-208            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-209            .transpose(1, 2)?;
-210        let value_states = value_states
-211            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-212            .transpose(1, 2)?;
-213
-214        let (query_states, key_states) =
-215            self.rotary_emb
-216                .apply_rotary_emb_qkv(&query_states, &key_states, seqlen_offset)?;
-217
-218        let (key_states, value_states) = match &self.kv_cache {
-219            None => (key_states, value_states),
-220            Some((prev_k, prev_v)) => {
-221                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-222                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-223                (key_states, value_states)
-224            }
-225        };
-226        self.kv_cache = Some((key_states.clone(), value_states.clone()));
-227
-228        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?.contiguous()?;
-229        let value_states =
-230            crate::utils::repeat_kv(value_states, self.num_kv_groups)?.contiguous()?;
-231
-232        let attn_output = if self.use_flash_attn {
-233            // flash-attn expects (b_sz, seq_len, nheads, head_dim)
-234            let q = query_states.transpose(1, 2)?;
-235            let k = key_states.transpose(1, 2)?;
-236            let v = value_states.transpose(1, 2)?;
-237            let scale = 1f32 / (self.head_dim as f32).sqrt();
-238            flash_attn(&q, &k, &v, scale, attention_mask.is_some())?.transpose(1, 2)?
-239        } else {
-240            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-241            let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-242
-243            let attn_weights = match self.attn_logit_softcapping {
-244                None => attn_weights,
-245                Some(sc) => ((attn_weights / sc)?.tanh()? * sc)?,
-246            };
-247
-248            let attn_weights = match attention_mask {
-249                None => attn_weights,
-250                Some(mask) => attn_weights.broadcast_add(mask)?,
-251            };
-252            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-253            attn_weights.matmul(&value_states)?
-254        };
-255        attn_output
-256            .transpose(1, 2)?
-257            .reshape((b_sz, q_len, ()))?
-258            .apply(&self.o_proj)
-259    }
-260
-261    fn clear_kv_cache(&mut self) {
-262        self.kv_cache = None
-263    }
-264}
-265
-266#[cfg(feature = "flash-attn")]
-267fn flash_attn(
-268    q: &Tensor,
-269    k: &Tensor,
-270    v: &Tensor,
-271    softmax_scale: f32,
-272    causal: bool,
-273) -> Result<Tensor> {
-274    candle_flash_attn::flash_attn(q, k, v, softmax_scale, causal)
-275}
-276
-277#[cfg(not(feature = "flash-attn"))]
-278fn flash_attn(_: &Tensor, _: &Tensor, _: &Tensor, _: f32, _: bool) -> Result<Tensor> {
-279    unimplemented!("compile with '--features flash-attn'")
-280}
-281
-282#[derive(Debug, Clone)]
-283struct DecoderLayer {
-284    self_attn: Attention,
-285    mlp: MLP,
-286    input_layernorm: RmsNorm,
-287    pre_feedforward_layernorm: RmsNorm,
-288    post_feedforward_layernorm: RmsNorm,
-289    post_attention_layernorm: RmsNorm,
-290}
-291
-292impl DecoderLayer {
-293    fn new(
-294        rotary_emb: Arc<RotaryEmbedding>,
-295        use_flash_attn: bool,
-296        cfg: &Config,
-297        vb: VarBuilder,
-298    ) -> Result<Self> {
-299        let self_attn = Attention::new(rotary_emb, use_flash_attn, cfg, vb.pp("self_attn"))?;
-300        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-301        let input_layernorm =
-302            RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("input_layernorm"))?;
-303        let pre_feedforward_layernorm = RmsNorm::new(
-304            cfg.hidden_size,
-305            cfg.rms_norm_eps,
-306            vb.pp("pre_feedforward_layernorm"),
-307        )?;
-308        let post_feedforward_layernorm = RmsNorm::new(
-309            cfg.hidden_size,
-310            cfg.rms_norm_eps,
-311            vb.pp("post_feedforward_layernorm"),
-312        )?;
-313        let post_attention_layernorm = RmsNorm::new(
-314            cfg.hidden_size,
-315            cfg.rms_norm_eps,
-316            vb.pp("post_attention_layernorm"),
-317        )?;
-318        Ok(Self {
-319            self_attn,
-320            mlp,
-321            input_layernorm,
-322            pre_feedforward_layernorm,
-323            post_feedforward_layernorm,
-324            post_attention_layernorm,
-325        })
-326    }
-327
-328    fn forward(
-329        &mut self,
-330        xs: &Tensor,
-331        attention_mask: Option<&Tensor>,
-332        seqlen_offset: usize,
-333    ) -> Result<Tensor> {
-334        let residual = xs;
-335        let xs = self.input_layernorm.forward(xs)?;
-336        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-337        let xs = xs.apply(&self.post_attention_layernorm)?;
-338        let xs = (xs + residual)?;
-339        let residual = &xs;
-340        let xs = xs.apply(&self.pre_feedforward_layernorm)?;
-341        let xs = xs.apply(&self.mlp)?;
-342        let xs = xs.apply(&self.post_feedforward_layernorm)?;
-343        residual + xs
-344    }
-345
-346    fn clear_kv_cache(&mut self) {
-347        self.self_attn.clear_kv_cache()
-348    }
-349}
-350
-351#[derive(Debug, Clone)]
-352pub struct Model {
-353    embed_tokens: candle_nn::Embedding,
-354    layers: Vec<DecoderLayer>,
-355    norm: RmsNorm,
-356    lm_head: Linear,
-357    final_logit_softcapping: Option<f64>,
-358    device: Device,
-359    dtype: DType,
-360    hidden_size: usize,
-361    sliding_window: Option<usize>,
-362}
-363
-364impl Model {
-365    pub fn new(use_flash_attn: bool, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-366        let vb_m = vb.pp("model");
-367        let embed_tokens =
-368            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-369        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb_m.device())?);
-370        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-371        let vb_l = vb_m.pp("layers");
-372        for layer_idx in 0..cfg.num_hidden_layers {
-373            let layer =
-374                DecoderLayer::new(rotary_emb.clone(), use_flash_attn, cfg, vb_l.pp(layer_idx))?;
-375            layers.push(layer)
-376        }
-377        let norm = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb_m.pp("norm"))?;
-378        let lm_head = Linear::new(embed_tokens.embeddings().clone(), None);
-379        Ok(Self {
-380            embed_tokens,
-381            layers,
-382            norm,
-383            lm_head,
-384            final_logit_softcapping: cfg.final_logit_softcapping,
-385            device: vb.device().clone(),
-386            dtype: vb.dtype(),
-387            hidden_size: cfg.hidden_size,
-388            sliding_window: cfg.sliding_window,
-389        })
-390    }
-391
-392    fn prepare_decoder_attention_mask(
-393        &self,
-394        b_size: usize,
-395        tgt_len: usize,
-396        seqlen_offset: usize,
-397    ) -> Result<Tensor> {
-398        let mask: Vec<_> = match self.sliding_window {
-399            None => (0..tgt_len)
-400                .flat_map(|i| (0..tgt_len).map(move |j| if i < j { f32::NEG_INFINITY } else { 0. }))
-401                .collect(),
-402            Some(sliding_window) => (0..tgt_len)
-403                .flat_map(|i| {
-404                    (0..tgt_len).map(move |j| {
-405                        if i < j || j + sliding_window < i {
-406                            f32::NEG_INFINITY
-407                        } else {
-408                            0.
-409                        }
-410                    })
-411                })
-412                .collect(),
-413        };
-414        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-415        let mask = if seqlen_offset > 0 {
-416            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-417            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-418        } else {
-419            mask
-420        };
-421        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-422            .to_dtype(self.dtype)
-423    }
-424
-425    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-426        let (b_size, seq_len) = input_ids.dims2()?;
-427        let attention_mask = if seq_len <= 1 {
-428            None
-429        } else {
-430            let mask = self.prepare_decoder_attention_mask(b_size, seq_len, seqlen_offset)?;
-431            Some(mask)
-432        };
-433        let xs = self.embed_tokens.forward(input_ids)?;
-434        let mut xs = (xs * (self.hidden_size as f64).sqrt())?;
-435        for layer in self.layers.iter_mut() {
-436            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-437        }
-438        let logits = xs
-439            .narrow(1, seq_len - 1, 1)?
-440            .apply(&self.norm)?
-441            .apply(&self.lm_head)?;
-442        let logits = match self.final_logit_softcapping {
-443            None => logits,
-444            Some(sc) => ((logits / sc)?.tanh()? * sc)?,
-445        };
-446
-447        Ok(logits)
-448    }
-449
-450    pub fn clear_kv_cache(&mut self) {
-451        for layer in self.layers.iter_mut() {
-452            layer.clear_kv_cache()
-453        }
-454    }
-455}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/gemma3.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/gemma3.rs.html deleted file mode 100644 index cff7e2f..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/gemma3.rs.html +++ /dev/null @@ -1,484 +0,0 @@ -gemma3.rs - source

candle_transformers/models/
gemma3.rs

1//! Gemma LLM architecture (Google) inference implementation.
-2//!
-3//! See ["Introducing Gemma 3: The most capable model you can run on a single GPU or TPU"](https://blog.google/technology/developers/gemma-3/)
-4//!
-5//! Based on implementations from HuggingFace transformers.
-6
-7use std::sync::Arc;
-8
-9use candle::{DType, Device, Module, Result, Tensor, D};
-10use candle_nn::{linear_b as linear, Activation, Linear, VarBuilder};
-11
-12#[derive(serde::Deserialize, Debug, Clone)]
-13pub struct Config {
-14    pub attention_bias: bool,
-15    pub head_dim: usize,
-16    pub hidden_activation: Activation,
-17    pub hidden_size: usize,
-18    pub intermediate_size: usize,
-19    pub num_attention_heads: usize,
-20    pub num_hidden_layers: usize,
-21    pub num_key_value_heads: usize,
-22    pub rms_norm_eps: f64,
-23    pub rope_theta: f64,
-24    pub vocab_size: usize,
-25    pub final_logit_softcapping: Option<f64>,
-26    pub attn_logit_softcapping: Option<f64>,
-27    pub query_pre_attn_scalar: usize,
-28    pub sliding_window: usize,
-29    pub sliding_window_pattern: usize,
-30    pub max_position_embeddings: usize,
-31}
-32
-33#[derive(Debug, Clone)]
-34struct RmsNorm {
-35    weight: Tensor,
-36    eps: f64,
-37}
-38
-39impl RmsNorm {
-40    fn new(dim: usize, eps: f64, vb: VarBuilder) -> Result<Self> {
-41        let weight = vb.get(dim, "weight")?;
-42        Ok(Self { weight, eps })
-43    }
-44}
-45
-46impl Module for RmsNorm {
-47    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-48        let x_dtype = x.dtype();
-49        let internal_dtype = match x_dtype {
-50            DType::F16 | DType::BF16 => DType::F32,
-51            d => d,
-52        };
-53        let hidden_size = x.dim(D::Minus1)?;
-54        let x = x.to_dtype(internal_dtype)?;
-55        let norm_x = (x.sqr()?.sum_keepdim(D::Minus1)? / hidden_size as f64)?;
-56        let x_normed = x.broadcast_div(&(norm_x + self.eps)?.sqrt()?)?;
-57        x_normed
-58            .to_dtype(x_dtype)?
-59            .broadcast_mul(&(&self.weight + 1.0)?)
-60    }
-61}
-62
-63#[derive(Debug, Clone)]
-64struct RotaryEmbedding {
-65    sin: Tensor,
-66    cos: Tensor,
-67}
-68
-69impl RotaryEmbedding {
-70    fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-71        let dim = cfg.head_dim;
-72        let max_seq_len = cfg.max_position_embeddings;
-73        let inv_freq: Vec<_> = (0..dim)
-74            .step_by(2)
-75            .map(|i| 1f32 / cfg.rope_theta.powf(i as f64 / dim as f64) as f32)
-76            .collect();
-77        let inv_freq_len = inv_freq.len();
-78        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-79        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-80            .to_dtype(dtype)?
-81            .reshape((max_seq_len, 1))?;
-82        let freqs = t.matmul(&inv_freq)?;
-83        Ok(Self {
-84            sin: freqs.sin()?,
-85            cos: freqs.cos()?,
-86        })
-87    }
-88
-89    fn apply_rotary_emb_qkv(
-90        &self,
-91        q: &Tensor,
-92        k: &Tensor,
-93        seqlen_offset: usize,
-94    ) -> Result<(Tensor, Tensor)> {
-95        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-96        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-97        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-98        let q_embed = candle_nn::rotary_emb::rope(&q.contiguous()?, &cos, &sin)?;
-99        let k_embed = candle_nn::rotary_emb::rope(&k.contiguous()?, &cos, &sin)?;
-100        Ok((q_embed, k_embed))
-101    }
-102}
-103
-104#[derive(Debug, Clone)]
-105#[allow(clippy::upper_case_acronyms)]
-106struct MLP {
-107    gate_proj: Linear,
-108    up_proj: Linear,
-109    down_proj: Linear,
-110    act_fn: candle_nn::Activation,
-111}
-112
-113impl MLP {
-114    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-115        let hidden_sz = cfg.hidden_size;
-116        let intermediate_sz = cfg.intermediate_size;
-117        let gate_proj = linear(hidden_sz, intermediate_sz, false, vb.pp("gate_proj"))?;
-118        let up_proj = linear(hidden_sz, intermediate_sz, false, vb.pp("up_proj"))?;
-119        let down_proj = linear(intermediate_sz, hidden_sz, false, vb.pp("down_proj"))?;
-120        Ok(Self {
-121            gate_proj,
-122            up_proj,
-123            down_proj,
-124            act_fn: cfg.hidden_activation,
-125        })
-126    }
-127}
-128
-129impl Module for MLP {
-130    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-131        let lhs = xs.apply(&self.gate_proj)?.apply(&self.act_fn)?;
-132        let rhs = xs.apply(&self.up_proj)?;
-133        (lhs * rhs)?.apply(&self.down_proj)
-134    }
-135}
-136
-137#[derive(Debug, Clone)]
-138enum KvCache {
-139    Normal(candle_nn::kv_cache::KvCache),
-140    Rotating(candle_nn::kv_cache::RotatingKvCache),
-141}
-142
-143#[derive(Debug, Clone)]
-144struct Attention {
-145    q_proj: Linear,
-146    k_proj: Linear,
-147    v_proj: Linear,
-148    o_proj: Linear,
-149    q_norm: RmsNorm,
-150    k_norm: RmsNorm,
-151    num_heads: usize,
-152    num_kv_heads: usize,
-153    num_kv_groups: usize,
-154    head_dim: usize,
-155    attn_logit_softcapping: Option<f64>,
-156    rotary_emb: Arc<RotaryEmbedding>,
-157    kv_cache: KvCache,
-158    use_flash_attn: bool,
-159}
-160
-161impl Attention {
-162    fn new(
-163        rotary_emb: Arc<RotaryEmbedding>,
-164        use_flash_attn: bool,
-165        is_sliding: bool,
-166        cfg: &Config,
-167        vb: VarBuilder,
-168    ) -> Result<Self> {
-169        let hidden_sz = cfg.hidden_size;
-170        let num_heads = cfg.num_attention_heads;
-171        let num_kv_heads = cfg.num_key_value_heads;
-172        let num_kv_groups = num_heads / num_kv_heads;
-173        let head_dim = cfg.head_dim;
-174        let bias = cfg.attention_bias;
-175        let q_proj = linear(hidden_sz, num_heads * head_dim, bias, vb.pp("q_proj"))?;
-176        let k_proj = linear(hidden_sz, num_kv_heads * head_dim, bias, vb.pp("k_proj"))?;
-177        let v_proj = linear(hidden_sz, num_kv_heads * head_dim, bias, vb.pp("v_proj"))?;
-178        let o_proj = linear(num_heads * head_dim, hidden_sz, bias, vb.pp("o_proj"))?;
-179        let q_norm = RmsNorm::new(head_dim, cfg.rms_norm_eps, vb.pp("q_norm"))?;
-180        let k_norm = RmsNorm::new(head_dim, cfg.rms_norm_eps, vb.pp("k_norm"))?;
-181        let kv_cache = if is_sliding {
-182            KvCache::Rotating(candle_nn::kv_cache::RotatingKvCache::new(
-183                2,
-184                cfg.sliding_window,
-185            ))
-186        } else {
-187            KvCache::Normal(candle_nn::kv_cache::KvCache::new(2, cfg.sliding_window))
-188        };
-189        Ok(Self {
-190            q_proj,
-191            k_proj,
-192            v_proj,
-193            o_proj,
-194            q_norm,
-195            k_norm,
-196            num_heads,
-197            num_kv_heads,
-198            num_kv_groups,
-199            head_dim,
-200            attn_logit_softcapping: cfg.attn_logit_softcapping,
-201            rotary_emb,
-202            kv_cache,
-203            use_flash_attn,
-204        })
-205    }
-206
-207    fn forward(
-208        &mut self,
-209        xs: &Tensor,
-210        attention_mask: Option<&Tensor>,
-211        seqlen_offset: usize,
-212    ) -> Result<Tensor> {
-213        let (b_sz, q_len, _) = xs.dims3()?;
-214
-215        let query_states = self.q_proj.forward(xs)?;
-216        let key_states = self.k_proj.forward(xs)?;
-217        let value_states = self.v_proj.forward(xs)?;
-218
-219        let query_states = query_states
-220            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-221            .transpose(1, 2)?;
-222        let key_states = key_states
-223            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-224            .transpose(1, 2)?;
-225        let value_states = value_states
-226            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-227            .transpose(1, 2)?;
-228        let query_states = self.q_norm.forward(&query_states)?;
-229        let key_states = self.k_norm.forward(&key_states)?;
-230
-231        let (query_states, key_states) =
-232            self.rotary_emb
-233                .apply_rotary_emb_qkv(&query_states, &key_states, seqlen_offset)?;
-234
-235        let (key_states, value_states) = match &mut self.kv_cache {
-236            KvCache::Normal(cache) => cache.append(&key_states, &value_states)?,
-237            KvCache::Rotating(cache) => cache.append(&key_states, &value_states)?,
-238        };
-239
-240        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?.contiguous()?;
-241        let value_states =
-242            crate::utils::repeat_kv(value_states, self.num_kv_groups)?.contiguous()?;
-243
-244        let attn_output = if self.use_flash_attn {
-245            // flash-attn expects (b_sz, seq_len, nheads, head_dim)
-246            let q = query_states.transpose(1, 2)?;
-247            let k = key_states.transpose(1, 2)?;
-248            let v = value_states.transpose(1, 2)?;
-249            let scale = 1f32 / (self.head_dim as f32).sqrt();
-250            flash_attn(&q, &k, &v, scale, attention_mask.is_some())?.transpose(1, 2)?
-251        } else {
-252            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-253            let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-254
-255            let attn_weights = match self.attn_logit_softcapping {
-256                None => attn_weights,
-257                Some(sc) => ((attn_weights / sc)?.tanh()? * sc)?,
-258            };
-259
-260            let attn_weights = match attention_mask {
-261                None => attn_weights,
-262                Some(mask) => attn_weights.broadcast_add(mask)?,
-263            };
-264            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-265            attn_weights.matmul(&value_states)?
-266        };
-267        attn_output
-268            .transpose(1, 2)?
-269            .reshape((b_sz, q_len, ()))?
-270            .apply(&self.o_proj)
-271    }
-272
-273    fn clear_kv_cache(&mut self) {
-274        match &mut self.kv_cache {
-275            KvCache::Normal(c) => c.reset(),
-276            KvCache::Rotating(c) => c.reset(),
-277        }
-278    }
-279}
-280
-281#[cfg(feature = "flash-attn")]
-282fn flash_attn(
-283    q: &Tensor,
-284    k: &Tensor,
-285    v: &Tensor,
-286    softmax_scale: f32,
-287    causal: bool,
-288) -> Result<Tensor> {
-289    candle_flash_attn::flash_attn(q, k, v, softmax_scale, causal)
-290}
-291
-292#[cfg(not(feature = "flash-attn"))]
-293fn flash_attn(_: &Tensor, _: &Tensor, _: &Tensor, _: f32, _: bool) -> Result<Tensor> {
-294    unimplemented!("compile with '--features flash-attn'")
-295}
-296
-297#[derive(Debug, Clone)]
-298struct DecoderLayer {
-299    self_attn: Attention,
-300    mlp: MLP,
-301    input_layernorm: RmsNorm,
-302    pre_feedforward_layernorm: RmsNorm,
-303    post_feedforward_layernorm: RmsNorm,
-304    post_attention_layernorm: RmsNorm,
-305}
-306
-307impl DecoderLayer {
-308    fn new(
-309        rotary_emb: Arc<RotaryEmbedding>,
-310        use_flash_attn: bool,
-311        is_sliding: bool,
-312        cfg: &Config,
-313        vb: VarBuilder,
-314    ) -> Result<Self> {
-315        let self_attn = Attention::new(
-316            rotary_emb,
-317            use_flash_attn,
-318            is_sliding,
-319            cfg,
-320            vb.pp("self_attn"),
-321        )?;
-322        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-323        let input_layernorm =
-324            RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("input_layernorm"))?;
-325        let pre_feedforward_layernorm = RmsNorm::new(
-326            cfg.hidden_size,
-327            cfg.rms_norm_eps,
-328            vb.pp("pre_feedforward_layernorm"),
-329        )?;
-330        let post_feedforward_layernorm = RmsNorm::new(
-331            cfg.hidden_size,
-332            cfg.rms_norm_eps,
-333            vb.pp("post_feedforward_layernorm"),
-334        )?;
-335        let post_attention_layernorm = RmsNorm::new(
-336            cfg.hidden_size,
-337            cfg.rms_norm_eps,
-338            vb.pp("post_attention_layernorm"),
-339        )?;
-340        Ok(Self {
-341            self_attn,
-342            mlp,
-343            input_layernorm,
-344            pre_feedforward_layernorm,
-345            post_feedforward_layernorm,
-346            post_attention_layernorm,
-347        })
-348    }
-349
-350    fn forward(
-351        &mut self,
-352        xs: &Tensor,
-353        attention_mask: Option<&Tensor>,
-354        seqlen_offset: usize,
-355    ) -> Result<Tensor> {
-356        let residual = xs;
-357        let xs = self.input_layernorm.forward(xs)?;
-358        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-359        let xs = xs.apply(&self.post_attention_layernorm)?;
-360        let xs = (xs + residual)?;
-361        let residual = &xs;
-362        let xs = xs.apply(&self.pre_feedforward_layernorm)?;
-363        let xs = xs.apply(&self.mlp)?;
-364        let xs = xs.apply(&self.post_feedforward_layernorm)?;
-365        residual + xs
-366    }
-367
-368    fn clear_kv_cache(&mut self) {
-369        self.self_attn.clear_kv_cache()
-370    }
-371}
-372
-373#[derive(Debug, Clone)]
-374pub struct Model {
-375    embed_tokens: candle_nn::Embedding,
-376    layers: Vec<DecoderLayer>,
-377    norm: RmsNorm,
-378    lm_head: Linear,
-379    final_logit_softcapping: Option<f64>,
-380    device: Device,
-381    dtype: DType,
-382    hidden_size: usize,
-383    sliding_window: usize,
-384}
-385
-386impl Model {
-387    pub fn new(use_flash_attn: bool, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-388        let vb_m = vb.pp("model");
-389        let embed_tokens =
-390            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-391        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb_m.device())?);
-392        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-393        let vb_l = vb_m.pp("layers");
-394        for layer_idx in 0..cfg.num_hidden_layers {
-395            let is_sliding = (layer_idx + 1) % cfg.sliding_window_pattern > 0;
-396            let layer = DecoderLayer::new(
-397                rotary_emb.clone(),
-398                use_flash_attn,
-399                is_sliding,
-400                cfg,
-401                vb_l.pp(layer_idx),
-402            )?;
-403            layers.push(layer)
-404        }
-405        let norm = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb_m.pp("norm"))?;
-406        let lm_head = Linear::new(embed_tokens.embeddings().clone(), None);
-407        Ok(Self {
-408            embed_tokens,
-409            layers,
-410            norm,
-411            lm_head,
-412            final_logit_softcapping: cfg.final_logit_softcapping,
-413            device: vb.device().clone(),
-414            dtype: vb.dtype(),
-415            hidden_size: cfg.hidden_size,
-416            sliding_window: cfg.sliding_window,
-417        })
-418    }
-419
-420    fn prepare_decoder_attention_mask(
-421        &self,
-422        b_size: usize,
-423        tgt_len: usize,
-424        seqlen_offset: usize,
-425    ) -> Result<Tensor> {
-426        let mask: Vec<_> = match Some(self.sliding_window) {
-427            None => (0..tgt_len)
-428                .flat_map(|i| (0..tgt_len).map(move |j| if i < j { f32::NEG_INFINITY } else { 0. }))
-429                .collect(),
-430            Some(sliding_window) => (0..tgt_len)
-431                .flat_map(|i| {
-432                    (0..tgt_len).map(move |j| {
-433                        if i < j || j + sliding_window < i {
-434                            f32::NEG_INFINITY
-435                        } else {
-436                            0.
-437                        }
-438                    })
-439                })
-440                .collect(),
-441        };
-442        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-443        let mask = if seqlen_offset > 0 {
-444            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-445            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-446        } else {
-447            mask
-448        };
-449        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-450            .to_dtype(self.dtype)
-451    }
-452
-453    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-454        let (b_size, seq_len) = input_ids.dims2()?;
-455        let attention_mask = if seq_len <= 1 {
-456            None
-457        } else {
-458            let mask = self.prepare_decoder_attention_mask(b_size, seq_len, seqlen_offset)?;
-459            Some(mask)
-460        };
-461        let xs = self.embed_tokens.forward(input_ids)?;
-462        let mut xs = (xs * (self.hidden_size as f64).sqrt())?;
-463        for layer in self.layers.iter_mut() {
-464            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-465        }
-466        let logits = xs
-467            .narrow(1, seq_len - 1, 1)?
-468            .apply(&self.norm)?
-469            .apply(&self.lm_head)?;
-470        let logits = match self.final_logit_softcapping {
-471            None => logits,
-472            Some(sc) => ((logits / sc)?.tanh()? * sc)?,
-473        };
-474
-475        Ok(logits)
-476    }
-477
-478    pub fn clear_kv_cache(&mut self) {
-479        for layer in self.layers.iter_mut() {
-480            layer.clear_kv_cache()
-481        }
-482    }
-483}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/glm4.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/glm4.rs.html deleted file mode 100644 index 7c23375..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/glm4.rs.html +++ /dev/null @@ -1,610 +0,0 @@ -glm4.rs - source

candle_transformers/models/
glm4.rs

1//! GLM-4 inference implementation.
-2//!
-3//! An open bilingual language model with 130B parameters.
-4//!
-5//! Based on implementation from [ChatGLM-6B](https://github.com/THUDM/ChatGLM-6B)
-6
-7use crate::models::with_tracing::{linear_b as linear, Linear};
-8use candle::{DType, Device, IndexOp, Module, Result, Tensor, D};
-9use candle_nn::VarBuilder;
-10
-11fn default_one() -> usize {
-12    1
-13}
-14
-15#[derive(Debug, Clone, serde::Deserialize, Default)]
-16pub struct Config {
-17    pub num_layers: usize,
-18    pub padded_vocab_size: usize,
-19    pub hidden_size: usize,
-20    pub ffn_hidden_size: usize,
-21    pub kv_channels: usize,
-22    pub num_attention_heads: usize,
-23    pub seq_length: usize,
-24    pub layernorm_epsilon: f64,
-25    pub rmsnorm: bool,
-26    pub apply_residual_connection_post_layernorm: bool,
-27    pub post_layer_norm: bool,
-28    pub add_bias_linear: bool,
-29    pub add_qkv_bias: bool,
-30    pub bias_dropout_fusion: bool,
-31    pub multi_query_attention: bool,
-32    pub multi_query_group_num: usize,
-33    pub apply_query_key_layer_scaling: bool,
-34    pub attention_softmax_in_fp32: bool,
-35    pub fp32_residual_connection: bool,
-36    #[serde(default = "default_one")]
-37    pub rope_ratio: usize,
-38}
-39
-40impl Config {
-41    pub fn glm4() -> Self {
-42        Self {
-43            num_layers: 40,
-44            padded_vocab_size: 151552,
-45            hidden_size: 4096,
-46            ffn_hidden_size: 13696,
-47            kv_channels: 128,
-48            num_attention_heads: 32,
-49            seq_length: 8192,
-50            layernorm_epsilon: 1e-5,
-51            rmsnorm: true,
-52            apply_residual_connection_post_layernorm: false,
-53            post_layer_norm: true,
-54            add_bias_linear: false,
-55            add_qkv_bias: true,
-56            bias_dropout_fusion: true,
-57            multi_query_attention: true,
-58            multi_query_group_num: 2,
-59            apply_query_key_layer_scaling: true,
-60            attention_softmax_in_fp32: true,
-61            fp32_residual_connection: false,
-62            rope_ratio: 500,
-63        }
-64    }
-65}
-66
-67#[derive(Debug, Clone)]
-68struct RotaryEmbedding {
-69    cache: Tensor,
-70}
-71
-72impl RotaryEmbedding {
-73    fn new(cfg: &Config, dtype: DType, dev: &Device) -> Result<Self> {
-74        let rotary_dim = cfg.kv_channels;
-75        let n_elem = rotary_dim / 2;
-76        let base = 10_000f64 * cfg.rope_ratio as f64;
-77        let inv_freq: Vec<_> = (0..n_elem)
-78            .step_by(2)
-79            .map(|i| 1f32 / base.powf(i as f64 / n_elem as f64) as f32)
-80            .collect();
-81        let inv_freq_len = inv_freq.len();
-82        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-83        let t = Tensor::arange(0u32, cfg.seq_length as u32, dev)?
-84            .to_dtype(dtype)?
-85            .reshape((cfg.seq_length, 1))?;
-86        let freqs = t.matmul(&inv_freq)?;
-87        let cache = Tensor::stack(&[&freqs.cos()?, &freqs.sin()?], D::Minus1)?;
-88        Ok(Self { cache })
-89    }
-90
-91    fn apply(&self, xs: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-92        let (seqlen, _b, np, _hn) = xs.dims4()?;
-93        let cache = self.cache.narrow(0, seqlen_offset, seqlen)?;
-94        let rot_dim = cache.dim(D::Minus2)? * 2;
-95        let (xs, xs_pass) = (
-96            xs.narrow(D::Minus1, 0, rot_dim)?,
-97            xs.narrow(D::Minus1, rot_dim, rot_dim)?,
-98        );
-99        let xshaped = xs.reshape((seqlen, (), np, rot_dim / 2, 2))?;
-100        let cache = cache.reshape((seqlen, (), 1, rot_dim / 2, 2))?;
-101        let (xshaped0, xshaped1) = (
-102            xshaped.i((.., .., .., .., 0))?,
-103            xshaped.i((.., .., .., .., 1))?,
-104        );
-105        let (cache0, cache1) = (cache.i((.., .., .., .., 0))?, cache.i((.., .., .., .., 1))?);
-106        let xs_out = Tensor::stack(
-107            &[
-108                (xshaped0.broadcast_mul(&cache0)? - xshaped1.broadcast_mul(&cache1)?)?,
-109                (xshaped1.broadcast_mul(&cache0)? + xshaped0.broadcast_mul(&cache1)?)?,
-110            ],
-111            D::Minus1,
-112        )?;
-113        let xs_out = xs_out.flatten_from(3)?;
-114        Tensor::cat(&[xs_out, xs_pass], D::Minus1)
-115    }
-116}
-117
-118#[derive(Debug, Clone)]
-119struct CoreAttention {
-120    coeff: Option<f64>,
-121    norm_factor: f64,
-122    dtype: DType,
-123}
-124
-125fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: f32, dtype: DType) -> Result<Tensor> {
-126    let shape = mask.shape();
-127    let on_true = Tensor::new(on_true, on_false.device())?.broadcast_as(shape.dims())?;
-128    let m = mask.where_cond(&on_true.to_dtype(dtype)?, on_false)?;
-129    Ok(m)
-130}
-131
-132impl CoreAttention {
-133    fn new(layer_number: usize, cfg: &Config, dtype: DType) -> Result<Self> {
-134        let norm_factor = (cfg.kv_channels as f64).sqrt();
-135        let (norm_factor, coeff) = if cfg.apply_query_key_layer_scaling {
-136            let coeff = f64::max(1.0, layer_number as f64);
-137            (norm_factor * coeff, Some(coeff))
-138        } else {
-139            (norm_factor, None)
-140        };
-141        Ok(Self {
-142            coeff,
-143            norm_factor,
-144            dtype,
-145        })
-146    }
-147
-148    fn forward(
-149        &self,
-150        query_layer: &Tensor,
-151        key_layer: &Tensor,
-152        value_layer: &Tensor,
-153        attention_mask: &Option<Tensor>,
-154    ) -> Result<Tensor> {
-155        let output_size = (
-156            query_layer.dim(1)?, // b
-157            query_layer.dim(2)?, // np
-158            query_layer.dim(0)?, // sq
-159            key_layer.dim(0)?,   // sk
-160        );
-161        let query_layer =
-162            query_layer.reshape((output_size.2, output_size.0 * output_size.1, ()))?;
-163        let key_layer = key_layer.reshape((output_size.3, output_size.0 * output_size.1, ()))?;
-164        let matmul_result = Tensor::matmul(
-165            &query_layer.transpose(0, 1)?.contiguous()?,
-166            &key_layer.transpose(0, 1)?.transpose(1, 2)?.contiguous()?,
-167        )?;
-168        let matmul_result = (matmul_result / self.norm_factor)?.reshape(output_size)?;
-169        let matmul_result = match self.coeff {
-170            None => matmul_result,
-171            Some(coeff) => (matmul_result * coeff)?,
-172        };
-173        let attention_scores = match attention_mask {
-174            Some(mask) => masked_fill(
-175                &matmul_result,
-176                &mask.broadcast_left((matmul_result.dim(0)?, matmul_result.dim(1)?))?,
-177                f32::NEG_INFINITY,
-178                self.dtype,
-179            )?,
-180            None => matmul_result,
-181        };
-182        let attention_probs = candle_nn::ops::softmax_last_dim(&attention_scores)?;
-183
-184        let output_size = (
-185            value_layer.dim(1)?,
-186            value_layer.dim(2)?,
-187            query_layer.dim(0)?,
-188            value_layer.dim(3)?,
-189        );
-190        let value_layer =
-191            value_layer.reshape((value_layer.dim(0)?, output_size.0 * output_size.1, ()))?;
-192        let attention_probs =
-193            attention_probs.reshape((output_size.0 * output_size.1, output_size.2, ()))?;
-194        let context_layer = Tensor::matmul(
-195            &attention_probs.contiguous()?,
-196            &value_layer.transpose(0, 1)?.contiguous()?,
-197        )?;
-198        let context_layer = context_layer.reshape(output_size)?;
-199        let context_layer = context_layer.permute((2, 0, 1, 3))?.contiguous()?;
-200        context_layer.flatten_from(D::Minus2)
-201    }
-202}
-203
-204#[derive(Debug, Clone)]
-205struct SelfAttention {
-206    query_key_value: Linear,
-207    core_attention: CoreAttention,
-208    dense: Linear,
-209    multi_query_attention: bool,
-210    num_attention_heads_per_partition: usize,
-211    num_multi_query_groups_per_partition: usize,
-212    hidden_size_per_attention_head: usize,
-213    kv_cache: Option<(Tensor, Tensor)>,
-214}
-215
-216impl SelfAttention {
-217    fn new(layer_number: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-218        let projection_size = cfg.kv_channels * cfg.num_attention_heads;
-219        let hidden_size_per_attention_head = projection_size / cfg.num_attention_heads;
-220        let qkv_hidden_size = if cfg.multi_query_attention {
-221            projection_size + 2 * hidden_size_per_attention_head * cfg.multi_query_group_num
-222        } else {
-223            3 * projection_size
-224        };
-225        let query_key_value = linear(
-226            cfg.hidden_size,
-227            qkv_hidden_size,
-228            cfg.add_bias_linear || cfg.add_qkv_bias,
-229            vb.pp("query_key_value"),
-230        )?;
-231        let core_attention = CoreAttention::new(layer_number, cfg, vb.dtype())?;
-232        let dense = linear(
-233            cfg.hidden_size,
-234            cfg.hidden_size,
-235            cfg.add_bias_linear,
-236            vb.pp("dense"),
-237        )?;
-238        Ok(Self {
-239            query_key_value,
-240            core_attention,
-241            dense,
-242            multi_query_attention: cfg.multi_query_attention,
-243            num_attention_heads_per_partition: cfg.num_attention_heads,
-244            num_multi_query_groups_per_partition: cfg.multi_query_group_num,
-245            hidden_size_per_attention_head: cfg.kv_channels,
-246            kv_cache: None,
-247        })
-248    }
-249
-250    fn reset_kv_cache(&mut self) {
-251        self.kv_cache = None
-252    }
-253
-254    fn forward(
-255        &mut self,
-256        xs: &Tensor,
-257        attention_mask: &Option<Tensor>,
-258        rotary_emb: &RotaryEmbedding,
-259    ) -> Result<Tensor> {
-260        let mixed_x_layer = xs.apply(&self.query_key_value)?;
-261        if !self.multi_query_attention {
-262            candle::bail!("only multi_query_attention=true is supported")
-263        }
-264        let hpa = self.hidden_size_per_attention_head;
-265        let query_layer =
-266            mixed_x_layer.narrow(D::Minus1, 0, self.num_attention_heads_per_partition * hpa)?;
-267        let key_layer = mixed_x_layer.narrow(
-268            D::Minus1,
-269            self.num_attention_heads_per_partition * hpa,
-270            self.num_multi_query_groups_per_partition * hpa,
-271        )?;
-272        let value_layer = mixed_x_layer.narrow(
-273            D::Minus1,
-274            self.num_attention_heads_per_partition * hpa
-275                + self.num_multi_query_groups_per_partition * hpa,
-276            self.num_multi_query_groups_per_partition * hpa,
-277        )?;
-278        let query_layer = query_layer.reshape((
-279            query_layer.dim(0)?,
-280            query_layer.dim(1)?,
-281            self.num_attention_heads_per_partition,
-282            hpa,
-283        ))?;
-284        let key_layer = key_layer.reshape((
-285            key_layer.dim(0)?,
-286            key_layer.dim(1)?,
-287            self.num_multi_query_groups_per_partition,
-288            hpa,
-289        ))?;
-290        let value_layer = value_layer.reshape((
-291            value_layer.dim(0)?,
-292            value_layer.dim(1)?,
-293            self.num_multi_query_groups_per_partition,
-294            hpa,
-295        ))?;
-296
-297        // Rotary embeddings.
-298        let seqlen_offset = match &self.kv_cache {
-299            None => 0,
-300            Some((prev_k, _)) => prev_k.dim(0)?,
-301        };
-302        let query_layer = rotary_emb.apply(&query_layer, seqlen_offset)?;
-303        let key_layer = rotary_emb.apply(&key_layer, seqlen_offset)?;
-304
-305        // KV cache.
-306        let (key_layer, value_layer) = match &self.kv_cache {
-307            None => (key_layer, value_layer),
-308            Some((prev_k, prev_v)) => {
-309                let k = Tensor::cat(&[prev_k, &key_layer], 0)?;
-310                let v = Tensor::cat(&[prev_v, &value_layer], 0)?;
-311                (k, v)
-312            }
-313        };
-314        self.kv_cache = Some((key_layer.clone(), value_layer.clone()));
-315
-316        // Repeat KV.
-317        let ratio =
-318            self.num_attention_heads_per_partition / self.num_multi_query_groups_per_partition;
-319        let key_layer = {
-320            let (d0, d1, d2, d3) = key_layer.dims4()?;
-321            key_layer
-322                .unsqueeze(D::Minus2)?
-323                .expand((d0, d1, d2, ratio, d3))?
-324                .reshape((
-325                    d0,
-326                    d1,
-327                    self.num_attention_heads_per_partition,
-328                    self.hidden_size_per_attention_head,
-329                ))?
-330        };
-331        let value_layer = {
-332            let (d0, d1, d2, d3) = value_layer.dims4()?;
-333            value_layer
-334                .unsqueeze(D::Minus2)?
-335                .expand((d0, d1, d2, ratio, d3))?
-336                .reshape((
-337                    d0,
-338                    d1,
-339                    self.num_attention_heads_per_partition,
-340                    self.hidden_size_per_attention_head,
-341                ))?
-342        };
-343
-344        let context_layer =
-345            self.core_attention
-346                .forward(&query_layer, &key_layer, &value_layer, attention_mask)?;
-347        let output = context_layer.apply(&self.dense)?;
-348        Ok(output)
-349    }
-350}
-351
-352#[allow(clippy::upper_case_acronyms)]
-353#[derive(Debug, Clone)]
-354struct MLP {
-355    dense_h_to_4h: Linear,
-356    dense_4h_to_h: Linear,
-357}
-358
-359impl MLP {
-360    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-361        let dense_h_to_4h = linear(
-362            cfg.hidden_size,
-363            cfg.ffn_hidden_size * 2,
-364            cfg.add_bias_linear,
-365            vb.pp("dense_h_to_4h"),
-366        )?;
-367        let dense_4h_to_h = linear(
-368            cfg.ffn_hidden_size,
-369            cfg.hidden_size,
-370            cfg.add_bias_linear,
-371            vb.pp("dense_4h_to_h"),
-372        )?;
-373        Ok(Self {
-374            dense_4h_to_h,
-375            dense_h_to_4h,
-376        })
-377    }
-378}
-379
-380impl Module for MLP {
-381    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-382        xs.apply(&self.dense_h_to_4h)?
-383            .apply(&candle_nn::Activation::Swiglu)?
-384            .apply(&self.dense_4h_to_h)
-385    }
-386}
-387
-388#[derive(Debug, Clone)]
-389struct Block {
-390    input_layernorm: candle_nn::LayerNorm,
-391    self_attention: SelfAttention,
-392    post_attention_layernorm: candle_nn::LayerNorm,
-393    mlp: MLP,
-394    apply_residual_connection_post_layernorm: bool,
-395}
-396
-397impl Block {
-398    fn new(layer_number: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-399        let input_layernorm = if cfg.rmsnorm {
-400            candle_nn::rms_norm(
-401                cfg.hidden_size,
-402                cfg.layernorm_epsilon,
-403                vb.pp("input_layernorm"),
-404            )?
-405            .into_inner()
-406        } else {
-407            candle_nn::layer_norm(
-408                cfg.hidden_size,
-409                cfg.layernorm_epsilon,
-410                vb.pp("input_layernorm"),
-411            )?
-412        };
-413        let post_attention_layernorm = if cfg.rmsnorm {
-414            candle_nn::rms_norm(
-415                cfg.hidden_size,
-416                cfg.layernorm_epsilon,
-417                vb.pp("post_attention_layernorm"),
-418            )?
-419            .into_inner()
-420        } else {
-421            candle_nn::layer_norm(
-422                cfg.hidden_size,
-423                cfg.layernorm_epsilon,
-424                vb.pp("post_attention_layernorm"),
-425            )?
-426        };
-427        let self_attention = SelfAttention::new(layer_number, cfg, vb.pp("self_attention"))?;
-428        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-429        Ok(Self {
-430            input_layernorm,
-431            self_attention,
-432            post_attention_layernorm,
-433            mlp,
-434            apply_residual_connection_post_layernorm: cfg.apply_residual_connection_post_layernorm,
-435        })
-436    }
-437
-438    fn reset_kv_cache(&mut self) {
-439        self.self_attention.reset_kv_cache()
-440    }
-441
-442    fn forward(
-443        &mut self,
-444        xs: &Tensor,
-445        attention_mask: &Option<Tensor>,
-446        rotary_emb: &RotaryEmbedding,
-447    ) -> Result<Tensor> {
-448        let layernorm_output = xs.apply(&self.input_layernorm)?;
-449        let attention_output =
-450            self.self_attention
-451                .forward(&layernorm_output, attention_mask, rotary_emb)?;
-452        let residual = if self.apply_residual_connection_post_layernorm {
-453            &layernorm_output
-454        } else {
-455            xs
-456        };
-457        let layernorm_input = (residual + attention_output)?;
-458        let layernorm_output = layernorm_input.apply(&self.post_attention_layernorm)?;
-459        let mlp_output = layernorm_output.apply(&self.mlp)?;
-460        let residual = if self.apply_residual_connection_post_layernorm {
-461            &layernorm_output
-462        } else {
-463            &layernorm_input
-464        };
-465        mlp_output + residual
-466    }
-467}
-468
-469#[derive(Debug, Clone)]
-470struct Transformer {
-471    layers: Vec<Block>,
-472    final_layernorm: Option<candle_nn::LayerNorm>,
-473    rotary_emb: RotaryEmbedding,
-474}
-475
-476impl Transformer {
-477    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-478        let vb_l = vb.pp("layers");
-479        let mut layers = Vec::with_capacity(cfg.num_layers);
-480        for layer_index in 0..cfg.num_layers {
-481            let block = Block::new(layer_index + 1, cfg, vb_l.pp(layer_index))?;
-482            layers.push(block)
-483        }
-484        let final_layernorm = if cfg.post_layer_norm {
-485            let ln = if cfg.rmsnorm {
-486                candle_nn::rms_norm(
-487                    cfg.hidden_size,
-488                    cfg.layernorm_epsilon,
-489                    vb.pp("final_layernorm"),
-490                )?
-491                .into_inner()
-492            } else {
-493                candle_nn::layer_norm(
-494                    cfg.hidden_size,
-495                    cfg.layernorm_epsilon,
-496                    vb.pp("final_layernorm"),
-497                )?
-498            };
-499            Some(ln)
-500        } else {
-501            None
-502        };
-503        let rotary_emb = RotaryEmbedding::new(cfg, vb.dtype(), vb.device())?;
-504        Ok(Self {
-505            layers,
-506            final_layernorm,
-507            rotary_emb,
-508        })
-509    }
-510
-511    fn reset_kv_cache(&mut self) {
-512        for block in self.layers.iter_mut() {
-513            block.reset_kv_cache()
-514        }
-515    }
-516
-517    fn forward(&mut self, xs: &Tensor, attention_mask: &Option<Tensor>) -> Result<Tensor> {
-518        let mut xs = xs.clone();
-519        for block in self.layers.iter_mut() {
-520            xs = block.forward(&xs, attention_mask, &self.rotary_emb)?
-521        }
-522        match self.final_layernorm.as_ref() {
-523            None => Ok(xs),
-524            Some(ln) => xs.apply(ln),
-525        }
-526    }
-527}
-528
-529#[derive(Debug, Clone)]
-530struct Embedding {
-531    word_embeddings: candle_nn::Embedding,
-532    fp32_residual_connection: bool,
-533}
-534
-535impl Embedding {
-536    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-537        let word_embeddings = candle_nn::embedding(
-538            cfg.padded_vocab_size,
-539            cfg.hidden_size,
-540            vb.pp("word_embeddings"),
-541        )?;
-542        Ok(Self {
-543            word_embeddings,
-544            fp32_residual_connection: cfg.fp32_residual_connection,
-545        })
-546    }
-547}
-548
-549impl Module for Embedding {
-550    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-551        let xs = self.word_embeddings.forward(xs)?.transpose(0, 1)?; // b,s,h -> s,b,h
-552        if self.fp32_residual_connection {
-553            xs.to_dtype(candle::DType::F32)
-554        } else {
-555            xs.contiguous()
-556        }
-557    }
-558}
-559
-560#[derive(Debug, Clone)]
-561pub struct Model {
-562    embedding: Embedding,
-563    encoder: Transformer,
-564    output_layer: Linear,
-565}
-566
-567fn get_mask(size: usize, device: &Device) -> Result<Tensor> {
-568    let mask: Vec<_> = (0..size)
-569        .flat_map(|i| (0..size).map(move |j| u8::from(j > i)))
-570        .collect();
-571    Tensor::from_slice(&mask, (size, size), device)
-572}
-573
-574impl Model {
-575    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-576        let vb = vb.pp("transformer");
-577        let embedding = Embedding::new(cfg, vb.pp("embedding"))?;
-578        let encoder = Transformer::new(cfg, vb.pp("encoder"))?;
-579        let output_layer = linear(
-580            cfg.hidden_size,
-581            cfg.padded_vocab_size,
-582            false,
-583            vb.pp("output_layer"),
-584        )?;
-585
-586        Ok(Self {
-587            embedding,
-588            encoder,
-589            output_layer,
-590        })
-591    }
-592
-593    pub fn reset_kv_cache(&mut self) {
-594        self.encoder.reset_kv_cache()
-595    }
-596
-597    pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor> {
-598        let (_b_size, seq_len) = xs.dims2()?;
-599        let input_embeds = xs.apply(&self.embedding)?;
-600        let attention_mask = if seq_len <= 1 {
-601            None
-602        } else {
-603            Some(get_mask(seq_len, xs.device())?)
-604        };
-605        let xs = self.encoder.forward(&input_embeds, &attention_mask)?;
-606        let lm_logits = xs.i(seq_len - 1)?.apply(&self.output_layer)?;
-607        Ok(lm_logits)
-608    }
-609}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/granite.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/granite.rs.html deleted file mode 100644 index b244236..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/granite.rs.html +++ /dev/null @@ -1,466 +0,0 @@ -granite.rs - source

candle_transformers/models/
granite.rs

1//! Granite is a Long Context Transformer Language Model.
-2//!
-3//! A high performance transformer model optimized for efficient processing
-4//! of very long context sequences
-5//!
-6//! Based on implementation from [Nod.ai](https://github.com/nod-ai/granite)
-7
-8use super::with_tracing::{linear_no_bias as linear, Linear, RmsNorm};
-9use candle::{DType, Device, IndexOp, Result, Tensor, D};
-10use candle_nn::{embedding, Embedding, Module, VarBuilder};
-11use std::{collections::HashMap, f32::consts::PI};
-12
-13pub const DEFAULT_MAX_SEQ_LEN: usize = 4096;
-14
-15#[derive(Debug, Clone, serde::Deserialize, Default)]
-16pub enum GraniteRopeType {
-17    #[serde(rename = "granite")]
-18    Granite,
-19    #[default]
-20    #[serde(rename = "default")]
-21    Default,
-22}
-23
-24#[derive(Debug, Clone, serde::Deserialize, Default)]
-25pub struct GraniteRopeConfig {
-26    pub factor: f32,
-27    pub low_freq_factor: f32,
-28    pub high_freq_factor: f32,
-29    pub original_max_position_embeddings: usize,
-30    pub rope_type: GraniteRopeType,
-31}
-32#[derive(Debug, Clone, serde::Deserialize)]
-33#[serde(untagged)]
-34pub enum GraniteEosToks {
-35    Single(u32),
-36    Multiple(Vec<u32>),
-37}
-38
-39#[derive(Debug, Clone, serde::Deserialize)]
-40pub struct GraniteConfig {
-41    pub hidden_size: usize,
-42    pub intermediate_size: usize,
-43    pub vocab_size: usize,
-44    pub num_hidden_layers: usize,
-45    pub num_attention_heads: usize,
-46    pub num_key_value_heads: Option<usize>,
-47    pub rms_norm_eps: f64,
-48    #[serde(default = "default_rope")]
-49    pub rope_theta: f32,
-50    pub bos_token_id: Option<u32>,
-51    pub eos_token_id: Option<GraniteEosToks>,
-52    pub rope_scaling: Option<GraniteRopeConfig>,
-53    pub max_position_embeddings: usize,
-54}
-55
-56impl GraniteConfig {
-57    pub fn num_key_value_heads(&self) -> usize {
-58        self.num_key_value_heads.unwrap_or(self.num_attention_heads)
-59    }
-60}
-61
-62fn default_rope() -> f32 {
-63    10_000.0
-64}
-65
-66impl GraniteConfig {
-67    pub fn into_config(self, use_flash_attn: bool) -> Config {
-68        Config {
-69            hidden_size: self.hidden_size,
-70            intermediate_size: self.intermediate_size,
-71            vocab_size: self.vocab_size,
-72            num_hidden_layers: self.num_hidden_layers,
-73            num_attention_heads: self.num_attention_heads,
-74            num_key_value_heads: self.num_key_value_heads(),
-75            rms_norm_eps: self.rms_norm_eps,
-76            rope_theta: self.rope_theta,
-77            use_flash_attn,
-78            bos_token_id: self.bos_token_id,
-79            eos_token_id: self.eos_token_id,
-80            rope_scaling: self.rope_scaling,
-81            max_position_embeddings: self.max_position_embeddings,
-82        }
-83    }
-84}
-85
-86#[derive(Debug, Clone)]
-87pub struct Config {
-88    pub hidden_size: usize,
-89    pub intermediate_size: usize,
-90    pub vocab_size: usize,
-91    pub num_hidden_layers: usize,
-92    pub num_attention_heads: usize,
-93    pub num_key_value_heads: usize,
-94    pub use_flash_attn: bool,
-95    pub rms_norm_eps: f64,
-96    pub rope_theta: f32,
-97    pub bos_token_id: Option<u32>,
-98    pub eos_token_id: Option<GraniteEosToks>,
-99    pub rope_scaling: Option<GraniteRopeConfig>,
-100    pub max_position_embeddings: usize,
-101}
-102
-103#[derive(Debug, Clone)]
-104pub struct Cache {
-105    masks: HashMap<usize, Tensor>,
-106    pub use_kv_cache: bool,
-107    kvs: Vec<Option<(Tensor, Tensor)>>,
-108    cos: Tensor,
-109    sin: Tensor,
-110    device: Device,
-111}
-112
-113fn calculate_default_inv_freq(cfg: &Config) -> Vec<f32> {
-114    let head_dim = cfg.hidden_size / cfg.num_attention_heads;
-115    (0..head_dim)
-116        .step_by(2)
-117        .map(|i| 1f32 / cfg.rope_theta.powf(i as f32 / head_dim as f32))
-118        .collect()
-119}
-120
-121impl Cache {
-122    pub fn new(use_kv_cache: bool, dtype: DType, config: &Config, device: &Device) -> Result<Self> {
-123        // precompute freqs_cis
-124        let theta = match &config.rope_scaling {
-125            None
-126            | Some(GraniteRopeConfig {
-127                rope_type: GraniteRopeType::Default,
-128                ..
-129            }) => calculate_default_inv_freq(config),
-130            Some(rope_scaling) => {
-131                let low_freq_wavelen = rope_scaling.original_max_position_embeddings as f32
-132                    / rope_scaling.low_freq_factor;
-133                let high_freq_wavelen = rope_scaling.original_max_position_embeddings as f32
-134                    / rope_scaling.high_freq_factor;
-135
-136                calculate_default_inv_freq(config)
-137                    .into_iter()
-138                    .map(|freq| {
-139                        let wavelen = 2. * PI / freq;
-140                        if wavelen < high_freq_wavelen {
-141                            freq
-142                        } else if wavelen > low_freq_wavelen {
-143                            freq / rope_scaling.factor
-144                        } else {
-145                            let smooth = (rope_scaling.original_max_position_embeddings as f32
-146                                / wavelen
-147                                - rope_scaling.low_freq_factor)
-148                                / (rope_scaling.high_freq_factor - rope_scaling.low_freq_factor);
-149                            (1. - smooth) * freq / rope_scaling.factor + smooth * freq
-150                        }
-151                    })
-152                    .collect::<Vec<_>>()
-153            }
-154        };
-155
-156        let theta = Tensor::new(theta, device)?;
-157
-158        let idx_theta = Tensor::arange(0, config.max_position_embeddings as u32, device)?
-159            .to_dtype(DType::F32)?
-160            .reshape((config.max_position_embeddings, 1))?
-161            .matmul(&theta.reshape((1, theta.elem_count()))?)?;
-162        let cos = idx_theta.cos()?.to_dtype(dtype)?;
-163        let sin = idx_theta.sin()?.to_dtype(dtype)?;
-164        Ok(Self {
-165            masks: HashMap::new(),
-166            use_kv_cache,
-167            kvs: vec![None; config.num_hidden_layers],
-168            device: device.clone(),
-169            cos,
-170            sin,
-171        })
-172    }
-173
-174    fn mask(&mut self, t: usize) -> Result<Tensor> {
-175        if let Some(mask) = self.masks.get(&t) {
-176            Ok(mask.clone())
-177        } else {
-178            let mask: Vec<_> = (0..t)
-179                .flat_map(|i| (0..t).map(move |j| u8::from(j > i)))
-180                .collect();
-181            let mask = Tensor::from_slice(&mask, (t, t), &self.device)?;
-182            self.masks.insert(t, mask.clone());
-183            Ok(mask)
-184        }
-185    }
-186}
-187
-188#[derive(Debug, Clone)]
-189struct CausalSelfAttention {
-190    q_proj: Linear,
-191    k_proj: Linear,
-192    v_proj: Linear,
-193    o_proj: Linear,
-194    num_attention_heads: usize,
-195    num_key_value_heads: usize,
-196    head_dim: usize,
-197    use_flash_attn: bool,
-198    span: tracing::Span,
-199    span_rot: tracing::Span,
-200    max_position_embeddings: usize,
-201}
-202
-203#[cfg(feature = "flash-attn")]
-204fn flash_attn(
-205    q: &Tensor,
-206    k: &Tensor,
-207    v: &Tensor,
-208    softmax_scale: f32,
-209    causal: bool,
-210) -> Result<Tensor> {
-211    candle_flash_attn::flash_attn(q, k, v, softmax_scale, causal)
-212}
-213
-214#[cfg(not(feature = "flash-attn"))]
-215fn flash_attn(_: &Tensor, _: &Tensor, _: &Tensor, _: f32, _: bool) -> Result<Tensor> {
-216    unimplemented!("compile with '--features flash-attn'")
-217}
-218
-219impl CausalSelfAttention {
-220    fn apply_rotary_emb(&self, x: &Tensor, index_pos: usize, cache: &Cache) -> Result<Tensor> {
-221        let _enter = self.span_rot.enter();
-222        let (_b_sz, _, seq_len, _hidden_size) = x.dims4()?;
-223        let cos = cache.cos.narrow(0, index_pos, seq_len)?;
-224        let sin = cache.sin.narrow(0, index_pos, seq_len)?;
-225        candle_nn::rotary_emb::rope(x, &cos, &sin)
-226    }
-227
-228    fn forward(
-229        &self,
-230        x: &Tensor,
-231        index_pos: usize,
-232        block_idx: usize,
-233        cache: &mut Cache,
-234    ) -> Result<Tensor> {
-235        let _enter = self.span.enter();
-236        let (b_sz, seq_len, hidden_size) = x.dims3()?;
-237        let q = self.q_proj.forward(x)?;
-238        let k = self.k_proj.forward(x)?;
-239        let v = self.v_proj.forward(x)?;
-240
-241        let q = q
-242            .reshape((b_sz, seq_len, self.num_attention_heads, self.head_dim))?
-243            .transpose(1, 2)?
-244            .contiguous()?;
-245        let k = k
-246            .reshape((b_sz, seq_len, self.num_key_value_heads, self.head_dim))?
-247            .transpose(1, 2)?
-248            .contiguous()?;
-249        let mut v = v
-250            .reshape((b_sz, seq_len, self.num_key_value_heads, self.head_dim))?
-251            .transpose(1, 2)?;
-252
-253        let q = self.apply_rotary_emb(&q, index_pos, cache)?;
-254        let mut k = self.apply_rotary_emb(&k, index_pos, cache)?;
-255
-256        if cache.use_kv_cache {
-257            if let Some((cache_k, cache_v)) = &cache.kvs[block_idx] {
-258                k = Tensor::cat(&[cache_k, &k], 2)?.contiguous()?;
-259                v = Tensor::cat(&[cache_v, &v], 2)?.contiguous()?;
-260                let k_seq_len = k.dims()[1];
-261                if k_seq_len > self.max_position_embeddings {
-262                    k = k
-263                        .narrow(
-264                            D::Minus1,
-265                            k_seq_len - self.max_position_embeddings,
-266                            self.max_position_embeddings,
-267                        )?
-268                        .contiguous()?
-269                }
-270                let v_seq_len = v.dims()[1];
-271                if v_seq_len > 2 * self.max_position_embeddings {
-272                    v = v
-273                        .narrow(
-274                            D::Minus1,
-275                            v_seq_len - self.max_position_embeddings,
-276                            self.max_position_embeddings,
-277                        )?
-278                        .contiguous()?
-279                }
-280            }
-281            cache.kvs[block_idx] = Some((k.clone(), v.clone()))
-282        }
-283
-284        let k = self.repeat_kv(k)?;
-285        let v = self.repeat_kv(v)?;
-286
-287        let y = if self.use_flash_attn {
-288            // flash-attn expects (b_sz, seq_len, nheads, head_dim)
-289            let q = q.transpose(1, 2)?;
-290            let k = k.transpose(1, 2)?;
-291            let v = v.transpose(1, 2)?;
-292            let softmax_scale = 1f32 / (self.head_dim as f32).sqrt();
-293            flash_attn(&q, &k, &v, softmax_scale, seq_len > 1)?.transpose(1, 2)?
-294        } else {
-295            let in_dtype = q.dtype();
-296            let q = q.to_dtype(DType::F32)?;
-297            let k = k.to_dtype(DType::F32)?;
-298            let v = v.to_dtype(DType::F32)?;
-299            let att = (q.matmul(&k.t()?)? / (self.head_dim as f64).sqrt())?;
-300            let att = if seq_len == 1 {
-301                att
-302            } else {
-303                let mask = cache.mask(seq_len)?.broadcast_as(att.shape())?;
-304                masked_fill(&att, &mask, f32::NEG_INFINITY)?
-305            };
-306            let att = candle_nn::ops::softmax(&att, D::Minus1)?;
-307            // Convert to contiguous as matmul doesn't support strided vs for now.
-308            att.matmul(&v.contiguous()?)?.to_dtype(in_dtype)?
-309        };
-310        let y = y.transpose(1, 2)?.reshape(&[b_sz, seq_len, hidden_size])?;
-311        let y = self.o_proj.forward(&y)?;
-312        Ok(y)
-313    }
-314
-315    fn repeat_kv(&self, x: Tensor) -> Result<Tensor> {
-316        crate::utils::repeat_kv(x, self.num_attention_heads / self.num_key_value_heads)
-317    }
-318
-319    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-320        let span = tracing::span!(tracing::Level::TRACE, "attn");
-321        let span_rot = tracing::span!(tracing::Level::TRACE, "attn-rot");
-322        let size_in = cfg.hidden_size;
-323        let size_q = (cfg.hidden_size / cfg.num_attention_heads) * cfg.num_attention_heads;
-324        let size_kv = (cfg.hidden_size / cfg.num_attention_heads) * cfg.num_key_value_heads;
-325        let q_proj = linear(size_in, size_q, vb.pp("q_proj"))?;
-326        let k_proj = linear(size_in, size_kv, vb.pp("k_proj"))?;
-327        let v_proj = linear(size_in, size_kv, vb.pp("v_proj"))?;
-328        let o_proj = linear(size_q, size_in, vb.pp("o_proj"))?;
-329        Ok(Self {
-330            q_proj,
-331            k_proj,
-332            v_proj,
-333            o_proj,
-334            num_attention_heads: cfg.num_attention_heads,
-335            num_key_value_heads: cfg.num_key_value_heads,
-336            head_dim: cfg.hidden_size / cfg.num_attention_heads,
-337            use_flash_attn: cfg.use_flash_attn,
-338            span,
-339            span_rot,
-340            max_position_embeddings: cfg.max_position_embeddings,
-341        })
-342    }
-343}
-344
-345fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: f32) -> Result<Tensor> {
-346    let shape = mask.shape();
-347    let on_true = Tensor::new(on_true, on_false.device())?.broadcast_as(shape.dims())?;
-348    let m = mask.where_cond(&on_true, on_false)?;
-349    Ok(m)
-350}
-351
-352#[derive(Debug, Clone)]
-353struct Mlp {
-354    c_fc1: Linear,
-355    c_fc2: Linear,
-356    c_proj: Linear,
-357    span: tracing::Span,
-358}
-359
-360impl Mlp {
-361    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-362        let _enter = self.span.enter();
-363        let x = (candle_nn::ops::silu(&self.c_fc1.forward(x)?)? * self.c_fc2.forward(x)?)?;
-364        self.c_proj.forward(&x)
-365    }
-366
-367    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-368        let span = tracing::span!(tracing::Level::TRACE, "mlp");
-369        let h_size = cfg.hidden_size;
-370        let i_size = cfg.intermediate_size;
-371        let c_fc1 = linear(h_size, i_size, vb.pp("gate_proj"))?;
-372        let c_fc2 = linear(h_size, i_size, vb.pp("up_proj"))?;
-373        let c_proj = linear(i_size, h_size, vb.pp("down_proj"))?;
-374        Ok(Self {
-375            c_fc1,
-376            c_fc2,
-377            c_proj,
-378            span,
-379        })
-380    }
-381}
-382
-383#[derive(Debug, Clone)]
-384struct Block {
-385    rms_1: RmsNorm,
-386    attn: CausalSelfAttention,
-387    rms_2: RmsNorm,
-388    mlp: Mlp,
-389    span: tracing::Span,
-390}
-391
-392impl Block {
-393    fn forward(
-394        &self,
-395        x: &Tensor,
-396        index_pos: usize,
-397        block_idx: usize,
-398        cache: &mut Cache,
-399    ) -> Result<Tensor> {
-400        let _enter = self.span.enter();
-401        let residual = x;
-402        let x = self.rms_1.forward(x)?;
-403        let x = (self.attn.forward(&x, index_pos, block_idx, cache)? + residual)?;
-404        let residual = &x;
-405        let x = (self.mlp.forward(&self.rms_2.forward(&x)?)? + residual)?;
-406        Ok(x)
-407    }
-408
-409    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-410        let span = tracing::span!(tracing::Level::TRACE, "block");
-411        let attn = CausalSelfAttention::load(vb.pp("self_attn"), cfg)?;
-412        let mlp = Mlp::load(vb.pp("mlp"), cfg)?;
-413        let rms_1 = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("input_layernorm"))?;
-414        let rms_2 = RmsNorm::new(
-415            cfg.hidden_size,
-416            cfg.rms_norm_eps,
-417            vb.pp("post_attention_layernorm"),
-418        )?;
-419        Ok(Self {
-420            rms_1,
-421            attn,
-422            rms_2,
-423            mlp,
-424            span,
-425        })
-426    }
-427}
-428
-429#[derive(Debug, Clone)]
-430pub struct Granite {
-431    wte: Embedding,
-432    blocks: Vec<Block>,
-433    ln_f: RmsNorm,
-434    lm_head: Linear,
-435}
-436
-437impl Granite {
-438    pub fn forward(&self, x: &Tensor, index_pos: usize, cache: &mut Cache) -> Result<Tensor> {
-439        let (_b_sz, seq_len) = x.dims2()?;
-440        let mut x = self.wte.forward(x)?;
-441        for (block_idx, block) in self.blocks.iter().enumerate() {
-442            x = block.forward(&x, index_pos, block_idx, cache)?;
-443        }
-444        let x = self.ln_f.forward(&x)?;
-445        let x = x.i((.., seq_len - 1, ..))?.contiguous()?;
-446        let logits = self.lm_head.forward(&x)?;
-447        logits.to_dtype(DType::F32)
-448    }
-449
-450    pub fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-451        let wte = embedding(cfg.vocab_size, cfg.hidden_size, vb.pp("model.embed_tokens"))?;
-452        let lm_head = linear(cfg.hidden_size, cfg.vocab_size, vb.pp("lm_head"))?;
-453        let ln_f = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("model.norm"))?;
-454        let blocks: Vec<_> = (0..cfg.num_hidden_layers)
-455            .map(|i| Block::load(vb.pp(format!("model.layers.{i}")), cfg).unwrap())
-456            .collect();
-457
-458        Ok(Self {
-459            wte,
-460            blocks,
-461            ln_f,
-462            lm_head,
-463        })
-464    }
-465}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/helium.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/helium.rs.html deleted file mode 100644 index 5d123fe..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/helium.rs.html +++ /dev/null @@ -1,396 +0,0 @@ -helium.rs - source

candle_transformers/models/
helium.rs

1//! Helium inference implementation.
-2//!
-3//! See the model card on Hugging Face's [hub](https://huggingface.co/kmhf/helium-2b).
-4
-5use super::with_tracing::{linear_b as linear, Linear, RmsNorm};
-6use candle::{DType, Device, Result, Tensor, D};
-7use candle_nn::{Module, VarBuilder};
-8use std::sync::Arc;
-9
-10fn default_use_flash_attn() -> bool {
-11    false
-12}
-13
-14#[derive(Debug, Clone, serde::Deserialize)]
-15pub struct Config {
-16    pub attention_bias: bool,
-17    pub bos_token_id: u32,
-18    pub eos_token_id: u32,
-19    pub head_dim: usize,
-20    pub hidden_act: candle_nn::Activation,
-21    pub hidden_size: usize,
-22    pub intermediate_size: usize,
-23    pub max_position_embeddings: usize,
-24    pub mlp_bias: bool,
-25    pub num_attention_heads: usize,
-26    pub num_hidden_layers: usize,
-27    pub num_key_value_heads: usize,
-28    pub rms_norm_eps: f64,
-29    pub rope_theta: f64,
-30    pub tie_word_embeddings: bool,
-31    pub vocab_size: usize,
-32    #[serde(default = "default_use_flash_attn")]
-33    pub use_flash_attn: bool,
-34}
-35
-36impl Config {
-37    pub fn config_2b(use_flash_attn: bool) -> Self {
-38        Self {
-39            attention_bias: false,
-40            bos_token_id: 1,
-41            eos_token_id: 2,
-42            head_dim: 128,
-43            hidden_act: candle_nn::Activation::Silu,
-44            hidden_size: 2560,
-45            intermediate_size: 7040,
-46            max_position_embeddings: 4096,
-47            mlp_bias: false,
-48            num_attention_heads: 20,
-49            num_hidden_layers: 24,
-50            num_key_value_heads: 20,
-51            rms_norm_eps: 1e-08,
-52            rope_theta: 100000.0,
-53            tie_word_embeddings: false,
-54            vocab_size: 48000,
-55            use_flash_attn,
-56        }
-57    }
-58}
-59
-60#[derive(Debug, Clone)]
-61struct RotaryEmbedding {
-62    sin: Tensor,
-63    cos: Tensor,
-64}
-65
-66impl RotaryEmbedding {
-67    fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-68        let rope_theta = cfg.rope_theta as f32;
-69        let dim = cfg.head_dim;
-70        let max_seq_len = cfg.max_position_embeddings;
-71        let inv_freq: Vec<_> = (0..dim)
-72            .step_by(2)
-73            .map(|i| 1f32 / rope_theta.powf(i as f32 / dim as f32))
-74            .collect();
-75        let inv_freq_len = inv_freq.len();
-76        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(DType::F32)?;
-77        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-78            .to_dtype(DType::F32)?
-79            .reshape((max_seq_len, 1))?;
-80        let freqs = t.matmul(&inv_freq)?;
-81        Ok(Self {
-82            sin: freqs.sin()?.to_dtype(dtype)?,
-83            cos: freqs.cos()?.to_dtype(dtype)?,
-84        })
-85    }
-86
-87    fn apply_rotary_emb_qkv(
-88        &self,
-89        q: &Tensor,
-90        k: &Tensor,
-91        seqlen_offset: usize,
-92    ) -> Result<(Tensor, Tensor)> {
-93        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-94        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-95        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-96        let q_embed = candle_nn::rotary_emb::rope_i(q, &cos, &sin)?;
-97        let k_embed = candle_nn::rotary_emb::rope_i(k, &cos, &sin)?;
-98        Ok((q_embed, k_embed))
-99    }
-100}
-101
-102#[derive(Debug, Clone)]
-103#[allow(clippy::upper_case_acronyms)]
-104struct MLP {
-105    gate_proj: Linear,
-106    up_proj: Linear,
-107    down_proj: Linear,
-108    act_fn: candle_nn::Activation,
-109}
-110
-111impl MLP {
-112    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-113        let hidden_sz = cfg.hidden_size;
-114        let intermediate_sz = cfg.intermediate_size;
-115        let bias = cfg.mlp_bias;
-116        let gate_proj = linear(hidden_sz, intermediate_sz, bias, vb.pp("gate_proj"))?;
-117        let up_proj = linear(hidden_sz, intermediate_sz, bias, vb.pp("up_proj"))?;
-118        let down_proj = linear(intermediate_sz, hidden_sz, bias, vb.pp("down_proj"))?;
-119        Ok(Self {
-120            gate_proj,
-121            up_proj,
-122            down_proj,
-123            act_fn: cfg.hidden_act,
-124        })
-125    }
-126}
-127
-128impl Module for MLP {
-129    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-130        let lhs = xs.apply(&self.gate_proj)?.apply(&self.act_fn)?;
-131        let rhs = xs.apply(&self.up_proj)?;
-132        (lhs * rhs)?.apply(&self.down_proj)
-133    }
-134}
-135
-136#[cfg(feature = "flash-attn")]
-137fn flash_attn(
-138    q: &Tensor,
-139    k: &Tensor,
-140    v: &Tensor,
-141    softmax_scale: f32,
-142    causal: bool,
-143) -> Result<Tensor> {
-144    candle_flash_attn::flash_attn(q, k, v, softmax_scale, causal)
-145}
-146
-147#[cfg(not(feature = "flash-attn"))]
-148fn flash_attn(_: &Tensor, _: &Tensor, _: &Tensor, _: f32, _: bool) -> Result<Tensor> {
-149    unimplemented!("compile with '--features flash-attn'")
-150}
-151
-152#[derive(Debug, Clone)]
-153struct Attention {
-154    q_proj: Linear,
-155    k_proj: Linear,
-156    v_proj: Linear,
-157    o_proj: Linear,
-158    num_heads: usize,
-159    num_kv_heads: usize,
-160    num_kv_groups: usize,
-161    head_dim: usize,
-162    rotary_emb: Arc<RotaryEmbedding>,
-163    kv_cache: Option<(Tensor, Tensor)>,
-164    use_flash_attn: bool,
-165}
-166
-167impl Attention {
-168    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-169        let hidden_sz = cfg.hidden_size;
-170        let num_heads = cfg.num_attention_heads;
-171        let num_kv_heads = cfg.num_key_value_heads;
-172        let num_kv_groups = num_heads / num_kv_heads;
-173        let head_dim = cfg.head_dim;
-174        let bias = cfg.attention_bias;
-175        let q_proj = linear(hidden_sz, num_heads * head_dim, bias, vb.pp("q_proj"))?;
-176        let k_proj = linear(hidden_sz, num_kv_heads * head_dim, bias, vb.pp("k_proj"))?;
-177        let v_proj = linear(hidden_sz, num_kv_heads * head_dim, bias, vb.pp("v_proj"))?;
-178        let o_proj = linear(num_heads * head_dim, hidden_sz, bias, vb.pp("o_proj"))?;
-179        Ok(Self {
-180            q_proj,
-181            k_proj,
-182            v_proj,
-183            o_proj,
-184            num_heads,
-185            num_kv_heads,
-186            num_kv_groups,
-187            head_dim,
-188            rotary_emb,
-189            kv_cache: None,
-190            use_flash_attn: cfg.use_flash_attn,
-191        })
-192    }
-193
-194    fn forward(
-195        &mut self,
-196        xs: &Tensor,
-197        attention_mask: Option<&Tensor>,
-198        seqlen_offset: usize,
-199    ) -> Result<Tensor> {
-200        let (b_sz, q_len, _) = xs.dims3()?;
-201
-202        let query_states = self.q_proj.forward(xs)?;
-203        let key_states = self.k_proj.forward(xs)?;
-204        let value_states = self.v_proj.forward(xs)?;
-205
-206        let query_states = query_states
-207            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-208            .transpose(1, 2)?
-209            .contiguous()?;
-210        let key_states = key_states
-211            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-212            .transpose(1, 2)?
-213            .contiguous()?;
-214        let value_states = value_states
-215            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-216            .transpose(1, 2)?
-217            .contiguous()?;
-218
-219        let (query_states, key_states) =
-220            self.rotary_emb
-221                .apply_rotary_emb_qkv(&query_states, &key_states, seqlen_offset)?;
-222
-223        let (key_states, value_states) = match &self.kv_cache {
-224            None => (key_states, value_states),
-225            Some((prev_k, prev_v)) => {
-226                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-227                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-228                (key_states, value_states)
-229            }
-230        };
-231        self.kv_cache = Some((key_states.clone(), value_states.clone()));
-232
-233        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?;
-234        let value_states = crate::utils::repeat_kv(value_states, self.num_kv_groups)?;
-235
-236        let attn_output = if self.use_flash_attn {
-237            // flash-attn expects (b_sz, seq_len, nheads, head_dim)
-238            let q = query_states.transpose(1, 2)?;
-239            let k = key_states.transpose(1, 2)?;
-240            let v = value_states.transpose(1, 2)?;
-241            let softmax_scale = 1f32 / (self.head_dim as f32).sqrt();
-242            flash_attn(&q, &k, &v, softmax_scale, q_len > 1)?.transpose(1, 2)?
-243        } else {
-244            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-245            let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-246
-247            let attn_weights = match attention_mask {
-248                None => attn_weights,
-249                Some(mask) => attn_weights.broadcast_add(mask)?,
-250            };
-251            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-252            attn_weights.matmul(&value_states)?
-253        };
-254        attn_output
-255            .transpose(1, 2)?
-256            .reshape((b_sz, q_len, self.num_heads * self.head_dim))?
-257            .apply(&self.o_proj)
-258    }
-259
-260    fn clear_kv_cache(&mut self) {
-261        self.kv_cache = None
-262    }
-263}
-264
-265#[derive(Debug, Clone)]
-266struct DecoderLayer {
-267    self_attn: Attention,
-268    mlp: MLP,
-269    input_layernorm: RmsNorm,
-270    post_attention_layernorm: RmsNorm,
-271}
-272
-273impl DecoderLayer {
-274    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-275        let self_attn = Attention::new(rotary_emb, cfg, vb.pp("self_attn"))?;
-276        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-277        let input_layernorm =
-278            RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("input_layernorm"))?;
-279        let post_attention_layernorm = RmsNorm::new(
-280            cfg.hidden_size,
-281            cfg.rms_norm_eps,
-282            vb.pp("post_attention_layernorm"),
-283        )?;
-284        Ok(Self {
-285            self_attn,
-286            mlp,
-287            input_layernorm,
-288            post_attention_layernorm,
-289        })
-290    }
-291
-292    fn forward(
-293        &mut self,
-294        xs: &Tensor,
-295        attention_mask: Option<&Tensor>,
-296        seqlen_offset: usize,
-297    ) -> Result<Tensor> {
-298        let residual = xs;
-299        let xs = self.input_layernorm.forward(xs)?;
-300        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-301        let xs = (xs + residual)?;
-302        let residual = &xs;
-303        let xs = xs.apply(&self.post_attention_layernorm)?.apply(&self.mlp)?;
-304        residual + xs
-305    }
-306
-307    fn clear_kv_cache(&mut self) {
-308        self.self_attn.clear_kv_cache()
-309    }
-310}
-311
-312#[derive(Debug, Clone)]
-313pub struct Model {
-314    embed_tokens: candle_nn::Embedding,
-315    layers: Vec<DecoderLayer>,
-316    norm: RmsNorm,
-317    lm_head: Linear,
-318    device: Device,
-319    dtype: DType,
-320}
-321
-322impl Model {
-323    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-324        let vb_m = vb.pp("model");
-325        let embed_tokens =
-326            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-327        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb_m.device())?);
-328        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-329        let vb_l = vb_m.pp("layers");
-330        for layer_idx in 0..cfg.num_hidden_layers {
-331            let layer = DecoderLayer::new(rotary_emb.clone(), cfg, vb_l.pp(layer_idx))?;
-332            layers.push(layer)
-333        }
-334        let norm = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb_m.pp("norm"))?;
-335        let lm_head = if cfg.tie_word_embeddings {
-336            Linear::from_weights(embed_tokens.embeddings().clone(), None)
-337        } else {
-338            linear(cfg.hidden_size, cfg.vocab_size, false, vb.pp("lm_head"))?
-339        };
-340        Ok(Self {
-341            embed_tokens,
-342            layers,
-343            norm,
-344            lm_head,
-345            device: vb.device().clone(),
-346            dtype: vb.dtype(),
-347        })
-348    }
-349
-350    fn prepare_decoder_attention_mask(
-351        &self,
-352        tgt_len: usize,
-353        seqlen_offset: usize,
-354    ) -> Result<Tensor> {
-355        let mask: Vec<_> = (0..tgt_len)
-356            .flat_map(|i| (0..tgt_len).map(move |j| if i < j { f32::NEG_INFINITY } else { 0. }))
-357            .collect();
-358        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-359        let mask = if seqlen_offset > 0 {
-360            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-361            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-362        } else {
-363            mask
-364        };
-365        mask.expand((1, 1, tgt_len, tgt_len + seqlen_offset))?
-366            .to_dtype(self.dtype)
-367    }
-368
-369    pub fn embed_tokens(&self) -> &candle_nn::Embedding {
-370        &self.embed_tokens
-371    }
-372
-373    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-374        let (_b_size, seq_len) = input_ids.dims2()?;
-375        let attention_mask = if seq_len <= 1 {
-376            None
-377        } else {
-378            let mask = self.prepare_decoder_attention_mask(seq_len, seqlen_offset)?;
-379            Some(mask)
-380        };
-381        let mut xs = self.embed_tokens.forward(input_ids)?;
-382        for layer in self.layers.iter_mut() {
-383            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-384        }
-385        xs.narrow(1, seq_len - 1, 1)?
-386            .apply(&self.norm)?
-387            .apply(&self.lm_head)
-388    }
-389
-390    pub fn clear_kv_cache(&mut self) {
-391        for layer in self.layers.iter_mut() {
-392            layer.clear_kv_cache()
-393        }
-394    }
-395}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/hiera.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/hiera.rs.html deleted file mode 100644 index e8d748d..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/hiera.rs.html +++ /dev/null @@ -1,302 +0,0 @@ -hiera.rs - source

candle_transformers/models/
hiera.rs

1//! Hiera inference implementation based on timm.
-2//!
-3//!
-4//! - 💻 [Hiera](https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/hiera.py)
-5//! - 📝 [Paper](https://arxiv.org/abs/2306.00989). Hiera: A Hierarchical Vision Transformer without the Bells-and-Whistles
-6
-7use candle::{Result, D};
-8use candle_nn::{conv2d, layer_norm, linear, ops::softmax, Conv2dConfig, Func, VarBuilder};
-9
-10#[derive(Debug, Clone, serde::Deserialize)]
-11pub struct Config {
-12    channels: usize,
-13    heads: usize,
-14    stages: [usize; 4],
-15}
-16
-17impl Config {
-18    pub fn tiny() -> Self {
-19        Self {
-20            channels: 96,
-21            heads: 1,
-22            stages: [1, 2, 7, 2],
-23        }
-24    }
-25    pub fn small() -> Self {
-26        Self {
-27            channels: 96,
-28            heads: 1,
-29            stages: [1, 2, 11, 2],
-30        }
-31    }
-32    pub fn base() -> Self {
-33        Self {
-34            channels: 96,
-35            heads: 1,
-36            stages: [2, 3, 16, 3],
-37        }
-38    }
-39    pub fn base_plus() -> Self {
-40        Self {
-41            channels: 112,
-42            heads: 2,
-43            stages: [2, 3, 16, 3],
-44        }
-45    }
-46    pub fn large() -> Self {
-47        Self {
-48            channels: 144,
-49            heads: 2,
-50            stages: [2, 6, 36, 4],
-51        }
-52    }
-53    pub fn huge() -> Self {
-54        Self {
-55            channels: 256,
-56            heads: 4,
-57            stages: [2, 6, 36, 4],
-58        }
-59    }
-60}
-61
-62const NUM_TOKENS: usize = 56 * 56;
-63
-64fn hiera_embeddings(channels: usize, vb: VarBuilder) -> Result<Func<'static>> {
-65    let conv_cfg = Conv2dConfig {
-66        stride: 4,
-67        padding: 3,
-68        ..Default::default()
-69    };
-70    let proj = conv2d(3, channels, 7, conv_cfg, vb.pp("patch_embed.proj"))?;
-71
-72    let pos_embed = vb.get((1, NUM_TOKENS, channels), "pos_embed")?;
-73
-74    Ok(Func::new(move |xs| {
-75        let xs = xs.apply(&proj)?;
-76        let (b, c, _, _) = xs.dims4()?;
-77        let xs = xs.reshape((b, c, ()))?.transpose(1, 2)?;
-78        let xs = xs.broadcast_add(&pos_embed)?;
-79        Ok(xs)
-80    }))
-81}
-82
-83fn hiera_unroll() -> Result<Func<'static>> {
-84    Ok(Func::new(move |xs| {
-85        let mut xs = xs.clone();
-86        let (mut b, _, c) = xs.dims3()?;
-87        let mut size = 56;
-88
-89        xs = xs.reshape((b, size, size, c))?;
-90        for _ in 0..3 {
-91            size /= 2;
-92            let new_shape = &[b, size, 2, size, 2, c];
-93            xs = xs.reshape(new_shape)?;
-94            xs = xs.permute((0, 2, 4, 1, 3, 5))?;
-95            xs = xs.flatten(0, 2)?;
-96            b *= 4;
-97        }
-98        xs = xs.reshape(((), NUM_TOKENS, c))?;
-99
-100        Ok(xs)
-101    }))
-102}
-103
-104fn hiera_mlp(in_channels: usize, out_channels: usize, vb: VarBuilder) -> Result<Func<'static>> {
-105    let fc1 = linear(in_channels, out_channels, vb.pp("fc1"))?;
-106    let fc2 = linear(out_channels, in_channels, vb.pp("fc2"))?;
-107
-108    Ok(Func::new(move |xs| {
-109        let xs = xs.apply(&fc1)?.gelu()?.apply(&fc2)?;
-110        Ok(xs)
-111    }))
-112}
-113
-114fn hiera_attention(
-115    in_channels: usize,
-116    out_channels: usize,
-117    heads: usize,
-118    q_stride: usize,
-119    window_size: usize,
-120    use_mask_attention: bool,
-121    vb: VarBuilder,
-122) -> Result<Func<'static>> {
-123    let head_dim = out_channels / heads;
-124
-125    let scale = (head_dim as f64).powf(-0.5);
-126
-127    let proj = linear(out_channels, out_channels, vb.pp("proj"))?;
-128    let qkv = linear(in_channels, out_channels * 3, vb.pp("qkv"))?;
-129
-130    Ok(Func::new(move |xs| {
-131        let (b, n, _) = xs.dims3()?;
-132
-133        let num_windows = if use_mask_attention {
-134            n / (q_stride * window_size)
-135        } else {
-136            1
-137        };
-138        let qkv = xs.apply(&qkv)?;
-139
-140        let ec = qkv.elem_count();
-141        let s = ec / (b * num_windows * 3 * heads * head_dim);
-142        let qkv = qkv
-143            .reshape((b, s, num_windows, 3, heads, head_dim))?
-144            .permute((3, 0, 4, 2, 1, 5))?;
-145
-146        let mut q = qkv.get(0)?;
-147        let k = qkv.get(1)?;
-148        let v = qkv.get(2)?;
-149
-150        if q_stride > 1 {
-151            let ec = q.elem_count();
-152            let s = ec / (b * num_windows * q_stride * heads * head_dim);
-153            q = q
-154                .reshape((b, heads, num_windows, q_stride, s, head_dim))?
-155                .max(3)?;
-156        }
-157
-158        let q = (q * scale)?;
-159
-160        // Q, K and V are 6 dimensional with the first dimension being 1.
-161        // Squeeze them for the attention calculation since 6 dimensional matmuls are not supported.
-162        let att = q
-163            .squeeze(0)?
-164            .matmul(&k.squeeze(0)?.transpose(D::Minus2, D::Minus1)?)?;
-165        let att = softmax(&att, D::Minus1)?;
-166        let xs = att.matmul(&v.squeeze(0)?)?.unsqueeze(0)?;
-167
-168        let xs = xs.transpose(1, 3)?.reshape((b, (), out_channels))?;
-169        let xs = xs.apply(&proj)?;
-170
-171        Ok(xs)
-172    }))
-173}
-174
-175fn hiera_block(
-176    heads: usize,
-177    in_channels: usize,
-178    out_channels: usize,
-179    q_stride: usize,
-180    window_size: usize,
-181    use_mask_attention: bool,
-182    vb: VarBuilder,
-183) -> Result<Func<'static>> {
-184    let norm1 = layer_norm(in_channels, 1e-6, vb.pp("norm1"))?;
-185    let norm2 = layer_norm(out_channels, 1e-6, vb.pp("norm2"))?;
-186    let proj = linear(in_channels, out_channels, vb.pp("proj"));
-187    let stride = 4;
-188    let mlp = hiera_mlp(out_channels, out_channels * 4, vb.pp("mlp"))?;
-189    let attn = hiera_attention(
-190        in_channels,
-191        out_channels,
-192        heads,
-193        q_stride,
-194        window_size,
-195        use_mask_attention,
-196        vb.pp("attn"),
-197    )?;
-198
-199    Ok(Func::new(move |xs| {
-200        let mut xs = xs.clone();
-201        let xs_norm = xs.apply_t(&norm1, false)?;
-202        if let Ok(p) = &proj {
-203            xs = xs_norm.apply(p)?;
-204            let (a, _, d) = xs.dims3()?;
-205            xs = xs.reshape((a, stride, (), d))?.max(1)?;
-206        }
-207        let xs = (xs + &xs_norm.apply(&attn)?)?;
-208
-209        let xs = (&xs + &xs.apply_t(&norm2, false)?.apply(&mlp)?)?;
-210
-211        Ok(xs)
-212    }))
-213}
-214
-215fn hiera_blocks(cfg: &Config, vb: VarBuilder) -> Result<Func<'static>> {
-216    let nblocks = cfg.stages.iter().sum();
-217    let mut blocks = Vec::with_capacity(nblocks);
-218
-219    let mut out_channels = cfg.channels;
-220    let mut in_channels = out_channels;
-221    let mut heads = cfg.heads;
-222    let mut b = 0;
-223
-224    let mut q_stride = 1;
-225    let mut window_size = 64;
-226
-227    for s in 0..4 {
-228        let use_mask_attention = s < 2;
-229
-230        for _ in 0..cfg.stages[s] {
-231            blocks.push(hiera_block(
-232                heads,
-233                in_channels,
-234                out_channels,
-235                q_stride,
-236                window_size,
-237                use_mask_attention,
-238                vb.pp(b),
-239            )?);
-240            b += 1;
-241            in_channels = out_channels;
-242            q_stride = 1;
-243        }
-244        q_stride = 4;
-245        out_channels *= 2;
-246        heads *= 2;
-247        window_size /= 4;
-248    }
-249
-250    Ok(Func::new(move |xs| {
-251        let mut xs = xs.clone();
-252        for block in blocks.iter() {
-253            xs = xs.apply(block)?
-254        }
-255        Ok(xs)
-256    }))
-257}
-258
-259fn hiera_head(outputs: usize, nclasses: usize, vb: VarBuilder) -> Result<Func<'static>> {
-260    let norm = layer_norm(outputs, 1e-6, vb.pp("norm"))?;
-261    let linear = linear(outputs, nclasses, vb.pp("fc"))?;
-262    Ok(Func::new(move |xs| {
-263        xs.apply_t(&norm, false)?.apply(&linear)
-264    }))
-265}
-266
-267// Build a hiera model for a given configuration.
-268fn hiera_model(cfg: &Config, nclasses: Option<usize>, vb: VarBuilder) -> Result<Func<'static>> {
-269    let cls = match nclasses {
-270        None => None,
-271        Some(nclasses) => {
-272            let outputs = cfg.channels * 8;
-273            let head = hiera_head(outputs, nclasses, vb.pp("head"))?;
-274            Some(head)
-275        }
-276    };
-277
-278    let embeddings = hiera_embeddings(cfg.channels, vb.clone())?;
-279    let unroll = hiera_unroll()?;
-280    let blocks = hiera_blocks(cfg, vb.pp("blocks"))?;
-281
-282    Ok(Func::new(move |xs| {
-283        let xs = xs
-284            .apply(&embeddings)?
-285            .apply(&unroll)?
-286            .apply(&blocks)?
-287            .mean(1)?;
-288        match &cls {
-289            None => Ok(xs),
-290            Some(cls) => xs.apply(cls),
-291        }
-292    }))
-293}
-294
-295pub fn hiera(cfg: &Config, nclasses: usize, vb: VarBuilder) -> Result<Func<'static>> {
-296    hiera_model(cfg, Some(nclasses), vb)
-297}
-298
-299pub fn hiera_no_final_layer(cfg: &Config, vb: VarBuilder) -> Result<Func<'static>> {
-300    hiera_model(cfg, None, vb)
-301}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/jina_bert.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/jina_bert.rs.html deleted file mode 100644 index c90f814..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/jina_bert.rs.html +++ /dev/null @@ -1,407 +0,0 @@ -jina_bert.rs - source

candle_transformers/models/
jina_bert.rs

1//! # JinaBERT inference implementation
-2//!
-3//! Based on implementation from huggingface for Jina BERT and its variants
-4//!
-5//! See: [Jina Embeddings on HuggingFace](https://huggingface.co/jinaai/jina-embeddings-v2-base-en)
-6
-7use super::with_tracing::{linear, linear_no_bias, Embedding, Linear};
-8use candle::{DType, Device, IndexOp, Result, Tensor, D};
-9use candle_nn::{layer_norm, LayerNorm, Module, VarBuilder};
-10use serde::Deserialize;
-11
-12pub const DTYPE: DType = DType::F32;
-13
-14#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)]
-15#[serde(rename_all = "lowercase")]
-16pub enum PositionEmbeddingType {
-17    Absolute,
-18    Alibi,
-19}
-20
-21// https://huggingface.co/jinaai/jina-bert-implementation/blob/main/configuration_bert.py
-22#[derive(Debug, Clone, PartialEq, Deserialize)]
-23pub struct Config {
-24    pub vocab_size: usize,
-25    pub hidden_size: usize,
-26    pub num_hidden_layers: usize,
-27    pub num_attention_heads: usize,
-28    pub intermediate_size: usize,
-29    pub hidden_act: candle_nn::Activation,
-30    pub max_position_embeddings: usize,
-31    pub type_vocab_size: usize,
-32    pub initializer_range: f64,
-33    pub layer_norm_eps: f64,
-34    pub pad_token_id: usize,
-35    pub position_embedding_type: PositionEmbeddingType,
-36}
-37
-38impl Config {
-39    pub fn v2_base() -> Self {
-40        // https://huggingface.co/jinaai/jina-embeddings-v2-base-en/blob/main/config.json
-41        Self {
-42            vocab_size: 30528,
-43            hidden_size: 768,
-44            num_hidden_layers: 12,
-45            num_attention_heads: 12,
-46            intermediate_size: 3072,
-47            hidden_act: candle_nn::Activation::Gelu,
-48            max_position_embeddings: 8192,
-49            type_vocab_size: 2,
-50            initializer_range: 0.02,
-51            layer_norm_eps: 1e-12,
-52            pad_token_id: 0,
-53            position_embedding_type: PositionEmbeddingType::Alibi,
-54        }
-55    }
-56
-57    #[allow(clippy::too_many_arguments)]
-58    pub fn new(
-59        vocab_size: usize,
-60        hidden_size: usize,
-61        num_hidden_layers: usize,
-62        num_attention_heads: usize,
-63        intermediate_size: usize,
-64        hidden_act: candle_nn::Activation,
-65        max_position_embeddings: usize,
-66        type_vocab_size: usize,
-67        initializer_range: f64,
-68        layer_norm_eps: f64,
-69        pad_token_id: usize,
-70        position_embedding_type: PositionEmbeddingType,
-71    ) -> Self {
-72        Config {
-73            vocab_size,
-74            hidden_size,
-75            num_hidden_layers,
-76            num_attention_heads,
-77            intermediate_size,
-78            hidden_act,
-79            max_position_embeddings,
-80            type_vocab_size,
-81            initializer_range,
-82            layer_norm_eps,
-83            pad_token_id,
-84            position_embedding_type,
-85        }
-86    }
-87}
-88
-89#[derive(Clone, Debug)]
-90struct BertEmbeddings {
-91    word_embeddings: Embedding,
-92    // no position_embeddings as we only support alibi.
-93    token_type_embeddings: Embedding,
-94    layer_norm: LayerNorm,
-95    span: tracing::Span,
-96}
-97
-98impl BertEmbeddings {
-99    fn new(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-100        let word_embeddings =
-101            Embedding::new(cfg.vocab_size, cfg.hidden_size, vb.pp("word_embeddings"))?;
-102        let token_type_embeddings = Embedding::new(
-103            cfg.type_vocab_size,
-104            cfg.hidden_size,
-105            vb.pp("token_type_embeddings"),
-106        )?;
-107        let layer_norm = layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("LayerNorm"))?;
-108        Ok(Self {
-109            word_embeddings,
-110            token_type_embeddings,
-111            layer_norm,
-112            span: tracing::span!(tracing::Level::TRACE, "embeddings"),
-113        })
-114    }
-115}
-116
-117impl Module for BertEmbeddings {
-118    fn forward(&self, input_ids: &Tensor) -> Result<Tensor> {
-119        let _enter = self.span.enter();
-120        let (b_size, seq_len) = input_ids.dims2()?;
-121        let input_embeddings = self.word_embeddings.forward(input_ids)?;
-122        let token_type_embeddings = Tensor::zeros(seq_len, DType::U32, input_ids.device())?
-123            .broadcast_left(b_size)?
-124            .apply(&self.token_type_embeddings)?;
-125        let embeddings = (&input_embeddings + token_type_embeddings)?;
-126        let embeddings = self.layer_norm.forward(&embeddings)?;
-127        Ok(embeddings)
-128    }
-129}
-130
-131#[derive(Clone, Debug)]
-132struct BertSelfAttention {
-133    query: Linear,
-134    key: Linear,
-135    value: Linear,
-136    num_attention_heads: usize,
-137    attention_head_size: usize,
-138    span: tracing::Span,
-139    span_softmax: tracing::Span,
-140}
-141
-142impl BertSelfAttention {
-143    fn new(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-144        let attention_head_size = cfg.hidden_size / cfg.num_attention_heads;
-145        let all_head_size = cfg.num_attention_heads * attention_head_size;
-146        let hidden_size = cfg.hidden_size;
-147        let query = linear(hidden_size, all_head_size, vb.pp("query"))?;
-148        let value = linear(hidden_size, all_head_size, vb.pp("value"))?;
-149        let key = linear(hidden_size, all_head_size, vb.pp("key"))?;
-150        Ok(Self {
-151            query,
-152            key,
-153            value,
-154            num_attention_heads: cfg.num_attention_heads,
-155            attention_head_size,
-156            span: tracing::span!(tracing::Level::TRACE, "self-attn"),
-157            span_softmax: tracing::span!(tracing::Level::TRACE, "softmax"),
-158        })
-159    }
-160
-161    fn transpose_for_scores(&self, xs: &Tensor) -> Result<Tensor> {
-162        let mut x_shape = xs.dims().to_vec();
-163        x_shape.pop();
-164        x_shape.push(self.num_attention_heads);
-165        x_shape.push(self.attention_head_size);
-166        xs.reshape(x_shape)?.transpose(1, 2)?.contiguous()
-167    }
-168
-169    fn forward(&self, xs: &Tensor, bias: &Tensor) -> Result<Tensor> {
-170        let _enter = self.span.enter();
-171        let query_layer = self.query.forward(xs)?;
-172        let key_layer = self.key.forward(xs)?;
-173        let value_layer = self.value.forward(xs)?;
-174
-175        let query_layer = self.transpose_for_scores(&query_layer)?;
-176        let key_layer = self.transpose_for_scores(&key_layer)?;
-177        let value_layer = self.transpose_for_scores(&value_layer)?;
-178
-179        let attention_scores = query_layer.matmul(&key_layer.t()?)?;
-180        let attention_scores = (attention_scores / (self.attention_head_size as f64).sqrt())?;
-181        let attention_scores = attention_scores.broadcast_add(bias)?;
-182        let attention_probs = {
-183            let _enter_sm = self.span_softmax.enter();
-184            candle_nn::ops::softmax_last_dim(&attention_scores)?
-185        };
-186        let context_layer = attention_probs.matmul(&value_layer)?;
-187        let context_layer = context_layer.transpose(1, 2)?.contiguous()?;
-188        let context_layer = context_layer.flatten_from(D::Minus2)?;
-189        Ok(context_layer)
-190    }
-191}
-192
-193#[derive(Clone, Debug)]
-194struct BertSelfOutput {
-195    dense: Linear,
-196    layer_norm: LayerNorm,
-197    span: tracing::Span,
-198}
-199
-200impl BertSelfOutput {
-201    fn new(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-202        let dense = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("dense"))?;
-203        let layer_norm = layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("LayerNorm"))?;
-204        Ok(Self {
-205            dense,
-206            layer_norm,
-207            span: tracing::span!(tracing::Level::TRACE, "self-out"),
-208        })
-209    }
-210
-211    fn forward(&self, xs: &Tensor, input_tensor: &Tensor) -> Result<Tensor> {
-212        let _enter = self.span.enter();
-213        let xs = self.dense.forward(xs)?;
-214        self.layer_norm.forward(&(xs + input_tensor)?)
-215    }
-216}
-217
-218#[derive(Clone, Debug)]
-219struct BertAttention {
-220    self_attention: BertSelfAttention,
-221    self_output: BertSelfOutput,
-222    span: tracing::Span,
-223}
-224
-225impl BertAttention {
-226    fn new(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-227        let self_attention = BertSelfAttention::new(vb.pp("self"), cfg)?;
-228        let self_output = BertSelfOutput::new(vb.pp("output"), cfg)?;
-229        Ok(Self {
-230            self_attention,
-231            self_output,
-232            span: tracing::span!(tracing::Level::TRACE, "attn"),
-233        })
-234    }
-235
-236    fn forward(&self, xs: &Tensor, bias: &Tensor) -> Result<Tensor> {
-237        let _enter = self.span.enter();
-238        let self_outputs = self.self_attention.forward(xs, bias)?;
-239        let attention_output = self.self_output.forward(&self_outputs, xs)?;
-240        Ok(attention_output)
-241    }
-242}
-243
-244#[derive(Clone, Debug)]
-245struct BertGLUMLP {
-246    gated_layers: Linear,
-247    act: candle_nn::Activation,
-248    wo: Linear,
-249    layernorm: LayerNorm,
-250    intermediate_size: usize,
-251}
-252
-253impl BertGLUMLP {
-254    fn new(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-255        let gated_layers = linear_no_bias(
-256            cfg.hidden_size,
-257            cfg.intermediate_size * 2,
-258            vb.pp("gated_layers"),
-259        )?;
-260        let act = candle_nn::Activation::Gelu; // geglu
-261        let wo = linear(cfg.intermediate_size, cfg.hidden_size, vb.pp("wo"))?;
-262        let layernorm = layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("layernorm"))?;
-263        Ok(Self {
-264            gated_layers,
-265            act,
-266            wo,
-267            layernorm,
-268            intermediate_size: cfg.intermediate_size,
-269        })
-270    }
-271}
-272
-273impl Module for BertGLUMLP {
-274    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-275        let residual = xs;
-276        let xs = xs.apply(&self.gated_layers)?;
-277        let gated = xs.narrow(D::Minus1, 0, self.intermediate_size)?;
-278        let non_gated = xs.narrow(D::Minus1, self.intermediate_size, self.intermediate_size)?;
-279        let xs = (gated.apply(&self.act) * non_gated)?.apply(&self.wo);
-280        (xs + residual)?.apply(&self.layernorm)
-281    }
-282}
-283
-284#[derive(Clone, Debug)]
-285struct BertLayer {
-286    attention: BertAttention,
-287    mlp: BertGLUMLP,
-288    span: tracing::Span,
-289}
-290
-291impl BertLayer {
-292    fn new(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-293        let attention = BertAttention::new(vb.pp("attention"), cfg)?;
-294        let mlp = BertGLUMLP::new(vb.pp("mlp"), cfg)?;
-295        Ok(Self {
-296            attention,
-297            mlp,
-298            span: tracing::span!(tracing::Level::TRACE, "layer"),
-299        })
-300    }
-301
-302    fn forward(&self, xs: &Tensor, bias: &Tensor) -> Result<Tensor> {
-303        let _enter = self.span.enter();
-304        self.attention.forward(xs, bias)?.apply(&self.mlp)
-305    }
-306}
-307
-308fn build_alibi_bias(cfg: &Config) -> Result<Tensor> {
-309    let n_heads = cfg.num_attention_heads;
-310    let seq_len = cfg.max_position_embeddings;
-311    let alibi_bias = Tensor::arange(0, seq_len as i64, &Device::Cpu)?.to_dtype(DType::F32)?;
-312    let alibi_bias = {
-313        let a1 = alibi_bias.reshape((1, seq_len))?;
-314        let a2 = alibi_bias.reshape((seq_len, 1))?;
-315        a1.broadcast_sub(&a2)?.abs()?.broadcast_left(n_heads)?
-316    };
-317    let mut n_heads2 = 1;
-318    while n_heads2 < n_heads {
-319        n_heads2 *= 2
-320    }
-321    let slopes = (1..=n_heads2)
-322        .map(|v| -1f32 / 2f32.powf((v * 8) as f32 / n_heads2 as f32))
-323        .collect::<Vec<_>>();
-324    let slopes = if n_heads2 == n_heads {
-325        slopes
-326    } else {
-327        slopes
-328            .iter()
-329            .skip(1)
-330            .step_by(2)
-331            .chain(slopes.iter().step_by(2))
-332            .take(n_heads)
-333            .cloned()
-334            .collect::<Vec<f32>>()
-335    };
-336    let slopes = Tensor::new(slopes, &Device::Cpu)?.reshape((1, (), 1, 1))?;
-337    alibi_bias.to_dtype(DType::F32)?.broadcast_mul(&slopes)
-338}
-339
-340#[derive(Clone, Debug)]
-341struct BertEncoder {
-342    alibi: Tensor,
-343    layers: Vec<BertLayer>,
-344    span: tracing::Span,
-345}
-346
-347impl BertEncoder {
-348    fn new(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-349        if cfg.position_embedding_type != PositionEmbeddingType::Alibi {
-350            candle::bail!("only alibi is supported as a position-embedding-type")
-351        }
-352        let layers = (0..cfg.num_hidden_layers)
-353            .map(|index| BertLayer::new(vb.pp(format!("layer.{index}")), cfg))
-354            .collect::<Result<Vec<_>>>()?;
-355        let span = tracing::span!(tracing::Level::TRACE, "encoder");
-356        let alibi = build_alibi_bias(cfg)?.to_device(vb.device())?;
-357        Ok(Self {
-358            alibi,
-359            layers,
-360            span,
-361        })
-362    }
-363}
-364
-365impl Module for BertEncoder {
-366    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-367        let _enter = self.span.enter();
-368        let seq_len = xs.dim(1)?;
-369        let alibi_bias = self.alibi.i((.., .., ..seq_len, ..seq_len))?;
-370        let mut xs = xs.clone();
-371        for layer in self.layers.iter() {
-372            xs = layer.forward(&xs, &alibi_bias)?
-373        }
-374        Ok(xs)
-375    }
-376}
-377
-378#[derive(Clone, Debug)]
-379pub struct BertModel {
-380    embeddings: BertEmbeddings,
-381    encoder: BertEncoder,
-382    pub device: Device,
-383    span: tracing::Span,
-384}
-385
-386impl BertModel {
-387    pub fn new(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-388        let embeddings = BertEmbeddings::new(vb.pp("embeddings"), cfg)?;
-389        let encoder = BertEncoder::new(vb.pp("encoder"), cfg)?;
-390        Ok(Self {
-391            embeddings,
-392            encoder,
-393            device: vb.device().clone(),
-394            span: tracing::span!(tracing::Level::TRACE, "model"),
-395        })
-396    }
-397}
-398
-399impl Module for BertModel {
-400    fn forward(&self, input_ids: &Tensor) -> Result<Tensor> {
-401        let _enter = self.span.enter();
-402        let embedding_output = self.embeddings.forward(input_ids)?;
-403        let sequence_output = self.encoder.forward(&embedding_output)?;
-404        Ok(sequence_output)
-405    }
-406}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/llama.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/llama.rs.html deleted file mode 100644 index 1be1e4e..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/llama.rs.html +++ /dev/null @@ -1,537 +0,0 @@ -llama.rs - source

candle_transformers/models/
llama.rs

1//! Llama inference implementation.
-2//!
-3//! See ["LLaMA: Open and Efficient Foundation Language Models"](https://arxiv.org/abs/2302.13971)
-4//!
-5//! Implementation based on Hugging Face's [transformers](https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/modeling_llama.py)
-6
-7use super::with_tracing::{linear_no_bias as linear, Linear, RmsNorm};
-8use candle::{DType, Device, IndexOp, Result, Tensor, D};
-9use candle_nn::{embedding, Embedding, Module, VarBuilder};
-10use std::{collections::HashMap, f32::consts::PI};
-11
-12pub const DEFAULT_MAX_SEQ_LEN: usize = 4096;
-13
-14#[derive(Debug, Clone, serde::Deserialize, Default)]
-15pub enum Llama3RopeType {
-16    #[serde(rename = "llama3")]
-17    Llama3,
-18    #[default]
-19    #[serde(rename = "default")]
-20    Default,
-21}
-22
-23#[derive(Debug, Clone, serde::Deserialize, Default)]
-24pub struct Llama3RopeConfig {
-25    pub factor: f32,
-26    pub low_freq_factor: f32,
-27    pub high_freq_factor: f32,
-28    pub original_max_position_embeddings: usize,
-29    pub rope_type: Llama3RopeType,
-30}
-31#[derive(Debug, Clone, serde::Deserialize)]
-32#[serde(untagged)]
-33pub enum LlamaEosToks {
-34    Single(u32),
-35    Multiple(Vec<u32>),
-36}
-37
-38#[derive(Debug, Clone, serde::Deserialize)]
-39pub struct LlamaConfig {
-40    pub hidden_size: usize,
-41    pub intermediate_size: usize,
-42    pub vocab_size: usize,
-43    pub num_hidden_layers: usize,
-44    pub num_attention_heads: usize,
-45    pub num_key_value_heads: Option<usize>,
-46    pub rms_norm_eps: f64,
-47    #[serde(default = "default_rope")]
-48    pub rope_theta: f32,
-49    pub bos_token_id: Option<u32>,
-50    pub eos_token_id: Option<LlamaEosToks>,
-51    pub rope_scaling: Option<Llama3RopeConfig>,
-52    pub max_position_embeddings: usize,
-53    pub tie_word_embeddings: Option<bool>,
-54}
-55
-56impl LlamaConfig {
-57    pub fn num_key_value_heads(&self) -> usize {
-58        self.num_key_value_heads.unwrap_or(self.num_attention_heads)
-59    }
-60}
-61
-62fn default_rope() -> f32 {
-63    10_000.0
-64}
-65
-66impl LlamaConfig {
-67    pub fn into_config(self, use_flash_attn: bool) -> Config {
-68        Config {
-69            hidden_size: self.hidden_size,
-70            intermediate_size: self.intermediate_size,
-71            vocab_size: self.vocab_size,
-72            num_hidden_layers: self.num_hidden_layers,
-73            num_attention_heads: self.num_attention_heads,
-74            num_key_value_heads: self.num_key_value_heads(),
-75            rms_norm_eps: self.rms_norm_eps,
-76            rope_theta: self.rope_theta,
-77            use_flash_attn,
-78            bos_token_id: self.bos_token_id,
-79            eos_token_id: self.eos_token_id,
-80            rope_scaling: self.rope_scaling,
-81            max_position_embeddings: self.max_position_embeddings,
-82            tie_word_embeddings: self.tie_word_embeddings.unwrap_or(false),
-83        }
-84    }
-85}
-86
-87#[derive(Debug, Clone)]
-88pub struct Config {
-89    pub hidden_size: usize,
-90    pub intermediate_size: usize,
-91    pub vocab_size: usize,
-92    pub num_hidden_layers: usize,
-93    pub num_attention_heads: usize,
-94    pub num_key_value_heads: usize,
-95    pub use_flash_attn: bool,
-96    pub rms_norm_eps: f64,
-97    pub rope_theta: f32,
-98    pub bos_token_id: Option<u32>,
-99    pub eos_token_id: Option<LlamaEosToks>,
-100    pub rope_scaling: Option<Llama3RopeConfig>,
-101    pub max_position_embeddings: usize,
-102    pub tie_word_embeddings: bool,
-103}
-104
-105impl Config {
-106    pub fn config_7b_v1(use_flash_attn: bool) -> Self {
-107        Self {
-108            hidden_size: 4096,
-109            intermediate_size: 11008,
-110            vocab_size: 32000,
-111            num_hidden_layers: 32,
-112            num_attention_heads: 32,
-113            num_key_value_heads: 32,
-114            use_flash_attn,
-115            rms_norm_eps: 1e-6,
-116            rope_theta: 10_000.0,
-117            bos_token_id: None,
-118            eos_token_id: None,
-119            rope_scaling: None,
-120            max_position_embeddings: DEFAULT_MAX_SEQ_LEN,
-121            tie_word_embeddings: false,
-122        }
-123    }
-124
-125    pub fn config_7b_v2(use_flash_attn: bool) -> Self {
-126        Self {
-127            hidden_size: 4096,
-128            intermediate_size: 11008,
-129            vocab_size: 32000,
-130            num_hidden_layers: 32,
-131            num_attention_heads: 32,
-132            num_key_value_heads: 32,
-133            use_flash_attn,
-134            rms_norm_eps: 1e-5,
-135            rope_theta: 10_000.0,
-136            bos_token_id: None,
-137            eos_token_id: None,
-138            rope_scaling: None,
-139            max_position_embeddings: DEFAULT_MAX_SEQ_LEN,
-140            tie_word_embeddings: false,
-141        }
-142    }
-143}
-144
-145#[derive(Debug, Clone)]
-146pub struct Cache {
-147    masks: HashMap<usize, Tensor>,
-148    pub use_kv_cache: bool,
-149    kvs: Vec<Option<(Tensor, Tensor)>>,
-150    cos: Tensor,
-151    sin: Tensor,
-152    device: Device,
-153}
-154
-155fn calculate_default_inv_freq(cfg: &Config) -> Vec<f32> {
-156    let head_dim = cfg.hidden_size / cfg.num_attention_heads;
-157    (0..head_dim)
-158        .step_by(2)
-159        .map(|i| 1f32 / cfg.rope_theta.powf(i as f32 / head_dim as f32))
-160        .collect()
-161}
-162
-163impl Cache {
-164    pub fn new(use_kv_cache: bool, dtype: DType, config: &Config, device: &Device) -> Result<Self> {
-165        // precompute freqs_cis
-166        let theta = match &config.rope_scaling {
-167            None
-168            | Some(Llama3RopeConfig {
-169                rope_type: Llama3RopeType::Default,
-170                ..
-171            }) => calculate_default_inv_freq(config),
-172            Some(rope_scaling) => {
-173                let low_freq_wavelen = rope_scaling.original_max_position_embeddings as f32
-174                    / rope_scaling.low_freq_factor;
-175                let high_freq_wavelen = rope_scaling.original_max_position_embeddings as f32
-176                    / rope_scaling.high_freq_factor;
-177
-178                calculate_default_inv_freq(config)
-179                    .into_iter()
-180                    .map(|freq| {
-181                        let wavelen = 2. * PI / freq;
-182                        if wavelen < high_freq_wavelen {
-183                            freq
-184                        } else if wavelen > low_freq_wavelen {
-185                            freq / rope_scaling.factor
-186                        } else {
-187                            let smooth = (rope_scaling.original_max_position_embeddings as f32
-188                                / wavelen
-189                                - rope_scaling.low_freq_factor)
-190                                / (rope_scaling.high_freq_factor - rope_scaling.low_freq_factor);
-191                            (1. - smooth) * freq / rope_scaling.factor + smooth * freq
-192                        }
-193                    })
-194                    .collect::<Vec<_>>()
-195            }
-196        };
-197
-198        let theta = Tensor::new(theta, device)?;
-199
-200        let idx_theta = Tensor::arange(0, config.max_position_embeddings as u32, device)?
-201            .to_dtype(DType::F32)?
-202            .reshape((config.max_position_embeddings, 1))?
-203            .matmul(&theta.reshape((1, theta.elem_count()))?)?;
-204        // This is different from the paper, see:
-205        // https://github.com/huggingface/transformers/blob/6112b1c6442aaf7affd2b0676a1cd4eee30c45cf/src/transformers/models/llama/modeling_llama.py#L112
-206        let cos = idx_theta.cos()?.to_dtype(dtype)?;
-207        let sin = idx_theta.sin()?.to_dtype(dtype)?;
-208        Ok(Self {
-209            masks: HashMap::new(),
-210            use_kv_cache,
-211            kvs: vec![None; config.num_hidden_layers],
-212            device: device.clone(),
-213            cos,
-214            sin,
-215        })
-216    }
-217
-218    fn mask(&mut self, t: usize) -> Result<Tensor> {
-219        if let Some(mask) = self.masks.get(&t) {
-220            Ok(mask.clone())
-221        } else {
-222            let mask: Vec<_> = (0..t)
-223                .flat_map(|i| (0..t).map(move |j| u8::from(j > i)))
-224                .collect();
-225            let mask = Tensor::from_slice(&mask, (t, t), &self.device)?;
-226            self.masks.insert(t, mask.clone());
-227            Ok(mask)
-228        }
-229    }
-230}
-231
-232#[derive(Debug, Clone)]
-233struct CausalSelfAttention {
-234    q_proj: Linear,
-235    k_proj: Linear,
-236    v_proj: Linear,
-237    o_proj: Linear,
-238    num_attention_heads: usize,
-239    num_key_value_heads: usize,
-240    head_dim: usize,
-241    use_flash_attn: bool,
-242    span: tracing::Span,
-243    span_rot: tracing::Span,
-244    max_position_embeddings: usize,
-245}
-246
-247#[cfg(feature = "flash-attn")]
-248fn flash_attn(
-249    q: &Tensor,
-250    k: &Tensor,
-251    v: &Tensor,
-252    softmax_scale: f32,
-253    causal: bool,
-254) -> Result<Tensor> {
-255    candle_flash_attn::flash_attn(q, k, v, softmax_scale, causal)
-256}
-257
-258#[cfg(not(feature = "flash-attn"))]
-259fn flash_attn(_: &Tensor, _: &Tensor, _: &Tensor, _: f32, _: bool) -> Result<Tensor> {
-260    unimplemented!("compile with '--features flash-attn'")
-261}
-262
-263impl CausalSelfAttention {
-264    fn apply_rotary_emb(&self, x: &Tensor, index_pos: usize, cache: &Cache) -> Result<Tensor> {
-265        let _enter = self.span_rot.enter();
-266        let (_b_sz, _, seq_len, _hidden_size) = x.dims4()?;
-267        let cos = cache.cos.narrow(0, index_pos, seq_len)?;
-268        let sin = cache.sin.narrow(0, index_pos, seq_len)?;
-269        candle_nn::rotary_emb::rope(x, &cos, &sin)
-270    }
-271
-272    fn forward(
-273        &self,
-274        x: &Tensor,
-275        index_pos: usize,
-276        block_idx: usize,
-277        cache: &mut Cache,
-278    ) -> Result<Tensor> {
-279        let _enter = self.span.enter();
-280        let (b_sz, seq_len, hidden_size) = x.dims3()?;
-281        let q = self.q_proj.forward(x)?;
-282        let k = self.k_proj.forward(x)?;
-283        let v = self.v_proj.forward(x)?;
-284
-285        let q = q
-286            .reshape((b_sz, seq_len, self.num_attention_heads, self.head_dim))?
-287            .transpose(1, 2)?
-288            .contiguous()?;
-289        let k = k
-290            .reshape((b_sz, seq_len, self.num_key_value_heads, self.head_dim))?
-291            .transpose(1, 2)?
-292            .contiguous()?;
-293        let mut v = v
-294            .reshape((b_sz, seq_len, self.num_key_value_heads, self.head_dim))?
-295            .transpose(1, 2)?;
-296
-297        let q = self.apply_rotary_emb(&q, index_pos, cache)?;
-298        let mut k = self.apply_rotary_emb(&k, index_pos, cache)?;
-299
-300        if cache.use_kv_cache {
-301            if let Some((cache_k, cache_v)) = &cache.kvs[block_idx] {
-302                k = Tensor::cat(&[cache_k, &k], 2)?.contiguous()?;
-303                v = Tensor::cat(&[cache_v, &v], 2)?.contiguous()?;
-304                let k_seq_len = k.dims()[1];
-305                if k_seq_len > self.max_position_embeddings {
-306                    k = k
-307                        .narrow(
-308                            D::Minus1,
-309                            k_seq_len - self.max_position_embeddings,
-310                            self.max_position_embeddings,
-311                        )?
-312                        .contiguous()?
-313                }
-314                let v_seq_len = v.dims()[1];
-315                if v_seq_len > 2 * self.max_position_embeddings {
-316                    v = v
-317                        .narrow(
-318                            D::Minus1,
-319                            v_seq_len - self.max_position_embeddings,
-320                            self.max_position_embeddings,
-321                        )?
-322                        .contiguous()?
-323                }
-324            }
-325            cache.kvs[block_idx] = Some((k.clone(), v.clone()))
-326        }
-327
-328        let k = self.repeat_kv(k)?;
-329        let v = self.repeat_kv(v)?;
-330
-331        let y = if self.use_flash_attn {
-332            // flash-attn expects (b_sz, seq_len, nheads, head_dim)
-333            let q = q.transpose(1, 2)?;
-334            let k = k.transpose(1, 2)?;
-335            let v = v.transpose(1, 2)?;
-336            let softmax_scale = 1f32 / (self.head_dim as f32).sqrt();
-337            flash_attn(&q, &k, &v, softmax_scale, seq_len > 1)?.transpose(1, 2)?
-338        } else {
-339            let in_dtype = q.dtype();
-340            let q = q.to_dtype(DType::F32)?;
-341            let k = k.to_dtype(DType::F32)?;
-342            let v = v.to_dtype(DType::F32)?;
-343            let att = (q.matmul(&k.t()?)? / (self.head_dim as f64).sqrt())?;
-344            let att = if seq_len == 1 {
-345                att
-346            } else {
-347                let mask = cache.mask(seq_len)?.broadcast_as(att.shape())?;
-348                masked_fill(&att, &mask, f32::NEG_INFINITY)?
-349            };
-350
-351            let att = candle_nn::ops::softmax_last_dim(&att)?;
-352            // Convert to contiguous as matmul doesn't support strided vs for now.
-353            att.matmul(&v.contiguous()?)?.to_dtype(in_dtype)?
-354        };
-355        let y = y.transpose(1, 2)?.reshape(&[b_sz, seq_len, hidden_size])?;
-356        let y = self.o_proj.forward(&y)?;
-357        Ok(y)
-358    }
-359
-360    fn repeat_kv(&self, x: Tensor) -> Result<Tensor> {
-361        crate::utils::repeat_kv(x, self.num_attention_heads / self.num_key_value_heads)
-362    }
-363
-364    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-365        let span = tracing::span!(tracing::Level::TRACE, "attn");
-366        let span_rot = tracing::span!(tracing::Level::TRACE, "attn-rot");
-367        let size_in = cfg.hidden_size;
-368        let size_q = (cfg.hidden_size / cfg.num_attention_heads) * cfg.num_attention_heads;
-369        let size_kv = (cfg.hidden_size / cfg.num_attention_heads) * cfg.num_key_value_heads;
-370        let q_proj = linear(size_in, size_q, vb.pp("q_proj"))?;
-371        let k_proj = linear(size_in, size_kv, vb.pp("k_proj"))?;
-372        let v_proj = linear(size_in, size_kv, vb.pp("v_proj"))?;
-373        let o_proj = linear(size_q, size_in, vb.pp("o_proj"))?;
-374        Ok(Self {
-375            q_proj,
-376            k_proj,
-377            v_proj,
-378            o_proj,
-379            num_attention_heads: cfg.num_attention_heads,
-380            num_key_value_heads: cfg.num_key_value_heads,
-381            head_dim: cfg.hidden_size / cfg.num_attention_heads,
-382            use_flash_attn: cfg.use_flash_attn,
-383            span,
-384            span_rot,
-385            max_position_embeddings: cfg.max_position_embeddings,
-386        })
-387    }
-388}
-389
-390fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: f32) -> Result<Tensor> {
-391    let shape = mask.shape();
-392    let on_true = Tensor::new(on_true, on_false.device())?.broadcast_as(shape.dims())?;
-393    let m = mask.where_cond(&on_true, on_false)?;
-394    Ok(m)
-395}
-396
-397#[derive(Debug, Clone)]
-398struct Mlp {
-399    c_fc1: Linear,
-400    c_fc2: Linear,
-401    c_proj: Linear,
-402    span: tracing::Span,
-403}
-404
-405impl Mlp {
-406    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-407        let _enter = self.span.enter();
-408        let x = (candle_nn::ops::silu(&self.c_fc1.forward(x)?)? * self.c_fc2.forward(x)?)?;
-409        self.c_proj.forward(&x)
-410    }
-411
-412    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-413        let span = tracing::span!(tracing::Level::TRACE, "mlp");
-414        let h_size = cfg.hidden_size;
-415        let i_size = cfg.intermediate_size;
-416        let c_fc1 = linear(h_size, i_size, vb.pp("gate_proj"))?;
-417        let c_fc2 = linear(h_size, i_size, vb.pp("up_proj"))?;
-418        let c_proj = linear(i_size, h_size, vb.pp("down_proj"))?;
-419        Ok(Self {
-420            c_fc1,
-421            c_fc2,
-422            c_proj,
-423            span,
-424        })
-425    }
-426}
-427
-428#[derive(Debug, Clone)]
-429struct Block {
-430    rms_1: RmsNorm,
-431    attn: CausalSelfAttention,
-432    rms_2: RmsNorm,
-433    mlp: Mlp,
-434    span: tracing::Span,
-435}
-436
-437impl Block {
-438    fn forward(
-439        &self,
-440        x: &Tensor,
-441        index_pos: usize,
-442        block_idx: usize,
-443        cache: &mut Cache,
-444    ) -> Result<Tensor> {
-445        let _enter = self.span.enter();
-446        let residual = x;
-447        let x = self.rms_1.forward(x)?;
-448        let x = (self.attn.forward(&x, index_pos, block_idx, cache)? + residual)?;
-449        let residual = &x;
-450        let x = (self.mlp.forward(&self.rms_2.forward(&x)?)? + residual)?;
-451        Ok(x)
-452    }
-453
-454    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-455        let span = tracing::span!(tracing::Level::TRACE, "block");
-456        let attn = CausalSelfAttention::load(vb.pp("self_attn"), cfg)?;
-457        let mlp = Mlp::load(vb.pp("mlp"), cfg)?;
-458        let rms_1 = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("input_layernorm"))?;
-459        let rms_2 = RmsNorm::new(
-460            cfg.hidden_size,
-461            cfg.rms_norm_eps,
-462            vb.pp("post_attention_layernorm"),
-463        )?;
-464        Ok(Self {
-465            rms_1,
-466            attn,
-467            rms_2,
-468            mlp,
-469            span,
-470        })
-471    }
-472}
-473
-474#[derive(Debug, Clone)]
-475pub struct Llama {
-476    wte: Embedding,
-477    blocks: Vec<Block>,
-478    ln_f: RmsNorm,
-479    lm_head: Linear,
-480}
-481
-482impl Llama {
-483    // required by LLaVA
-484    pub fn embed(&self, x: &Tensor) -> Result<Tensor> {
-485        self.wte.forward(x)
-486    }
-487    // required by LLaVA
-488    pub fn forward_input_embed(
-489        &self,
-490        input_embed: &Tensor,
-491        index_pos: usize,
-492        cache: &mut Cache,
-493    ) -> Result<Tensor> {
-494        let (_, seq_len, _) = input_embed.dims3()?;
-495        let mut x = input_embed.clone();
-496        for (block_idx, block) in self.blocks.iter().enumerate() {
-497            x = block.forward(&x, index_pos, block_idx, cache)?;
-498        }
-499        let x = self.ln_f.forward(&x)?;
-500        let x = x.i((.., seq_len - 1, ..))?.contiguous()?;
-501        let logits = self.lm_head.forward(&x)?;
-502        logits.to_dtype(DType::F32)
-503    }
-504
-505    pub fn forward(&self, x: &Tensor, index_pos: usize, cache: &mut Cache) -> Result<Tensor> {
-506        let (_b_sz, seq_len) = x.dims2()?;
-507        let mut x = self.wte.forward(x)?;
-508        for (block_idx, block) in self.blocks.iter().enumerate() {
-509            x = block.forward(&x, index_pos, block_idx, cache)?;
-510        }
-511        let x = self.ln_f.forward(&x)?;
-512        let x = x.i((.., seq_len - 1, ..))?.contiguous()?;
-513        let logits = self.lm_head.forward(&x)?;
-514        logits.to_dtype(DType::F32)
-515    }
-516
-517    pub fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-518        let wte = embedding(cfg.vocab_size, cfg.hidden_size, vb.pp("model.embed_tokens"))?;
-519        let lm_head = if cfg.tie_word_embeddings {
-520            Linear::from_weights(wte.embeddings().clone(), None)
-521        } else {
-522            linear(cfg.hidden_size, cfg.vocab_size, vb.pp("lm_head"))?
-523        };
-524        let ln_f = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("model.norm"))?;
-525        let blocks: Vec<_> = (0..cfg.num_hidden_layers)
-526            .map(|i| Block::load(vb.pp(format!("model.layers.{i}")), cfg).unwrap())
-527            .collect();
-528
-529        Ok(Self {
-530            wte,
-531            blocks,
-532            ln_f,
-533            lm_head,
-534        })
-535    }
-536}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/llama2_c.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/llama2_c.rs.html deleted file mode 100644 index 9c69478..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/llama2_c.rs.html +++ /dev/null @@ -1,376 +0,0 @@ -llama2_c.rs - source

candle_transformers/models/
llama2_c.rs

1//! Llama2 inference implementation.
-2//!
-3//! See ["LLaMA 2: Open Foundation and Fine-Tuned Chat Models"](https://arxiv.org/abs/2307.09288)
-4//!
-5//! - ⚡ [Interactive Wasm Example](https://huggingface.co/spaces/lmz/candle-llama2)
-6//! - 💻 llama2.c [GH Link](https://github.com/karpathy/llama2.c)
-7//!
-8
-9use candle::{DType, Device, IndexOp, Result, Tensor, D};
-10use candle_nn::linear_no_bias as linear;
-11use candle_nn::{embedding, rms_norm, Embedding, Linear, Module, RmsNorm, VarBuilder};
-12use std::collections::HashMap;
-13
-14#[derive(Debug, Clone)]
-15pub struct Config {
-16    pub dim: usize,        // transformer dimension
-17    pub hidden_dim: usize, // for ffn layers
-18    pub n_layers: usize,   // number of layers
-19    pub n_heads: usize,    // number of query heads
-20    pub n_kv_heads: usize, // number of key/value heads (can be < query heads because of multiquery)
-21    pub vocab_size: usize, // vocabulary size, usually 256 (byte-level)
-22    pub seq_len: usize,    // max sequence length
-23    pub norm_eps: f64,
-24}
-25
-26impl Config {
-27    pub fn tiny_260k() -> Self {
-28        Self {
-29            dim: 64,
-30            hidden_dim: 768,
-31            n_layers: 5,
-32            n_heads: 8,
-33            n_kv_heads: 4,
-34            vocab_size: 32000,
-35            seq_len: 512,
-36            norm_eps: 1e-5,
-37        }
-38    }
-39
-40    pub fn tiny_15m() -> Self {
-41        Self {
-42            dim: 288,
-43            hidden_dim: 768,
-44            n_layers: 6,
-45            n_heads: 6,
-46            n_kv_heads: 6,
-47            vocab_size: 32000,
-48            seq_len: 256,
-49            norm_eps: 1e-5,
-50        }
-51    }
-52
-53    pub fn tiny_42m() -> Self {
-54        Self {
-55            dim: 512,
-56            hidden_dim: 768,
-57            n_layers: 8,
-58            n_heads: 8,
-59            n_kv_heads: 8,
-60            vocab_size: 32000,
-61            seq_len: 1024,
-62            norm_eps: 1e-5,
-63        }
-64    }
-65
-66    pub fn tiny_110m() -> Self {
-67        Self {
-68            dim: 768,
-69            hidden_dim: 768,
-70            n_layers: 12,
-71            n_heads: 12,
-72            n_kv_heads: 12,
-73            vocab_size: 32000,
-74            seq_len: 1024,
-75            norm_eps: 1e-5,
-76        }
-77    }
-78}
-79
-80#[derive(Debug, Clone)]
-81pub struct Cache {
-82    masks: HashMap<usize, Tensor>,
-83    pub use_kv_cache: bool,
-84    pub kvs: Vec<Option<(Tensor, Tensor)>>,
-85    pub cos: Tensor,
-86    pub sin: Tensor,
-87    device: Device,
-88}
-89
-90impl Cache {
-91    pub fn new(use_kv_cache: bool, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-92        let n_elem = cfg.dim / cfg.n_heads;
-93        let theta: Vec<_> = (0..n_elem)
-94            .step_by(2)
-95            .map(|i| 1f32 / 10000f32.powf(i as f32 / n_elem as f32))
-96            .collect();
-97        let theta = Tensor::new(theta.as_slice(), vb.device())?;
-98        let idx_theta = Tensor::arange(0, cfg.seq_len as u32, vb.device())?
-99            .to_dtype(DType::F32)?
-100            .reshape((cfg.seq_len, 1))?
-101            .matmul(&theta.reshape((1, theta.elem_count()))?)?;
-102        let precomputed_cos = idx_theta.cos()?;
-103        let precomputed_sin = idx_theta.sin()?;
-104
-105        let freq_cis_real = vb
-106            .get((cfg.seq_len, cfg.head_size() / 2), "freq_cis_real")
-107            .unwrap_or(precomputed_cos);
-108        let freq_cis_imag = vb
-109            .get((cfg.seq_len, cfg.head_size() / 2), "freq_cis_imag")
-110            .unwrap_or(precomputed_sin);
-111        let cos = freq_cis_real.reshape((cfg.seq_len, cfg.head_size() / 2, 1))?;
-112        let sin = freq_cis_imag.reshape((cfg.seq_len, cfg.head_size() / 2, 1))?;
-113        Ok(Self {
-114            masks: HashMap::new(),
-115            use_kv_cache,
-116            kvs: vec![None; cfg.n_layers],
-117            cos,
-118            sin,
-119            device: vb.device().clone(),
-120        })
-121    }
-122
-123    pub fn mask(&mut self, t: usize) -> Result<Tensor> {
-124        if let Some(mask) = self.masks.get(&t) {
-125            Ok(mask.clone())
-126        } else {
-127            let mask: Vec<_> = (0..t)
-128                .flat_map(|i| (0..t).map(move |j| u8::from(j > i)))
-129                .collect();
-130            let mask = Tensor::from_slice(&mask, (t, t), &self.device)?;
-131            self.masks.insert(t, mask.clone());
-132            Ok(mask)
-133        }
-134    }
-135}
-136
-137fn silu(xs: &Tensor) -> Result<Tensor> {
-138    xs / (xs.neg()?.exp()? + 1.0)?
-139}
-140
-141#[derive(Debug, Clone)]
-142struct CausalSelfAttention {
-143    q_proj: Linear,
-144    k_proj: Linear,
-145    v_proj: Linear,
-146    o_proj: Linear,
-147    n_head: usize,
-148    n_key_value_head: usize,
-149    head_dim: usize,
-150}
-151
-152impl CausalSelfAttention {
-153    fn apply_rotary_emb(&self, x: &Tensor, index_pos: usize, cache: &Cache) -> Result<Tensor> {
-154        let (b_sz, seq_len, h, n_embd) = x.dims4()?;
-155        let cos = cache.cos.i(index_pos..index_pos + seq_len)?;
-156        let sin = cache.sin.i(index_pos..index_pos + seq_len)?;
-157        let cos = cos.unsqueeze(1)?;
-158        let sin = sin.unsqueeze(1)?;
-159        let cos = cos.broadcast_as((b_sz, seq_len, 1, n_embd / 2, 1))?;
-160        let sin = sin.broadcast_as((b_sz, seq_len, 1, n_embd / 2, 1))?;
-161        let x = x.reshape((b_sz, seq_len, h, n_embd / 2, 2))?;
-162        let x0 = x.narrow(D::Minus1, 0, 1)?;
-163        let x1 = x.narrow(D::Minus1, 1, 1)?;
-164        let dst0 = (x0.broadcast_mul(&cos)? - x1.broadcast_mul(&sin)?)?;
-165        let dst1 = (x0.broadcast_mul(&sin)? + x1.broadcast_mul(&cos)?)?;
-166        let rope = Tensor::cat(&[&dst0, &dst1], D::Minus1)?.reshape((b_sz, seq_len, h, n_embd))?;
-167        Ok(rope)
-168    }
-169
-170    fn forward(
-171        &self,
-172        x: &Tensor,
-173        index_pos: usize,
-174        block_idx: usize,
-175        cache: &mut Cache,
-176    ) -> Result<Tensor> {
-177        let (b_sz, seq_len, n_embd) = x.dims3()?;
-178        let q = self.q_proj.forward(x)?;
-179        let k = self.k_proj.forward(x)?;
-180        let v = self.v_proj.forward(x)?;
-181
-182        let q = q.reshape((b_sz, seq_len, self.n_head, self.head_dim))?;
-183        let k = k.reshape((b_sz, seq_len, self.n_key_value_head, self.head_dim))?;
-184        let mut v = v.reshape((b_sz, seq_len, self.n_key_value_head, self.head_dim))?;
-185
-186        let q = self.apply_rotary_emb(&q, index_pos, cache)?;
-187        let mut k = self.apply_rotary_emb(&k, index_pos, cache)?;
-188
-189        if cache.use_kv_cache {
-190            if let Some((cache_k, cache_v)) = &cache.kvs[block_idx] {
-191                k = Tensor::cat(&[cache_k, &k], 1)?.contiguous()?;
-192                v = Tensor::cat(&[cache_v, &v], 1)?.contiguous()?;
-193            }
-194            cache.kvs[block_idx] = Some((k.clone(), v.clone()))
-195        }
-196
-197        let k = self.repeat_kv(k)?;
-198        let v = self.repeat_kv(v)?;
-199
-200        let q = q.transpose(1, 2)?.contiguous()?;
-201        let k = k.transpose(1, 2)?.contiguous()?;
-202        let v = v.transpose(1, 2)?.contiguous()?;
-203
-204        let att = (q.matmul(&k.t()?)? / (self.head_dim as f64).sqrt())?;
-205        let att = if seq_len <= 1 {
-206            att
-207        } else {
-208            let mask = cache.mask(seq_len)?.broadcast_as(att.shape())?;
-209            masked_fill(&att, &mask, f32::NEG_INFINITY)?
-210        };
-211        let att = candle_nn::ops::softmax(&att, D::Minus1)?;
-212        // Convert to contiguous as matmul doesn't support strided vs for now.
-213        let y = att.matmul(&v.contiguous()?)?;
-214        let y = y.transpose(1, 2)?.reshape(&[b_sz, seq_len, n_embd])?;
-215        let y = self.o_proj.forward(&y)?;
-216        Ok(y)
-217    }
-218
-219    fn repeat_kv(&self, x: Tensor) -> Result<Tensor> {
-220        let n_rep = self.n_head / self.n_key_value_head;
-221        if n_rep == 1 {
-222            Ok(x)
-223        } else {
-224            let (b_sz, seq_len, n_kv_head, head_dim) = x.dims4()?;
-225            let x = x
-226                .unsqueeze(3)?
-227                .expand((b_sz, seq_len, n_kv_head, n_rep, head_dim))?
-228                .reshape((b_sz, seq_len, n_kv_head * n_rep, head_dim))?;
-229            Ok(x)
-230        }
-231    }
-232
-233    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-234        let size_in = cfg.dim;
-235        let size_q = (cfg.dim / cfg.n_heads) * cfg.n_heads;
-236        let size_kv = (cfg.dim / cfg.n_heads) * cfg.n_kv_heads;
-237        let q_proj = linear(size_in, size_q, vb.pp("q_proj"))?;
-238        let k_proj = linear(size_in, size_kv, vb.pp("k_proj"))?;
-239        let v_proj = linear(size_in, size_kv, vb.pp("v_proj"))?;
-240        let o_proj = linear(size_q, size_in, vb.pp("o_proj"))?;
-241        Ok(Self {
-242            q_proj,
-243            k_proj,
-244            v_proj,
-245            o_proj,
-246            n_head: cfg.n_heads,
-247            n_key_value_head: cfg.n_kv_heads,
-248            head_dim: cfg.dim / cfg.n_heads,
-249        })
-250    }
-251}
-252
-253fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: f32) -> Result<Tensor> {
-254    let shape = mask.shape();
-255    let on_true = Tensor::new(on_true, on_false.device())?.broadcast_as(shape.dims())?;
-256    let m = mask.where_cond(&on_true, on_false)?;
-257    Ok(m)
-258}
-259
-260#[derive(Debug, Clone)]
-261struct Mlp {
-262    c_fc1: Linear,
-263    c_fc2: Linear,
-264    c_proj: Linear,
-265}
-266
-267impl Mlp {
-268    fn new(c_fc1: Linear, c_fc2: Linear, c_proj: Linear) -> Self {
-269        Self {
-270            c_fc1,
-271            c_fc2,
-272            c_proj,
-273        }
-274    }
-275
-276    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-277        let x = (silu(&self.c_fc1.forward(x)?)? * self.c_fc2.forward(x)?)?;
-278        self.c_proj.forward(&x)
-279    }
-280
-281    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-282        let h_size = cfg.dim;
-283        let i_size = cfg.hidden_dim;
-284        let c_fc1 = linear(h_size, i_size, vb.pp("gate_proj"))?;
-285        let c_fc2 = linear(h_size, i_size, vb.pp("up_proj"))?;
-286        let c_proj = linear(i_size, h_size, vb.pp("down_proj"))?;
-287        Ok(Self::new(c_fc1, c_fc2, c_proj))
-288    }
-289}
-290
-291#[derive(Debug, Clone)]
-292struct Block {
-293    rms_1: RmsNorm,
-294    attn: CausalSelfAttention,
-295    rms_2: RmsNorm,
-296    mlp: Mlp,
-297}
-298
-299impl Block {
-300    fn new(rms_1: RmsNorm, attn: CausalSelfAttention, rms_2: RmsNorm, mlp: Mlp) -> Self {
-301        Self {
-302            rms_1,
-303            attn,
-304            rms_2,
-305            mlp,
-306        }
-307    }
-308
-309    fn forward(
-310        &self,
-311        x: &Tensor,
-312        index_pos: usize,
-313        block_idx: usize,
-314        cache: &mut Cache,
-315    ) -> Result<Tensor> {
-316        let residual = x;
-317        let x = self.rms_1.forward(x)?;
-318        let x = (self.attn.forward(&x, index_pos, block_idx, cache)? + residual)?;
-319        let residual = &x;
-320        let x = (self.mlp.forward(&self.rms_2.forward(&x)?)? + residual)?;
-321        Ok(x)
-322    }
-323
-324    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-325        let attn = CausalSelfAttention::load(vb.pp("self_attn"), cfg)?;
-326        let mlp = Mlp::load(vb.pp("mlp"), cfg)?;
-327        let input_layernorm = rms_norm(cfg.dim, cfg.norm_eps, vb.pp("input_layernorm"))?;
-328        let post_attention_layernorm =
-329            rms_norm(cfg.dim, cfg.norm_eps, vb.pp("post_attention_layernorm"))?;
-330        Ok(Self::new(
-331            input_layernorm,
-332            attn,
-333            post_attention_layernorm,
-334            mlp,
-335        ))
-336    }
-337}
-338
-339#[derive(Debug, Clone)]
-340pub struct Llama {
-341    wte: Embedding,
-342    blocks: Vec<Block>,
-343    ln_f: RmsNorm,
-344    lm_head: Linear,
-345    pub config: Config,
-346}
-347
-348impl Llama {
-349    pub fn forward(&self, x: &Tensor, index_pos: usize, cache: &mut Cache) -> Result<Tensor> {
-350        let (_b_sz, _seq_len) = x.dims2()?;
-351        let mut x = self.wte.forward(x)?;
-352        for (block_idx, block) in self.blocks.iter().enumerate() {
-353            x = block.forward(&x, index_pos, block_idx, cache)?;
-354        }
-355        let x = self.ln_f.forward(&x)?;
-356        let logits = self.lm_head.forward(&x)?;
-357        logits.to_dtype(DType::F32)
-358    }
-359
-360    pub fn load(vb: VarBuilder, cfg: Config) -> Result<Self> {
-361        let wte = embedding(cfg.vocab_size, cfg.dim, vb.pp("model.embed_tokens"))?;
-362        let lm_head = linear(cfg.dim, cfg.vocab_size, vb.pp("lm_head"))?;
-363        let ln_f = rms_norm(cfg.dim, cfg.norm_eps, vb.pp("model.norm"))?;
-364        let blocks: Vec<_> = (0..cfg.n_layers)
-365            .map(|i| Block::load(vb.pp(format!("model.layers.{i}")), &cfg).unwrap())
-366            .collect();
-367        Ok(Self {
-368            wte,
-369            blocks,
-370            ln_f,
-371            lm_head,
-372            config: cfg,
-373        })
-374    }
-375}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/llama2_c_weights.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/llama2_c_weights.rs.html deleted file mode 100644 index 7d36cf7..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/llama2_c_weights.rs.html +++ /dev/null @@ -1,174 +0,0 @@ -llama2_c_weights.rs - source

candle_transformers/models/
llama2_c_weights.rs

1//! Llama2 inference implementation.
-2//!
-3//! See ["LLaMA 2: Open Foundation and Fine-Tuned Chat Models"](https://arxiv.org/abs/2307.09288)
-4//!
-5//! Based on the [llama2.c](https://github.com/karpathy/llama2.c) implementation
-6
-7use byteorder::{LittleEndian, ReadBytesExt};
-8use candle::{DType, Device, IndexOp, Result, Shape, Tensor};
-9use candle_nn::VarBuilder;
-10
-11use super::llama2_c::Config;
-12
-13pub struct TransformerWeights {
-14    // token embedding table
-15    token_embedding_table: Tensor, // (vocab_size, dim)
-16    // weights for rmsnorms
-17    rms_att_weight: Tensor, // (layer, dim) rmsnorm weights
-18    rms_ffn_weight: Tensor, // (layer, dim)
-19    // weights for matmuls
-20    wq: Tensor, // (layer, dim, dim)
-21    wk: Tensor, // (layer, dim, dim)
-22    wv: Tensor, // (layer, dim, dim)
-23    wo: Tensor, // (layer, dim, dim)
-24    // weights for ffn
-25    w1: Tensor, // (layer, hidden_dim, dim)
-26    w2: Tensor, // (layer, dim, hidden_dim)
-27    w3: Tensor, // (layer, hidden_dim, dim)
-28    // final rmsnorm
-29    rms_final_weight: Tensor, // (dim,)
-30    // freq_cis for RoPE relatively positional embeddings
-31    freq_cis_real: Tensor, // (seq_len, head_size/2)
-32    freq_cis_imag: Tensor, // (seq_len, head_size/2)
-33}
-34
-35fn read_i32<R: std::io::Read>(r: &mut R) -> Result<i32> {
-36    let mut buf = [0u8; 4];
-37    r.read_exact(&mut buf)?;
-38    Ok(i32::from_le_bytes(buf))
-39}
-40
-41fn read_tensor<R: std::io::Read, S: Into<Shape>>(
-42    r: &mut R,
-43    shape: S,
-44    dev: &Device,
-45) -> Result<Tensor> {
-46    let shape = shape.into();
-47    let mut data_t = vec![0f32; shape.elem_count()];
-48    r.read_f32_into::<LittleEndian>(&mut data_t)?;
-49    let tensor = Tensor::from_vec(data_t, shape, dev)?;
-50    Ok(tensor)
-51}
-52
-53impl Config {
-54    pub fn from_reader<R: std::io::Read>(r: &mut R) -> Result<Self> {
-55        let dim = read_i32(r)? as usize;
-56        let hidden_dim = read_i32(r)? as usize;
-57        let n_layers = read_i32(r)? as usize;
-58        let n_heads = read_i32(r)? as usize;
-59        let n_kv_heads = read_i32(r)? as usize;
-60        let vocab_size = read_i32(r)? as usize;
-61        let seq_len = read_i32(r)? as usize;
-62        Ok(Self {
-63            dim,
-64            hidden_dim,
-65            n_layers,
-66            n_heads,
-67            n_kv_heads,
-68            vocab_size,
-69            seq_len,
-70            norm_eps: 1e-5,
-71        })
-72    }
-73
-74    pub fn head_size(&self) -> usize {
-75        self.dim / self.n_heads
-76    }
-77}
-78
-79impl TransformerWeights {
-80    pub fn from_reader<R: std::io::Read>(r: &mut R, c: &Config, dev: &Device) -> Result<Self> {
-81        let token_embedding_table = read_tensor(r, (c.vocab_size, c.dim), dev)?;
-82        let rms_att_weight = read_tensor(r, (c.n_layers, c.dim), dev)?;
-83        let wq = read_tensor(r, (c.n_layers, c.dim, c.dim), dev)?;
-84        let wk = read_tensor(r, (c.n_layers, c.dim, c.dim), dev)?;
-85        let wv = read_tensor(r, (c.n_layers, c.dim, c.dim), dev)?;
-86        let wo = read_tensor(r, (c.n_layers, c.dim, c.dim), dev)?;
-87        let rms_ffn_weight = read_tensor(r, (c.n_layers, c.dim), dev)?;
-88        let w1 = read_tensor(r, (c.n_layers, c.hidden_dim, c.dim), dev)?;
-89        let w2 = read_tensor(r, (c.n_layers, c.dim, c.hidden_dim), dev)?;
-90        let w3 = read_tensor(r, (c.n_layers, c.hidden_dim, c.dim), dev)?;
-91        let rms_final_weight = read_tensor(r, c.dim, dev)?;
-92        let head_size = c.head_size();
-93        let freq_cis_real = read_tensor(r, (c.seq_len, head_size / 2), dev)?;
-94        let freq_cis_imag = read_tensor(r, (c.seq_len, head_size / 2), dev)?;
-95        Ok(Self {
-96            token_embedding_table,
-97            rms_att_weight,
-98            wq,
-99            wk,
-100            wv,
-101            wo,
-102            rms_ffn_weight,
-103            w1,
-104            w2,
-105            w3,
-106            rms_final_weight,
-107            freq_cis_real,
-108            freq_cis_imag,
-109        })
-110    }
-111
-112    pub fn var_builder(&self, cfg: &Config, device: &Device) -> Result<VarBuilder<'static>> {
-113        // TODO: As of 2023-08-04, gemm is slower than expected when multiplying a matrix of
-114        // size (1, k) with the transpose of a matrix of size (k, n) as it ends up transposing the
-115        // second matrix back. We detect this case here and as a temporary hack make the weight
-116        // matrix column major rather than row major. This ends up speeding up text generation from
-117        // 120 token/s to 220 token/s on a Ryzen 2600X.
-118        let tr = device.is_cpu() && !candle::utils::has_mkl();
-119        let tr = |x: Tensor| if tr { x.t()?.contiguous()?.t() } else { Ok(x) };
-120        let mut ws = std::collections::HashMap::new();
-121        let mut insert = |name: &str, t: Tensor| {
-122            ws.insert(name.to_string(), t);
-123        };
-124        insert("rot.freq_cis_real", self.freq_cis_real.clone());
-125        insert("rot.freq_cis_imag", self.freq_cis_imag.clone());
-126        insert(
-127            "model.embed_tokens.weight",
-128            self.token_embedding_table.clone(),
-129        );
-130        insert("lm_head.weight", tr(self.token_embedding_table.clone())?);
-131        insert("model.norm.weight", self.rms_final_weight.clone());
-132        for layer in 0..cfg.n_layers {
-133            ws.insert(
-134                format!("model.layers.{layer}.self_attn.q_proj.weight"),
-135                tr(self.wq.i(layer)?)?,
-136            );
-137            ws.insert(
-138                format!("model.layers.{layer}.self_attn.k_proj.weight"),
-139                tr(self.wk.i(layer)?)?,
-140            );
-141            ws.insert(
-142                format!("model.layers.{layer}.self_attn.v_proj.weight"),
-143                tr(self.wv.i(layer)?)?,
-144            );
-145            ws.insert(
-146                format!("model.layers.{layer}.self_attn.o_proj.weight"),
-147                tr(self.wo.i(layer)?)?,
-148            );
-149            ws.insert(
-150                format!("model.layers.{layer}.mlp.gate_proj.weight"),
-151                tr(self.w1.i(layer)?)?,
-152            );
-153            ws.insert(
-154                format!("model.layers.{layer}.mlp.down_proj.weight"),
-155                tr(self.w2.i(layer)?)?,
-156            );
-157            ws.insert(
-158                format!("model.layers.{layer}.mlp.up_proj.weight"),
-159                tr(self.w3.i(layer)?)?,
-160            );
-161            ws.insert(
-162                format!("model.layers.{layer}.input_layernorm.weight"),
-163                self.rms_att_weight.i(layer)?,
-164            );
-165            ws.insert(
-166                format!("model.layers.{layer}.post_attention_layernorm.weight"),
-167                self.rms_ffn_weight.i(layer)?,
-168            );
-169        }
-170        let vb = VarBuilder::from_tensors(ws, DType::F32, device);
-171        Ok(vb)
-172    }
-173}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/llava/config.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/llava/config.rs.html deleted file mode 100644 index 6952712..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/llava/config.rs.html +++ /dev/null @@ -1,273 +0,0 @@ -config.rs - source

candle_transformers/models/llava/
config.rs

1use std::collections::HashMap;
-2
-3use crate::models::{
-4    clip::{text_model::Activation, vision_model::ClipVisionConfig},
-5    llama::{Config, LlamaEosToks},
-6};
-7use serde::{Deserialize, Serialize};
-8
-9// original config from liuhaotian/llava
-10#[derive(Serialize, Deserialize, Debug, Clone)]
-11pub struct LLaVAConfig {
-12    pub architectures: Vec<String>,
-13    pub bos_token_id: usize,
-14    pub eos_token_id: usize,
-15    pub hidden_size: usize,
-16    #[serde(default = "default_image_aspect_ratio")]
-17    pub image_aspect_ratio: String,
-18    pub image_crop_resolution: usize,
-19    pub image_grid_pinpoints: Vec<(u32, u32)>,
-20    pub image_split_resolution: usize,
-21    pub intermediate_size: usize,
-22    pub max_position_embeddings: usize,
-23    pub mm_hidden_size: usize,
-24    #[serde(default = "default_mm_patch_merge_type")]
-25    pub mm_patch_merge_type: String,
-26    pub mm_projector_type: String,
-27    pub mm_use_im_start_end: bool,
-28    pub mm_vision_select_feature: String,
-29    pub mm_vision_select_layer: isize,
-30    pub mm_vision_tower: Option<String>,
-31    pub model_type: String,
-32    pub num_attention_heads: usize,
-33    pub num_hidden_layers: usize,
-34    pub num_key_value_heads: usize,
-35    pub pad_token_id: usize,
-36    pub rms_norm_eps: f32,
-37    pub rope_theta: f32,
-38    pub tokenizer_model_max_length: Option<usize>,
-39    pub torch_dtype: String,
-40    pub use_cache: bool,
-41    pub vocab_size: usize,
-42    #[serde(default = "default_image_token_index")]
-43    pub image_token_index: isize,
-44    #[serde(default = "default_hf")]
-45    pub hf: bool,
-46    pub tie_word_embeddings: Option<bool>,
-47}
-48
-49fn default_hf() -> bool {
-50    false
-51}
-52
-53fn default_image_token_index() -> isize {
-54    -200
-55}
-56
-57fn default_mm_patch_merge_type() -> String {
-58    "flat".to_string()
-59}
-60
-61fn default_image_aspect_ratio() -> String {
-62    "square".to_string()
-63}
-64
-65impl LLaVAConfig {
-66    pub fn to_llama_config(&self) -> Config {
-67        Config {
-68            hidden_size: self.hidden_size,
-69            intermediate_size: self.intermediate_size,
-70            vocab_size: self.vocab_size,
-71            num_hidden_layers: self.num_hidden_layers,
-72            num_attention_heads: self.num_attention_heads,
-73            num_key_value_heads: self.num_key_value_heads,
-74            rms_norm_eps: self.rms_norm_eps as f64,
-75            rope_theta: self.rope_theta,
-76            bos_token_id: Some(self.bos_token_id as u32),
-77            eos_token_id: Some(LlamaEosToks::Single(self.eos_token_id as u32)),
-78            use_flash_attn: false,
-79            rope_scaling: None, // Assume we don't have LLaVA for Llama 3.1
-80            max_position_embeddings: self.max_position_embeddings,
-81            tie_word_embeddings: self.tie_word_embeddings.unwrap_or(false),
-82        }
-83    }
-84}
-85
-86#[derive(Serialize, Deserialize, Debug, Clone)]
-87pub struct HFLLaVATextConfig {
-88    pub architectures: Vec<String>,
-89    #[serde(default = "default_hidden_size")]
-90    pub hidden_size: usize,
-91    #[serde(default = "default_intermediate_size")]
-92    pub intermediate_size: usize,
-93    #[serde(default = "default_max_length")]
-94    pub max_length: usize,
-95    pub max_position_embeddings: usize,
-96    pub model_type: String,
-97    #[serde(default = "default_num_attention_heads")]
-98    pub num_attention_heads: usize,
-99    #[serde(default = "default_num_hidden_layers")]
-100    pub num_hidden_layers: usize,
-101    #[serde(default = "default_num_key_value_heads")]
-102    pub num_key_value_heads: usize,
-103    pub pad_token_id: usize,
-104    pub rms_norm_eps: f32,
-105    #[serde(default = "default_rope_theta")]
-106    pub rope_theta: f32,
-107    pub torch_dtype: String,
-108    #[serde(default = "default_use_cache")]
-109    pub use_cache: bool,
-110    pub vocab_size: usize,
-111}
-112
-113fn default_num_hidden_layers() -> usize {
-114    32
-115}
-116
-117fn default_use_cache() -> bool {
-118    true
-119}
-120
-121fn default_hidden_size() -> usize {
-122    4096
-123}
-124
-125fn default_intermediate_size() -> usize {
-126    11008
-127}
-128
-129fn default_max_length() -> usize {
-130    4096
-131}
-132
-133fn default_num_attention_heads() -> usize {
-134    32
-135}
-136
-137fn default_num_key_value_heads() -> usize {
-138    32
-139}
-140
-141fn default_rope_theta() -> f32 {
-142    10000.0
-143}
-144
-145#[derive(Serialize, Deserialize, Debug, Clone)]
-146pub struct HFLLaVAVisionConfig {
-147    pub hidden_size: usize,
-148    pub image_size: usize,
-149    pub intermediate_size: usize,
-150    pub model_type: String,
-151    pub num_attention_heads: usize,
-152    pub num_hidden_layers: usize,
-153    pub patch_size: usize,
-154    pub projection_dim: usize,
-155    pub vocab_size: usize,
-156}
-157
-158// config from llava-v1.6-vicuna-7b-hf
-159#[derive(Serialize, Deserialize, Debug, Clone)]
-160pub struct HFLLaVAConfig {
-161    pub architectures: Vec<String>,
-162    pub ignore_index: isize,
-163    pub image_grid_pinpoints: Vec<(u32, u32)>,
-164    pub image_token_index: isize,
-165    pub model_type: String,
-166    pub projector_hidden_act: String,
-167    pub text_config: HFLLaVATextConfig,
-168    pub torch_dtype: String,
-169    pub use_image_newline_parameter: bool,
-170    pub vision_config: HFLLaVAVisionConfig,
-171    pub vision_feature_layer: isize,
-172    pub vision_feature_select_strategy: String,
-173    pub vocab_size: usize,
-174}
-175
-176#[derive(Serialize, Deserialize, Debug, Clone)]
-177pub struct HFGenerationConfig {
-178    pub bos_token_id: usize,
-179    pub eos_token_id: usize,
-180    #[serde(default = "default_max_length")]
-181    pub max_length: usize,
-182    pub pad_token_id: usize,
-183}
-184
-185#[derive(Serialize, Deserialize, Debug, Clone)]
-186pub struct HFPreProcessorConfig {
-187    pub aspect_ratio_setting: String,
-188    pub crop_size: HashMap<String, usize>,
-189    pub do_center_crop: bool,
-190    pub do_convert_rgb: bool,
-191    pub do_normalize: bool,
-192    pub do_rescale: bool,
-193    pub do_resize: bool,
-194    pub image_mean: Vec<f32>,
-195    pub image_std: Vec<f32>,
-196    pub resample: u32,
-197    pub rescale_factor: f32,
-198    pub size: HashMap<String, f32>,
-199}
-200
-201impl HFLLaVAConfig {
-202    pub fn to_clip_vision_config(&self) -> ClipVisionConfig {
-203        ClipVisionConfig {
-204            embed_dim: self.vision_config.hidden_size,
-205            activation: Activation::QuickGelu,
-206            intermediate_size: self.vision_config.intermediate_size,
-207            num_hidden_layers: self.vision_config.num_hidden_layers,
-208            num_attention_heads: self.vision_config.num_attention_heads,
-209            projection_dim: self.vision_config.projection_dim,
-210            num_channels: 3,
-211            image_size: self.vision_config.image_size,
-212            patch_size: self.vision_config.patch_size,
-213        }
-214    }
-215    fn map_projector_type(s: &str) -> String {
-216        if s == "gelu" {
-217            "mlp2x_gelu".to_string()
-218        } else {
-219            s.to_string()
-220        }
-221    }
-222
-223    fn map_select_feature(s: &str) -> String {
-224        if s == "default" {
-225            "patch".to_string()
-226        } else {
-227            "cls_patch".to_string()
-228        }
-229    }
-230
-231    pub fn to_llava_config(
-232        &self,
-233        generation_config: &HFGenerationConfig,
-234        preprocessor_config: &HFPreProcessorConfig,
-235    ) -> LLaVAConfig {
-236        LLaVAConfig {
-237            hf: true,
-238            architectures: self.architectures.clone(),
-239            bos_token_id: generation_config.bos_token_id,
-240            eos_token_id: generation_config.eos_token_id,
-241            hidden_size: self.text_config.hidden_size,
-242            image_aspect_ratio: preprocessor_config.aspect_ratio_setting.clone(),
-243            image_crop_resolution: 224,
-244            image_grid_pinpoints: self.image_grid_pinpoints.clone(),
-245            image_split_resolution: 224,
-246            intermediate_size: self.text_config.intermediate_size,
-247            max_position_embeddings: self.text_config.max_position_embeddings,
-248            mm_hidden_size: 1024,
-249            mm_patch_merge_type: "spatial_unpad".to_string(),
-250            mm_projector_type: Self::map_projector_type(&self.projector_hidden_act),
-251            mm_use_im_start_end: false,
-252            mm_vision_select_feature: Self::map_select_feature(
-253                &self.vision_feature_select_strategy,
-254            ),
-255            mm_vision_select_layer: self.vision_feature_layer,
-256            mm_vision_tower: None,
-257            model_type: self.model_type.clone(),
-258            num_attention_heads: self.text_config.num_attention_heads,
-259            num_hidden_layers: self.text_config.num_hidden_layers,
-260            num_key_value_heads: self.text_config.num_key_value_heads,
-261            pad_token_id: self.text_config.pad_token_id,
-262            rms_norm_eps: self.text_config.rms_norm_eps,
-263            rope_theta: self.text_config.rope_theta,
-264            tokenizer_model_max_length: Some(4096),
-265            torch_dtype: self.torch_dtype.clone(),
-266            use_cache: self.text_config.use_cache,
-267            vocab_size: self.vocab_size,
-268            image_token_index: self.image_token_index,
-269            tie_word_embeddings: None,
-270        }
-271    }
-272}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/llava/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/llava/mod.rs.html deleted file mode 100644 index e0be6dc..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/llava/mod.rs.html +++ /dev/null @@ -1,413 +0,0 @@ -mod.rs - source

candle_transformers/models/llava/
mod.rs

1//! The LLaVA (Large Language and Vision Assistant) model.
-2//!
-3//! This provides the main model implementation combining a vision tower (CLIP) with
-4//! language model (Llama) for multimodal capabilities. The architecture implements the training-free projection technique.
-5//!
-6//! - 💻[GH Link](https://github.com/haotian-liu/LLaVA/tree/main)
-7//! - 📝 [Paper](https://arxiv.org/abs/2304.08485)/ Visual Instruction Tuning
-8//!
-9
-10pub mod config;
-11pub mod utils;
-12
-13use crate::models::clip::vision_model::{ClipVisionConfig, ClipVisionTransformer};
-14use crate::models::llama::{Cache, Llama};
-15use crate::models::with_tracing::linear;
-16
-17use candle::{bail, Context, Device, IndexOp, Result, Tensor};
-18use candle_nn::{seq, Activation, Module, Sequential, VarBuilder};
-19use fancy_regex::Regex;
-20use utils::get_anyres_image_grid_shape;
-21
-22use config::LLaVAConfig;
-23
-24fn mlp_gelu_match(mm_projector_type: &str) -> Option<usize> {
-25    let mlp_gelu_regex = Regex::new(r"^mlp(\d+)x_gelu$").unwrap();
-26
-27    if let Ok(Some(captures)) = mlp_gelu_regex.captures(mm_projector_type) {
-28        if let Some(match_str) = captures.get(1) {
-29            let match_str = match_str.as_str();
-30            match_str.parse::<usize>().ok()
-31        } else {
-32            None
-33        }
-34    } else {
-35        None
-36    }
-37}
-38
-39fn unpad_image(tensor: &Tensor, original_size: &(u32, u32)) -> Result<Tensor> {
-40    assert_eq!(tensor.dims().len(), 3);
-41    let (original_width, original_height) = *original_size;
-42    let tensor_dims = tensor.dims();
-43    let current_height = tensor_dims[1];
-44    let current_width = tensor_dims[2];
-45    let original_aspect_ratio = (original_width as f32) / (original_height as f32);
-46    let current_aspect_ratio = (current_width as f32) / (current_height as f32);
-47    if original_aspect_ratio > current_aspect_ratio {
-48        let scale_factor = (current_width as f32) / (original_width as f32);
-49        let new_height = (original_height as f32 * scale_factor).floor() as usize;
-50        let padding = (current_height - new_height) / 2;
-51        tensor.i((.., padding..current_width - padding, ..))
-52    } else {
-53        let scale_factor = (current_height as f32) / (original_height as f32);
-54        let new_width = (original_width as f32 * scale_factor).floor() as usize;
-55        let padding = (current_width - new_width) / 2;
-56        tensor.i((.., .., padding..current_width - padding))
-57    }
-58}
-59
-60pub struct IdentityMap {}
-61
-62impl Module for IdentityMap {
-63    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-64        Ok(x.clone())
-65    }
-66}
-67
-68pub struct MMProjector {
-69    pub modules: Sequential,
-70}
-71
-72impl MMProjector {
-73    pub fn load(vb: &VarBuilder, config: &LLaVAConfig) -> Result<Self> {
-74        if config.mm_projector_type == "linear" {
-75            let vb_prefix = if config.hf {
-76                "multi_modal_projector.linear_1"
-77            } else {
-78                "model.mm_projector.0"
-79            };
-80            let linear = linear(config.mm_hidden_size, config.hidden_size, vb.pp(vb_prefix))?;
-81            let modules = seq().add(linear);
-82            Ok(Self { modules })
-83        } else if let Some(mlp_depth) = mlp_gelu_match(&config.mm_projector_type) {
-84            let modules = if config.hf {
-85                let mut modules = seq().add(linear(
-86                    config.mm_hidden_size,
-87                    config.hidden_size,
-88                    vb.pp("multi_modal_projector.linear_1"),
-89                )?);
-90                for i in 1..mlp_depth {
-91                    modules = modules.add(Activation::Gelu).add(linear(
-92                        config.hidden_size,
-93                        config.hidden_size,
-94                        vb.pp(format!("multi_modal_projector.linear_{}", i + 1)),
-95                    )?);
-96                }
-97                modules
-98            } else {
-99                let mut modules = seq().add(linear(
-100                    config.mm_hidden_size,
-101                    config.hidden_size,
-102                    vb.pp("model.mm_projector.0"),
-103                )?);
-104                for i in 1..mlp_depth {
-105                    modules = modules.add(Activation::Gelu).add(linear(
-106                        config.hidden_size,
-107                        config.hidden_size,
-108                        vb.pp(format!("model.mm_projector.{}", i * 2)),
-109                    )?);
-110                }
-111                modules
-112            };
-113            Ok(Self { modules })
-114        } else if config.mm_projector_type == "identity" {
-115            Ok(Self {
-116                modules: seq().add(IdentityMap {}),
-117            })
-118        } else {
-119            bail!(
-120                "Unsupported MM projector type: {}",
-121                config.mm_projector_type
-122            )
-123        }
-124    }
-125
-126    pub fn forward(&self, x: &Tensor) -> Result<Tensor> {
-127        self.modules.forward(x)
-128    }
-129}
-130
-131pub struct ClipVisionTower {
-132    model: ClipVisionTransformer,
-133    select_layer: isize,
-134    select_feature_method: String,
-135    pub config: ClipVisionConfig,
-136}
-137
-138impl ClipVisionTower {
-139    pub fn new(
-140        vb: VarBuilder,
-141        select_layer: isize,
-142        select_feature_method: &str,
-143        config: &Option<ClipVisionConfig>,
-144    ) -> Result<Self> {
-145        let config = if config.is_none() {
-146            ClipVisionConfig::clip_vit_large_patch14_336()
-147        } else {
-148            config.clone().context("no config")?
-149        };
-150        let select_layer = match select_layer {
-151            -1 | -2 => select_layer,
-152            _ => bail!("Unsupported select layer: {}", select_layer),
-153        };
-154        let model = ClipVisionTransformer::new(vb, &config)?;
-155        Ok(Self {
-156            model,
-157            select_layer,
-158            select_feature_method: select_feature_method.to_string(),
-159            config,
-160        })
-161    }
-162
-163    pub fn forward(&self, x: &Tensor) -> Result<Tensor> {
-164        let result = self.model.output_hidden_states(x)?;
-165        let index = result.len() as isize + self.select_layer;
-166        let result = result[index as usize].clone();
-167        if self.select_feature_method == "cls_patch" {
-168            Ok(result)
-169        } else {
-170            result.i((.., 1..))
-171        }
-172    }
-173
-174    pub fn num_patches_per_side(&self) -> usize {
-175        self.config.image_size / self.config.patch_size
-176    }
-177}
-178
-179pub struct LLaVA {
-180    pub clip_vision_tower: ClipVisionTower,
-181    pub image_newline: Tensor,
-182    pub mm_projector: MMProjector,
-183    pub llama: Llama,
-184    config: LLaVAConfig,
-185    device: Device,
-186}
-187
-188impl LLaVA {
-189    pub fn load(
-190        vb: VarBuilder,
-191        config: &LLaVAConfig,
-192        clip_vision_config: Option<ClipVisionConfig>,
-193    ) -> Result<Self> {
-194        let device = vb.device().clone();
-195        let llama_config = config.to_llama_config();
-196        let mm_projector = MMProjector::load(&vb, config)?;
-197        let (clip_vision_tower, image_newline, llama) = if config.hf {
-198            (
-199                ClipVisionTower::new(
-200                    vb.pp("vision_tower.vision_model"),
-201                    config.mm_vision_select_layer,
-202                    &config.mm_vision_select_feature,
-203                    &clip_vision_config,
-204                )?,
-205                vb.get(&[config.hidden_size], "image_newline")?
-206                    .to_device(&device)?,
-207                Llama::load(vb.pp("language_model"), &llama_config)?,
-208            )
-209        } else {
-210            (
-211                ClipVisionTower::new(
-212                    vb.pp("model.vision_tower.vision_tower.vision_model"),
-213                    config.mm_vision_select_layer,
-214                    &config.mm_vision_select_feature,
-215                    &clip_vision_config,
-216                )?,
-217                vb.get(&[config.hidden_size], "model.image_newline")?
-218                    .to_device(&device)?,
-219                Llama::load(vb, &llama_config)?,
-220            )
-221        };
-222        Ok(Self {
-223            clip_vision_tower,
-224            image_newline,
-225            mm_projector,
-226            llama,
-227            config: (*config).clone(),
-228            device,
-229        })
-230    }
-231
-232    pub fn encode_images(&self, x: &Tensor) -> Result<Tensor> {
-233        let image_features = self.clip_vision_tower.forward(x)?;
-234        let image_features = self.mm_projector.forward(&image_features)?;
-235        Ok(image_features)
-236    }
-237    // currently only for single image, 4 dim tensor
-238    pub fn prepare_inputs_labels_for_multimodal(
-239        &self,
-240        input_ids: &Tensor,
-241        images: &[Tensor],
-242        image_sizes: &[(u32, u32)],
-243    ) -> Result<Tensor> {
-244        //TODO: process of multiple images/ new line
-245        // 576: 336(input size)/14(patch size)=24 24*24+1(class)=577 577-1=576
-246        let concat_images = Tensor::cat(images, 0)?;
-247        let image_features_together = self.encode_images(&concat_images)?;
-248        let split_sizes = images
-249            .iter()
-250            .map(|x| x.shape().dims()[0])
-251            .collect::<Vec<usize>>();
-252        // can be replaced by split
-253        let mut index_pos = 0;
-254        let mut image_features = Vec::new();
-255        for split_size in split_sizes.iter() {
-256            image_features.push(image_features_together.i(index_pos..index_pos + (*split_size))?);
-257            index_pos += *split_size;
-258        }
-259        let mm_patch_merge_type = &self.config.mm_patch_merge_type;
-260        let image_aspect_ratio = &self.config.image_aspect_ratio;
-261
-262        let image_features = if mm_patch_merge_type == "flat" {
-263            image_features
-264                .iter()
-265                .map(|x| x.flatten(0, 1))
-266                .collect::<Result<Vec<Tensor>>>()?
-267        } else if mm_patch_merge_type.starts_with("spatial") {
-268            let mut new_image_features = Vec::new();
-269            for (image_idx, image_feature) in image_features.iter().enumerate() {
-270                let new_image_feature = if image_feature.dims()[0] > 1 {
-271                    let base_image_feature = image_feature.get(0)?;
-272                    let patch_image_feature = image_feature.i(1..)?;
-273                    let height = self.clip_vision_tower.num_patches_per_side();
-274                    let width = height;
-275                    assert_eq!(height * width, base_image_feature.dims()[0]);
-276                    let image_size = image_sizes[image_idx];
-277                    let new_image_feature = if image_aspect_ratio == "anyres" {
-278                        let (num_patch_width, num_patch_height) = get_anyres_image_grid_shape(
-279                            image_size,
-280                            &self.config.image_grid_pinpoints,
-281                            self.clip_vision_tower.config.image_size as u32,
-282                        );
-283                        patch_image_feature.reshape((
-284                            num_patch_height as usize,
-285                            num_patch_width as usize,
-286                            height,
-287                            width,
-288                            (),
-289                        ))?
-290                    } else {
-291                        bail!("not implemented in original python LLaVA yet")
-292                    };
-293                    let new_image_feature = if mm_patch_merge_type.contains("unpad") {
-294                        let new_image_feature = new_image_feature
-295                            .permute((4, 0, 2, 1, 3))?
-296                            .flatten(1, 2)?
-297                            .flatten(2, 3)?;
-298                        let new_image_feature = unpad_image(&new_image_feature, &image_size)?;
-299                        let new_image_feature_dims = new_image_feature.dims();
-300                        let image_new_line = self
-301                            .image_newline
-302                            .reshape((self.config.hidden_size, 1, 1))?
-303                            .broadcast_as((
-304                                new_image_feature_dims[0],
-305                                new_image_feature_dims[1],
-306                                1,
-307                            ))?;
-308                        let new_image_feature =
-309                            Tensor::cat(&[new_image_feature, image_new_line], 2)?;
-310                        new_image_feature.flatten(1, 2)?.transpose(0, 1)?
-311                    } else {
-312                        new_image_feature.permute((0, 2, 1, 3, 4))?.flatten(0, 3)?
-313                    };
-314                    Tensor::cat(&[base_image_feature, new_image_feature], 0)?
-315                } else {
-316                    let new_image_feature = image_feature.get(0)?;
-317                    if mm_patch_merge_type.contains("unpad") {
-318                        Tensor::cat(
-319                            &[new_image_feature, self.image_newline.clone().unsqueeze(0)?],
-320                            0,
-321                        )?
-322                    } else {
-323                        new_image_feature
-324                    }
-325                };
-326                new_image_features.push(new_image_feature);
-327            }
-328            new_image_features
-329        } else {
-330            bail!("Unexpected mm_patch_merge_type: {mm_patch_merge_type}")
-331        };
-332        // can easily be replaced by nonzero if it is implemented in candle
-333        let input_ids_vec = input_ids.squeeze(0)?.to_vec1::<i64>()?;
-334        let mut image_indices = {
-335            let mut image_indices = vec![0_i64];
-336            image_indices.extend(
-337                input_ids_vec
-338                    .iter()
-339                    .enumerate()
-340                    .filter_map(|(i, x)| {
-341                        if *x == self.config.image_token_index as i64 {
-342                            Some(i as i64)
-343                        } else {
-344                            None
-345                        }
-346                    })
-347                    .collect::<Vec<i64>>(),
-348            );
-349            image_indices
-350        };
-351        if image_indices.len() == 1 {
-352            //no image, only [0],
-353            return self.llama.embed(input_ids);
-354        }
-355
-356        let input_ids_noim = input_ids_vec
-357            .iter()
-358            .filter_map(|x| {
-359                if *x != self.config.image_token_index as i64 {
-360                    Some(*x)
-361                } else {
-362                    None
-363                }
-364            })
-365            .collect::<Vec<i64>>();
-366        let input_ids_noim_len = input_ids_noim.len();
-367        image_indices.push((input_ids_noim_len) as i64);
-368        let input_ids_noim = Tensor::from_vec(input_ids_noim, input_ids_noim_len, &self.device)?;
-369        let cur_input_embeds = self.llama.embed(&input_ids_noim)?;
-370        // can be replace by split if it is implemented in candle
-371        let input_embed_no_ims = {
-372            let mut input_embeds = Vec::new();
-373            for i in 0..image_indices.len() - 1 {
-374                let start = (image_indices[i]) as usize;
-375                let end = image_indices[i + 1] as usize;
-376                input_embeds.push(cur_input_embeds.i((start..end, ..))?)
-377            }
-378            input_embeds
-379        };
-380
-381        let mut cur_new_input_embeds = Vec::new();
-382        for (i, image_feature) in image_features.iter().enumerate() {
-383            cur_new_input_embeds.push(input_embed_no_ims[i].clone());
-384            cur_new_input_embeds.push(image_feature.clone());
-385        }
-386        cur_new_input_embeds.push(input_embed_no_ims[image_features.len()].clone());
-387        let new_input_embeds = Tensor::cat(&cur_new_input_embeds, 0)?;
-388        //trancate
-389        let new_input_embeds =
-390            if let Some(tokenizer_model_max_length) = self.config.tokenizer_model_max_length {
-391                let (new_input_embeds_length, _) = new_input_embeds.shape().dims2()?;
-392                if new_input_embeds_length > tokenizer_model_max_length {
-393                    new_input_embeds.i((..tokenizer_model_max_length, ..))?
-394                } else {
-395                    new_input_embeds
-396                }
-397            } else {
-398                new_input_embeds
-399            };
-400        new_input_embeds.unsqueeze(0)
-401    }
-402
-403    pub fn forward(
-404        &self,
-405        input_embeds: &Tensor,
-406        position_id: usize,
-407        cache: &mut Cache,
-408    ) -> Result<Tensor> {
-409        self.llama
-410            .forward_input_embed(input_embeds, position_id, cache)
-411    }
-412}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/llava/utils.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/llava/utils.rs.html deleted file mode 100644 index 1487a5a..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/llava/utils.rs.html +++ /dev/null @@ -1,42 +0,0 @@ -utils.rs - source

candle_transformers/models/llava/
utils.rs

1pub fn get_anyres_image_grid_shape(
-2    image_size: (u32, u32),
-3    grid_pinpoints: &[(u32, u32)],
-4    patch_size: u32,
-5) -> (u32, u32) {
-6    let (width, height) = select_best_resolution(image_size, grid_pinpoints);
-7    (width / patch_size, height / patch_size)
-8}
-9
-10pub fn select_best_resolution(
-11    original_size: (u32, u32),
-12    possible_resolutions: &[(u32, u32)],
-13) -> (u32, u32) {
-14    let (original_width, original_height) = original_size;
-15    let mut best_fit = (0, 0);
-16    let original_width_f = original_width as f32;
-17    let original_height_f = original_height as f32;
-18    let mut max_effective_resolution = 0_u32;
-19    let mut min_wasted_resolution = u32::MAX;
-20    for (width, height) in possible_resolutions {
-21        let width_f = *width as f32;
-22        let height_f = *height as f32;
-23        let scale = (width_f / original_width_f).min(height_f / original_height_f);
-24        let (downscaled_width, downscaled_height) = (
-25            (original_width_f * scale) as u32,
-26            (original_height_f * scale) as u32,
-27        );
-28        let effective_resolution =
-29            std::cmp::min((*width) * (*height), downscaled_width * downscaled_height);
-30        let wasted_resolution = (*width) * (*height) - effective_resolution;
-31        if effective_resolution > max_effective_resolution
-32            || (effective_resolution == max_effective_resolution
-33                && wasted_resolution < min_wasted_resolution)
-34        {
-35            best_fit = (*width, *height);
-36            max_effective_resolution = effective_resolution;
-37            min_wasted_resolution = wasted_resolution;
-38        }
-39    }
-40    best_fit
-41}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mamba.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mamba.rs.html deleted file mode 100644 index 6a8b300..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mamba.rs.html +++ /dev/null @@ -1,222 +0,0 @@ -mamba.rs - source

candle_transformers/models/
mamba.rs

1//! Mamba inference implementation.
-2//!
-3//! See ["Mamba: Linear-Time Sequence Modeling with Selective State Spaces"](https://arxiv.org/abs/2312.00752)
-4//!
-5//! Based on reference implementation from the AlbertMamba project
-6//! A fast implementation of mamba for inference only.
-7//! Based on Laurent Mazare's rust implementation: [mamba.rs](https://github.com/LaurentMazare/mamba.rs)
-8use crate::models::with_tracing::{linear, linear_no_bias, Linear};
-9use candle::{DType, Device, IndexOp, Module, Result, Tensor, D};
-10use candle_nn::{RmsNorm, VarBuilder};
-11
-12const D_CONV: usize = 4;
-13const D_STATE: usize = 16;
-14
-15#[derive(Debug, Clone, serde::Deserialize)]
-16pub struct Config {
-17    pub d_model: usize,
-18    pub n_layer: usize,
-19    pub vocab_size: usize,
-20    pub pad_vocab_size_multiple: usize,
-21}
-22
-23impl Config {
-24    fn vocab_size(&self) -> usize {
-25        let pad = self.pad_vocab_size_multiple;
-26        self.vocab_size.div_ceil(pad) * pad
-27    }
-28
-29    fn dt_rank(&self) -> usize {
-30        (self.d_model + 15) / 16
-31    }
-32
-33    fn d_inner(&self) -> usize {
-34        self.d_model * 2
-35    }
-36}
-37
-38pub struct State {
-39    pub hs: Vec<Tensor>,
-40    pub prev_xs: Vec<[Tensor; D_CONV]>,
-41    pub pos: usize,
-42}
-43
-44impl State {
-45    pub fn new(batch_size: usize, cfg: &Config, dtype: DType, device: &Device) -> Result<Self> {
-46        let mut hs = Vec::with_capacity(cfg.n_layer);
-47        let mut prev_xs = Vec::with_capacity(cfg.n_layer);
-48        for _i in 0..cfg.n_layer {
-49            let h = Tensor::zeros((batch_size, cfg.d_inner(), D_STATE), dtype, device)?;
-50            let x = Tensor::zeros((batch_size, cfg.d_inner()), dtype, device)?;
-51            hs.push(h);
-52            prev_xs.push([x.clone(), x.clone(), x.clone(), x.clone()]);
-53        }
-54        Ok(Self {
-55            hs,
-56            prev_xs,
-57            pos: 0,
-58        })
-59    }
-60}
-61
-62#[derive(Clone, Debug)]
-63pub struct MambaBlock {
-64    in_proj: Linear,
-65    conv1d_bias: Tensor,
-66    conv1d_weights: [Tensor; D_CONV],
-67    x_proj: Linear,
-68    dt_proj: Linear,
-69    a_log: Tensor,
-70    d: Tensor,
-71    out_proj: Linear,
-72    dt_rank: usize,
-73    layer_index: usize,
-74    d_inner: usize,
-75}
-76
-77impl MambaBlock {
-78    pub fn new(layer_index: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-79        let d_inner = cfg.d_inner();
-80        let dt_rank = cfg.dt_rank();
-81        let in_proj = linear_no_bias(cfg.d_model, d_inner * 2, vb.pp("in_proj"))?;
-82        let x_proj = linear_no_bias(d_inner, dt_rank + D_STATE * 2, vb.pp("x_proj"))?;
-83        let dt_proj = linear(dt_rank, d_inner, vb.pp("dt_proj"))?;
-84        let a_log = vb.get((d_inner, D_STATE), "A_log")?;
-85        let d = vb.get(d_inner, "D")?;
-86        let out_proj = linear_no_bias(d_inner, cfg.d_model, vb.pp("out_proj"))?;
-87        let conv1d_bias = vb.get(d_inner, "conv1d.bias")?;
-88        let conv1d_weight = vb.get((d_inner, 1, D_CONV), "conv1d.weight")?;
-89        let conv1d_weights = [
-90            conv1d_weight.i((.., 0, 0))?,
-91            conv1d_weight.i((.., 0, 1))?,
-92            conv1d_weight.i((.., 0, 2))?,
-93            conv1d_weight.i((.., 0, 3))?,
-94        ];
-95        Ok(Self {
-96            in_proj,
-97            conv1d_bias,
-98            conv1d_weights,
-99            x_proj,
-100            dt_proj,
-101            a_log,
-102            d,
-103            out_proj,
-104            dt_rank,
-105            layer_index,
-106            d_inner,
-107        })
-108    }
-109
-110    pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-111        let (b_sz, _dim) = xs.dims2()?;
-112        let li = self.layer_index;
-113        let mut xs = xs.apply(&self.in_proj)?.chunk(2, D::Minus1)?;
-114        let proj_for_silu = xs.remove(1);
-115        state.prev_xs[li][state.pos % D_CONV] = xs.remove(0);
-116        let mut proj_for_conv = self.conv1d_bias.broadcast_as((b_sz, self.d_inner))?;
-117        for d_c in 0..D_CONV {
-118            proj_for_conv = (proj_for_conv
-119                + self.conv1d_weights[d_c]
-120                    .broadcast_mul(&state.prev_xs[li][(d_c + 1 + state.pos) % D_CONV])?)?;
-121        }
-122        let proj_for_conv = candle_nn::ops::silu(&proj_for_conv)?;
-123        // SSM + Selection, we're doing inference here so only need the last step of
-124        // the sequence.
-125        // Algorithm 3.2 on page 6, https://arxiv.org/pdf/2312.00752.pdf
-126
-127        let x_proj = self.x_proj.forward(&proj_for_conv)?;
-128        let delta = x_proj.narrow(D::Minus1, 0, self.dt_rank)?.contiguous()?;
-129        let b = x_proj.narrow(D::Minus1, self.dt_rank, D_STATE)?;
-130        let c = x_proj.narrow(D::Minus1, self.dt_rank + D_STATE, D_STATE)?;
-131
-132        let delta = delta.apply(&self.dt_proj)?;
-133        // softplus
-134        let delta = (delta.exp()? + 1.)?.log()?;
-135        let a = self.a_log.to_dtype(delta.dtype())?.exp()?.neg()?;
-136        let d = self.d.to_dtype(delta.dtype())?;
-137
-138        // Selective scan part
-139        // Eqn (2a), page 3, h_t = Ab h_{t-1} + Bb x_t
-140        let delta = delta
-141            .unsqueeze(D::Minus1)?
-142            .broadcast_as((b_sz, self.d_inner, D_STATE))?;
-143        let a = a.broadcast_as((b_sz, self.d_inner, D_STATE))?;
-144        let b = b.broadcast_as((b_sz, self.d_inner, D_STATE))?;
-145        let proj_for_conv_b =
-146            proj_for_conv
-147                .unsqueeze(D::Minus1)?
-148                .broadcast_as((b_sz, self.d_inner, D_STATE))?;
-149        state.hs[li] = ((&state.hs[li] * (&delta * &a)?.exp()?)? + &delta * &b * &proj_for_conv_b)?;
-150        let ss = (state.hs[li]
-151            .matmul(&c.unsqueeze(D::Minus1)?)?
-152            .squeeze(D::Minus1)?
-153            + proj_for_conv.broadcast_mul(&d)?)?;
-154
-155        let ys = (ss * candle_nn::ops::silu(&proj_for_silu))?;
-156        ys.apply(&self.out_proj)
-157    }
-158}
-159
-160#[derive(Clone, Debug)]
-161pub struct ResidualBlock {
-162    mixer: MambaBlock,
-163    norm: RmsNorm,
-164}
-165
-166impl ResidualBlock {
-167    pub fn new(layer_index: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-168        let norm = candle_nn::rms_norm(cfg.d_model, 1e-5, vb.pp("norm"))?;
-169        let mixer = MambaBlock::new(layer_index, cfg, vb.pp("mixer"))?;
-170        Ok(Self { mixer, norm })
-171    }
-172
-173    fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-174        self.mixer.forward(&xs.apply(&self.norm)?, state)? + xs
-175    }
-176}
-177
-178// https://github.com/johnma2006/mamba-minimal/blob/61f01953ca153f8c4a850d7111beecbf4be9cee1/model.py#L56
-179#[derive(Clone, Debug)]
-180pub struct Model {
-181    embedding: candle_nn::Embedding,
-182    layers: Vec<ResidualBlock>,
-183    norm_f: RmsNorm,
-184    lm_head: Linear,
-185    dtype: DType,
-186}
-187
-188impl Model {
-189    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-190        let embedding = candle_nn::embedding(cfg.vocab_size(), cfg.d_model, vb.pp("embedding"))?;
-191        let mut layers = Vec::with_capacity(cfg.n_layer);
-192        let vb_l = vb.pp("layers");
-193        for layer_idx in 0..cfg.n_layer {
-194            let layer = ResidualBlock::new(layer_idx, cfg, vb_l.pp(layer_idx))?;
-195            layers.push(layer)
-196        }
-197        let norm_f = candle_nn::rms_norm(cfg.d_model, 1e-5, vb.pp("norm_f"))?;
-198        let lm_head = Linear::from_weights(embedding.embeddings().clone(), None);
-199        Ok(Self {
-200            embedding,
-201            layers,
-202            norm_f,
-203            lm_head,
-204            dtype: vb.dtype(),
-205        })
-206    }
-207
-208    pub fn forward(&self, input_ids: &Tensor, state: &mut State) -> Result<Tensor> {
-209        let _b_size = input_ids.dims1()?;
-210        let mut xs = self.embedding.forward(input_ids)?;
-211        for layer in self.layers.iter() {
-212            xs = layer.forward(&xs, state)?
-213        }
-214        state.pos += 1;
-215        xs.apply(&self.norm_f)?.apply(&self.lm_head)
-216    }
-217
-218    pub fn dtype(&self) -> DType {
-219        self.dtype
-220    }
-221}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/marian.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/marian.rs.html deleted file mode 100644 index 42428e7..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/marian.rs.html +++ /dev/null @@ -1,527 +0,0 @@ -marian.rs - source

candle_transformers/models/
marian.rs

1//! Marian Neural Machine Translation
-2//!
-3//! See "Marian: Fast Neural Machine Translation in C++" Junczys-Dowmunt et al. 2018
-4//! - [ACL Anthology](https://aclanthology.org/P18-4020/)
-5//! - [Github](https://github.com/marian-nmt/marian)
-6//!
-7use super::with_tracing::{linear, Embedding, Linear};
-8use candle::{Result, Tensor};
-9use candle_nn::{layer_norm, LayerNorm, VarBuilder};
-10
-11#[derive(Debug, Clone, serde::Deserialize)]
-12pub struct Config {
-13    pub vocab_size: usize,
-14    pub decoder_vocab_size: Option<usize>,
-15    pub max_position_embeddings: usize,
-16    pub encoder_layers: usize,
-17    pub encoder_ffn_dim: usize,
-18    pub encoder_attention_heads: usize,
-19    pub decoder_layers: usize,
-20    pub decoder_ffn_dim: usize,
-21    pub decoder_attention_heads: usize,
-22    pub use_cache: bool,
-23    pub is_encoder_decoder: bool,
-24    pub activation_function: candle_nn::Activation,
-25    pub d_model: usize,
-26    pub decoder_start_token_id: u32,
-27    pub scale_embedding: bool,
-28    pub pad_token_id: u32,
-29    pub eos_token_id: u32,
-30    pub forced_eos_token_id: u32,
-31    pub share_encoder_decoder_embeddings: bool,
-32}
-33
-34impl Config {
-35    // https://huggingface.co/Helsinki-NLP/opus-mt-tc-big-fr-en/blob/main/config.json
-36    pub fn opus_mt_tc_big_fr_en() -> Self {
-37        Self {
-38            activation_function: candle_nn::Activation::Relu,
-39            d_model: 1024,
-40            decoder_attention_heads: 16,
-41            decoder_ffn_dim: 4096,
-42            decoder_layers: 6,
-43            decoder_start_token_id: 53016,
-44            decoder_vocab_size: Some(53017),
-45            encoder_attention_heads: 16,
-46            encoder_ffn_dim: 4096,
-47            encoder_layers: 6,
-48            eos_token_id: 43311,
-49            forced_eos_token_id: 43311,
-50            is_encoder_decoder: true,
-51            max_position_embeddings: 1024,
-52            pad_token_id: 53016,
-53            scale_embedding: true,
-54            share_encoder_decoder_embeddings: true,
-55            use_cache: true,
-56            vocab_size: 53017,
-57        }
-58    }
-59
-60    // https://huggingface.co/Helsinki-NLP/opus-mt-fr-en/blob/main/config.json
-61    pub fn opus_mt_fr_en() -> Self {
-62        Self {
-63            activation_function: candle_nn::Activation::Swish,
-64            d_model: 512,
-65            decoder_attention_heads: 8,
-66            decoder_ffn_dim: 2048,
-67            decoder_layers: 6,
-68            decoder_start_token_id: 59513,
-69            decoder_vocab_size: Some(59514),
-70            encoder_attention_heads: 8,
-71            encoder_ffn_dim: 2048,
-72            encoder_layers: 6,
-73            eos_token_id: 0,
-74            forced_eos_token_id: 0,
-75            is_encoder_decoder: true,
-76            max_position_embeddings: 512,
-77            pad_token_id: 59513,
-78            scale_embedding: true,
-79            share_encoder_decoder_embeddings: true,
-80            use_cache: true,
-81            vocab_size: 59514,
-82        }
-83    }
-84}
-85
-86#[derive(Debug, Clone)]
-87struct SinusoidalPositionalEmbedding {
-88    emb: Embedding,
-89}
-90
-91impl SinusoidalPositionalEmbedding {
-92    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-93        let dev = vb.device();
-94        let dtype = vb.dtype();
-95        let num_positions = cfg.max_position_embeddings;
-96        let dim = cfg.d_model;
-97        let inv_freq: Vec<_> = (0..dim)
-98            .step_by(2)
-99            .map(|i| 1f32 / 10000f32.powf(i as f32 / dim as f32))
-100            .collect();
-101        let inv_freq_len = inv_freq.len();
-102        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-103        let t = Tensor::arange(0u32, num_positions as u32, dev)?
-104            .to_dtype(dtype)?
-105            .reshape((num_positions, 1))?;
-106        let freqs = t.matmul(&inv_freq)?;
-107        let sin = freqs.sin()?;
-108        let cos = freqs.cos()?;
-109        let weights = Tensor::cat(&[&sin, &cos], 1)?.contiguous()?;
-110        let emb = Embedding::from_weights(weights)?;
-111        Ok(Self { emb })
-112    }
-113
-114    fn forward(&self, input_ids: &Tensor, past_kv_len: usize) -> Result<Tensor> {
-115        let seq_len = input_ids.dim(1)?;
-116        Tensor::arange(
-117            past_kv_len as u32,
-118            (past_kv_len + seq_len) as u32,
-119            input_ids.device(),
-120        )?
-121        .apply(&self.emb)
-122    }
-123}
-124
-125#[derive(Debug, Clone)]
-126struct Attention {
-127    q_proj: Linear,
-128    k_proj: Linear,
-129    v_proj: Linear,
-130    out_proj: Linear,
-131    scaling: f64,
-132    num_heads: usize,
-133    head_dim: usize,
-134    kv_cache: Option<(Tensor, Tensor)>,
-135    is_decoder: bool,
-136}
-137
-138impl Attention {
-139    fn new(cfg: &Config, is_decoder: bool, vb: VarBuilder) -> Result<Self> {
-140        let num_heads = if is_decoder {
-141            cfg.decoder_attention_heads
-142        } else {
-143            cfg.encoder_attention_heads
-144        };
-145        let embed_dim = cfg.d_model;
-146        let head_dim = embed_dim / num_heads;
-147        let scaling = (head_dim as f64).powf(-0.5);
-148        let q_proj = linear(embed_dim, embed_dim, vb.pp("q_proj"))?;
-149        let k_proj = linear(embed_dim, embed_dim, vb.pp("k_proj"))?;
-150        let v_proj = linear(embed_dim, embed_dim, vb.pp("v_proj"))?;
-151        let out_proj = linear(embed_dim, embed_dim, vb.pp("out_proj"))?;
-152        Ok(Self {
-153            q_proj,
-154            k_proj,
-155            v_proj,
-156            out_proj,
-157            scaling,
-158            num_heads,
-159            head_dim,
-160            kv_cache: None,
-161            is_decoder,
-162        })
-163    }
-164
-165    fn _shape(&self, tensor: &Tensor, bsz: usize) -> Result<Tensor> {
-166        tensor
-167            .reshape((bsz, (), self.num_heads, self.head_dim))?
-168            .transpose(1, 2)?
-169            .contiguous()
-170    }
-171
-172    fn forward(
-173        &mut self,
-174        xs: &Tensor,
-175        kv_states: Option<&Tensor>,
-176        attn_mask: Option<&Tensor>,
-177    ) -> Result<Tensor> {
-178        let (b_sz, tgt_len, _) = xs.dims3()?;
-179        let query_states = (xs.apply(&self.q_proj)? * self.scaling)?;
-180        let (key_states, value_states) = match kv_states {
-181            None => {
-182                let key_states = self._shape(&xs.apply(&self.k_proj)?, b_sz)?;
-183                let value_states = self._shape(&xs.apply(&self.v_proj)?, b_sz)?;
-184                if self.is_decoder {
-185                    let kv_states = match &self.kv_cache {
-186                        None => (key_states, value_states),
-187                        Some((p_key_states, p_value_states)) => {
-188                            let key_states = Tensor::cat(&[p_key_states, &key_states], 2)?;
-189                            let value_states = Tensor::cat(&[p_value_states, &value_states], 2)?;
-190                            (key_states, value_states)
-191                        }
-192                    };
-193                    self.kv_cache = Some(kv_states.clone());
-194                    kv_states
-195                } else {
-196                    (key_states, value_states)
-197                }
-198            }
-199            Some(kv_states) => {
-200                let key_states = self._shape(&kv_states.apply(&self.k_proj)?, b_sz)?;
-201                let value_states = self._shape(&kv_states.apply(&self.v_proj)?, b_sz)?;
-202                (key_states, value_states)
-203            }
-204        };
-205        let proj_shape = (b_sz * self.num_heads, (), self.head_dim);
-206        let query_states = self._shape(&query_states, b_sz)?.reshape(proj_shape)?;
-207        let key_states = key_states.reshape(proj_shape)?;
-208        let value_states = value_states.reshape(proj_shape)?;
-209        let attn_weights = query_states.matmul(&key_states.transpose(1, 2)?)?;
-210        let attn_weights = match attn_mask {
-211            None => attn_weights,
-212            Some(attn_mask) => attn_weights.broadcast_add(attn_mask)?,
-213        };
-214        let attn_probs = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-215        let attn_output = attn_probs.matmul(&value_states)?;
-216        attn_output
-217            .reshape((b_sz, self.num_heads, tgt_len, self.head_dim))?
-218            .transpose(1, 2)?
-219            .reshape((b_sz, tgt_len, self.head_dim * self.num_heads))?
-220            .apply(&self.out_proj)
-221    }
-222
-223    fn reset_kv_cache(&mut self) {
-224        self.kv_cache = None
-225    }
-226}
-227
-228#[derive(Debug, Clone)]
-229struct EncoderLayer {
-230    self_attn: Attention,
-231    self_attn_layer_norm: LayerNorm,
-232    activation_fn: candle_nn::Activation,
-233    fc1: Linear,
-234    fc2: Linear,
-235    final_layer_norm: LayerNorm,
-236}
-237
-238impl EncoderLayer {
-239    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-240        let self_attn = Attention::new(cfg, true, vb.pp("self_attn"))?;
-241        let self_attn_layer_norm = layer_norm(cfg.d_model, 1e-5, vb.pp("self_attn_layer_norm"))?;
-242        let fc1 = linear(cfg.d_model, cfg.encoder_ffn_dim, vb.pp("fc1"))?;
-243        let fc2 = linear(cfg.encoder_ffn_dim, cfg.d_model, vb.pp("fc2"))?;
-244        let final_layer_norm = layer_norm(cfg.d_model, 1e-5, vb.pp("final_layer_norm"))?;
-245        Ok(Self {
-246            self_attn,
-247            self_attn_layer_norm,
-248            activation_fn: cfg.activation_function,
-249            fc1,
-250            fc2,
-251            final_layer_norm,
-252        })
-253    }
-254
-255    fn forward(&mut self, xs: &Tensor) -> Result<Tensor> {
-256        let residual = xs;
-257        let xs = (self.self_attn.forward(xs, None, None)? + residual)?
-258            .apply(&self.self_attn_layer_norm)?;
-259        let residual = &xs;
-260        let xs = xs
-261            .apply(&self.fc1)?
-262            .apply(&self.activation_fn)?
-263            .apply(&self.fc2)?;
-264        (xs + residual)?.apply(&self.final_layer_norm)
-265    }
-266
-267    fn reset_kv_cache(&mut self) {
-268        self.self_attn.reset_kv_cache()
-269    }
-270}
-271
-272#[derive(Debug, Clone)]
-273struct DecoderLayer {
-274    self_attn: Attention,
-275    self_attn_layer_norm: LayerNorm,
-276    activation_fn: candle_nn::Activation,
-277    encoder_attn: Attention,
-278    encoder_attn_layer_norm: LayerNorm,
-279    fc1: Linear,
-280    fc2: Linear,
-281    final_layer_norm: LayerNorm,
-282}
-283
-284impl DecoderLayer {
-285    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-286        let self_attn = Attention::new(cfg, true, vb.pp("self_attn"))?;
-287        let self_attn_layer_norm = layer_norm(cfg.d_model, 1e-5, vb.pp("self_attn_layer_norm"))?;
-288        let encoder_attn = Attention::new(cfg, true, vb.pp("encoder_attn"))?;
-289        let encoder_attn_layer_norm =
-290            layer_norm(cfg.d_model, 1e-5, vb.pp("encoder_attn_layer_norm"))?;
-291        let fc1 = linear(cfg.d_model, cfg.decoder_ffn_dim, vb.pp("fc1"))?;
-292        let fc2 = linear(cfg.decoder_ffn_dim, cfg.d_model, vb.pp("fc2"))?;
-293        let final_layer_norm = layer_norm(cfg.d_model, 1e-5, vb.pp("final_layer_norm"))?;
-294        Ok(Self {
-295            self_attn,
-296            self_attn_layer_norm,
-297            activation_fn: cfg.activation_function,
-298            encoder_attn,
-299            encoder_attn_layer_norm,
-300            fc1,
-301            fc2,
-302            final_layer_norm,
-303        })
-304    }
-305
-306    fn forward(
-307        &mut self,
-308        xs: &Tensor,
-309        encoder_xs: Option<&Tensor>,
-310        attn_mask: &Tensor,
-311    ) -> Result<Tensor> {
-312        let residual = xs;
-313        let xs = (self.self_attn.forward(xs, None, Some(attn_mask))? + residual)?
-314            .apply(&self.self_attn_layer_norm)?;
-315        let xs = match encoder_xs {
-316            None => xs,
-317            Some(encoder_xs) => {
-318                let residual = &xs;
-319                let xs = self.encoder_attn.forward(&xs, Some(encoder_xs), None)?;
-320                (residual + xs)?.apply(&self.encoder_attn_layer_norm)?
-321            }
-322        };
-323        let residual = &xs;
-324        let xs = xs
-325            .apply(&self.fc1)?
-326            .apply(&self.activation_fn)?
-327            .apply(&self.fc2)?;
-328        let xs = (xs + residual)?.apply(&self.final_layer_norm)?;
-329        Ok(xs)
-330    }
-331
-332    fn reset_kv_cache(&mut self) {
-333        self.self_attn.reset_kv_cache();
-334        self.encoder_attn.reset_kv_cache()
-335    }
-336}
-337
-338#[derive(Debug, Clone)]
-339pub struct Encoder {
-340    embed_tokens: Embedding,
-341    embed_positions: SinusoidalPositionalEmbedding,
-342    layers: Vec<EncoderLayer>,
-343    embed_scale: Option<f64>,
-344}
-345
-346impl Encoder {
-347    fn new(cfg: &Config, embed_tokens: &Embedding, vb: VarBuilder) -> Result<Self> {
-348        let embed_positions = SinusoidalPositionalEmbedding::new(cfg, vb.pp("embed_positions"))?;
-349        let mut layers = Vec::with_capacity(cfg.encoder_layers);
-350        let vb_l = vb.pp("layers");
-351        for idx in 0..cfg.encoder_layers {
-352            let layer = EncoderLayer::new(cfg, vb_l.pp(idx))?;
-353            layers.push(layer)
-354        }
-355        let embed_scale = if cfg.scale_embedding {
-356            Some((cfg.d_model as f64).sqrt())
-357        } else {
-358            None
-359        };
-360        Ok(Self {
-361            embed_tokens: embed_tokens.clone(),
-362            embed_positions,
-363            layers,
-364            embed_scale,
-365        })
-366    }
-367
-368    pub fn forward(&mut self, xs: &Tensor, past_kv_len: usize) -> Result<Tensor> {
-369        let xs = xs.apply(&self.embed_tokens)?;
-370        let xs = match self.embed_scale {
-371            None => xs,
-372            Some(scale) => (xs * scale)?,
-373        };
-374        let embed_pos = self
-375            .embed_positions
-376            .forward(&xs, past_kv_len)?
-377            .unsqueeze(0)?;
-378        let mut xs = xs.broadcast_add(&embed_pos)?;
-379        for layer in self.layers.iter_mut() {
-380            xs = layer.forward(&xs)?
-381        }
-382        Ok(xs)
-383    }
-384
-385    pub fn reset_kv_cache(&mut self) {
-386        for layer in self.layers.iter_mut() {
-387            layer.reset_kv_cache()
-388        }
-389    }
-390}
-391
-392#[derive(Debug, Clone)]
-393pub struct Decoder {
-394    embed_tokens: Embedding,
-395    embed_positions: SinusoidalPositionalEmbedding,
-396    layers: Vec<DecoderLayer>,
-397    embed_scale: Option<f64>,
-398}
-399
-400impl Decoder {
-401    fn new(cfg: &Config, embed_tokens: &Embedding, vb: VarBuilder) -> Result<Self> {
-402        let embed_positions = SinusoidalPositionalEmbedding::new(cfg, vb.pp("embed_positions"))?;
-403        let mut layers = Vec::with_capacity(cfg.decoder_layers);
-404        let vb_l = vb.pp("layers");
-405        for idx in 0..cfg.decoder_layers {
-406            let layer = DecoderLayer::new(cfg, vb_l.pp(idx))?;
-407            layers.push(layer)
-408        }
-409        let embed_scale = if cfg.scale_embedding {
-410            Some((cfg.d_model as f64).sqrt())
-411        } else {
-412            None
-413        };
-414        Ok(Self {
-415            embed_tokens: embed_tokens.clone(),
-416            embed_positions,
-417            layers,
-418            embed_scale,
-419        })
-420    }
-421
-422    pub fn forward(
-423        &mut self,
-424        xs: &Tensor,
-425        encoder_xs: Option<&Tensor>,
-426        past_kv_len: usize,
-427        attn_mask: &Tensor,
-428    ) -> Result<Tensor> {
-429        let xs = xs.apply(&self.embed_tokens)?;
-430        let xs = match self.embed_scale {
-431            None => xs,
-432            Some(scale) => (xs * scale)?,
-433        };
-434        let embed_pos = self
-435            .embed_positions
-436            .forward(&xs, past_kv_len)?
-437            .unsqueeze(0)?;
-438        let mut xs = xs.broadcast_add(&embed_pos)?;
-439        for layer in self.layers.iter_mut() {
-440            xs = layer.forward(&xs, encoder_xs, attn_mask)?;
-441        }
-442        Ok(xs)
-443    }
-444
-445    pub fn reset_kv_cache(&mut self) {
-446        for layer in self.layers.iter_mut() {
-447            layer.reset_kv_cache()
-448        }
-449    }
-450}
-451
-452#[derive(Debug, Clone)]
-453struct Model {
-454    shared: Embedding,
-455    encoder: Encoder,
-456    decoder: Decoder,
-457}
-458
-459impl Model {
-460    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-461        let shared = Embedding::new(cfg.vocab_size, cfg.d_model, vb.pp("shared"))?;
-462        let encoder = Encoder::new(cfg, &shared, vb.pp("encoder"))?;
-463        let decoder = Decoder::new(cfg, &shared, vb.pp("decoder"))?;
-464        Ok(Self {
-465            shared,
-466            encoder,
-467            decoder,
-468        })
-469    }
-470
-471    fn reset_kv_cache(&mut self) {
-472        self.encoder.reset_kv_cache();
-473        self.decoder.reset_kv_cache();
-474    }
-475}
-476
-477#[derive(Debug, Clone)]
-478pub struct MTModel {
-479    model: Model,
-480    lm_head: Linear,
-481    final_logits_bias: Tensor,
-482}
-483
-484impl MTModel {
-485    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-486        let target_vocab_size = cfg.decoder_vocab_size.unwrap_or(cfg.vocab_size);
-487        let final_logits_bias = vb.get((1, target_vocab_size), "final_logits_bias")?;
-488        let model = Model::new(cfg, vb.pp("model"))?;
-489        let lm_head = Linear::from_weights(model.shared.embeddings().clone(), None);
-490        Ok(Self {
-491            model,
-492            lm_head,
-493            final_logits_bias,
-494        })
-495    }
-496
-497    pub fn encoder(&mut self) -> &mut Encoder {
-498        &mut self.model.encoder
-499    }
-500
-501    pub fn decoder(&mut self) -> &mut Decoder {
-502        &mut self.model.decoder
-503    }
-504
-505    pub fn decode(
-506        &mut self,
-507        xs: &Tensor,
-508        encoder_xs: &Tensor,
-509        past_kv_len: usize,
-510    ) -> Result<Tensor> {
-511        let seq_len = xs.dim(1)?;
-512        let mask: Vec<_> = (0..seq_len)
-513            .flat_map(|i| (0..seq_len).map(move |j| if j > i { f32::NEG_INFINITY } else { 0f32 }))
-514            .collect();
-515        let mask = Tensor::from_vec(mask, (seq_len, seq_len), xs.device())?;
-516        self.model
-517            .decoder
-518            .forward(xs, Some(encoder_xs), past_kv_len, &mask)?
-519            .apply(&self.lm_head)?
-520            .broadcast_add(&self.final_logits_bias)
-521    }
-522
-523    pub fn reset_kv_cache(&mut self) {
-524        self.model.reset_kv_cache();
-525    }
-526}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/metavoice.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/metavoice.rs.html deleted file mode 100644 index cb9e0d9..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/metavoice.rs.html +++ /dev/null @@ -1,1033 +0,0 @@ -metavoice.rs - source

candle_transformers/models/
metavoice.rs

1//! MetaVoice Studio ML Models
-2//!
-3//! See MetaVoice's TTS and voice cloning models:
-4//! - [Github](https://github.com/metavoiceio/metavoice-src)
-5//! - [Website](https://studio.metavoice.ai/)
-6
-7use candle::{DType, Device, Error as E, IndexOp, Module, Result, Tensor, D};
-8use candle_nn::{embedding, linear_b, rms_norm, Embedding, Linear, RmsNorm, VarBuilder};
-9
-10// Equivalent to torch.repeat_interleave
-11pub(crate) fn repeat_interleave(img: &Tensor, repeats: usize, dim: usize) -> Result<Tensor> {
-12    let img = img.unsqueeze(dim + 1)?;
-13    let mut dims = img.dims().to_vec();
-14    dims[dim + 1] = repeats;
-15    img.broadcast_as(dims)?.flatten(dim, dim + 1)
-16}
-17pub mod speaker_encoder {
-18    use super::*;
-19
-20    #[derive(Debug, Clone, serde::Deserialize)]
-21    pub struct Config {
-22        pub sampling_rate: usize,
-23        pub partial_n_frames: usize,
-24        pub model_hidden_size: usize,
-25        pub model_embedding_size: usize,
-26        pub model_num_layers: usize,
-27        pub mel_window_length: usize,
-28        pub mel_window_step: usize,
-29        pub mel_n_channels: usize,
-30    }
-31
-32    impl Config {
-33        pub fn cfg() -> Self {
-34            Self {
-35                sampling_rate: 16_000,
-36                partial_n_frames: 160,
-37                model_hidden_size: 256,
-38                model_embedding_size: 256,
-39                model_num_layers: 3,
-40                mel_window_length: 25,
-41                mel_window_step: 10,
-42                mel_n_channels: 40,
-43            }
-44        }
-45    }
-46
-47    pub struct Model {
-48        lstms: Vec<candle_nn::LSTM>,
-49        linear: Linear,
-50        cfg: Config,
-51    }
-52
-53    type Slice = (usize, usize);
-54
-55    impl Model {
-56        pub fn new(cfg: Config, vb: VarBuilder) -> Result<Self> {
-57            let mut lstms = Vec::with_capacity(cfg.model_num_layers);
-58            let vb_l = vb.pp("lstm");
-59            for layer_idx in 0..cfg.model_num_layers {
-60                let c = candle_nn::LSTMConfig {
-61                    layer_idx,
-62                    ..Default::default()
-63                };
-64                let lstm = candle_nn::lstm(
-65                    cfg.mel_n_channels,
-66                    cfg.model_hidden_size,
-67                    c,
-68                    vb_l.pp(layer_idx),
-69                )?;
-70                lstms.push(lstm)
-71            }
-72            let linear = linear_b(
-73                cfg.model_hidden_size,
-74                cfg.model_embedding_size,
-75                true,
-76                vb.pp("linear"),
-77            )?;
-78            Ok(Self { lstms, linear, cfg })
-79        }
-80
-81        fn compute_partial_slices(
-82            &self,
-83            n_samples: usize,
-84            rate: f64,
-85            min_coverage: f64,
-86        ) -> (Vec<Slice>, Vec<Slice>) {
-87            let c = &self.cfg;
-88            // Compute how many frames separate two partial utterances
-89            let samples_per_frame = c.sampling_rate * c.mel_window_step / 1000;
-90            let n_frames = n_samples / samples_per_frame + 1;
-91            let frame_step =
-92                (c.sampling_rate as f64 / rate / samples_per_frame as f64).round() as usize;
-93            let steps = (n_frames + frame_step).saturating_sub(c.partial_n_frames) + 1;
-94            // Compute the slices.
-95            let mut wav_slices = vec![];
-96            let mut mel_slices = vec![];
-97            for i in (0..steps).step_by(frame_step) {
-98                let mel_range = (i, i + c.partial_n_frames);
-99                let wav_range = (
-100                    i * samples_per_frame,
-101                    (i + c.partial_n_frames) * samples_per_frame,
-102                );
-103                mel_slices.push(mel_range);
-104                wav_slices.push(wav_range);
-105            }
-106            // Evaluate whether extra padding is warranted or not.
-107            let last_wav_range = match wav_slices.last() {
-108                None => return (wav_slices, mel_slices),
-109                Some(l) => *l,
-110            };
-111            let coverage = (n_samples - last_wav_range.0) as f64
-112                / (last_wav_range.1 - last_wav_range.0) as f64;
-113            if coverage > min_coverage && mel_slices.len() > 1 {
-114                mel_slices.pop();
-115                wav_slices.pop();
-116            }
-117            (wav_slices, mel_slices)
-118        }
-119
-120        pub fn embed_utterance(
-121            &self,
-122            wav: &[f32],
-123            mel_filters: &[f32],
-124            rate: f64,
-125            min_c: f64,
-126            device: &Device,
-127        ) -> Result<Tensor> {
-128            let (wav_slices, mel_slices) = self.compute_partial_slices(wav.len(), rate, min_c);
-129            let max_wave_length = match wav_slices.last() {
-130                Some(v) => v.1,
-131                None => candle::bail!("empty wav slices"),
-132            };
-133            let wav = if max_wave_length > wav.len() {
-134                let mut wav = wav.to_vec();
-135                wav.resize(max_wave_length - wav.len(), 0.0);
-136                std::borrow::Cow::Owned(wav)
-137            } else {
-138                std::borrow::Cow::Borrowed(wav)
-139            };
-140            let mel = crate::models::whisper::audio::log_mel_spectrogram_(
-141                wav.as_ref(),
-142                mel_filters,
-143                /* fft_size */ self.cfg.mel_window_length,
-144                /* fft_step */ self.cfg.mel_window_step,
-145                self.cfg.mel_n_channels,
-146                false,
-147            );
-148            let mels = mel_slices
-149                .iter()
-150                .flat_map(|s| [mel[s.0], mel[s.1]])
-151                .collect::<Vec<_>>();
-152            let mels = Tensor::from_vec(mels, (mel_slices.len(), 2), device)?;
-153            let partial_embeds = self.forward(&mels)?;
-154            let raw_embed = partial_embeds.mean(0)?;
-155            let norm = raw_embed.sqr()?.sum_all()?.sqrt()?;
-156            raw_embed.broadcast_div(&norm)
-157        }
-158    }
-159
-160    impl Module for Model {
-161        fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-162            use candle_nn::RNN;
-163
-164            // This is different from the Python transformers version as candle LSTM is batch first.
-165            let xs = xs.t()?;
-166            let mut xs = xs.clone();
-167            for layer in self.lstms.iter() {
-168                let states = layer.seq(&xs)?;
-169                xs = layer.states_to_tensor(&states)?;
-170            }
-171            let xs = xs.t()?;
-172            let embeds_raw = xs.apply(&self.linear)?.relu()?;
-173            let norm = embeds_raw.sqr()?.sum_keepdim(1)?.sqrt()?;
-174            embeds_raw.broadcast_div(&norm)
-175        }
-176    }
-177}
-178
-179type Rank = u32;
-180
-181pub mod tokenizers {
-182    use super::*;
-183    use std::collections::HashMap;
-184
-185    pub struct BPE {
-186        pub re: fancy_regex::Regex,
-187        pub end_of_text: usize,
-188        pub offset: usize,
-189        pub ranks: HashMap<Vec<u8>, Rank>,
-190        span: tracing::Span,
-191    }
-192
-193    impl BPE {
-194        pub fn from_json(json: &serde_json::Value, end_of_text: usize) -> Result<Self> {
-195            let json = match json.as_object() {
-196                None => candle::bail!("json value is not an object"),
-197                Some(json) => json,
-198            };
-199            let re = match json.get("pat_str") {
-200                None => candle::bail!("json object has no pat_str field"),
-201                Some(pat_str) => match pat_str.as_str() {
-202                    None => candle::bail!("pat_str field is not a string"),
-203                    Some(pat_str) => fancy_regex::Regex::new(pat_str).map_err(E::wrap)?,
-204                },
-205            };
-206            let offset = match json.get("offset") {
-207                None => candle::bail!("json object has no offset field"),
-208                Some(offset) => match offset.as_u64() {
-209                    None => candle::bail!("offset field is not a positive int"),
-210                    Some(offset) => offset as usize,
-211                },
-212            };
-213            let mut ranks = HashMap::new();
-214            for id in 0u8..=255 {
-215                ranks.insert(vec![id], id as u32);
-216            }
-217            let mergeable_ranks = match json.get("mergeable_ranks") {
-218                None => candle::bail!("json object has no mergeable_ranks field"),
-219                Some(mr) => match mr.as_object() {
-220                    None => candle::bail!("mergeable_ranks is not an object"),
-221                    Some(mr) => mr,
-222                },
-223            };
-224            for (key, value) in mergeable_ranks.iter() {
-225                let value = match value.as_u64() {
-226                    None => candle::bail!("mergeable_ranks '{key}' is not a u64"),
-227                    Some(value) => value as u32,
-228                };
-229                if value < 256 {
-230                    continue;
-231                }
-232                // No escaping for other keys.
-233                let key = key.as_bytes().to_vec();
-234                ranks.insert(key, value);
-235            }
-236            Ok(Self {
-237                re,
-238                end_of_text,
-239                offset,
-240                ranks,
-241                span: tracing::span!(tracing::Level::TRACE, "bpe"),
-242            })
-243        }
-244
-245        // Taken from:
-246        // https://github.com/openai/tiktoken/blob/1b9faf2779855124f05174adf1383e53689ed94b/src/lib.rs#L16C1-L82C2
-247        fn _byte_pair_merge(&self, piece: &[u8]) -> Vec<(usize, Rank)> {
-248            // This is a vector of (start, rank).
-249            // The rank is of the pair starting at position start.
-250            let mut parts = Vec::with_capacity(piece.len() + 1);
-251
-252            // Note that we hash bytes when indexing into `ranks`, not token pairs. As long as we train BPE
-253            // the way we currently do, this is equivalent. An easy way to break this would be to decouple
-254            // merge priority from token index or to prevent specific token merges.
-255            let mut min_rank: (Rank, usize) = (Rank::MAX, usize::MAX);
-256            for i in 0..piece.len() - 1 {
-257                let rank = *self.ranks.get(&piece[i..i + 2]).unwrap_or(&Rank::MAX);
-258                if rank < min_rank.0 {
-259                    min_rank = (rank, i);
-260                }
-261                parts.push((i, rank));
-262            }
-263            parts.push((piece.len() - 1, Rank::MAX));
-264            parts.push((piece.len(), Rank::MAX));
-265
-266            let get_rank = {
-267                #[inline(always)]
-268                |parts: &Vec<(usize, Rank)>, i: usize| {
-269                    if (i + 3) < parts.len() {
-270                        // Similar to `piece[i..i + 2]` above. The +3 is because we haven't yet deleted
-271                        // parts[i + 1], see comment in the main loop.
-272                        *self
-273                            .ranks
-274                            .get(&piece[parts[i].0..parts[i + 3].0])
-275                            .unwrap_or(&Rank::MAX)
-276                    } else {
-277                        Rank::MAX
-278                    }
-279                }
-280            };
-281
-282            // If you have n parts and m merges, this does O(mn) work.
-283            // We could do something with a heap and do O(m log n) work.
-284            // n is often very small so considerations like cache-locality outweigh the algorithmic
-285            // complexity downsides of the `parts` vector.
-286            while min_rank.0 != Rank::MAX {
-287                let i = min_rank.1;
-288                // Update parts[i] and parts[i - 1] before removing parts[i + 1], since
-289                // `parts.remove(i + 1)` will thrash the cache.
-290                if i > 0 {
-291                    parts[i - 1].1 = get_rank(&parts, i - 1);
-292                }
-293                parts[i].1 = get_rank(&parts, i);
-294                parts.remove(i + 1);
-295
-296                min_rank = (Rank::MAX, usize::MAX);
-297                for (i, &(_, rank)) in parts[..parts.len() - 1].iter().enumerate() {
-298                    if rank < min_rank.0 {
-299                        min_rank = (rank, i);
-300                    }
-301                }
-302            }
-303            parts
-304        }
-305
-306        pub fn byte_pair_encode(&self, piece: &[u8]) -> Vec<Rank> {
-307            if piece.is_empty() {
-308                return Vec::new();
-309            }
-310            if piece.len() == 1 {
-311                return vec![self.ranks[piece]];
-312            }
-313            assert!(piece.len() > 1);
-314            self._byte_pair_merge(piece)
-315                .windows(2)
-316                .map(|part| self.ranks[&piece[part[0].0..part[1].0]])
-317                .collect()
-318        }
-319
-320        pub fn encode(&self, text: &str) -> Result<Vec<u32>> {
-321            let _enter = self.span.enter();
-322            let mut bpe_tokens: Vec<u32> = Vec::new();
-323            for word in self.re.find_iter(text) {
-324                let word = word.map_err(E::wrap)?;
-325                let word_tokens = self.byte_pair_encode(word.as_str().as_bytes());
-326                for &token in word_tokens.iter() {
-327                    bpe_tokens.push(token + self.offset as u32)
-328                }
-329            }
-330            bpe_tokens.push((self.end_of_text + self.offset) as u32);
-331            Ok(bpe_tokens)
-332        }
-333    }
-334}
-335
-336pub mod gpt {
-337    use super::*;
-338
-339    #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
-340    pub enum NormType {
-341        LayerNorm,
-342        RMSNorm,
-343    }
-344
-345    #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
-346    pub enum AttnKernelType {
-347        Fa2,
-348        TorchAttn,
-349        Hand,
-350    }
-351
-352    #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
-353    pub enum NonLinearityType {
-354        Gelu,
-355        Swiglu,
-356    }
-357
-358    enum Norm {
-359        RMSNorm(candle_nn::RmsNorm),
-360        LayerNorm(candle_nn::LayerNorm),
-361    }
-362
-363    // https://github.com/metavoiceio/metavoice-src/blob/11550bb4e8a1ad032cc1556cc924f7a4e767cbfa/fam/llm/model.py#L27
-364    #[derive(Debug, Clone)]
-365    pub struct Config {
-366        pub block_size: usize,
-367        pub vocab_sizes: Vec<usize>,
-368        pub target_vocab_sizes: Vec<usize>,
-369        pub n_layer: usize,
-370        pub n_head: usize,
-371        pub n_embd: usize,
-372        pub bias: bool,
-373        pub causal: bool,
-374        pub spk_emb_on_text: bool,
-375        pub norm_type: NormType,
-376        pub rmsnorm_eps: f64,
-377        pub nonlinearity_type: NonLinearityType,
-378        pub swiglu_multiple_of: Option<usize>,
-379        pub attn_kernel_type: AttnKernelType,
-380        pub kv_cache_enabled: bool,
-381    }
-382
-383    impl Config {
-384        pub fn cfg1b_v0_1() -> Self {
-385            Self {
-386                n_layer: 6,
-387                n_head: 6,
-388                n_embd: 384,
-389                block_size: 1024,
-390                bias: false,
-391                vocab_sizes: vec![1538, 1025],
-392                causal: false,
-393                target_vocab_sizes: vec![1025, 1025, 1025, 1025, 1025, 1025],
-394                swiglu_multiple_of: Some(256),
-395                norm_type: NormType::LayerNorm,
-396                kv_cache_enabled: false,
-397                attn_kernel_type: AttnKernelType::TorchAttn,
-398                spk_emb_on_text: true,
-399                nonlinearity_type: NonLinearityType::Gelu,
-400                rmsnorm_eps: 1e-5,
-401            }
-402        }
-403    }
-404
-405    impl Norm {
-406        fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-407            match cfg.norm_type {
-408                NormType::RMSNorm => {
-409                    let rms_norm = candle_nn::rms_norm(cfg.n_embd, cfg.rmsnorm_eps, vb)?;
-410                    Ok(Self::RMSNorm(rms_norm))
-411                }
-412                NormType::LayerNorm => {
-413                    let ln_cfg = candle_nn::LayerNormConfig {
-414                        affine: cfg.bias,
-415                        ..Default::default()
-416                    };
-417                    let layer_norm = candle_nn::layer_norm(cfg.n_embd, ln_cfg, vb)?;
-418                    Ok(Self::LayerNorm(layer_norm))
-419                }
-420            }
-421        }
-422    }
-423
-424    impl Module for Norm {
-425        fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-426            match self {
-427                Self::RMSNorm(m) => m.forward(xs),
-428                Self::LayerNorm(m) => m.forward(xs),
-429            }
-430        }
-431    }
-432
-433    // https://github.com/metavoiceio/metavoice-src/blob/11550bb4e8a1ad032cc1556cc924f7a4e767cbfa/fam/llm/layers/attn.py#L18
-434    struct SelfAttention {
-435        c_attn: Linear,
-436        c_proj: Linear,
-437        n_head: usize,
-438        span: tracing::Span,
-439    }
-440
-441    impl SelfAttention {
-442        fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-443            // The different attention variants are likely to be identical but still we only accept
-444            // TorchAttn for now.
-445            if cfg.attn_kernel_type != AttnKernelType::TorchAttn {
-446                candle::bail!("only TorchAttn is supported")
-447            }
-448            if cfg.kv_cache_enabled {
-449                candle::bail!("kv_cache_enabled=true is not supported")
-450            }
-451            let c_attn = linear_b(cfg.n_embd, cfg.n_embd * 3, cfg.bias, vb.pp("c_attn"))?;
-452            let c_proj = linear_b(cfg.n_embd, cfg.n_embd, cfg.bias, vb.pp("c_proj"))?;
-453            Ok(Self {
-454                c_attn,
-455                c_proj,
-456                n_head: cfg.n_head,
-457                span: tracing::span!(tracing::Level::TRACE, "self-attn"),
-458            })
-459        }
-460    }
-461
-462    impl Module for SelfAttention {
-463        fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-464            let _enter = self.span.enter();
-465            let (b, t, c) = xs.dims3()?;
-466            let c_x = xs
-467                .apply(&self.c_attn)?
-468                .reshape((b, t, 3, self.n_head, c / self.n_head))?;
-469            let q = c_x.i((.., .., 0))?;
-470            let k = c_x.i((.., .., 1))?;
-471            let v = c_x.i((.., .., 2))?;
-472            let q = q.transpose(1, 2)?.contiguous()?;
-473            let k = k.transpose(1, 2)?.contiguous()?;
-474            let v = v.transpose(1, 2)?.contiguous()?;
-475            let att = (q.matmul(&k.t()?)? / (k.dim(D::Minus1)? as f64).sqrt())?;
-476            // TODO: causal mask
-477            let att = candle_nn::ops::softmax_last_dim(&att)?;
-478            let att = att.matmul(&v)?.transpose(1, 2)?;
-479            att.reshape((b, t, c))?.apply(&self.c_proj)
-480        }
-481    }
-482
-483    // https://github.com/metavoiceio/metavoice-src/blob/11550bb4e8a1ad032cc1556cc924f7a4e767cbfa/fam/llm/layers/layers.py#L43
-484    #[allow(clippy::upper_case_acronyms)]
-485    enum MLP {
-486        Gelu {
-487            c_fc: Linear,
-488            c_proj: Linear,
-489            span: tracing::Span,
-490        },
-491        Swiglu {
-492            w1: Linear,
-493            w3: Linear,
-494            c_proj: Linear,
-495            span: tracing::Span,
-496        },
-497    }
-498
-499    impl MLP {
-500        fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-501            let hidden_dim = 4 * cfg.n_embd;
-502            let slf = match cfg.nonlinearity_type {
-503                NonLinearityType::Gelu => {
-504                    let c_fc = linear_b(cfg.n_embd, hidden_dim, cfg.bias, vb.pp("c_fc"))?;
-505                    let c_proj = linear_b(hidden_dim, cfg.n_embd, cfg.bias, vb.pp("c_proj"))?;
-506                    Self::Gelu {
-507                        c_fc,
-508                        c_proj,
-509                        span: tracing::span!(tracing::Level::TRACE, "mlp-gelu"),
-510                    }
-511                }
-512                NonLinearityType::Swiglu => {
-513                    let hidden_dim = (2 * hidden_dim) / 3;
-514                    let swiglu_multiple_of = match cfg.swiglu_multiple_of {
-515                        None => candle::bail!("swiglu-multiple-of has to be set"),
-516                        Some(smo) => smo,
-517                    };
-518                    let hidden_dim = swiglu_multiple_of * (hidden_dim + swiglu_multiple_of - 1)
-519                        / swiglu_multiple_of;
-520                    let w1 = linear_b(cfg.n_embd, hidden_dim, cfg.bias, vb.pp("w1"))?;
-521                    let w3 = linear_b(cfg.n_embd, hidden_dim, cfg.bias, vb.pp("w3"))?;
-522                    let c_proj = linear_b(hidden_dim, cfg.n_embd, cfg.bias, vb.pp("c_proj"))?;
-523                    Self::Swiglu {
-524                        w1,
-525                        w3,
-526                        c_proj,
-527                        span: tracing::span!(tracing::Level::TRACE, "mlp-swiglu"),
-528                    }
-529                }
-530            };
-531            Ok(slf)
-532        }
-533    }
-534
-535    impl Module for MLP {
-536        fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-537            match self {
-538                Self::Gelu { c_fc, c_proj, span } => {
-539                    let _enter = span.enter();
-540                    xs.apply(c_fc)?.gelu()?.apply(c_proj)
-541                }
-542                Self::Swiglu {
-543                    w1,
-544                    w3,
-545                    c_proj,
-546                    span,
-547                } => {
-548                    let _enter = span.enter();
-549                    let w1 = xs.apply(w1)?;
-550                    let w3 = xs.apply(w3)?;
-551                    (w1.silu()? * w3)?.apply(c_proj)
-552                }
-553            }
-554        }
-555    }
-556
-557    // https://github.com/metavoiceio/metavoice-src/blob/11550bb4e8a1ad032cc1556cc924f7a4e767cbfa/fam/llm/layers/combined.py#L7
-558    struct Block {
-559        ln_1: Norm,
-560        ln_2: Norm,
-561        attn: SelfAttention,
-562        mlp: MLP,
-563        span: tracing::Span,
-564    }
-565
-566    impl Block {
-567        fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-568            let ln_1 = Norm::new(cfg, vb.pp("ln_1"))?;
-569            let ln_2 = Norm::new(cfg, vb.pp("ln_2"))?;
-570            let attn = SelfAttention::new(cfg, vb.pp("attn"))?;
-571            let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-572            Ok(Block {
-573                ln_1,
-574                ln_2,
-575                attn,
-576                mlp,
-577                span: tracing::span!(tracing::Level::TRACE, "gpt-block"),
-578            })
-579        }
-580    }
-581
-582    impl Module for Block {
-583        fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-584            let _enter = self.span.enter();
-585            let xs = (xs + xs.apply(&self.ln_1)?.apply(&self.attn))?;
-586            let xs = (&xs + xs.apply(&self.ln_2)?.apply(&self.mlp))?;
-587            Ok(xs)
-588        }
-589    }
-590
-591    // https://github.com/metavoiceio/metavoice-src/blob/11550bb4e8a1ad032cc1556cc924f7a4e767cbfa/fam/llm/model.py#L79
-592    #[allow(clippy::upper_case_acronyms)]
-593    pub struct Model {
-594        wtes: Vec<candle_nn::Embedding>,
-595        wpe: candle_nn::Embedding,
-596        h: Vec<Block>,
-597        ln_f: Norm,
-598        lm_heads: Vec<Linear>,
-599        cfg: Config,
-600        dtype: DType,
-601        span: tracing::Span,
-602    }
-603
-604    impl Model {
-605        pub fn new(cfg: Config, vb: VarBuilder) -> Result<Self> {
-606            let vb_t = vb.pp("transformer");
-607            let ln_f = Norm::new(&cfg, vb_t.pp("ln_f"))?;
-608            let mut wtes = Vec::with_capacity(cfg.vocab_sizes.len());
-609            let vb_w = vb_t.pp("wtes");
-610            for (idx, vocab_size) in cfg.vocab_sizes.iter().enumerate() {
-611                let wte = candle_nn::embedding(*vocab_size, cfg.n_embd, vb_w.pp(idx))?;
-612                wtes.push(wte)
-613            }
-614            let wpe = candle_nn::embedding(cfg.block_size, cfg.n_embd, vb_t.pp("wpe"))?;
-615
-616            let mut h = Vec::with_capacity(cfg.n_layer);
-617            let vb_h = vb_t.pp("h");
-618            for idx in 0..cfg.n_layer {
-619                let block = Block::new(&cfg, vb_h.pp(idx))?;
-620                h.push(block)
-621            }
-622
-623            let mut lm_heads = Vec::with_capacity(cfg.target_vocab_sizes.len());
-624            let vb_l = vb.pp("lm_heads");
-625            for (idx, vocab_size) in cfg.target_vocab_sizes.iter().enumerate() {
-626                let head = linear_b(cfg.n_embd, *vocab_size, false, vb_l.pp(idx))?;
-627                lm_heads.push(head)
-628            }
-629            Ok(Self {
-630                wtes,
-631                wpe,
-632                h,
-633                ln_f,
-634                lm_heads,
-635                cfg,
-636                dtype: vb.dtype(),
-637                span: tracing::span!(tracing::Level::TRACE, "gpt"),
-638            })
-639        }
-640
-641        pub fn config(&self) -> &Config {
-642            &self.cfg
-643        }
-644
-645        pub fn forward(&self, idx: &Tensor) -> Result<Vec<Tensor>> {
-646            let _enter = self.span.enter();
-647            let device = idx.device();
-648            let (b, _num_hierarchies, t) = idx.dims3()?;
-649            let pos = Tensor::arange(0u32, t as u32, device)?;
-650            let pos_emb = pos.apply(&self.wpe)?;
-651            let mut tok_emb = Tensor::zeros((b, t, self.cfg.n_embd), self.dtype, device)?;
-652            for (wte_idx, wte) in self.wtes.iter().enumerate() {
-653                let emb = idx.i((.., wte_idx, ..))?.apply(wte)?;
-654                tok_emb = (tok_emb + emb)?;
-655            }
-656            // TODO: speaker embs.
-657            let spk_emb = 0f64;
-658            let mut xs = (pos_emb.broadcast_add(&tok_emb)? + spk_emb)?;
-659            for block in self.h.iter() {
-660                xs = xs.apply(block)?
-661            }
-662            let xs = xs.apply(&self.ln_f)?;
-663            let mut logits = Vec::with_capacity(self.lm_heads.len());
-664            for lm_head in self.lm_heads.iter() {
-665                // non-causal mode only.
-666                let ys = xs.apply(lm_head)?;
-667                logits.push(ys)
-668            }
-669            Ok(logits)
-670        }
-671    }
-672}
-673
-674pub mod transformer {
-675    use super::*;
-676
-677    #[derive(Debug, Clone, serde::Deserialize)]
-678    pub struct Config {
-679        pub block_size: usize,
-680        pub vocab_size: usize,
-681        pub n_layer: usize,
-682        pub n_head: usize,
-683        pub dim: usize,
-684        pub speaker_emb_dim: usize,
-685        pub intermediate_size: Option<usize>,
-686        pub n_local_heads: Option<usize>,
-687        pub norm_eps: f64,
-688    }
-689
-690    impl Config {
-691        pub fn cfg1b_v0_1() -> Self {
-692            Self {
-693                n_layer: 24,
-694                n_head: 16,
-695                dim: 2048,
-696                vocab_size: 2562,
-697                speaker_emb_dim: 256,
-698                block_size: 2048,
-699                intermediate_size: None,
-700                n_local_heads: None,
-701                norm_eps: 1e-5,
-702            }
-703        }
-704
-705        pub(crate) fn n_local_heads(&self) -> usize {
-706            self.n_local_heads.unwrap_or(self.n_head)
-707        }
-708
-709        pub(crate) fn head_dim(&self) -> usize {
-710            self.dim / self.n_head
-711        }
-712
-713        pub(crate) fn intermediate_size(&self) -> usize {
-714            match self.intermediate_size {
-715                Some(intermediate_size) => intermediate_size,
-716                None => {
-717                    let hidden_dim = self.dim * 4;
-718                    let n_hidden = ((2 * hidden_dim) as f64 / 3.) as usize;
-719                    (n_hidden + 255) / 256 * 256
-720                }
-721            }
-722        }
-723    }
-724
-725    #[derive(Debug, Clone)]
-726    struct FeedForward {
-727        w1: Linear,
-728        w2: Linear,
-729        w3: Linear,
-730        span: tracing::Span,
-731    }
-732
-733    impl FeedForward {
-734        fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-735            let i_size = cfg.intermediate_size();
-736            let w1 = linear_b(cfg.dim, i_size, false, vb.pp("swiglu.w1"))?;
-737            let w2 = linear_b(i_size, cfg.dim, false, vb.pp("w2"))?;
-738            let w3 = linear_b(cfg.dim, i_size, false, vb.pp("swiglu.w3"))?;
-739            Ok(Self {
-740                w1,
-741                w2,
-742                w3,
-743                span: tracing::span!(tracing::Level::TRACE, "feed-forward"),
-744            })
-745        }
-746    }
-747
-748    impl Module for FeedForward {
-749        fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-750            let _enter = self.span.enter();
-751            let swiglu = (candle_nn::ops::silu(&xs.apply(&self.w1)?)? * xs.apply(&self.w3))?;
-752            swiglu.apply(&self.w2)
-753        }
-754    }
-755
-756    #[derive(Debug, Clone)]
-757    struct Attention {
-758        wqkv: Linear,
-759        wo: Linear,
-760        dim: usize,
-761        kv_size: usize,
-762        n_local_heads: usize,
-763        head_dim: usize,
-764        n_head: usize,
-765        kv_cache: Option<(Tensor, Tensor)>,
-766        span: tracing::Span,
-767    }
-768
-769    impl Attention {
-770        fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-771            let n_local_heads = cfg.n_local_heads();
-772            let head_dim = cfg.head_dim();
-773            let total_head_dim = (cfg.n_head + 2 * n_local_heads) * head_dim;
-774            let wqkv = linear_b(cfg.dim, total_head_dim, false, vb.pp("wqkv"))?;
-775            let wo = linear_b(cfg.dim, cfg.dim, false, vb.pp("wo"))?;
-776            Ok(Self {
-777                wqkv,
-778                wo,
-779                dim: cfg.dim,
-780                kv_size: n_local_heads * head_dim,
-781                n_local_heads,
-782                head_dim,
-783                n_head: cfg.n_head,
-784                kv_cache: None,
-785                span: tracing::span!(tracing::Level::TRACE, "feed-forward"),
-786            })
-787        }
-788
-789        fn forward(&mut self, xs: &Tensor, _pos: usize, mask: &Tensor) -> Result<Tensor> {
-790            let _enter = self.span.enter();
-791            let (b_sz, seqlen, _) = xs.dims3()?;
-792
-793            let qkv = xs.apply(&self.wqkv)?;
-794            let q = qkv.narrow(D::Minus1, 0, self.dim)?;
-795            let k = qkv.narrow(D::Minus1, self.dim, self.kv_size)?;
-796            let v = qkv.narrow(D::Minus1, self.dim + self.kv_size, self.kv_size)?;
-797            let q = q
-798                .reshape((b_sz, seqlen, self.n_head, self.head_dim))?
-799                .transpose(1, 2)?
-800                .contiguous()?;
-801            let k = k
-802                .reshape((b_sz, seqlen, self.n_local_heads, self.head_dim))?
-803                .transpose(1, 2)?;
-804            let v = v
-805                .reshape((b_sz, seqlen, self.n_local_heads, self.head_dim))?
-806                .transpose(1, 2)?;
-807
-808            let (k, v) = match &self.kv_cache {
-809                None => (k, v),
-810                Some((prev_k, prev_v)) => {
-811                    let k = Tensor::cat(&[prev_k, &k], 2)?;
-812                    let v = Tensor::cat(&[prev_v, &v], 2)?;
-813                    (k, v)
-814                }
-815            };
-816            self.kv_cache = Some((k.clone(), v.clone()));
-817
-818            let k = repeat_interleave(&k, self.n_head / self.n_local_heads, 1)?;
-819            let v = repeat_interleave(&v, self.n_head / self.n_local_heads, 1)?;
-820
-821            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-822            let attn_weights = (q.matmul(&k.transpose(2, 3)?)? * scale)?;
-823
-824            let attn_weights = attn_weights.broadcast_add(mask)?;
-825            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-826            let attn_output = attn_weights.matmul(&v)?;
-827            attn_output
-828                .transpose(1, 2)?
-829                .reshape((b_sz, seqlen, self.dim))?
-830                .apply(&self.wo)
-831        }
-832
-833        fn clear_kv_cache(&mut self) {
-834            self.kv_cache = None
-835        }
-836    }
-837
-838    #[derive(Debug, Clone)]
-839    struct Block {
-840        attention: Attention,
-841        feed_forward: FeedForward,
-842        ffn_norm: RmsNorm,
-843        attention_norm: RmsNorm,
-844        span: tracing::Span,
-845    }
-846
-847    impl Block {
-848        fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-849            let attention = Attention::new(cfg, vb.pp("attention"))?;
-850            let feed_forward = FeedForward::new(cfg, vb.pp("feed_forward"))?;
-851            let ffn_norm = rms_norm(cfg.dim, cfg.norm_eps, vb.pp("ffn_norm"))?;
-852            let attention_norm = rms_norm(cfg.dim, cfg.norm_eps, vb.pp("attention_norm"))?;
-853            Ok(Self {
-854                attention,
-855                feed_forward,
-856                ffn_norm,
-857                attention_norm,
-858                span: tracing::span!(tracing::Level::TRACE, "block"),
-859            })
-860        }
-861
-862        fn forward(&mut self, xs: &Tensor, pos: usize, mask: &Tensor) -> Result<Tensor> {
-863            let _enter = self.span.enter();
-864            let hs = xs.apply(&self.attention_norm)?;
-865            let hs = (xs + self.attention.forward(&hs, pos, mask))?;
-866            &hs + hs.apply(&self.ffn_norm)?.apply(&self.feed_forward)
-867        }
-868
-869        fn clear_kv_cache(&mut self) {
-870            self.attention.clear_kv_cache()
-871        }
-872    }
-873
-874    #[derive(Debug, Clone)]
-875    pub struct Model {
-876        tok_embeddings: Embedding,
-877        pos_embeddings: Embedding,
-878        speaker_cond_pos: Linear,
-879        layers: Vec<Block>,
-880        norm: RmsNorm,
-881        output: Linear,
-882        spk_cond_mask: Tensor,
-883        span: tracing::Span,
-884    }
-885
-886    impl Model {
-887        pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-888            let tok_embeddings = embedding(cfg.vocab_size, cfg.dim, vb.pp("tok_embeddings"))?;
-889            let pos_embeddings = embedding(cfg.block_size, cfg.dim, vb.pp("pos_embeddings"))?;
-890            let speaker_cond_pos = linear_b(
-891                cfg.speaker_emb_dim,
-892                cfg.dim,
-893                false,
-894                vb.pp("speaker_cond_pos"),
-895            )?;
-896            let mut layers = Vec::with_capacity(cfg.n_layer);
-897            let vb_l = vb.pp("layers");
-898            for layer_idx in 0..cfg.n_layer {
-899                let layer = Block::new(cfg, vb_l.pp(layer_idx))?;
-900                layers.push(layer)
-901            }
-902            let norm = rms_norm(cfg.dim, cfg.norm_eps, vb.pp("norm"))?;
-903            let output = linear_b(cfg.dim, cfg.vocab_size, false, vb.pp("output"))?;
-904            let dtype = vb.dtype();
-905            let spk_cond_mask = Tensor::cat(
-906                &[
-907                    Tensor::ones((1, 1, cfg.dim), dtype, vb.device())?,
-908                    Tensor::zeros((1, 1, cfg.dim), dtype, vb.device())?,
-909                ],
-910                0,
-911            )?;
-912            Ok(Self {
-913                tok_embeddings,
-914                pos_embeddings,
-915                speaker_cond_pos,
-916                layers,
-917                norm,
-918                output,
-919                spk_cond_mask,
-920                span: tracing::span!(tracing::Level::TRACE, "transformer"),
-921            })
-922        }
-923
-924        pub fn clear_kv_cache(&mut self) {
-925            for layer in self.layers.iter_mut() {
-926                layer.clear_kv_cache()
-927            }
-928        }
-929
-930        pub fn forward(&mut self, xs: &Tensor, spk_emb: &Tensor, pos: usize) -> Result<Tensor> {
-931            let _enter = self.span.enter();
-932            let (_b_sz, seqlen) = xs.dims2()?;
-933            let mask: Vec<_> = (0..seqlen)
-934                .flat_map(|i| (0..seqlen).map(move |j| if i < j { f32::NEG_INFINITY } else { 0. }))
-935                .collect();
-936            let mask = Tensor::from_slice(&mask, (1, 1, seqlen, seqlen), xs.device())?;
-937            let input_pos = Tensor::arange(pos as u32, (pos + seqlen) as u32, xs.device())?;
-938            let tok_embeddings = xs.apply(&self.tok_embeddings)?;
-939            let pos_embeddings = input_pos.apply(&self.pos_embeddings)?;
-940            let mut xs = tok_embeddings
-941                .broadcast_add(&pos_embeddings)?
-942                .broadcast_add(
-943                    &spk_emb
-944                        .apply(&self.speaker_cond_pos)?
-945                        .broadcast_mul(&self.spk_cond_mask)?,
-946                )?;
-947            let mask = mask.to_dtype(xs.dtype())?;
-948            for layer in self.layers.iter_mut() {
-949                xs = layer.forward(&xs, pos, &mask)?
-950            }
-951            xs.narrow(1, seqlen - 1, 1)?
-952                .apply(&self.norm)?
-953                .apply(&self.output)
-954        }
-955    }
-956}
-957
-958pub mod adapters {
-959    // https://github.com/metavoiceio/metavoice-src/blob/9078234c496d76adbec06df789b6b04b1875f129/fam/llm/adapters/tilted_encodec.py
-960    pub struct TiltedEncodec {
-961        end_of_audio_token: u32,
-962        span: tracing::Span,
-963    }
-964
-965    impl TiltedEncodec {
-966        pub fn new(end_of_audio_token: u32) -> Self {
-967            Self {
-968                end_of_audio_token,
-969                span: tracing::span!(tracing::Level::TRACE, "tilted-encodec"),
-970            }
-971        }
-972
-973        pub fn decode(&self, tokens: &[Vec<u32>]) -> (Vec<u32>, Vec<Vec<u32>>) {
-974            let _enter = self.span.enter();
-975            let mut text_ids = vec![];
-976            let mut extracted_audio_ids = vec![];
-977            let mut min_audio_ids_len = usize::MAX;
-978            for (book_id, tokens) in tokens.iter().enumerate() {
-979                let mut audio_ids = vec![];
-980                for &t in tokens.iter() {
-981                    #[allow(clippy::comparison_chain)]
-982                    if t > self.end_of_audio_token {
-983                        if book_id == 0 {
-984                            text_ids.push(t)
-985                        }
-986                    } else if t < self.end_of_audio_token {
-987                        audio_ids.push(t)
-988                    }
-989                }
-990                min_audio_ids_len = usize::min(min_audio_ids_len, audio_ids.len());
-991                extracted_audio_ids.push(audio_ids)
-992            }
-993            for audio_ids in extracted_audio_ids.iter_mut() {
-994                audio_ids.truncate(min_audio_ids_len)
-995            }
-996            (text_ids, extracted_audio_ids)
-997        }
-998    }
-999
-1000    // https://github.com/metavoiceio/metavoice-src/blob/9078234c496d76adbec06df789b6b04b1875f129/fam/llm/adapters/flattened_encodec.py#L4
-1001    pub struct FlattenedInterleavedEncodec2Codebook {
-1002        end_of_audio_token: u32,
-1003        span: tracing::Span,
-1004    }
-1005
-1006    impl FlattenedInterleavedEncodec2Codebook {
-1007        pub fn new(end_of_audio_token: u32) -> Self {
-1008            Self {
-1009                end_of_audio_token,
-1010                span: tracing::span!(tracing::Level::TRACE, "encodec2codebook"),
-1011            }
-1012        }
-1013
-1014        pub fn decode(&self, tokens: &[u32]) -> (Vec<u32>, Vec<u32>, Vec<u32>) {
-1015            let _enter = self.span.enter();
-1016            let mut text_ids = vec![];
-1017            let mut audio_ids1 = vec![];
-1018            let mut audio_ids2 = vec![];
-1019            for &t in tokens.iter() {
-1020                #[allow(clippy::comparison_chain)]
-1021                if t < self.end_of_audio_token {
-1022                    audio_ids1.push(t)
-1023                } else if t < 2 * self.end_of_audio_token {
-1024                    audio_ids2.push(t - self.end_of_audio_token)
-1025                } else {
-1026                    text_ids.push(t)
-1027                }
-1028            }
-1029            (text_ids, audio_ids1, audio_ids2)
-1030        }
-1031    }
-1032}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mimi/conv.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mimi/conv.rs.html deleted file mode 100644 index 0ad5fea..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mimi/conv.rs.html +++ /dev/null @@ -1,671 +0,0 @@ -conv.rs - source

candle_transformers/models/mimi/
conv.rs

1// Copyright (c) Kyutai, all rights reserved.
-2// This source code is licensed under the license found in the
-3// LICENSE file in the root directory of this source tree.
-4
-5use candle::{Module, Result, StreamTensor, StreamingModule, Tensor, D};
-6use candle_nn::{Conv1d, VarBuilder};
-7
-8#[allow(clippy::enum_variant_names)]
-9#[derive(Debug, Copy, Clone, PartialEq, Eq)]
-10pub enum Norm {
-11    WeightNorm,
-12    SpectralNorm,
-13    TimeGroupNorm,
-14}
-15
-16#[derive(Debug, Copy, Clone, PartialEq, Eq)]
-17pub enum PadMode {
-18    Constant,
-19    Reflect,
-20    Replicate,
-21}
-22
-23// Applies weight norm for inference by recomputing the weight tensor. This
-24// does not apply to training.
-25// https://pytorch.org/docs/stable/generated/torch.nn.utils.weight_norm.html
-26fn conv1d_weight_norm(
-27    in_c: usize,
-28    out_c: usize,
-29    kernel_size: usize,
-30    bias: bool,
-31    config: candle_nn::Conv1dConfig,
-32    vb: VarBuilder,
-33) -> Result<Conv1d> {
-34    let weight = if vb.contains_tensor("weight") {
-35        vb.get((out_c, in_c, kernel_size), "weight")?
-36    } else {
-37        let weight_g = vb.get((out_c, 1, 1), "weight_g")?;
-38        let weight_v = vb.get((out_c, in_c, kernel_size), "weight_v")?;
-39        let norm_v = weight_v.sqr()?.sum_keepdim((1, 2))?.sqrt()?;
-40        weight_v.broadcast_mul(&weight_g)?.broadcast_div(&norm_v)?
-41    };
-42    let bias = if bias {
-43        Some(vb.get(out_c, "bias")?)
-44    } else {
-45        None
-46    };
-47    Ok(Conv1d::new(weight, bias, config))
-48}
-49
-50#[derive(Debug, Clone)]
-51pub struct NormConv1d {
-52    conv: Conv1d,
-53    norm: Option<candle_nn::GroupNorm>,
-54    span: tracing::Span,
-55}
-56
-57impl NormConv1d {
-58    #[allow(clippy::too_many_arguments)]
-59    pub fn new(
-60        in_c: usize,
-61        out_c: usize,
-62        k_size: usize,
-63        causal: bool,
-64        norm: Option<Norm>,
-65        bias: bool,
-66        cfg: candle_nn::Conv1dConfig,
-67        vb: VarBuilder,
-68    ) -> Result<Self> {
-69        let conv = match norm {
-70            None | Some(Norm::TimeGroupNorm) => {
-71                if bias {
-72                    candle_nn::conv1d(in_c, out_c, k_size, cfg, vb.pp("conv"))?
-73                } else {
-74                    candle_nn::conv1d_no_bias(in_c, out_c, k_size, cfg, vb.pp("conv"))?
-75                }
-76            }
-77            Some(Norm::WeightNorm) => {
-78                conv1d_weight_norm(in_c, out_c, k_size, bias, cfg, vb.pp("conv"))?
-79            }
-80            Some(Norm::SpectralNorm) => candle::bail!("SpectralNorm is not supported yet."),
-81        };
-82        let norm = match norm {
-83            None | Some(Norm::WeightNorm) | Some(Norm::SpectralNorm) => None,
-84            Some(Norm::TimeGroupNorm) => {
-85                if causal {
-86                    candle::bail!("GroupNorm doesn't support causal evaluation.")
-87                }
-88                let norm = candle_nn::group_norm(1, out_c, 1e-5, vb.pp("norm"))?;
-89                Some(norm)
-90            }
-91        };
-92        Ok(Self {
-93            conv,
-94            norm,
-95            span: tracing::span!(tracing::Level::TRACE, "norm-conv1d"),
-96        })
-97    }
-98}
-99
-100impl Module for NormConv1d {
-101    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-102        let _enter = self.span.enter();
-103        let xs = xs.apply(&self.conv)?;
-104        match self.norm.as_ref() {
-105            None => Ok(xs),
-106            Some(norm) => xs.apply(norm),
-107        }
-108    }
-109}
-110
-111#[derive(Debug, Clone)]
-112pub struct NormConvTranspose1d {
-113    ws: Tensor,
-114    bs: Option<Tensor>,
-115    k_size: usize,
-116    stride: usize,
-117    groups: usize,
-118    norm: Option<candle_nn::GroupNorm>,
-119    span: tracing::Span,
-120}
-121
-122impl NormConvTranspose1d {
-123    #[allow(clippy::too_many_arguments)]
-124    pub fn new(
-125        in_c: usize,
-126        out_c: usize,
-127        k_size: usize,
-128        causal: bool,
-129        norm: Option<Norm>,
-130        bias: bool,
-131        stride: usize,
-132        groups: usize,
-133        vb: VarBuilder,
-134    ) -> Result<Self> {
-135        let vb = vb.pp("conv");
-136        let bs = if bias {
-137            Some(vb.get(out_c, "bias")?)
-138        } else {
-139            None
-140        };
-141        let ws = match norm {
-142            None | Some(Norm::TimeGroupNorm) => vb.get((in_c, out_c / groups, k_size), "weight")?,
-143            Some(Norm::WeightNorm) => {
-144                if vb.contains_tensor("weight") {
-145                    vb.get((in_c, out_c, k_size), "weight")?
-146                } else {
-147                    let weight_g = vb.get((in_c, 1, 1), "weight_g")?;
-148                    let weight_v = vb.get((in_c, out_c, k_size), "weight_v")?;
-149                    let norm_v = weight_v.sqr()?.sum_keepdim((1, 2))?.sqrt()?;
-150                    weight_v.broadcast_mul(&weight_g)?.broadcast_div(&norm_v)?
-151                }
-152            }
-153            Some(Norm::SpectralNorm) => candle::bail!("SpectralNorm is not supported yet."),
-154        };
-155        let (ws, groups) = if groups == out_c && in_c == out_c {
-156            let eye = Tensor::eye(out_c, ws.dtype(), ws.device())?;
-157            let ws = ws
-158                .repeat((1, out_c, 1))?
-159                .mul(&eye.unsqueeze(2)?.repeat((1, 1, k_size))?)?;
-160            (ws, 1)
-161        } else {
-162            (ws, groups)
-163        };
-164        let norm = match norm {
-165            None | Some(Norm::WeightNorm) | Some(Norm::SpectralNorm) => None,
-166            Some(Norm::TimeGroupNorm) => {
-167                if causal {
-168                    candle::bail!("GroupNorm doesn't support causal evaluation.")
-169                }
-170                let norm = candle_nn::group_norm(1, out_c, 1e-5, vb.pp("norm"))?;
-171                Some(norm)
-172            }
-173        };
-174        Ok(Self {
-175            ws,
-176            bs,
-177            k_size,
-178            stride,
-179            groups,
-180            norm,
-181            span: tracing::span!(tracing::Level::TRACE, "norm-conv-tr1d"),
-182        })
-183    }
-184}
-185
-186impl Module for NormConvTranspose1d {
-187    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-188        let _enter = self.span.enter();
-189        // conv-transpose1d seems to be broken on metal after enough iterations. Causing
-190        // the following error:
-191        // _status < MTLCommandBufferStatusCommitted >
-192        // -[IOGPUMetalCommandBuffer setCurrentCommandEncoder:]
-193        // This is now fixed in candle.
-194        let xs = Tensor::conv_transpose1d(xs, &self.ws, 0, 0, self.stride, 1, self.groups)?;
-195        let xs = match &self.bs {
-196            None => xs,
-197            Some(bias) => {
-198                let b = bias.dims1()?;
-199                let bias = bias.reshape((1, b, 1))?;
-200                xs.broadcast_add(&bias)?
-201            }
-202        };
-203        match self.norm.as_ref() {
-204            None => Ok(xs),
-205            Some(norm) => xs.apply(norm),
-206        }
-207    }
-208}
-209
-210fn get_extra_padding_for_conv1d(
-211    xs: &Tensor,
-212    k_size: usize,
-213    stride: usize,
-214    padding_total: usize,
-215) -> Result<usize> {
-216    let len = xs.dim(D::Minus1)?;
-217    let n_frames = (len + padding_total).saturating_sub(k_size) as f64 / stride as f64 + 1.0;
-218    let ideal_len =
-219        ((n_frames.ceil() as usize - 1) * stride + k_size).saturating_sub(padding_total);
-220    Ok(ideal_len.saturating_sub(len))
-221}
-222
-223fn pad1d(xs: &Tensor, pad_l: usize, pad_r: usize, mode: PadMode) -> Result<Tensor> {
-224    match mode {
-225        PadMode::Constant => xs.pad_with_zeros(D::Minus1, pad_l, pad_r),
-226        PadMode::Reflect => candle::bail!("pad-mode 'reflect' is not supported"),
-227        PadMode::Replicate => xs.pad_with_same(D::Minus1, pad_l, pad_r),
-228    }
-229}
-230
-231fn unpad1d(xs: &Tensor, unpad_l: usize, unpad_r: usize) -> Result<Tensor> {
-232    let len = xs.dim(D::Minus1)?;
-233    if len < unpad_l + unpad_r {
-234        candle::bail!("unpad1d: tensor len {len} is too low, {unpad_l} + {unpad_r}")
-235    }
-236    xs.narrow(D::Minus1, unpad_l, len - (unpad_l + unpad_r))
-237}
-238
-239#[derive(Debug, Clone)]
-240pub struct StreamableConv1d {
-241    conv: NormConv1d,
-242    causal: bool,
-243    pad_mode: PadMode,
-244    state_prev_xs: StreamTensor,
-245    left_pad_applied: bool,
-246    kernel_size: usize,
-247    span: tracing::Span,
-248}
-249
-250impl StreamableConv1d {
-251    #[allow(clippy::too_many_arguments)]
-252    pub fn new(
-253        in_c: usize,
-254        out_c: usize,
-255        k_size: usize,
-256        stride: usize,
-257        dilation: usize,
-258        groups: usize,
-259        bias: bool,
-260        causal: bool,
-261        norm: Option<Norm>,
-262        pad_mode: PadMode,
-263        vb: VarBuilder,
-264    ) -> Result<Self> {
-265        let cfg = candle_nn::Conv1dConfig {
-266            padding: 0,
-267            stride,
-268            dilation,
-269            groups,
-270        };
-271        let conv = NormConv1d::new(in_c, out_c, k_size, causal, norm, bias, cfg, vb)?;
-272        if k_size < stride {
-273            candle::bail!("kernel-size {k_size} is smaller than stride {stride}")
-274        }
-275        Ok(Self {
-276            conv,
-277            causal,
-278            pad_mode,
-279            state_prev_xs: StreamTensor::empty(),
-280            left_pad_applied: false,
-281            kernel_size: k_size,
-282            span: tracing::span!(tracing::Level::TRACE, "streamable-conv1d"),
-283        })
-284    }
-285}
-286
-287impl Module for StreamableConv1d {
-288    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-289        let _enter = self.span.enter();
-290        let (_b, _t, _c) = xs.dims3()?;
-291        let k_size = self.conv.conv.weight().dim(D::Minus1)?;
-292        let conv_cfg = self.conv.conv.config();
-293        // Effective kernel size with dilations.
-294        let k_size = (k_size - 1) * conv_cfg.dilation + 1;
-295        let padding_total = k_size - conv_cfg.stride;
-296        let extra_padding =
-297            get_extra_padding_for_conv1d(xs, k_size, conv_cfg.stride, padding_total)?;
-298        let xs = if self.causal {
-299            pad1d(xs, padding_total, extra_padding, self.pad_mode)?
-300        } else {
-301            let padding_right = padding_total / 2;
-302            let padding_left = padding_total - padding_right;
-303            pad1d(
-304                xs,
-305                padding_left,
-306                padding_right + extra_padding,
-307                self.pad_mode,
-308            )?
-309        };
-310        xs.apply(&self.conv)
-311    }
-312}
-313
-314impl StreamingModule for StreamableConv1d {
-315    fn reset_state(&mut self) {
-316        self.state_prev_xs.reset();
-317        self.left_pad_applied = false;
-318    }
-319
-320    fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor> {
-321        let _enter = self.span.enter();
-322        let xs = match xs.as_option() {
-323            None => return Ok(().into()),
-324            Some(xs) => xs.clone(),
-325        };
-326        let xs = if self.left_pad_applied {
-327            xs
-328        } else {
-329            self.left_pad_applied = true;
-330            let k_size = self.conv.conv.weight().dim(D::Minus1)?;
-331            let conv_cfg = self.conv.conv.config();
-332            let k_size = (k_size - 1) * conv_cfg.dilation + 1;
-333            let padding_total = k_size - conv_cfg.stride;
-334            pad1d(&xs, padding_total, 0, self.pad_mode)?
-335        };
-336        let cfg = self.conv.conv.config();
-337        let stride = cfg.stride;
-338        let dilation = cfg.dilation;
-339        let kernel = (self.kernel_size - 1) * dilation + 1;
-340        let xs = StreamTensor::cat2(&self.state_prev_xs, &xs.into(), D::Minus1)?;
-341        let seq_len = xs.seq_len(D::Minus1)?;
-342        let num_frames = (seq_len + stride).saturating_sub(kernel) / stride;
-343        if num_frames > 0 {
-344            let offset = num_frames * stride;
-345            self.state_prev_xs = xs.narrow(D::Minus1, offset, seq_len - offset)?;
-346            let in_l = (num_frames - 1) * stride + kernel;
-347            let xs = xs.narrow(D::Minus1, 0, in_l)?;
-348            // We apply the underlying convtr directly rather than through forward so as
-349            // not to apply any padding here.
-350            xs.apply(&self.conv.conv)
-351        } else {
-352            self.state_prev_xs = xs;
-353            Ok(StreamTensor::empty())
-354        }
-355    }
-356}
-357
-358#[derive(Debug, Clone)]
-359pub struct StreamableConvTranspose1d {
-360    convtr: NormConvTranspose1d,
-361    causal: bool,
-362    state_prev_ys: StreamTensor,
-363    kernel_size: usize,
-364    span: tracing::Span,
-365}
-366
-367impl StreamableConvTranspose1d {
-368    #[allow(clippy::too_many_arguments)]
-369    pub fn new(
-370        in_c: usize,
-371        out_c: usize,
-372        k_size: usize,
-373        stride: usize,
-374        groups: usize,
-375        bias: bool,
-376        causal: bool,
-377        norm: Option<Norm>,
-378        vb: VarBuilder,
-379    ) -> Result<Self> {
-380        let convtr =
-381            NormConvTranspose1d::new(in_c, out_c, k_size, causal, norm, bias, stride, groups, vb)?;
-382        Ok(Self {
-383            convtr,
-384            causal,
-385            kernel_size: k_size,
-386            state_prev_ys: StreamTensor::empty(),
-387            span: tracing::span!(tracing::Level::TRACE, "streamable-conv-tr1d"),
-388        })
-389    }
-390}
-391
-392impl Module for StreamableConvTranspose1d {
-393    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-394        let _enter = self.span.enter();
-395        let k_size = self.convtr.k_size;
-396        let stride = self.convtr.stride;
-397        let padding_total = k_size.saturating_sub(stride);
-398        let xs = xs.apply(&self.convtr)?;
-399        if self.causal {
-400            // This corresponds to trim_right_ratio = 1.
-401            unpad1d(&xs, 0, padding_total)
-402        } else {
-403            let padding_right = padding_total / 2;
-404            let padding_left = padding_total - padding_right;
-405            unpad1d(&xs, padding_left, padding_right)
-406        }
-407    }
-408}
-409
-410impl StreamingModule for StreamableConvTranspose1d {
-411    fn reset_state(&mut self) {
-412        self.state_prev_ys.reset()
-413    }
-414
-415    fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor> {
-416        let _enter = self.span.enter();
-417        let xs = match xs.as_option() {
-418            Some(xs) => xs,
-419            None => return Ok(StreamTensor::empty()),
-420        };
-421        let stride = self.convtr.stride;
-422        // We apply the underlying convtr directly rather than through forward so as
-423        // not to apply any padding here.
-424        let ys = self.convtr.forward(xs)?;
-425        let ot = ys.dim(D::Minus1)?;
-426        let ys = match self.state_prev_ys.as_option() {
-427            None => ys,
-428            Some(prev_ys) => {
-429                let pt = prev_ys.dim(D::Minus1)?;
-430                // Remove the bias as it will be applied multiple times.
-431                let prev_ys = match &self.convtr.bs {
-432                    None => prev_ys.clone(),
-433                    Some(bias) => {
-434                        let bias = bias.reshape((1, (), 1))?;
-435                        prev_ys.broadcast_sub(&bias)?
-436                    }
-437                };
-438                let ys1 = (ys.narrow(D::Minus1, 0, pt)? + prev_ys)?;
-439                let ys2 = ys.narrow(D::Minus1, pt, ot - pt)?;
-440                Tensor::cat(&[ys1, ys2], D::Minus1)?
-441            }
-442        };
-443        let invalid_steps = self.kernel_size - stride;
-444        let (ys, prev_ys) = StreamTensor::from(ys).split(D::Minus1, ot - invalid_steps)?;
-445        self.state_prev_ys = prev_ys;
-446        Ok(ys)
-447    }
-448}
-449
-450#[derive(Debug, Clone)]
-451pub struct ConvDownsample1d {
-452    conv: StreamableConv1d,
-453}
-454
-455impl ConvDownsample1d {
-456    pub fn new(
-457        stride: usize,
-458        dim: usize,
-459        causal: bool,
-460        learnt: bool,
-461        vb: VarBuilder,
-462    ) -> Result<Self> {
-463        if !learnt {
-464            candle::bail!("only learnt=true is supported")
-465        }
-466        let conv = StreamableConv1d::new(
-467            /* in_c */ dim,
-468            /* out_c */ dim,
-469            /* k_size_c */ 2 * stride,
-470            /* stride */ stride,
-471            /* dilation */ 1,
-472            /* groups */ 1, // channel_wise = false
-473            /* bias */ false,
-474            /* causal */ causal,
-475            /* norm */ None,
-476            /* pad_mode */ PadMode::Replicate,
-477            vb,
-478        )?;
-479        Ok(Self { conv })
-480    }
-481}
-482
-483impl Module for ConvDownsample1d {
-484    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-485        xs.apply(&self.conv)
-486    }
-487}
-488
-489impl StreamingModule for ConvDownsample1d {
-490    fn reset_state(&mut self) {
-491        self.conv.reset_state()
-492    }
-493
-494    fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor> {
-495        self.conv.step(xs)
-496    }
-497}
-498
-499#[derive(Debug, Clone)]
-500pub struct ConvTrUpsample1d {
-501    convtr: StreamableConvTranspose1d,
-502}
-503
-504impl ConvTrUpsample1d {
-505    pub fn new(
-506        stride: usize,
-507        dim: usize,
-508        causal: bool,
-509        learnt: bool,
-510        vb: VarBuilder,
-511    ) -> Result<Self> {
-512        if !learnt {
-513            candle::bail!("only learnt=true is supported")
-514        }
-515        let convtr = StreamableConvTranspose1d::new(
-516            dim,
-517            dim,
-518            /* k_size */ 2 * stride,
-519            /* stride */ stride,
-520            /* groups */ dim,
-521            /* bias */ false,
-522            /* causal */ causal,
-523            /* norm */ None,
-524            vb,
-525        )?;
-526        Ok(Self { convtr })
-527    }
-528}
-529
-530impl Module for ConvTrUpsample1d {
-531    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-532        xs.apply(&self.convtr)
-533    }
-534}
-535
-536impl StreamingModule for ConvTrUpsample1d {
-537    fn reset_state(&mut self) {
-538        self.convtr.reset_state()
-539    }
-540
-541    fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor> {
-542        self.convtr.step(xs)
-543    }
-544}
-545
-546#[cfg(test)]
-547mod tests {
-548    use super::*;
-549    use candle::IndexOp;
-550
-551    fn run_conv1d(
-552        k_size: usize,
-553        stride: usize,
-554        dilation: usize,
-555        step_size: usize,
-556        len: usize,
-557        bias: bool,
-558    ) -> Result<()> {
-559        // TODO: We should ensure for the seed to be constant when running these tests.
-560        let dev = &candle::Device::Cpu;
-561        let vm = candle_nn::VarMap::new();
-562        let vb = VarBuilder::from_varmap(&vm, candle::DType::F32, dev);
-563        let conv1d = StreamableConv1d::new(
-564            /* in_c */ 2,
-565            /* out_c */ 3,
-566            /* k_size */ k_size,
-567            /* stride */ stride,
-568            /* dilation */ dilation,
-569            /* groups */ 1,
-570            /* bias */ bias,
-571            /* causal */ true,
-572            /* norm */ None,
-573            /* pad_mode */ PadMode::Constant,
-574            vb,
-575        )?;
-576        let xs = Tensor::randn(0f32, 1., (1, 2, step_size * len), dev)?;
-577        let ys = conv1d.forward(&xs)?;
-578        let mut conv1d = conv1d;
-579        let mut ys_steps = vec![];
-580        for idx in 0..len {
-581            let xs = xs.i((.., .., step_size * idx..step_size * (idx + 1)))?;
-582            let ys = conv1d.step(&xs.into())?;
-583            if let Some(ys) = ys.as_option() {
-584                ys_steps.push(ys.clone())
-585            }
-586        }
-587        let ys_steps = Tensor::cat(&ys_steps, D::Minus1)?;
-588        let diff = (&ys - &ys_steps)?
-589            .abs()?
-590            .flatten_all()?
-591            .max(0)?
-592            .to_vec0::<f32>()?;
-593        if diff > 1e-5 {
-594            println!("{xs}");
-595            println!("{ys}");
-596            println!("{ys_steps}");
-597            candle::bail!("larger diff than expected {diff}")
-598        }
-599        Ok(())
-600    }
-601
-602    fn run_conv_tr1d(
-603        k_size: usize,
-604        stride: usize,
-605        step_size: usize,
-606        len: usize,
-607        bias: bool,
-608    ) -> Result<()> {
-609        // TODO: We should ensure for the seed to be constant when running these tests.
-610        let dev = &candle::Device::Cpu;
-611        let vm = candle_nn::VarMap::new();
-612        let vb = VarBuilder::from_varmap(&vm, candle::DType::F32, dev);
-613        let conv1d = StreamableConvTranspose1d::new(
-614            /* in_c */ 2, /* out_c */ 3, /* k_size */ k_size,
-615            /* stride */ stride, /* groups */ 1, /* bias */ bias,
-616            /* causal */ true, /* norm */ None, vb,
-617        )?;
-618        let xs = Tensor::randn(0f32, 1., (1, 2, step_size * len), dev)?;
-619        let ys = conv1d.forward(&xs)?;
-620        let mut conv1d = conv1d;
-621        let mut ys_steps = vec![];
-622        for idx in 0..len {
-623            let xs = xs.i((.., .., step_size * idx..step_size * (idx + 1)))?;
-624            let ys = conv1d.step(&xs.into())?;
-625            if let Some(ys) = ys.as_option() {
-626                ys_steps.push(ys.clone())
-627            }
-628        }
-629        let ys_steps = Tensor::cat(&ys_steps, D::Minus1)?;
-630        let diff = (&ys - &ys_steps)?
-631            .abs()?
-632            .flatten_all()?
-633            .max(0)?
-634            .to_vec0::<f32>()?;
-635        if diff > 1e-5 {
-636            println!("{xs}");
-637            println!("{ys}");
-638            println!("{ys_steps}");
-639            candle::bail!("larger diff than expected {diff}")
-640        }
-641        Ok(())
-642    }
-643
-644    #[test]
-645    fn conv1d() -> Result<()> {
-646        for step_size in [1, 2, 3] {
-647            for bias in [false, true] {
-648                run_conv1d(1, 1, 1, step_size, 5, bias)?;
-649                run_conv1d(2, 1, 1, step_size, 5, bias)?;
-650                run_conv1d(2, 2, 1, step_size, 6, bias)?;
-651                run_conv1d(3, 2, 1, step_size, 8, bias)?;
-652                run_conv1d(3, 2, 2, step_size, 8, bias)?;
-653            }
-654        }
-655        Ok(())
-656    }
-657
-658    #[test]
-659    fn conv_tr1d() -> Result<()> {
-660        for step_size in [1, 2, 3] {
-661            for bias in [false, true] {
-662                run_conv_tr1d(1, 1, step_size, 5, bias)?;
-663                run_conv_tr1d(2, 1, step_size, 5, bias)?;
-664                run_conv_tr1d(3, 1, step_size, 5, bias)?;
-665                run_conv_tr1d(3, 2, step_size, 5, bias)?;
-666            }
-667        }
-668        Ok(())
-669    }
-670}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mimi/encodec.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mimi/encodec.rs.html deleted file mode 100644 index 0d07ad8..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mimi/encodec.rs.html +++ /dev/null @@ -1,230 +0,0 @@ -encodec.rs - source

candle_transformers/models/mimi/
encodec.rs

1// Copyright (c) Kyutai, all rights reserved.
-2// This source code is licensed under the license found in the
-3// LICENSE file in the root directory of this source tree.
-4
-5use super::{conv, quantization, seanet, transformer};
-6use candle::{DType, Device, Module, Result, StreamTensor, StreamingModule, Tensor};
-7use candle_nn::VarBuilder;
-8
-9#[derive(Debug, Copy, Clone, PartialEq, Eq)]
-10pub enum ResampleMethod {
-11    Conv,
-12    Interpolate,
-13}
-14
-15#[derive(Debug, Clone)]
-16pub struct Config {
-17    pub channels: usize,
-18    pub sample_rate: f64,
-19    pub frame_rate: f64,
-20    pub renormalize: bool,
-21    pub resample_method: ResampleMethod,
-22    pub seanet: seanet::Config,
-23    pub transformer: transformer::Config,
-24    pub quantizer_n_q: usize,
-25    pub quantizer_bins: usize,
-26    pub quantizer_dim: usize,
-27}
-28
-29impl Config {
-30    // /lustre/scwpod02/client/kyutai/alex/mimi_exp/xps/b7d2bd5a/.hydra/config.yaml
-31    pub fn v0_1(num_codebooks: Option<usize>) -> Self {
-32        let seanet_cfg = seanet::Config {
-33            dimension: 512,
-34            channels: 1,
-35            causal: true,
-36            n_filters: 64,
-37            n_residual_layers: 1,
-38            activation: candle_nn::Activation::Elu(1.),
-39            compress: 2,
-40            dilation_base: 2,
-41            disable_norm_outer_blocks: 0,
-42            final_activation: None,
-43            kernel_size: 7,
-44            residual_kernel_size: 3,
-45            last_kernel_size: 3,
-46            lstm: 0,
-47            norm: conv::Norm::WeightNorm,
-48            pad_mode: conv::PadMode::Constant,
-49            ratios: vec![8, 6, 5, 4],
-50            true_skip: true,
-51        };
-52        let transformer_cfg = transformer::Config {
-53            d_model: seanet_cfg.dimension,
-54            num_heads: 8,
-55            num_layers: 8,
-56            causal: true,
-57            norm_first: true,
-58            bias_ff: false,
-59            bias_attn: false,
-60            layer_scale: Some(0.01),
-61            context: 250,
-62            conv_kernel_size: 5,
-63            use_conv_bias: true,
-64            use_conv_block: false,
-65            cross_attention: false,
-66            max_period: 10000,
-67            gating: None,
-68            norm: super::NormType::LayerNorm,
-69            positional_embedding: transformer::PositionalEmbedding::Rope,
-70
-71            dim_feedforward: 2048,
-72            kv_repeat: 1,
-73            conv_layout: true, // see builders.py
-74            max_seq_len: 8192, // the transformer works at 25hz so this is ~5 mins.
-75        };
-76        Config {
-77            channels: 1,
-78            sample_rate: 24_000.,
-79            frame_rate: 12.5,
-80            renormalize: true,
-81            resample_method: ResampleMethod::Conv,
-82            seanet: seanet_cfg,
-83            transformer: transformer_cfg,
-84            quantizer_n_q: num_codebooks.unwrap_or(16),
-85            quantizer_bins: 2048,
-86            quantizer_dim: 256,
-87        }
-88    }
-89}
-90
-91#[derive(Debug, Clone)]
-92pub struct Encodec {
-93    encoder: seanet::SeaNetEncoder,
-94    decoder: seanet::SeaNetDecoder,
-95    encoder_transformer: transformer::ProjectedTransformer,
-96    decoder_transformer: transformer::ProjectedTransformer,
-97    downsample: conv::ConvDownsample1d,
-98    upsample: conv::ConvTrUpsample1d,
-99    quantizer: quantization::SplitResidualVectorQuantizer,
-100    config: Config,
-101}
-102
-103impl Encodec {
-104    pub fn new(cfg: Config, vb: VarBuilder) -> Result<Self> {
-105        let dim = cfg.seanet.dimension;
-106        let encoder = seanet::SeaNetEncoder::new(&cfg.seanet, vb.pp("encoder"))?;
-107        let decoder = seanet::SeaNetDecoder::new(&cfg.seanet, vb.pp("decoder"))?;
-108        let encoder_transformer = transformer::ProjectedTransformer::new(
-109            dim,
-110            &[dim],
-111            &cfg.transformer,
-112            vb.pp("encoder_transformer"),
-113        )?;
-114        let decoder_transformer = transformer::ProjectedTransformer::new(
-115            dim,
-116            &[dim],
-117            &cfg.transformer,
-118            vb.pp("decoder_transformer"),
-119        )?;
-120        let quantizer = quantization::SplitResidualVectorQuantizer::new(
-121            /* dim */ cfg.quantizer_dim,
-122            /* input_dim */ Some(dim),
-123            /* output_dim */ Some(dim),
-124            /* n_q */ cfg.quantizer_n_q,
-125            /* bins */ cfg.quantizer_bins,
-126            vb.pp("quantizer"),
-127        )?;
-128        let encoder_frame_rate =
-129            cfg.sample_rate / cfg.seanet.ratios.iter().product::<usize>() as f64;
-130
-131        let downsample_stride = (encoder_frame_rate / cfg.frame_rate) as usize;
-132        // `upsample` and `downsample` only apply if frame_rate is different from encoder_frame_rate.
-133        let downsample = conv::ConvDownsample1d::new(
-134            /* stride */ downsample_stride,
-135            /* dim */ dim,
-136            /* causal */ true,
-137            /* learnt */ true,
-138            vb.pp("downsample"),
-139        )?;
-140        let upsample = conv::ConvTrUpsample1d::new(
-141            /* stride */ downsample_stride,
-142            /* dim */ dim,
-143            /* causal */ true,
-144            /* learnt */ true,
-145            vb.pp("upsample"),
-146        )?;
-147
-148        Ok(Self {
-149            encoder,
-150            decoder,
-151            encoder_transformer,
-152            decoder_transformer,
-153            quantizer,
-154            downsample,
-155            upsample,
-156            config: cfg,
-157        })
-158    }
-159
-160    pub fn config(&self) -> &Config {
-161        &self.config
-162    }
-163
-164    pub fn encode_pre_quantize(&mut self, xs: &Tensor) -> Result<Tensor> {
-165        let xs = self.encoder.forward(xs)?;
-166        self.encoder_transformer.reset_state();
-167        let xs = self.encoder_transformer.forward(&xs)?;
-168        let xs = &xs[0];
-169        xs.apply(&self.downsample)
-170    }
-171
-172    pub fn encode(&mut self, xs: &Tensor) -> Result<Tensor> {
-173        let xs = self.encoder.forward(xs)?;
-174        self.encoder_transformer.reset_state();
-175        let xs = self.encoder_transformer.forward(&xs)?;
-176        let xs = &xs[0];
-177        let xs = xs.apply(&self.downsample)?;
-178        let codes = self.quantizer.encode(&xs)?;
-179        Ok(codes)
-180    }
-181
-182    pub fn encode_step(&mut self, xs: &StreamTensor) -> Result<StreamTensor> {
-183        let xs = self.encoder.step(xs)?;
-184        let xs = self.encoder_transformer.step(&xs)?;
-185        let xs = self.downsample.step(&xs)?;
-186        match xs.as_option() {
-187            None => Ok(().into()),
-188            Some(xs) => {
-189                let codes = self.quantizer.encode(xs)?;
-190                Ok(codes.into())
-191            }
-192        }
-193    }
-194
-195    pub fn decode(&mut self, codes: &Tensor) -> Result<Tensor> {
-196        let emb = self.quantizer.decode(codes)?;
-197        let emb = emb.apply(&self.upsample)?;
-198        self.decoder_transformer.reset_state();
-199        let outs = self.decoder_transformer.forward(&emb)?;
-200        let out = &outs[0];
-201        self.decoder.forward(out)
-202    }
-203
-204    pub fn decode_step(&mut self, codes: &StreamTensor) -> Result<StreamTensor> {
-205        let emb = match codes.as_option() {
-206            Some(codes) => StreamTensor::from_tensor(self.quantizer.decode(codes)?),
-207            None => StreamTensor::empty(),
-208        };
-209        let emb = self.upsample.step(&emb)?;
-210        let out = self.decoder_transformer.step(&emb)?;
-211        self.decoder.step(&out)
-212    }
-213
-214    pub fn reset_state(&mut self) {
-215        self.encoder.reset_state();
-216        self.encoder_transformer.reset_state();
-217        self.decoder.reset_state();
-218        self.decoder_transformer.reset_state();
-219        self.upsample.reset_state();
-220    }
-221}
-222
-223pub fn load(model_file: &str, num_codebooks: Option<usize>, dev: &Device) -> Result<Encodec> {
-224    let vb =
-225        unsafe { candle_nn::VarBuilder::from_mmaped_safetensors(&[model_file], DType::F32, dev)? };
-226    let cfg = Config::v0_1(num_codebooks);
-227    let encodec = Encodec::new(cfg, vb)?;
-228    Ok(encodec)
-229}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mimi/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mimi/mod.rs.html deleted file mode 100644 index b927a43..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mimi/mod.rs.html +++ /dev/null @@ -1,46 +0,0 @@ -mod.rs - source

candle_transformers/models/mimi/
mod.rs

1//! mimi model
-2//!
-3//! [Mimi](https://huggingface.co/kyutai/mimi) is a state of the art audio
-4//! compression model using an encoder/decoder architecture with residual vector
-5//! quantization. The candle implementation supports streaming meaning that it's
-6//! possible to encode or decode a stream of audio tokens on the flight to provide
-7//! low latency interaction with an audio model.
-8//!
-9//! - 🤗 [HuggingFace Model Card](https://huggingface.co/kyutai/mimi)
-10//! - 💻 [GitHub](https://github.com/kyutai-labs/moshi)
-11//!
-12//!
-13//! # Example
-14//! ```bash
-15//! # Generating some audio tokens from an audio files.
-16//! wget https://github.com/metavoiceio/metavoice-src/raw/main/assets/bria.mp3
-17//! cargo run --example mimi \
-18//!   --features mimi --release -- \
-19//!   audio-to-code bria.mp3 bria.safetensors
-20//!
-21//! # And decoding the audio tokens back into a sound file.
-22//! cargo run --example mimi
-23//!   --features mimi --release -- \
-24//!   code-to-audio bria.safetensors bria.wav
-25//!
-26
-27// Copyright (c) Kyutai, all rights reserved.
-28// This source code is licensed under the license found in the
-29// LICENSE file in the root directory of this source tree.
-30pub use candle;
-31pub use candle_nn;
-32
-33pub mod conv;
-34pub mod encodec;
-35pub mod quantization;
-36pub mod seanet;
-37pub mod transformer;
-38
-39#[derive(Debug, Copy, Clone, PartialEq, Eq)]
-40pub enum NormType {
-41    RmsNorm,
-42    LayerNorm,
-43}
-44
-45pub use encodec::{load, Config, Encodec as Model};
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mimi/quantization.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mimi/quantization.rs.html deleted file mode 100644 index 5a53e82..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mimi/quantization.rs.html +++ /dev/null @@ -1,405 +0,0 @@ -quantization.rs - source

candle_transformers/models/mimi/
quantization.rs

1// Copyright (c) Kyutai, all rights reserved.
-2// This source code is licensed under the license found in the
-3// LICENSE file in the root directory of this source tree.
-4
-5use candle::{IndexOp, Layout, Result, Shape, Tensor, D};
-6use candle_nn::{linear, Linear, VarBuilder};
-7
-8struct CodebookEncode;
-9
-10impl candle::CustomOp2 for CodebookEncode {
-11    fn name(&self) -> &'static str {
-12        "cb"
-13    }
-14
-15    fn cpu_fwd(
-16        &self,
-17        lhs_storage: &candle::CpuStorage,
-18        lhs_layout: &Layout,
-19        rhs_storage: &candle::CpuStorage,
-20        rhs_layout: &Layout,
-21    ) -> Result<(candle::CpuStorage, Shape)> {
-22        use rayon::prelude::*;
-23
-24        let (lhs_dim1, lhs_dim2) = lhs_layout.shape().dims2()?;
-25        let (rhs_dim1, rhs_dim2) = rhs_layout.shape().dims2()?;
-26        if lhs_dim2 != rhs_dim2 {
-27            candle::bail!("CodebookEncode, mismatch on last dim, {lhs_layout:?} {rhs_layout:?}");
-28        }
-29        if lhs_dim2 == 0 {
-30            candle::bail!("CodebookEncode, empty last dim {lhs_layout:?}")
-31        }
-32        let lhs = match lhs_layout.contiguous_offsets() {
-33            None => candle::bail!("CodebookEncode, lhs has to be contiguous, got {lhs_layout:?}"),
-34            Some((o1, o2)) => {
-35                let slice = lhs_storage.as_slice::<f32>()?;
-36                &slice[o1..o2]
-37            }
-38        };
-39        let rhs = match rhs_layout.contiguous_offsets() {
-40            None => candle::bail!("CodebookEncode, rhs has to be contiguous, got {rhs_layout:?}"),
-41            Some((o1, o2)) => {
-42                let slice = rhs_storage.as_slice::<f32>()?;
-43                &slice[o1..o2]
-44            }
-45        };
-46        let dst = (0..lhs_dim1)
-47            .into_par_iter()
-48            .map(|idx1| {
-49                let mut where_min = 0;
-50                let mut min_dist = f32::INFINITY;
-51                let lhs = &lhs[idx1 * lhs_dim2..(idx1 + 1) * lhs_dim2];
-52                for idx2 in 0..rhs_dim1 {
-53                    let rhs = &rhs[idx2 * rhs_dim2..(idx2 + 1) * rhs_dim2];
-54                    let mut dist = 0f32;
-55                    for (a, b) in lhs.iter().zip(rhs.iter()) {
-56                        dist += (a - b) * (a - b)
-57                    }
-58                    if dist < min_dist {
-59                        min_dist = dist;
-60                        where_min = idx2;
-61                    }
-62                }
-63                where_min as u32
-64            })
-65            .collect();
-66        let storage = candle::WithDType::to_cpu_storage_owned(dst);
-67        Ok((storage, (lhs_dim1,).into()))
-68    }
-69}
-70
-71#[allow(unused)]
-72#[derive(Debug, Clone)]
-73pub struct EuclideanCodebook {
-74    initialized: Tensor,
-75    cluster_usage: Tensor,
-76    embedding_sum: Tensor,
-77    embedding: Tensor,
-78    c2: Tensor,
-79    epsilon: f64,
-80    dim: usize,
-81    span_encode: tracing::Span,
-82    span_decode: tracing::Span,
-83}
-84
-85impl EuclideanCodebook {
-86    pub fn new(dim: usize, codebook_size: usize, vb: VarBuilder) -> Result<Self> {
-87        let epsilon = 1e-5;
-88        let initialized = vb.get(1, "initialized")?;
-89        let cluster_usage = vb.get(codebook_size, "cluster_usage")?;
-90        let embedding_sum = vb.get((codebook_size, dim), "embed_sum")?;
-91        let embedding = {
-92            let cluster_usage = cluster_usage.maximum(epsilon)?.unsqueeze(1)?;
-93            embedding_sum.broadcast_div(&cluster_usage)?
-94        };
-95        let c2 = ((&embedding * &embedding)?.sum(D::Minus1)? / 2.0)?;
-96        Ok(Self {
-97            initialized,
-98            cluster_usage,
-99            embedding_sum,
-100            embedding,
-101            c2,
-102            epsilon,
-103            dim,
-104            span_encode: tracing::span!(tracing::Level::TRACE, "euclidean-encode"),
-105            span_decode: tracing::span!(tracing::Level::TRACE, "euclidean-encode"),
-106        })
-107    }
-108
-109    pub fn encode_very_slow(&self, xs: &Tensor) -> Result<Tensor> {
-110        let _enter = self.span_encode.enter();
-111        let mut target_shape = xs.dims().to_vec();
-112        target_shape.pop();
-113        let xs = xs.flatten_to(D::Minus2)?;
-114        let _ = xs.dims2()?;
-115        // TODO: avoid repeating this.
-116        let cluster_usage = self.cluster_usage.maximum(self.epsilon)?.unsqueeze(1)?;
-117        let embedding = self.embedding_sum.broadcast_div(&cluster_usage)?;
-118        // Manual cdist implementation.
-119        let diff = xs.unsqueeze(1)?.broadcast_sub(&embedding.unsqueeze(0)?)?;
-120        let dists = diff.sqr()?.sum(D::Minus1)?;
-121        let codes = dists.argmin(D::Minus1)?;
-122        codes.reshape(target_shape)
-123    }
-124
-125    pub fn encode_slow(&self, xs: &Tensor) -> Result<Tensor> {
-126        let _enter = self.span_encode.enter();
-127        let mut target_shape = xs.dims().to_vec();
-128        target_shape.pop();
-129        let xs = xs.flatten_to(D::Minus2)?;
-130        let _ = xs.dims2()?;
-131        let dot_prod = xs.matmul(&self.embedding.t()?)?;
-132        let codes = self.c2.broadcast_sub(&dot_prod)?.argmin(D::Minus1)?;
-133        codes.reshape(target_shape)
-134    }
-135
-136    pub fn encode(&self, xs: &Tensor) -> Result<Tensor> {
-137        let _enter = self.span_encode.enter();
-138        let mut target_shape = xs.dims().to_vec();
-139        target_shape.pop();
-140        let xs = xs.flatten_to(D::Minus2)?;
-141        let _ = xs.dims2()?;
-142        let codes = Tensor::apply_op2(&xs, &self.embedding, CodebookEncode)?;
-143        codes.reshape(target_shape)
-144    }
-145
-146    pub fn decode(&self, indexes: &Tensor) -> Result<Tensor> {
-147        let _enter = self.span_decode.enter();
-148        // let ys = candle_nn::Embedding::new(self.embedding.clone(), self.dim).forward(xs)?;
-149        let mut final_dims = indexes.dims().to_vec();
-150        final_dims.push(self.dim);
-151        let indexes = indexes.flatten_all()?;
-152        let values = self.embedding.index_select(&indexes, 0)?;
-153        let values = values.reshape(final_dims)?;
-154        Ok(values)
-155    }
-156}
-157
-158#[allow(unused)]
-159#[derive(Debug, Clone)]
-160pub struct VectorQuantization {
-161    project_in: Option<Linear>,
-162    project_out: Option<Linear>,
-163    codebook: EuclideanCodebook,
-164}
-165
-166impl VectorQuantization {
-167    pub fn new(
-168        dim: usize,
-169        codebook_size: usize,
-170        codebook_dim: Option<usize>,
-171        vb: VarBuilder,
-172    ) -> Result<Self> {
-173        let codebook_dim = codebook_dim.unwrap_or(dim);
-174        let (project_in, project_out) = if codebook_dim == dim {
-175            (None, None)
-176        } else {
-177            let p_in = linear(dim, codebook_dim, vb.pp("project_in"))?;
-178            let p_out = linear(codebook_dim, dim, vb.pp("project_out"))?;
-179            (Some(p_in), Some(p_out))
-180        };
-181        let codebook = EuclideanCodebook::new(codebook_dim, codebook_size, vb.pp("codebook"))?;
-182        Ok(Self {
-183            project_in,
-184            project_out,
-185            codebook,
-186        })
-187    }
-188
-189    pub fn encode(&self, xs: &Tensor) -> Result<Tensor> {
-190        let xs = xs.t()?.apply(&self.project_in.as_ref())?;
-191        self.codebook.encode_slow(&xs)
-192    }
-193
-194    pub fn decode(&self, codes: &Tensor) -> Result<Tensor> {
-195        let quantized = self.codebook.decode(codes)?;
-196        let quantized = match &self.project_out {
-197            None => quantized,
-198            Some(p) => quantized.apply(p)?,
-199        };
-200        quantized.t()
-201    }
-202}
-203
-204#[derive(Debug, Clone)]
-205pub struct ResidualVectorQuantization {
-206    layers: Vec<VectorQuantization>,
-207}
-208
-209impl ResidualVectorQuantization {
-210    pub fn new(
-211        n_q: usize,
-212        dim: usize,
-213        codebook_size: usize,
-214        codebook_dim: Option<usize>,
-215        vb: VarBuilder,
-216    ) -> Result<Self> {
-217        let vb = vb.pp("layers");
-218        let mut layers = Vec::with_capacity(n_q);
-219        for i in 0..n_q {
-220            let layer = VectorQuantization::new(dim, codebook_size, codebook_dim, vb.pp(i))?;
-221            layers.push(layer)
-222        }
-223        Ok(Self { layers })
-224    }
-225
-226    pub fn encode(&self, xs: &Tensor) -> Result<Tensor> {
-227        let mut codes = Vec::with_capacity(self.layers.len());
-228        let mut residual = xs.clone();
-229        for layer in self.layers.iter() {
-230            let indices = layer.encode(&residual)?;
-231            let quantized = layer.decode(&indices)?;
-232            residual = (residual - quantized)?;
-233            codes.push(indices)
-234        }
-235        Tensor::stack(&codes, 0)
-236    }
-237
-238    pub fn decode(&self, xs: &Tensor) -> Result<Tensor> {
-239        if self.layers.is_empty() {
-240            candle::bail!("empty layers in ResidualVectorQuantization")
-241        }
-242        if self.layers.len() != xs.dim(0)? {
-243            candle::bail!(
-244                "mismatch between the number of layers {} and the code shape {:?}",
-245                self.layers.len(),
-246                xs.shape()
-247            )
-248        }
-249        let mut quantized = self.layers[0].decode(&xs.i(0)?)?;
-250        for (i, layer) in self.layers.iter().enumerate().skip(1) {
-251            let xs = xs.i(i)?;
-252            quantized = (quantized + layer.decode(&xs))?
-253        }
-254        Ok(quantized)
-255    }
-256}
-257
-258#[allow(unused)]
-259#[derive(Debug, Clone)]
-260pub struct ResidualVectorQuantizer {
-261    vq: ResidualVectorQuantization,
-262    input_proj: Option<candle_nn::Conv1d>,
-263    output_proj: Option<candle_nn::Conv1d>,
-264}
-265
-266impl ResidualVectorQuantizer {
-267    pub fn new(
-268        dim: usize,
-269        input_dim: Option<usize>,
-270        output_dim: Option<usize>,
-271        n_q: usize,
-272        bins: usize,
-273        force_projection: bool,
-274        vb: VarBuilder,
-275    ) -> Result<Self> {
-276        let input_dim = input_dim.unwrap_or(dim);
-277        let output_dim = output_dim.unwrap_or(dim);
-278
-279        let input_proj = if input_dim == dim && !force_projection {
-280            None
-281        } else {
-282            let c = candle_nn::conv1d_no_bias(
-283                input_dim,
-284                dim,
-285                1,
-286                Default::default(),
-287                vb.pp("input_proj"),
-288            )?;
-289            Some(c)
-290        };
-291        let output_proj = if output_dim == dim && !force_projection {
-292            None
-293        } else {
-294            let c = candle_nn::conv1d_no_bias(
-295                dim,
-296                output_dim,
-297                1,
-298                Default::default(),
-299                vb.pp("output_proj"),
-300            )?;
-301            Some(c)
-302        };
-303
-304        let vq = ResidualVectorQuantization::new(
-305            n_q, dim, /* codebook_size */ bins, /* codebook_dim */ None, vb,
-306        )?;
-307        Ok(Self {
-308            vq,
-309            input_proj,
-310            output_proj,
-311        })
-312    }
-313
-314    pub fn encode(&self, xs: &Tensor) -> Result<Tensor> {
-315        let codes = self.vq.encode(&xs.apply(&self.input_proj.as_ref())?)?;
-316        codes.transpose(0, 1)
-317    }
-318
-319    pub fn decode(&self, codes: &Tensor) -> Result<Tensor> {
-320        // codes is [B, K, T], with T frames, K nb of codebooks, vq.decode expects [K, B, T].
-321        let codes = codes.transpose(0, 1)?;
-322        let quantized = self.vq.decode(&codes)?;
-323        match &self.output_proj {
-324            None => Ok(quantized),
-325            Some(p) => quantized.apply(p),
-326        }
-327    }
-328}
-329
-330// we do not use any codebook_offset at the moment. When reconstructing the codes, we could just
-331// concatenate the indexes.
-332#[derive(Debug, Clone)]
-333pub struct SplitResidualVectorQuantizer {
-334    rvq_first: ResidualVectorQuantizer,
-335    rvq_rest: ResidualVectorQuantizer,
-336    n_q: usize,
-337    span_encode: tracing::Span,
-338    span_decode: tracing::Span,
-339}
-340
-341impl SplitResidualVectorQuantizer {
-342    pub fn new(
-343        dim: usize,
-344        input_dim: Option<usize>,
-345        output_dim: Option<usize>,
-346        n_q: usize,
-347        bins: usize,
-348        vb: VarBuilder,
-349    ) -> Result<Self> {
-350        let rvq_first = ResidualVectorQuantizer::new(
-351            dim,
-352            input_dim,
-353            output_dim,
-354            1,
-355            bins,
-356            true,
-357            vb.pp("semantic_residual_vector_quantizer"),
-358        )?;
-359        let rvq_rest = ResidualVectorQuantizer::new(
-360            dim,
-361            input_dim,
-362            output_dim,
-363            n_q - 1,
-364            bins,
-365            true,
-366            vb.pp("acoustic_residual_vector_quantizer"),
-367        )?;
-368        let span_encode = tracing::span!(tracing::Level::TRACE, "split-rvq-encode");
-369        let span_decode = tracing::span!(tracing::Level::TRACE, "split-rvq-decode");
-370        Ok(Self {
-371            rvq_first,
-372            rvq_rest,
-373            n_q,
-374            span_encode,
-375            span_decode,
-376        })
-377    }
-378
-379    pub fn encode(&self, xs: &Tensor) -> Result<Tensor> {
-380        let _enter = self.span_encode.enter();
-381        let codes = self.rvq_first.encode(xs)?;
-382        if self.n_q > 1 {
-383            // We encode xs again here rather than the residual. The decomposition is not
-384            // hierarchical but rather having semantic tokens for rvq_first and the acoustic tokens
-385            // for rvq_rest.
-386            let rest_codes = self.rvq_rest.encode(xs)?;
-387            Tensor::cat(&[codes, rest_codes], 1)
-388        } else {
-389            Ok(codes)
-390        }
-391    }
-392
-393    pub fn decode(&self, codes: &Tensor) -> Result<Tensor> {
-394        // codes is [B, K, T], with T frames, K nb of codebooks.
-395        let _enter = self.span_decode.enter();
-396        let quantized = self.rvq_first.decode(&codes.i((.., ..1))?)?;
-397        let quantized = if self.n_q > 1 {
-398            (quantized + self.rvq_rest.decode(&codes.i((.., 1..))?))?
-399        } else {
-400            quantized
-401        };
-402        Ok(quantized)
-403    }
-404}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mimi/seanet.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mimi/seanet.rs.html deleted file mode 100644 index a7fa4f6..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mimi/seanet.rs.html +++ /dev/null @@ -1,466 +0,0 @@ -seanet.rs - source

candle_transformers/models/mimi/
seanet.rs

1// Copyright (c) Kyutai, all rights reserved.
-2// This source code is licensed under the license found in the
-3// LICENSE file in the root directory of this source tree.
-4
-5use candle::{streaming, Module, Result, StreamTensor, StreamingModule, Tensor};
-6use candle_nn::VarBuilder;
-7
-8use super::conv::{StreamableConv1d, StreamableConvTranspose1d};
-9
-10#[derive(Debug, Clone)]
-11pub struct Config {
-12    pub dimension: usize,
-13    pub channels: usize,
-14    pub causal: bool,
-15    pub n_filters: usize,
-16    pub n_residual_layers: usize,
-17    pub ratios: Vec<usize>,
-18    pub activation: candle_nn::Activation,
-19    pub norm: super::conv::Norm,
-20    pub kernel_size: usize,
-21    pub residual_kernel_size: usize,
-22    pub last_kernel_size: usize,
-23    pub dilation_base: usize,
-24    pub pad_mode: super::conv::PadMode,
-25    pub true_skip: bool,
-26    pub compress: usize,
-27    pub lstm: usize,
-28    pub disable_norm_outer_blocks: usize,
-29    pub final_activation: Option<candle_nn::Activation>,
-30}
-31
-32#[derive(Debug, Clone)]
-33pub struct SeaNetResnetBlock {
-34    block: Vec<StreamableConv1d>,
-35    shortcut: Option<StreamableConv1d>,
-36    activation: candle_nn::Activation,
-37    skip_op: candle::StreamingBinOp,
-38    span: tracing::Span,
-39}
-40
-41impl SeaNetResnetBlock {
-42    #[allow(clippy::too_many_arguments)]
-43    pub fn new(
-44        dim: usize,
-45        k_sizes_and_dilations: &[(usize, usize)],
-46        activation: candle_nn::Activation,
-47        norm: Option<super::conv::Norm>,
-48        causal: bool,
-49        pad_mode: super::conv::PadMode,
-50        compress: usize,
-51        true_skip: bool,
-52        vb: VarBuilder,
-53    ) -> Result<Self> {
-54        let mut block = Vec::with_capacity(k_sizes_and_dilations.len());
-55        let hidden = dim / compress;
-56        let vb_b = vb.pp("block");
-57        for (i, (k_size, dilation)) in k_sizes_and_dilations.iter().enumerate() {
-58            let in_c = if i == 0 { dim } else { hidden };
-59            let out_c = if i == k_sizes_and_dilations.len() - 1 {
-60                dim
-61            } else {
-62                hidden
-63            };
-64            let c = StreamableConv1d::new(
-65                in_c,
-66                out_c,
-67                /* k_size */ *k_size,
-68                /* stride */ 1,
-69                /* dilation */ *dilation,
-70                /* groups */ 1,
-71                /* bias */ true,
-72                /* causal */ causal,
-73                /* norm */ norm,
-74                /* pad_mode */ pad_mode,
-75                vb_b.pp(2 * i + 1),
-76            )?;
-77            block.push(c)
-78        }
-79        let shortcut = if true_skip {
-80            None
-81        } else {
-82            let c = StreamableConv1d::new(
-83                dim,
-84                dim,
-85                /* k_size */ 1,
-86                /* stride */ 1,
-87                /* dilation */ 1,
-88                /* groups */ 1,
-89                /* bias */ true,
-90                /* causal */ causal,
-91                /* norm */ norm,
-92                /* pad_mode */ pad_mode,
-93                vb.pp("shortcut"),
-94            )?;
-95            Some(c)
-96        };
-97        Ok(Self {
-98            block,
-99            shortcut,
-100            activation,
-101            skip_op: streaming::StreamingBinOp::new(streaming::BinOp::Add, candle::D::Minus1),
-102            span: tracing::span!(tracing::Level::TRACE, "sea-resnet"),
-103        })
-104    }
-105}
-106
-107impl Module for SeaNetResnetBlock {
-108    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-109        let _enter = self.span.enter();
-110        let mut ys = xs.clone();
-111        for block in self.block.iter() {
-112            ys = ys.apply(&self.activation)?.apply(block)?;
-113        }
-114        match self.shortcut.as_ref() {
-115            None => ys + xs,
-116            Some(shortcut) => ys + xs.apply(shortcut),
-117        }
-118    }
-119}
-120
-121impl StreamingModule for SeaNetResnetBlock {
-122    fn reset_state(&mut self) {
-123        for block in self.block.iter_mut() {
-124            block.reset_state()
-125        }
-126        if let Some(shortcut) = self.shortcut.as_mut() {
-127            shortcut.reset_state()
-128        }
-129    }
-130
-131    fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor> {
-132        let _enter = self.span.enter();
-133        let mut ys = xs.clone();
-134        for block in self.block.iter_mut() {
-135            ys = block.step(&ys.apply(&self.activation)?)?;
-136        }
-137        match self.shortcut.as_ref() {
-138            None => self.skip_op.step(&ys, xs),
-139            Some(shortcut) => self.skip_op.step(&ys, &xs.apply(shortcut)?),
-140        }
-141    }
-142}
-143
-144#[derive(Debug, Clone)]
-145struct EncoderLayer {
-146    residuals: Vec<SeaNetResnetBlock>,
-147    downsample: StreamableConv1d,
-148}
-149
-150#[derive(Debug, Clone)]
-151pub struct SeaNetEncoder {
-152    init_conv1d: StreamableConv1d,
-153    activation: candle_nn::Activation,
-154    layers: Vec<EncoderLayer>,
-155    final_conv1d: StreamableConv1d,
-156    span: tracing::Span,
-157}
-158
-159impl SeaNetEncoder {
-160    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-161        if cfg.lstm > 0 {
-162            candle::bail!("seanet lstm is not supported")
-163        }
-164        let n_blocks = 2 + cfg.ratios.len();
-165        let mut mult = 1usize;
-166        let init_norm = if cfg.disable_norm_outer_blocks >= 1 {
-167            None
-168        } else {
-169            Some(cfg.norm)
-170        };
-171        let mut layer_idx = 0;
-172        let vb = vb.pp("layers");
-173        let init_conv1d = StreamableConv1d::new(
-174            cfg.channels,
-175            mult * cfg.n_filters,
-176            cfg.kernel_size,
-177            /* stride */ 1,
-178            /* dilation */ 1,
-179            /* groups */ 1,
-180            /* bias */ true,
-181            /* causal */ cfg.causal,
-182            /* norm */ init_norm,
-183            /* pad_mode */ cfg.pad_mode,
-184            vb.pp(layer_idx),
-185        )?;
-186        layer_idx += 1;
-187        let mut layers = Vec::with_capacity(cfg.ratios.len());
-188
-189        for (i, &ratio) in cfg.ratios.iter().rev().enumerate() {
-190            let norm = if cfg.disable_norm_outer_blocks >= i + 2 {
-191                None
-192            } else {
-193                Some(cfg.norm)
-194            };
-195            let mut residuals = Vec::with_capacity(cfg.n_residual_layers);
-196            for j in 0..cfg.n_residual_layers {
-197                let resnet_block = SeaNetResnetBlock::new(
-198                    mult * cfg.n_filters,
-199                    &[
-200                        (cfg.residual_kernel_size, cfg.dilation_base.pow(j as u32)),
-201                        (1, 1),
-202                    ],
-203                    cfg.activation,
-204                    norm,
-205                    cfg.causal,
-206                    cfg.pad_mode,
-207                    cfg.compress,
-208                    cfg.true_skip,
-209                    vb.pp(layer_idx),
-210                )?;
-211                residuals.push(resnet_block);
-212                layer_idx += 1;
-213            }
-214            let downsample = StreamableConv1d::new(
-215                mult * cfg.n_filters,
-216                mult * cfg.n_filters * 2,
-217                /* k_size */ ratio * 2,
-218                /* stride */ ratio,
-219                /* dilation */ 1,
-220                /* groups */ 1,
-221                /* bias */ true,
-222                /* causal */ true,
-223                /* norm */ norm,
-224                /* pad_mode */ cfg.pad_mode,
-225                vb.pp(layer_idx + 1),
-226            )?;
-227            layer_idx += 2;
-228            let layer = EncoderLayer {
-229                downsample,
-230                residuals,
-231            };
-232            layers.push(layer);
-233            mult *= 2
-234        }
-235
-236        let final_norm = if cfg.disable_norm_outer_blocks >= n_blocks {
-237            None
-238        } else {
-239            Some(cfg.norm)
-240        };
-241        let final_conv1d = StreamableConv1d::new(
-242            mult * cfg.n_filters,
-243            cfg.dimension,
-244            cfg.last_kernel_size,
-245            /* stride */ 1,
-246            /* dilation */ 1,
-247            /* groups */ 1,
-248            /* bias */ true,
-249            /* causal */ cfg.causal,
-250            /* norm */ final_norm,
-251            /* pad_mode */ cfg.pad_mode,
-252            vb.pp(layer_idx + 1),
-253        )?;
-254        Ok(Self {
-255            init_conv1d,
-256            activation: cfg.activation,
-257            layers,
-258            final_conv1d,
-259            span: tracing::span!(tracing::Level::TRACE, "sea-encoder"),
-260        })
-261    }
-262}
-263
-264impl Module for SeaNetEncoder {
-265    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-266        let _enter = self.span.enter();
-267        let mut xs = xs.apply(&self.init_conv1d)?;
-268        for layer in self.layers.iter() {
-269            for residual in layer.residuals.iter() {
-270                xs = xs.apply(residual)?
-271            }
-272            xs = xs.apply(&self.activation)?.apply(&layer.downsample)?;
-273        }
-274        xs.apply(&self.activation)?.apply(&self.final_conv1d)
-275    }
-276}
-277
-278impl StreamingModule for SeaNetEncoder {
-279    fn reset_state(&mut self) {
-280        self.init_conv1d.reset_state();
-281        self.layers.iter_mut().for_each(|v| {
-282            v.residuals.iter_mut().for_each(|v| v.reset_state());
-283            v.downsample.reset_state()
-284        });
-285        self.final_conv1d.reset_state();
-286    }
-287
-288    fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor> {
-289        let _enter = self.span.enter();
-290        let mut xs = self.init_conv1d.step(xs)?;
-291        for layer in self.layers.iter_mut() {
-292            for residual in layer.residuals.iter_mut() {
-293                xs = residual.step(&xs)?;
-294            }
-295            xs = layer.downsample.step(&xs.apply(&self.activation)?)?;
-296        }
-297        self.final_conv1d.step(&xs.apply(&self.activation)?)
-298    }
-299}
-300
-301#[derive(Debug, Clone)]
-302struct DecoderLayer {
-303    upsample: StreamableConvTranspose1d,
-304    residuals: Vec<SeaNetResnetBlock>,
-305}
-306
-307#[derive(Debug, Clone)]
-308pub struct SeaNetDecoder {
-309    init_conv1d: StreamableConv1d,
-310    activation: candle_nn::Activation,
-311    layers: Vec<DecoderLayer>,
-312    final_conv1d: StreamableConv1d,
-313    final_activation: Option<candle_nn::Activation>,
-314    span: tracing::Span,
-315}
-316
-317impl SeaNetDecoder {
-318    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-319        if cfg.lstm > 0 {
-320            candle::bail!("seanet lstm is not supported")
-321        }
-322        let n_blocks = 2 + cfg.ratios.len();
-323        let mut mult = 1 << cfg.ratios.len();
-324        let init_norm = if cfg.disable_norm_outer_blocks == n_blocks {
-325            None
-326        } else {
-327            Some(cfg.norm)
-328        };
-329        let mut layer_idx = 0;
-330        let vb = vb.pp("layers");
-331        let init_conv1d = StreamableConv1d::new(
-332            cfg.dimension,
-333            mult * cfg.n_filters,
-334            cfg.kernel_size,
-335            /* stride */ 1,
-336            /* dilation */ 1,
-337            /* groups */ 1,
-338            /* bias */ true,
-339            /* causal */ cfg.causal,
-340            /* norm */ init_norm,
-341            /* pad_mode */ cfg.pad_mode,
-342            vb.pp(layer_idx),
-343        )?;
-344        layer_idx += 1;
-345        let mut layers = Vec::with_capacity(cfg.ratios.len());
-346        for (i, &ratio) in cfg.ratios.iter().enumerate() {
-347            let norm = if cfg.disable_norm_outer_blocks + i + 1 >= n_blocks {
-348                None
-349            } else {
-350                Some(cfg.norm)
-351            };
-352            let upsample = StreamableConvTranspose1d::new(
-353                mult * cfg.n_filters,
-354                mult * cfg.n_filters / 2,
-355                /* k_size */ ratio * 2,
-356                /* stride */ ratio,
-357                /* groups */ 1,
-358                /* bias */ true,
-359                /* causal */ true,
-360                /* norm */ norm,
-361                vb.pp(layer_idx + 1),
-362            )?;
-363            layer_idx += 2;
-364
-365            let mut residuals = Vec::with_capacity(cfg.n_residual_layers);
-366            for j in 0..cfg.n_residual_layers {
-367                let resnet_block = SeaNetResnetBlock::new(
-368                    mult * cfg.n_filters / 2,
-369                    &[
-370                        (cfg.residual_kernel_size, cfg.dilation_base.pow(j as u32)),
-371                        (1, 1),
-372                    ],
-373                    cfg.activation,
-374                    norm,
-375                    cfg.causal,
-376                    cfg.pad_mode,
-377                    cfg.compress,
-378                    cfg.true_skip,
-379                    vb.pp(layer_idx),
-380                )?;
-381                residuals.push(resnet_block);
-382                layer_idx += 1;
-383            }
-384            let layer = DecoderLayer {
-385                upsample,
-386                residuals,
-387            };
-388            layers.push(layer);
-389            mult /= 2
-390        }
-391        let final_norm = if cfg.disable_norm_outer_blocks >= 1 {
-392            None
-393        } else {
-394            Some(cfg.norm)
-395        };
-396        let final_conv1d = StreamableConv1d::new(
-397            cfg.n_filters,
-398            cfg.channels,
-399            cfg.last_kernel_size,
-400            /* stride */ 1,
-401            /* dilation */ 1,
-402            /* groups */ 1,
-403            /* bias */ true,
-404            /* causal */ cfg.causal,
-405            /* norm */ final_norm,
-406            /* pad_mode */ cfg.pad_mode,
-407            vb.pp(layer_idx + 1),
-408        )?;
-409        Ok(Self {
-410            init_conv1d,
-411            activation: cfg.activation,
-412            layers,
-413            final_conv1d,
-414            final_activation: cfg.final_activation,
-415            span: tracing::span!(tracing::Level::TRACE, "sea-decoder"),
-416        })
-417    }
-418}
-419
-420impl Module for SeaNetDecoder {
-421    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-422        let _enter = self.span.enter();
-423        let mut xs = xs.apply(&self.init_conv1d)?;
-424        for layer in self.layers.iter() {
-425            xs = xs.apply(&self.activation)?.apply(&layer.upsample)?;
-426            for residual in layer.residuals.iter() {
-427                xs = xs.apply(residual)?
-428            }
-429        }
-430        let xs = xs.apply(&self.activation)?.apply(&self.final_conv1d)?;
-431        let xs = match self.final_activation.as_ref() {
-432            None => xs,
-433            Some(act) => xs.apply(act)?,
-434        };
-435        Ok(xs)
-436    }
-437}
-438
-439impl StreamingModule for SeaNetDecoder {
-440    fn reset_state(&mut self) {
-441        self.init_conv1d.reset_state();
-442        self.layers.iter_mut().for_each(|v| {
-443            v.residuals.iter_mut().for_each(|v| v.reset_state());
-444            v.upsample.reset_state()
-445        });
-446        self.final_conv1d.reset_state();
-447    }
-448
-449    fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor> {
-450        let _enter = self.span.enter();
-451        let mut xs = self.init_conv1d.step(xs)?;
-452        for layer in self.layers.iter_mut() {
-453            xs = layer.upsample.step(&xs.apply(&self.activation)?)?;
-454            for residual in layer.residuals.iter_mut() {
-455                xs = residual.step(&xs)?;
-456            }
-457        }
-458        let xs = self.final_conv1d.step(&xs.apply(&self.activation)?)?;
-459        let xs = match self.final_activation.as_ref() {
-460            None => xs,
-461            Some(act) => xs.apply(act)?,
-462        };
-463        Ok(xs)
-464    }
-465}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mimi/transformer.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mimi/transformer.rs.html deleted file mode 100644 index b4923f4..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mimi/transformer.rs.html +++ /dev/null @@ -1,778 +0,0 @@ -transformer.rs - source

candle_transformers/models/mimi/
transformer.rs

1// Copyright (c) Kyutai, all rights reserved.
-2// This source code is licensed under the license found in the
-3// LICENSE file in the root directory of this source tree.
-4
-5use candle::{DType, Device, IndexOp, Module, Result, StreamTensor, StreamingModule, Tensor, D};
-6use candle_nn::{linear_no_bias, Linear, VarBuilder};
-7use std::sync::Arc;
-8
-9fn linear(in_d: usize, out_d: usize, bias: bool, vb: VarBuilder) -> Result<Linear> {
-10    if bias {
-11        candle_nn::linear(in_d, out_d, vb)
-12    } else {
-13        linear_no_bias(in_d, out_d, vb)
-14    }
-15}
-16
-17#[derive(Debug, Copy, Clone, PartialEq, Eq)]
-18pub enum PositionalEmbedding {
-19    Rope,
-20    Sin,
-21    None,
-22}
-23
-24#[derive(Debug, Clone)]
-25pub struct Config {
-26    pub d_model: usize,
-27    pub num_heads: usize,
-28    pub num_layers: usize,
-29    pub causal: bool,
-30    pub norm_first: bool,
-31    pub bias_ff: bool,
-32    pub bias_attn: bool,
-33    pub layer_scale: Option<f64>,
-34    pub positional_embedding: PositionalEmbedding,
-35    pub use_conv_block: bool,
-36    pub cross_attention: bool,
-37    pub conv_kernel_size: usize,
-38    pub use_conv_bias: bool,
-39    pub gating: Option<candle_nn::Activation>,
-40    pub norm: super::NormType,
-41    pub context: usize,
-42    pub max_period: usize,
-43    pub max_seq_len: usize,
-44
-45    pub kv_repeat: usize,
-46    pub dim_feedforward: usize,
-47    pub conv_layout: bool,
-48}
-49
-50#[derive(Debug, Clone)]
-51pub struct RotaryEmbedding {
-52    sin: Tensor,
-53    cos: Tensor,
-54    span: tracing::Span,
-55}
-56
-57impl RotaryEmbedding {
-58    pub fn new(dim: usize, max_seq_len: usize, theta: f32, dev: &Device) -> Result<Self> {
-59        let inv_freq: Vec<_> = (0..dim)
-60            .step_by(2)
-61            .map(|i| 1f32 / theta.powf(i as f32 / dim as f32))
-62            .collect();
-63        let inv_freq_len = inv_freq.len();
-64        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?;
-65        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-66            .to_dtype(DType::F32)?
-67            .reshape((max_seq_len, 1))?;
-68        let freqs = t.matmul(&inv_freq)?;
-69        Ok(Self {
-70            sin: freqs.sin()?,
-71            cos: freqs.cos()?,
-72            span: tracing::span!(tracing::Level::TRACE, "rot"),
-73        })
-74    }
-75
-76    pub fn apply_rotary_emb(&self, qk: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-77        let _enter = self.span.enter();
-78        let (_b_size, _nheads, seqlen, _headdim) = qk.dims4()?;
-79        let qk_dtype = qk.dtype();
-80        let c = self.cos.narrow(0, seqlen_offset, seqlen)?;
-81        let s = self.sin.narrow(0, seqlen_offset, seqlen)?;
-82        candle_nn::rotary_emb::rope_i(&qk.to_dtype(DType::F32)?, &c, &s)?.to_dtype(qk_dtype)
-83    }
-84}
-85
-86#[derive(Debug, Clone)]
-87pub struct LayerScale {
-88    scale: Tensor,
-89}
-90
-91impl LayerScale {
-92    pub fn new(d_model: usize, _init: f64, vb: VarBuilder) -> Result<Self> {
-93        let scale = vb.get(d_model, "scale")?;
-94        Ok(Self { scale })
-95    }
-96}
-97
-98impl Module for LayerScale {
-99    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-100        xs.broadcast_mul(&self.scale)
-101    }
-102}
-103
-104#[derive(Debug, Clone)]
-105pub struct StreamingMultiheadAttention {
-106    q_proj: Linear,
-107    k_proj: Linear,
-108    v_proj: Linear,
-109    out_proj: Linear,
-110    kv_repeat: usize,
-111    num_heads: usize,
-112    context: usize,
-113    neg_inf: Tensor,
-114    rope: Option<Arc<RotaryEmbedding>>,
-115    kv_cache: candle_nn::kv_cache::RotatingKvCache,
-116    pos: usize,
-117    use_flash_attn: bool,
-118    span: tracing::Span,
-119}
-120
-121impl StreamingMultiheadAttention {
-122    pub fn new(rope: &Option<Arc<RotaryEmbedding>>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-123        let embed_dim = cfg.d_model;
-124        let num_kv = cfg.num_heads / cfg.kv_repeat;
-125        let kv_dim = num_kv * (embed_dim / cfg.num_heads);
-126        let q_proj = linear(embed_dim, embed_dim, cfg.bias_attn, vb.pp("q_proj"))?;
-127        let k_proj = linear(embed_dim, kv_dim, cfg.bias_attn, vb.pp("k_proj"))?;
-128        let v_proj = linear(embed_dim, kv_dim, cfg.bias_attn, vb.pp("v_proj"))?;
-129        let out_proj = linear(embed_dim, embed_dim, cfg.bias_attn, vb.pp("o_proj"))?;
-130        let neg_inf = Tensor::new(f32::NEG_INFINITY, vb.device())?.to_dtype(vb.dtype())?;
-131        Ok(Self {
-132            q_proj,
-133            k_proj,
-134            v_proj,
-135            out_proj,
-136            rope: rope.clone(),
-137            kv_repeat: cfg.kv_repeat,
-138            num_heads: cfg.num_heads,
-139            context: cfg.context,
-140            neg_inf,
-141            kv_cache: candle_nn::kv_cache::RotatingKvCache::new(2, cfg.context),
-142            pos: 0,
-143            use_flash_attn: false,
-144            span: tracing::span!(tracing::Level::TRACE, "mha"),
-145        })
-146    }
-147
-148    pub fn forward(&mut self, xs: &Tensor, mask: Option<&Tensor>) -> Result<Tensor> {
-149        let _enter = self.span.enter();
-150        if self.kv_repeat != 1 {
-151            candle::bail!("only kv-repeat = 1 is supported")
-152        }
-153        let (b, t, hd) = xs.dims3()?;
-154        let head_dim = hd / self.num_heads;
-155        let q = xs
-156            .apply(&self.q_proj)?
-157            .reshape((b, t, self.num_heads, head_dim))?;
-158        let k = xs
-159            .apply(&self.k_proj)?
-160            .reshape((b, t, self.num_heads, head_dim))?;
-161        let v = xs
-162            .apply(&self.v_proj)?
-163            .reshape((b, t, self.num_heads, head_dim))?;
-164        // qk_layer_norm = None
-165        // kv_repeat = 1, otherwise we would need repeat_kv
-166        let mut q = q.transpose(1, 2)?.contiguous()?; // b,h,t,d
-167        let mut k = k.transpose(1, 2)?.contiguous()?; // b,h,k,d
-168        let v = v.transpose(1, 2)?.contiguous()?; // b,h,k,d
-169        if let Some(rope) = &self.rope {
-170            q = rope.apply_rotary_emb(&q, self.pos)?;
-171            k = rope.apply_rotary_emb(&k, self.pos)?;
-172        }
-173
-174        let (k, v) = {
-175            self.pos += k.dim(2)?;
-176            self.kv_cache.append(&k.contiguous()?, &v.contiguous()?)?
-177        };
-178        // The KV cache keeps all the data at the moment, we want to trim
-179        // down the part that comes from the cache to at most context to
-180        // be coherent with the mask shape we provide.
-181        let k_len = k.dim(2)?;
-182        let k_target_len = t + usize::min(self.context, k_len - t);
-183        let (k, v) = if k_target_len < k_len {
-184            let k = k.narrow(2, k_len - k_target_len, k_target_len)?;
-185            let v = v.narrow(2, k_len - k_target_len, k_target_len)?;
-186            (k, v)
-187        } else {
-188            (k.clone(), v.clone())
-189        };
-190
-191        let xs = if q.dtype() == DType::BF16 && self.use_flash_attn {
-192            let q = q.transpose(1, 2)?;
-193            let k = k.transpose(1, 2)?;
-194            let v = v.transpose(1, 2)?;
-195            let softmax_scale = 1f32 / (head_dim as f32).sqrt();
-196            flash_attn(&q, &k, &v, softmax_scale, t > 1)?.transpose(1, 2)?
-197        } else {
-198            let pre_ws = q.matmul(&k.t()?)?; // b,h,t,k
-199            let pre_ws = (pre_ws * (head_dim as f64).powf(-0.5))?;
-200
-201            let pre_ws = match mask {
-202                None => pre_ws,
-203                Some(mask) => {
-204                    let mask = mask.broadcast_left((b, self.num_heads))?;
-205                    let neg_inf = self.neg_inf.broadcast_as(pre_ws.shape())?;
-206                    mask.where_cond(&neg_inf, &pre_ws)?
-207                }
-208            };
-209
-210            let ws = candle_nn::ops::softmax_last_dim(&pre_ws)?; // b,h,t,k
-211            ws.matmul(&v)? // b,h,t,d
-212        };
-213        let xs = xs
-214            .transpose(1, 2)? // b,t,h,d
-215            .reshape((b, t, hd))?
-216            .apply(&self.out_proj)?;
-217        Ok(xs)
-218    }
-219
-220    pub fn reset_kv_cache(&mut self) {
-221        self.kv_cache.reset()
-222    }
-223
-224    pub fn set_kv_cache(&mut self, kv_cache: candle_nn::kv_cache::RotatingKvCache) {
-225        self.kv_cache = kv_cache
-226    }
-227}
-228
-229#[derive(Debug, Clone)]
-230pub struct StreamingMultiheadCrossAttention {
-231    in_proj_q: Linear,
-232    in_proj_k: Linear,
-233    in_proj_v: Linear,
-234    out_proj: Linear,
-235    kv_repeat: usize,
-236    num_heads: usize,
-237    neg_inf: Tensor,
-238    span: tracing::Span,
-239}
-240
-241impl StreamingMultiheadCrossAttention {
-242    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-243        let embed_dim = cfg.d_model;
-244        let num_kv = cfg.num_heads / cfg.kv_repeat;
-245        let kv_dim = num_kv * (embed_dim / cfg.num_heads);
-246        let out_dim = embed_dim + 2 * kv_dim;
-247        let in_proj_weight = vb.get((out_dim, embed_dim), "in_proj_weight")?;
-248        let in_proj_weight_q = in_proj_weight.narrow(0, 0, embed_dim)?;
-249        let in_proj_weight_k = in_proj_weight.narrow(0, embed_dim, kv_dim)?;
-250        let in_proj_weight_v = in_proj_weight.narrow(0, embed_dim + kv_dim, kv_dim)?;
-251        let (in_proj_bias_q, in_proj_bias_k, in_proj_bias_v) = if cfg.bias_attn {
-252            let b = vb.get(out_dim, "in_proj_bias")?;
-253            let q = b.narrow(0, 0, embed_dim)?;
-254            let k = b.narrow(0, embed_dim, kv_dim)?;
-255            let v = b.narrow(0, embed_dim + kv_dim, kv_dim)?;
-256            (Some(q), Some(k), Some(v))
-257        } else {
-258            (None, None, None)
-259        };
-260        let in_proj_q = Linear::new(in_proj_weight_q, in_proj_bias_q);
-261        let in_proj_k = Linear::new(in_proj_weight_k, in_proj_bias_k);
-262        let in_proj_v = Linear::new(in_proj_weight_v, in_proj_bias_v);
-263        let out_proj = linear(embed_dim, embed_dim, cfg.bias_attn, vb.pp("out_proj"))?;
-264        let neg_inf = Tensor::new(f32::NEG_INFINITY, vb.device())?.to_dtype(vb.dtype())?;
-265        Ok(Self {
-266            in_proj_q,
-267            in_proj_k,
-268            in_proj_v,
-269            out_proj,
-270            kv_repeat: cfg.kv_repeat,
-271            num_heads: cfg.num_heads,
-272            neg_inf,
-273            span: tracing::span!(tracing::Level::TRACE, "mhca"),
-274        })
-275    }
-276
-277    pub fn forward(&self, xs: &Tensor, ca_src: &Tensor, mask: Option<&Tensor>) -> Result<Tensor> {
-278        let _enter = self.span.enter();
-279        if self.kv_repeat != 1 {
-280            candle::bail!("only kv-repeat = 1 is supported")
-281        }
-282        let (b, t, hd) = xs.dims3()?;
-283        let head_dim = hd / self.num_heads;
-284        // time_dim = 1, layout: b,t,h,d
-285        let q = xs.apply(&self.in_proj_q)?;
-286        let k = ca_src.apply(&self.in_proj_k)?;
-287        let v = ca_src.apply(&self.in_proj_v)?;
-288        let (ca_b, ca_t, ca_dim) = k.dims3()?;
-289        let q = q.reshape((b, t, self.num_heads, head_dim))?;
-290        let k = k.reshape((ca_b, ca_t, ca_dim / head_dim, head_dim))?;
-291        let v = v.reshape((ca_b, ca_t, ca_dim / head_dim, head_dim))?;
-292        // qk_layer_norm = None
-293        // kv_repeat = 1, otherwise we would need repeat_kv
-294        let q = q.transpose(1, 2)?.contiguous()?; // b,h,t,d
-295        let k = k.transpose(1, 2)?.contiguous()?; // b,h,k,d
-296        let v = v.transpose(1, 2)?.contiguous()?; // b,h,k,d
-297
-298        let pre_ws = q.matmul(&k.t()?)?; // b,h,t,k
-299        let pre_ws = (pre_ws * (head_dim as f64).powf(-0.5))?;
-300
-301        let pre_ws = match mask {
-302            None => pre_ws,
-303            Some(mask) => {
-304                let mask = mask.broadcast_left((b, self.num_heads))?;
-305                let neg_inf = self.neg_inf.broadcast_as(pre_ws.shape())?;
-306                mask.where_cond(&neg_inf, &pre_ws)?
-307            }
-308        };
-309
-310        let ws = candle_nn::ops::softmax_last_dim(&pre_ws)?; // b,h,t,k
-311        let xs = ws.matmul(&v)?; // b,h,t,d
-312        let xs = xs
-313            .transpose(1, 2)? // b,t,h,d
-314            .reshape((b, t, hd))?
-315            .apply(&self.out_proj)?;
-316        Ok(xs)
-317    }
-318}
-319
-320#[derive(Debug, Clone)]
-321pub enum Mlp {
-322    NoGating {
-323        span1: tracing::Span,
-324        linear1: Linear,
-325        span2: tracing::Span,
-326        linear2: Linear,
-327        span: tracing::Span,
-328    },
-329    Gating {
-330        linear_in: Linear,
-331        linear_out: Linear,
-332        activation: candle_nn::Activation,
-333        span: tracing::Span,
-334    },
-335}
-336
-337impl Mlp {
-338    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-339        let d_model = cfg.d_model;
-340        let span = tracing::span!(tracing::Level::TRACE, "mlp");
-341
-342        match cfg.gating {
-343            None => {
-344                let span1 = tracing::span!(tracing::Level::TRACE, "lin1");
-345                let span2 = tracing::span!(tracing::Level::TRACE, "lin2");
-346                let linear1 = linear(d_model, cfg.dim_feedforward, cfg.bias_ff, vb.pp("mlp.fc1"))?;
-347                let linear2 = linear(cfg.dim_feedforward, d_model, cfg.bias_ff, vb.pp("mlp.fc2"))?;
-348                Ok(Self::NoGating {
-349                    linear1,
-350                    linear2,
-351                    span,
-352                    span1,
-353                    span2,
-354                })
-355            }
-356            Some(activation) => {
-357                let vb = vb.pp("gating");
-358                let hidden = if cfg.dim_feedforward == 4 * d_model {
-359                    11 * d_model / 4
-360                } else {
-361                    2 * cfg.dim_feedforward / 3
-362                };
-363                // TODO: Maybe use bias_ff here?
-364                let linear_in = linear(d_model, 2 * hidden, false, vb.pp("linear_in"))?;
-365                let linear_out = linear(hidden, d_model, false, vb.pp("linear_out"))?;
-366                Ok(Self::Gating {
-367                    linear_in,
-368                    linear_out,
-369                    activation,
-370                    span,
-371                })
-372            }
-373        }
-374    }
-375}
-376
-377impl Module for Mlp {
-378    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-379        match self {
-380            Self::NoGating {
-381                linear1,
-382                linear2,
-383                span,
-384                span1,
-385                span2,
-386            } => {
-387                let _enter = span.enter();
-388                let xs = {
-389                    let _enter = span1.enter();
-390                    xs.apply(linear1)?
-391                };
-392                let xs = xs.gelu_erf()?;
-393                {
-394                    let _enter = span2.enter();
-395                    xs.apply(linear2)
-396                }
-397            }
-398            Self::Gating {
-399                linear_in,
-400                linear_out,
-401                activation,
-402                span,
-403            } => {
-404                let _enter = span.enter();
-405                let xs = xs.apply(linear_in)?;
-406                let (b, t, _) = xs.dims3()?;
-407                let xs = xs.reshape((b, t, 2, ()))?;
-408                let xs = (xs.i((.., .., 0))?.apply(activation)? * xs.i((.., .., 1))?)?;
-409                xs.apply(linear_out)
-410            }
-411        }
-412    }
-413}
-414
-415#[derive(Debug, Clone)]
-416pub struct RmsNorm {
-417    pub(crate) alpha: Tensor,
-418    pub(crate) eps: f32,
-419}
-420
-421impl RmsNorm {
-422    pub fn new(d_model: usize, eps: f32, vb: VarBuilder) -> Result<Self> {
-423        let alpha = vb.get((1, 1, d_model), "alpha")?.reshape(d_model)?;
-424        Ok(Self { alpha, eps })
-425    }
-426}
-427
-428impl Module for RmsNorm {
-429    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-430        candle_nn::ops::rms_norm(xs, &self.alpha, self.eps)
-431    }
-432}
-433
-434#[derive(Debug, Clone)]
-435pub enum Norm {
-436    LayerNorm(candle_nn::LayerNorm),
-437    RmsNorm(RmsNorm),
-438}
-439
-440impl Norm {
-441    pub fn new(d_model: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-442        let norm = match cfg.norm {
-443            super::NormType::LayerNorm => {
-444                let norm = candle_nn::layer_norm(d_model, 1e-5, vb)?;
-445                Self::LayerNorm(norm)
-446            }
-447            super::NormType::RmsNorm => {
-448                let norm = RmsNorm::new(d_model, 1e-8, vb)?;
-449                Self::RmsNorm(norm)
-450            }
-451        };
-452        Ok(norm)
-453    }
-454}
-455
-456impl Module for Norm {
-457    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-458        match self {
-459            Self::LayerNorm(m) => m.forward(xs),
-460            Self::RmsNorm(m) => m.forward(xs),
-461        }
-462    }
-463}
-464
-465#[derive(Debug, Clone)]
-466pub struct StreamingTransformerLayer {
-467    self_attn: StreamingMultiheadAttention,
-468    mlp: Mlp,
-469    norm1: Norm,
-470    norm2: Norm,
-471    layer_scale_1: Option<LayerScale>,
-472    layer_scale_2: Option<LayerScale>,
-473    cross_attn: Option<(candle_nn::LayerNorm, StreamingMultiheadCrossAttention)>,
-474    norm_first: bool,
-475    span: tracing::Span,
-476}
-477
-478impl StreamingTransformerLayer {
-479    pub fn new(rope: &Option<Arc<RotaryEmbedding>>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-480        if cfg.use_conv_block {
-481            candle::bail!("conv-block is not supported")
-482        }
-483        let d_model = cfg.d_model;
-484        let mlp = Mlp::new(cfg, vb.clone())?;
-485        let (norm1, norm2) = match cfg.norm {
-486            super::NormType::LayerNorm => {
-487                let norm1 = candle_nn::layer_norm(d_model, 1e-5, vb.pp("input_layernorm"))?;
-488                let norm2 =
-489                    candle_nn::layer_norm(d_model, 1e-5, vb.pp("post_attention_layernorm"))?;
-490                (Norm::LayerNorm(norm1), Norm::LayerNorm(norm2))
-491            }
-492            super::NormType::RmsNorm => {
-493                let norm1 = RmsNorm::new(d_model, 1e-8, vb.pp("input_rmsnorm"))?;
-494                let norm2 = RmsNorm::new(d_model, 1e-8, vb.pp("post_attention_rmsnorm"))?;
-495                (Norm::RmsNorm(norm1), Norm::RmsNorm(norm2))
-496            }
-497        };
-498        let layer_scale_1 = match cfg.layer_scale {
-499            None => None,
-500            Some(ls) => {
-501                let ls = LayerScale::new(d_model, ls, vb.pp("self_attn_layer_scale"))?;
-502                Some(ls)
-503            }
-504        };
-505        let layer_scale_2 = match cfg.layer_scale {
-506            None => None,
-507            Some(ls) => {
-508                let ls = LayerScale::new(d_model, ls, vb.pp("mlp_layer_scale"))?;
-509                Some(ls)
-510            }
-511        };
-512        let self_attn = StreamingMultiheadAttention::new(rope, cfg, vb.pp("self_attn"))?;
-513        let cross_attn = if cfg.cross_attention {
-514            let norm_cross = candle_nn::layer_norm(cfg.d_model, 1e-5, vb.pp("norm_cross"))?;
-515            let cross_attn = StreamingMultiheadCrossAttention::new(cfg, vb.pp("cross_attention"))?;
-516            Some((norm_cross, cross_attn))
-517        } else {
-518            None
-519        };
-520        Ok(Self {
-521            self_attn,
-522            mlp,
-523            norm1,
-524            norm2,
-525            layer_scale_1,
-526            layer_scale_2,
-527            cross_attn,
-528            norm_first: cfg.norm_first,
-529            span: tracing::span!(tracing::Level::TRACE, "transformer-layer"),
-530        })
-531    }
-532
-533    pub fn forward(
-534        &mut self,
-535        xs: &Tensor,
-536        ca_src: Option<&Tensor>,
-537        mask: Option<&Tensor>,
-538    ) -> Result<Tensor> {
-539        let _enter = self.span.enter();
-540        if !self.norm_first {
-541            candle::bail!("only norm_first = true is supported")
-542        }
-543        let norm1 = xs.apply(&self.norm1)?;
-544        let xs = (xs
-545            + self
-546                .self_attn
-547                .forward(&norm1, mask)?
-548                .apply(&self.layer_scale_1.as_ref())?)?;
-549
-550        let xs = match (&self.cross_attn, ca_src) {
-551            (Some((norm_cross, cross_attn)), Some(ca_src)) => {
-552                let residual = &xs;
-553                let xs = xs.apply(norm_cross)?;
-554                (residual + cross_attn.forward(&xs, ca_src, None)?)?
-555            }
-556            _ => xs,
-557        };
-558
-559        let xs = (&xs
-560            + xs.apply(&self.norm2)?
-561                .apply(&self.mlp)?
-562                .apply(&self.layer_scale_2.as_ref()))?;
-563        Ok(xs)
-564    }
-565
-566    pub fn reset_kv_cache(&mut self) {
-567        self.self_attn.reset_kv_cache()
-568    }
-569
-570    pub fn set_kv_cache(&mut self, kv_cache: candle_nn::kv_cache::RotatingKvCache) {
-571        self.self_attn.set_kv_cache(kv_cache)
-572    }
-573}
-574
-575#[derive(Debug, Clone)]
-576pub struct StreamingTransformer {
-577    layers: Vec<StreamingTransformerLayer>,
-578    positional_embedding: PositionalEmbedding,
-579    max_period: usize,
-580}
-581
-582impl StreamingTransformer {
-583    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-584        let vb_l = vb.pp("layers");
-585        let rope = match cfg.positional_embedding {
-586            PositionalEmbedding::Rope => {
-587                let rope = RotaryEmbedding::new(
-588                    cfg.d_model / cfg.num_heads,
-589                    cfg.max_seq_len,
-590                    cfg.max_period as f32,
-591                    vb.device(),
-592                )?;
-593                Some(Arc::new(rope))
-594            }
-595            PositionalEmbedding::Sin | PositionalEmbedding::None => None,
-596        };
-597        let mut layers = Vec::with_capacity(cfg.num_layers);
-598        for layer_idx in 0..cfg.num_layers {
-599            let layer = StreamingTransformerLayer::new(&rope, cfg, vb_l.pp(layer_idx))?;
-600            layers.push(layer)
-601        }
-602        Ok(Self {
-603            layers,
-604            positional_embedding: cfg.positional_embedding,
-605            max_period: cfg.max_period,
-606        })
-607    }
-608
-609    pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor> {
-610        self.forward_ca(xs, None)
-611    }
-612
-613    pub fn forward_ca(&mut self, xs: &Tensor, ca_src: Option<&Tensor>) -> Result<Tensor> {
-614        let (_b, t, c) = xs.dims3()?;
-615        let pos = self.layers[0].self_attn.kv_cache.current_seq_len();
-616        let mask = self.layers[0]
-617            .self_attn
-618            .kv_cache
-619            .attn_mask(t, xs.device())?;
-620        let mut xs = match self.positional_embedding {
-621            PositionalEmbedding::Rope | PositionalEmbedding::None => xs.clone(),
-622            PositionalEmbedding::Sin => {
-623                let dev = xs.device();
-624                let theta = self.max_period as f32;
-625                let half_dim = c / 2;
-626                let positions = Tensor::arange(pos as u32, (pos + t) as u32, dev)?
-627                    .unsqueeze(1)?
-628                    .to_dtype(DType::F32)?;
-629                let inv_freq: Vec<_> = (0..half_dim)
-630                    .map(|i| 1f32 / theta.powf(i as f32 / (half_dim - 1) as f32))
-631                    .collect();
-632                let inv_freq_len = inv_freq.len();
-633                let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?;
-634                let freqs = positions.broadcast_mul(&inv_freq)?;
-635                let pos_emb =
-636                    Tensor::cat(&[freqs.cos()?, freqs.sin()?], D::Minus1)?.to_dtype(xs.dtype())?;
-637                xs.broadcast_add(&pos_emb)?
-638            }
-639        };
-640        for layer in self.layers.iter_mut() {
-641            xs = layer.forward(&xs, ca_src, mask.as_ref())?;
-642        }
-643        Ok(xs)
-644    }
-645
-646    pub fn copy_state(&mut self, from: &Self) -> Result<()> {
-647        if self.layers.len() != from.layers.len() {
-648            candle::bail!("cannot copy kv-caches as the transformers have different depths")
-649        }
-650        self.layers
-651            .iter_mut()
-652            .zip(from.layers.iter())
-653            .for_each(|(v, w)| v.set_kv_cache(w.self_attn.kv_cache.clone()));
-654        Ok(())
-655    }
-656}
-657
-658impl StreamingModule for StreamingTransformer {
-659    fn reset_state(&mut self) {
-660        self.layers.iter_mut().for_each(|v| v.reset_kv_cache())
-661    }
-662
-663    fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor> {
-664        match xs.as_option() {
-665            None => Ok(StreamTensor::empty()),
-666            Some(xs) => Ok(StreamTensor::from_tensor(self.forward(xs)?)),
-667        }
-668    }
-669}
-670
-671#[derive(Debug, Clone)]
-672pub struct ProjectedTransformer {
-673    transformer: StreamingTransformer,
-674    input_proj: Option<Linear>,
-675    output_projs: Vec<Option<Linear>>,
-676    conv_layout: bool,
-677    span: tracing::Span,
-678}
-679
-680impl ProjectedTransformer {
-681    pub fn new(
-682        input_dim: usize,
-683        output_dims: &[usize],
-684        cfg: &Config,
-685        vb: VarBuilder,
-686    ) -> Result<Self> {
-687        let transformer = StreamingTransformer::new(cfg, vb.clone())?;
-688        let input_proj = if input_dim == cfg.d_model {
-689            None
-690        } else {
-691            let l = linear_no_bias(input_dim, cfg.d_model, vb.pp("input_proj"))?;
-692            Some(l)
-693        };
-694        let mut output_projs = Vec::with_capacity(output_dims.len());
-695        let vb_o = vb.pp("output_projs");
-696        for (i, &output_dim) in output_dims.iter().enumerate() {
-697            let output_proj = if output_dim == cfg.d_model {
-698                None
-699            } else {
-700                let l = linear_no_bias(cfg.d_model, output_dim, vb_o.pp(i))?;
-701                Some(l)
-702            };
-703            output_projs.push(output_proj)
-704        }
-705        Ok(Self {
-706            transformer,
-707            input_proj,
-708            output_projs,
-709            conv_layout: cfg.conv_layout,
-710            span: tracing::span!(tracing::Level::TRACE, "proj-transformer"),
-711        })
-712    }
-713
-714    pub fn forward(&mut self, xs: &Tensor) -> Result<Vec<Tensor>> {
-715        let _enter = self.span.enter();
-716        let xs = if self.conv_layout {
-717            xs.transpose(1, 2)?
-718        } else {
-719            xs.clone()
-720        };
-721        let xs = xs.apply(&self.input_proj.as_ref())?;
-722        let xs = self.transformer.forward(&xs)?;
-723        let mut ys = Vec::with_capacity(self.output_projs.len());
-724        for output_proj in self.output_projs.iter() {
-725            let ys_ = xs.apply(&output_proj.as_ref())?;
-726            let ys_ = if self.conv_layout {
-727                ys_.transpose(1, 2)?
-728            } else {
-729                ys_
-730            };
-731            ys.push(ys_)
-732        }
-733        Ok(ys)
-734    }
-735}
-736
-737impl StreamingModule for ProjectedTransformer {
-738    fn reset_state(&mut self) {
-739        self.transformer.reset_state()
-740    }
-741
-742    fn step(&mut self, xs: &StreamTensor) -> Result<StreamTensor> {
-743        let xs = xs.apply(&|x: &Tensor| {
-744            if self.conv_layout {
-745                x.transpose(1, 2)
-746            } else {
-747                Ok(x.clone())
-748            }
-749        })?;
-750        let xs = xs.apply(&self.input_proj.as_ref())?;
-751        let xs = self.transformer.step(&xs)?;
-752        let ys = xs.apply(&self.output_projs[0].as_ref())?;
-753        ys.apply(&|y: &Tensor| {
-754            if self.conv_layout {
-755                y.transpose(1, 2)
-756            } else {
-757                Ok(y.clone())
-758            }
-759        })
-760    }
-761}
-762
-763#[cfg(feature = "flash-attn")]
-764fn flash_attn(
-765    q: &Tensor,
-766    k: &Tensor,
-767    v: &Tensor,
-768    softmax_scale: f32,
-769    causal: bool,
-770) -> Result<Tensor> {
-771    candle_flash_attn::flash_attn(q, k, v, softmax_scale, causal)
-772}
-773
-774#[cfg(not(feature = "flash-attn"))]
-775fn flash_attn(_: &Tensor, _: &Tensor, _: &Tensor, _: f32, _: bool) -> Result<Tensor> {
-776    unimplemented!("compile with '--features flash-attn'")
-777}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mistral.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mistral.rs.html deleted file mode 100644 index 04f2a73..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mistral.rs.html +++ /dev/null @@ -1,468 +0,0 @@ -mistral.rs - source

candle_transformers/models/
mistral.rs

1//! Mixtral Model, based on the Mistral architecture
-2//!
-3//! See Mistral and Mixtral at:
-4//! - [Hugging Face](https://huggingface.co/docs/transformers/model_doc/mixtral)
-5//! - [Github](https://github.com/mistralai/mistral-src)
-6//!
-7
-8use crate::models::with_tracing::{linear_no_bias, Linear, RmsNorm};
-9/// Mistral LLM, https://github.com/mistralai/mistral-src
-10use candle::{DType, Device, Module, Result, Tensor, D};
-11use candle_nn::{Activation, VarBuilder};
-12use std::sync::Arc;
-13
-14fn default_num_attention_heads() -> usize {
-15    32
-16}
-17
-18fn default_use_flash_attn() -> bool {
-19    false
-20}
-21
-22fn default_hidden_act() -> candle_nn::Activation {
-23    candle_nn::Activation::Silu
-24}
-25
-26#[derive(Debug, Clone, PartialEq, serde::Deserialize)]
-27pub struct Config {
-28    pub vocab_size: usize,
-29    pub hidden_size: usize,
-30    pub intermediate_size: usize,
-31    pub num_hidden_layers: usize,
-32    #[serde(default = "default_num_attention_heads")]
-33    pub num_attention_heads: usize,
-34    pub head_dim: Option<usize>,
-35    pub num_key_value_heads: usize,
-36    #[serde(default = "default_hidden_act")]
-37    pub hidden_act: Activation,
-38    pub max_position_embeddings: usize,
-39    pub rms_norm_eps: f64,
-40    pub rope_theta: f64,
-41    pub sliding_window: Option<usize>,
-42    #[serde(default = "default_use_flash_attn")]
-43    pub use_flash_attn: bool,
-44}
-45
-46impl Config {
-47    // https://huggingface.co/mistralai/Mistral-7B-v0.1/blob/main/config.json
-48    pub fn config_7b_v0_1(use_flash_attn: bool) -> Self {
-49        Self {
-50            vocab_size: 32000,
-51            hidden_size: 4096,
-52            intermediate_size: 14336,
-53            num_hidden_layers: 32,
-54            num_attention_heads: 32,
-55            head_dim: None,
-56            num_key_value_heads: 8,
-57            hidden_act: Activation::Silu,
-58            max_position_embeddings: 32768,
-59            rms_norm_eps: 1e-5,
-60            rope_theta: 10_000.,
-61            sliding_window: Some(4096),
-62            use_flash_attn,
-63        }
-64    }
-65
-66    // https://huggingface.co/Open-Orca/Mistral-7B-OpenOrca/blob/main/config.json
-67    // https://huggingface.co/teknium/OpenHermes-2.5-Mistral-7B/blob/main/config.json
-68    pub fn config_chat_ml(use_flash_attn: bool) -> Self {
-69        Self {
-70            vocab_size: 32002,
-71            hidden_size: 4096,
-72            intermediate_size: 14336,
-73            num_hidden_layers: 32,
-74            num_attention_heads: 32,
-75            head_dim: None,
-76            num_key_value_heads: 8,
-77            hidden_act: Activation::Silu,
-78            max_position_embeddings: 32768,
-79            rms_norm_eps: 1e-5,
-80            rope_theta: 10_000.,
-81            sliding_window: Some(4096),
-82            use_flash_attn,
-83        }
-84    }
-85
-86    // https://huggingface.co/amazon/MistralLite/blob/main/config.json
-87    pub fn config_amazon_mistral_lite(use_flash_attn: bool) -> Self {
-88        Self {
-89            vocab_size: 32003,
-90            hidden_size: 4096,
-91            intermediate_size: 14336,
-92            num_hidden_layers: 32,
-93            num_attention_heads: 32,
-94            head_dim: None,
-95            num_key_value_heads: 8,
-96            hidden_act: Activation::Silu,
-97            max_position_embeddings: 32768,
-98            rms_norm_eps: 1e-5,
-99            rope_theta: 10_000.,
-100            sliding_window: Some(4096),
-101            use_flash_attn,
-102        }
-103    }
-104
-105    fn head_dim(&self) -> usize {
-106        self.head_dim
-107            .unwrap_or(self.hidden_size / self.num_attention_heads)
-108    }
-109}
-110
-111#[derive(Debug, Clone)]
-112struct RotaryEmbedding {
-113    sin: Tensor,
-114    cos: Tensor,
-115}
-116
-117impl RotaryEmbedding {
-118    fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-119        let rope_theta = cfg.rope_theta as f32;
-120        let dim = cfg.head_dim();
-121        let max_seq_len = cfg.max_position_embeddings;
-122        let inv_freq: Vec<_> = (0..dim)
-123            .step_by(2)
-124            .map(|i| 1f32 / rope_theta.powf(i as f32 / dim as f32))
-125            .collect();
-126        let inv_freq_len = inv_freq.len();
-127        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(DType::F32)?;
-128        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-129            .to_dtype(DType::F32)?
-130            .reshape((max_seq_len, 1))?;
-131        let freqs = t.matmul(&inv_freq)?;
-132        Ok(Self {
-133            sin: freqs.sin()?.to_dtype(dtype)?,
-134            cos: freqs.cos()?.to_dtype(dtype)?,
-135        })
-136    }
-137
-138    fn apply_rotary_emb_qkv(
-139        &self,
-140        q: &Tensor,
-141        k: &Tensor,
-142        seqlen_offset: usize,
-143    ) -> Result<(Tensor, Tensor)> {
-144        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-145        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-146        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-147        let q_embed = candle_nn::rotary_emb::rope(q, &cos, &sin)?;
-148        let k_embed = candle_nn::rotary_emb::rope(k, &cos, &sin)?;
-149        Ok((q_embed, k_embed))
-150    }
-151}
-152
-153#[derive(Debug, Clone)]
-154#[allow(clippy::upper_case_acronyms)]
-155struct MLP {
-156    gate_proj: Linear,
-157    up_proj: Linear,
-158    down_proj: Linear,
-159    act_fn: Activation,
-160}
-161
-162impl MLP {
-163    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-164        let hidden_sz = cfg.hidden_size;
-165        let intermediate_sz = cfg.intermediate_size;
-166        let gate_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("gate_proj"))?;
-167        let up_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("up_proj"))?;
-168        let down_proj = linear_no_bias(intermediate_sz, hidden_sz, vb.pp("down_proj"))?;
-169        Ok(Self {
-170            gate_proj,
-171            up_proj,
-172            down_proj,
-173            act_fn: cfg.hidden_act,
-174        })
-175    }
-176}
-177
-178impl Module for MLP {
-179    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-180        let lhs = xs.apply(&self.gate_proj)?.apply(&self.act_fn)?;
-181        let rhs = xs.apply(&self.up_proj)?;
-182        (lhs * rhs)?.apply(&self.down_proj)
-183    }
-184}
-185
-186#[cfg(feature = "flash-attn")]
-187fn flash_attn(
-188    q: &Tensor,
-189    k: &Tensor,
-190    v: &Tensor,
-191    softmax_scale: f32,
-192    causal: bool,
-193) -> Result<Tensor> {
-194    candle_flash_attn::flash_attn(q, k, v, softmax_scale, causal)
-195}
-196
-197#[cfg(not(feature = "flash-attn"))]
-198fn flash_attn(_: &Tensor, _: &Tensor, _: &Tensor, _: f32, _: bool) -> Result<Tensor> {
-199    unimplemented!("compile with '--features flash-attn'")
-200}
-201
-202#[derive(Debug, Clone)]
-203struct Attention {
-204    q_proj: Linear,
-205    k_proj: Linear,
-206    v_proj: Linear,
-207    o_proj: Linear,
-208    num_heads: usize,
-209    num_kv_heads: usize,
-210    num_kv_groups: usize,
-211    head_dim: usize,
-212    rotary_emb: Arc<RotaryEmbedding>,
-213    kv_cache: Option<(Tensor, Tensor)>,
-214    use_flash_attn: bool,
-215}
-216
-217impl Attention {
-218    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-219        let hidden_sz = cfg.hidden_size;
-220        let num_heads = cfg.num_attention_heads;
-221        let num_kv_heads = cfg.num_key_value_heads;
-222        let num_kv_groups = num_heads / num_kv_heads;
-223        let head_dim = cfg.head_dim();
-224        let q_proj = linear_no_bias(hidden_sz, num_heads * head_dim, vb.pp("q_proj"))?;
-225        let k_proj = linear_no_bias(hidden_sz, num_kv_heads * head_dim, vb.pp("k_proj"))?;
-226        let v_proj = linear_no_bias(hidden_sz, num_kv_heads * head_dim, vb.pp("v_proj"))?;
-227        let o_proj = linear_no_bias(num_heads * head_dim, hidden_sz, vb.pp("o_proj"))?;
-228        Ok(Self {
-229            q_proj,
-230            k_proj,
-231            v_proj,
-232            o_proj,
-233            num_heads,
-234            num_kv_heads,
-235            num_kv_groups,
-236            head_dim,
-237            rotary_emb,
-238            kv_cache: None,
-239            use_flash_attn: cfg.use_flash_attn,
-240        })
-241    }
-242
-243    fn forward(
-244        &mut self,
-245        xs: &Tensor,
-246        attention_mask: Option<&Tensor>,
-247        seqlen_offset: usize,
-248    ) -> Result<Tensor> {
-249        let (b_sz, q_len, _) = xs.dims3()?;
-250
-251        let query_states = self.q_proj.forward(xs)?;
-252        let key_states = self.k_proj.forward(xs)?;
-253        let value_states = self.v_proj.forward(xs)?;
-254
-255        let query_states = query_states
-256            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-257            .transpose(1, 2)?
-258            .contiguous()?;
-259        let key_states = key_states
-260            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-261            .transpose(1, 2)?
-262            .contiguous()?;
-263        let value_states = value_states
-264            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-265            .transpose(1, 2)?
-266            .contiguous()?;
-267
-268        let (query_states, key_states) =
-269            self.rotary_emb
-270                .apply_rotary_emb_qkv(&query_states, &key_states, seqlen_offset)?;
-271
-272        let (key_states, value_states) = match &self.kv_cache {
-273            None => (key_states, value_states),
-274            Some((prev_k, prev_v)) => {
-275                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-276                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-277                (key_states, value_states)
-278            }
-279        };
-280        self.kv_cache = Some((key_states.clone(), value_states.clone()));
-281
-282        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?;
-283        let value_states = crate::utils::repeat_kv(value_states, self.num_kv_groups)?;
-284
-285        let attn_output = if self.use_flash_attn {
-286            // flash-attn expects (b_sz, seq_len, nheads, head_dim)
-287            let q = query_states.transpose(1, 2)?;
-288            let k = key_states.transpose(1, 2)?;
-289            let v = value_states.transpose(1, 2)?;
-290            let softmax_scale = 1f32 / (self.head_dim as f32).sqrt();
-291            flash_attn(&q, &k, &v, softmax_scale, q_len > 1)?.transpose(1, 2)?
-292        } else {
-293            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-294            let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-295
-296            let attn_weights = match attention_mask {
-297                None => attn_weights,
-298                Some(mask) => attn_weights.broadcast_add(mask)?,
-299            };
-300            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-301            attn_weights.matmul(&value_states)?
-302        };
-303        attn_output
-304            .transpose(1, 2)?
-305            .reshape((b_sz, q_len, self.num_heads * self.head_dim))?
-306            .apply(&self.o_proj)
-307    }
-308
-309    fn clear_kv_cache(&mut self) {
-310        self.kv_cache = None
-311    }
-312}
-313
-314#[derive(Debug, Clone)]
-315struct DecoderLayer {
-316    self_attn: Attention,
-317    mlp: MLP,
-318    input_layernorm: RmsNorm,
-319    post_attention_layernorm: RmsNorm,
-320}
-321
-322impl DecoderLayer {
-323    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-324        let self_attn = Attention::new(rotary_emb, cfg, vb.pp("self_attn"))?;
-325        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-326        let input_layernorm =
-327            RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("input_layernorm"))?;
-328        let post_attention_layernorm = RmsNorm::new(
-329            cfg.hidden_size,
-330            cfg.rms_norm_eps,
-331            vb.pp("post_attention_layernorm"),
-332        )?;
-333        Ok(Self {
-334            self_attn,
-335            mlp,
-336            input_layernorm,
-337            post_attention_layernorm,
-338        })
-339    }
-340
-341    fn forward(
-342        &mut self,
-343        xs: &Tensor,
-344        attention_mask: Option<&Tensor>,
-345        seqlen_offset: usize,
-346    ) -> Result<Tensor> {
-347        let residual = xs;
-348        let xs = self.input_layernorm.forward(xs)?;
-349        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-350        let xs = (xs + residual)?;
-351        let residual = &xs;
-352        let xs = xs.apply(&self.post_attention_layernorm)?.apply(&self.mlp)?;
-353        residual + xs
-354    }
-355
-356    fn clear_kv_cache(&mut self) {
-357        self.self_attn.clear_kv_cache()
-358    }
-359}
-360
-361#[derive(Debug, Clone)]
-362pub struct Model {
-363    embed_tokens: candle_nn::Embedding,
-364    layers: Vec<DecoderLayer>,
-365    norm: RmsNorm,
-366    lm_head: Linear,
-367    sliding_window: Option<usize>,
-368    device: Device,
-369    dtype: DType,
-370}
-371
-372impl Model {
-373    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-374        let vb_m = vb.pp("model");
-375        let embed_tokens =
-376            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-377        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb_m.device())?);
-378        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-379        let vb_l = vb_m.pp("layers");
-380        for layer_idx in 0..cfg.num_hidden_layers {
-381            let layer = DecoderLayer::new(rotary_emb.clone(), cfg, vb_l.pp(layer_idx))?;
-382            layers.push(layer)
-383        }
-384        let norm = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb_m.pp("norm"))?;
-385        let lm_head = linear_no_bias(cfg.hidden_size, cfg.vocab_size, vb.pp("lm_head"))?;
-386        Ok(Self {
-387            embed_tokens,
-388            layers,
-389            norm,
-390            lm_head,
-391            sliding_window: cfg.sliding_window,
-392            device: vb.device().clone(),
-393            dtype: vb.dtype(),
-394        })
-395    }
-396
-397    fn prepare_decoder_attention_mask(
-398        &self,
-399        tgt_len: usize,
-400        seqlen_offset: usize,
-401    ) -> Result<Tensor> {
-402        let sliding_window = self.sliding_window.unwrap_or(tgt_len + 1);
-403        let mask: Vec<_> = (0..tgt_len)
-404            .flat_map(|i| {
-405                (0..tgt_len).map(move |j| {
-406                    if i < j || j + sliding_window < i {
-407                        f32::NEG_INFINITY
-408                    } else {
-409                        0.
-410                    }
-411                })
-412            })
-413            .collect();
-414        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-415        let mask = if seqlen_offset > 0 {
-416            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-417            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-418        } else {
-419            mask
-420        };
-421        mask.expand((1, 1, tgt_len, tgt_len + seqlen_offset))?
-422            .to_dtype(self.dtype)
-423    }
-424
-425    pub fn embed_tokens(&self) -> &candle_nn::Embedding {
-426        &self.embed_tokens
-427    }
-428
-429    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-430        let (_b_size, seq_len) = input_ids.dims2()?;
-431        let attention_mask = if seq_len <= 1 {
-432            None
-433        } else {
-434            let mask = self.prepare_decoder_attention_mask(seq_len, seqlen_offset)?;
-435            Some(mask)
-436        };
-437        let mut xs = self.embed_tokens.forward(input_ids)?;
-438        for layer in self.layers.iter_mut() {
-439            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-440        }
-441        xs.narrow(1, seq_len - 1, 1)?
-442            .apply(&self.norm)?
-443            .apply(&self.lm_head)
-444    }
-445
-446    pub fn forward_embeds(
-447        &mut self,
-448        xs: &Tensor,
-449        attn_mask: Option<&Tensor>,
-450        seqlen_offset: usize,
-451    ) -> Result<Tensor> {
-452        let (_b_size, seq_len, _) = xs.dims3()?;
-453        let mut xs = xs.clone();
-454        for layer in self.layers.iter_mut() {
-455            xs = layer.forward(&xs, attn_mask, seqlen_offset)?
-456        }
-457        xs.narrow(1, seq_len - 1, 1)?
-458            .apply(&self.norm)?
-459            .apply(&self.lm_head)
-460    }
-461
-462    pub fn clear_kv_cache(&mut self) {
-463        for layer in self.layers.iter_mut() {
-464            layer.clear_kv_cache()
-465        }
-466    }
-467}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mixformer.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mixformer.rs.html deleted file mode 100644 index 5126581..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mixformer.rs.html +++ /dev/null @@ -1,466 +0,0 @@ -mixformer.rs - source

candle_transformers/models/
mixformer.rs

1//! MixFormer (Microsoft's Phi Architecture)
-2//!
-3//! See "Textbooks Are All You Need II: phi-1.5 technical report", Lin et al. 2023
-4//! - [Arxiv](https://arxiv.org/abs/2309.05463)
-5//! - [Github](https://huggingface.co/microsoft/phi-1_5)
-6//!
-7
-8use crate::models::with_tracing::{linear, Embedding as E, Linear};
-9/// MixFormer model.
-10/// https://huggingface.co/microsoft/phi-1_5
-11/// https://arxiv.org/abs/2309.05463
-12use candle::{DType, Device, IndexOp, Module, Result, Tensor, D};
-13use candle_nn::{Activation, VarBuilder};
-14use serde::Deserialize;
-15
-16const MAX_SEQ_LEN: usize = 4096;
-17
-18// https://huggingface.co/microsoft/phi-1_5/blob/d38e6f954ec29b96fe2cf033937dad64e279b5d9/configuration_mixformer_sequential.py
-19#[derive(Debug, Clone, PartialEq, Deserialize)]
-20pub struct Config {
-21    pub(crate) vocab_size: usize,
-22    pub(crate) n_positions: usize,
-23    pub(crate) n_embd: usize,
-24    pub(crate) n_layer: usize,
-25    pub(crate) n_inner: Option<usize>,
-26    pub(crate) n_head: usize,
-27    pub(crate) rotary_dim: usize,
-28    pub(crate) activation_function: Activation,
-29    pub(crate) layer_norm_epsilon: f64,
-30    pub(crate) tie_word_embeddings: bool,
-31    pub(crate) pad_vocab_size_multiple: usize,
-32}
-33
-34impl Config {
-35    pub fn v1() -> Self {
-36        Self {
-37            vocab_size: 50304,
-38            n_positions: 2048,
-39            n_embd: 1024,
-40            n_layer: 20,
-41            n_inner: None,
-42            n_head: 16,
-43            rotary_dim: usize::min(32, 1024 / 16),
-44            activation_function: Activation::Gelu,
-45            layer_norm_epsilon: 1e-5,
-46            tie_word_embeddings: false,
-47            pad_vocab_size_multiple: 64,
-48        }
-49    }
-50
-51    pub fn v1_5() -> Self {
-52        Self {
-53            vocab_size: 51200,
-54            n_positions: 2048,
-55            n_embd: 2048,
-56            n_layer: 24,
-57            n_inner: None,
-58            n_head: 32,
-59            rotary_dim: usize::min(32, 2048 / 32),
-60            activation_function: Activation::Gelu,
-61            layer_norm_epsilon: 1e-5,
-62            tie_word_embeddings: false,
-63            pad_vocab_size_multiple: 64,
-64        }
-65    }
-66
-67    pub fn v2() -> Self {
-68        Self {
-69            vocab_size: 51200,
-70            n_positions: 2048,
-71            n_embd: 2560,
-72            n_layer: 32,
-73            n_inner: None,
-74            n_head: 32,
-75            rotary_dim: usize::min(32, 2560 / 32),
-76            activation_function: Activation::Gelu,
-77            layer_norm_epsilon: 1e-5,
-78            tie_word_embeddings: false,
-79            pad_vocab_size_multiple: 64,
-80        }
-81    }
-82
-83    // https://huggingface.co/teknium/Puffin-Phi-v2/blob/main/config.json
-84    pub fn puffin_phi_v2() -> Self {
-85        Self {
-86            vocab_size: 50304,
-87            n_positions: 2048,
-88            n_embd: 2048,
-89            n_layer: 24,
-90            n_inner: None,
-91            n_head: 32,
-92            rotary_dim: usize::min(32, 2048 / 32),
-93            activation_function: Activation::Gelu,
-94            layer_norm_epsilon: 1e-5,
-95            tie_word_embeddings: false,
-96            pad_vocab_size_multiple: 64,
-97        }
-98    }
-99
-100    // https://huggingface.co/teknium/Phi-Hermes-1.3B/blob/main/config.json
-101    pub fn phi_hermes_1_3b() -> Self {
-102        Self {
-103            vocab_size: 50304,
-104            n_positions: 2048,
-105            n_embd: 2048,
-106            n_layer: 24,
-107            n_inner: None,
-108            n_head: 32,
-109            rotary_dim: usize::min(32, 2048 / 32),
-110            activation_function: Activation::NewGelu,
-111            layer_norm_epsilon: 1e-5,
-112            tie_word_embeddings: false,
-113            pad_vocab_size_multiple: 64,
-114        }
-115    }
-116}
-117
-118#[derive(Debug, Clone)]
-119struct Embedding {
-120    wte: E,
-121}
-122
-123impl Embedding {
-124    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-125        let wte = E::new(cfg.vocab_size, cfg.n_embd, vb.pp("wte"))?;
-126        Ok(Self { wte })
-127    }
-128}
-129
-130impl Module for Embedding {
-131    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-132        self.wte.forward(xs)
-133    }
-134}
-135
-136fn get_mask(size: usize, dtype: DType, device: &Device) -> Result<Tensor> {
-137    let mask: Vec<_> = (0..size)
-138        .flat_map(|i| (0..size).map(move |j| if j > i { f32::NEG_INFINITY } else { 0. }))
-139        .collect();
-140    Tensor::from_slice(&mask, (size, size), device)?.to_dtype(dtype)
-141}
-142
-143#[derive(Debug, Clone)]
-144struct RotaryEmbedding {
-145    sin: Tensor,
-146    cos: Tensor,
-147}
-148
-149impl RotaryEmbedding {
-150    fn new(dim: usize, max_seq_len: usize, dtype: DType, dev: &Device) -> Result<Self> {
-151        let inv_freq: Vec<_> = (0..dim)
-152            .step_by(2)
-153            .map(|i| 1f32 / 10000f32.powf(i as f32 / dim as f32))
-154            .collect();
-155        let inv_freq_len = inv_freq.len();
-156        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?;
-157        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-158            .to_dtype(DType::F32)?
-159            .reshape((max_seq_len, 1))?;
-160        let freqs = t.matmul(&inv_freq)?;
-161        Ok(Self {
-162            sin: freqs.sin()?.to_dtype(dtype)?,
-163            cos: freqs.cos()?.to_dtype(dtype)?,
-164        })
-165    }
-166
-167    fn apply_rotary_emb_qkv(
-168        &self,
-169        qkv: &Tensor,
-170        seqlen_offset: usize,
-171    ) -> Result<(Tensor, Tensor, Tensor)> {
-172        let (_b_size, seqlen, three, _, _headdim) = qkv.dims5()?;
-173        if three != 3 {
-174            candle::bail!("unexpected shape for qkv {:?}", qkv.shape())
-175        }
-176        let (_rotary_seqlen, rotary_dim) = self.cos.dims2()?;
-177        let rotary_dim = rotary_dim * 2;
-178        let q_rot = qkv.i((.., .., 0, .., ..rotary_dim))?.contiguous()?;
-179        let q_pass = qkv.i((.., .., 0, .., rotary_dim..))?;
-180        let k_rot = qkv.i((.., .., 1, .., ..rotary_dim))?.contiguous()?;
-181        let k_pass = qkv.i((.., .., 1, .., rotary_dim..))?;
-182        let c = self.cos.narrow(0, seqlen_offset, seqlen)?;
-183        let s = self.sin.narrow(0, seqlen_offset, seqlen)?;
-184        let q_rot = candle_nn::rotary_emb::rope_thd(&q_rot, &c, &s)?;
-185        let k_rot = candle_nn::rotary_emb::rope_thd(&k_rot, &c, &s)?;
-186        let q = Tensor::cat(&[&q_rot, &q_pass], D::Minus1)?;
-187        let k = Tensor::cat(&[&k_rot, &k_pass], D::Minus1)?;
-188        let v = qkv.i((.., .., 2))?;
-189        Ok((q, k, v))
-190    }
-191}
-192
-193#[derive(Debug, Clone)]
-194#[allow(clippy::upper_case_acronyms)]
-195struct MLP {
-196    fc1: Linear,
-197    fc2: Linear,
-198    act: Activation,
-199    span: tracing::Span,
-200}
-201
-202impl MLP {
-203    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-204        let n_inner = cfg.n_inner.unwrap_or(4 * cfg.n_embd);
-205        let fc1 = linear(cfg.n_embd, n_inner, vb.pp("fc1"))?;
-206        let fc2 = linear(n_inner, cfg.n_embd, vb.pp("fc2"))?;
-207        Ok(Self {
-208            fc1,
-209            fc2,
-210            act: cfg.activation_function,
-211            span: tracing::span!(tracing::Level::TRACE, "mlp"),
-212        })
-213    }
-214}
-215
-216impl Module for MLP {
-217    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-218        let _enter = self.span.enter();
-219        xs.apply(&self.fc1)?.apply(&self.act)?.apply(&self.fc2)
-220    }
-221}
-222
-223#[derive(Debug, Clone)]
-224struct CausalLMHead {
-225    ln: candle_nn::LayerNorm,
-226    linear: Linear,
-227}
-228
-229impl CausalLMHead {
-230    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-231        let ln = candle_nn::layer_norm(cfg.n_embd, cfg.layer_norm_epsilon, vb.pp("ln"))?;
-232        let linear = linear(cfg.n_embd, cfg.vocab_size, vb.pp("linear"))?;
-233        Ok(Self { ln, linear })
-234    }
-235}
-236
-237impl Module for CausalLMHead {
-238    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-239        xs.apply(&self.ln)?
-240            .apply(&self.linear)?
-241            .to_dtype(DType::F32)
-242    }
-243}
-244
-245#[derive(Debug, Clone)]
-246#[allow(clippy::upper_case_acronyms)]
-247struct MHA {
-248    wqkv: Linear,
-249    out_proj: Linear,
-250    rotary_emb: RotaryEmbedding,
-251    kv_cache: Option<(Tensor, Tensor)>,
-252    head_dim: usize,
-253    softmax_scale: f64,
-254    span: tracing::Span,
-255    span_rope: tracing::Span,
-256    span_mask: tracing::Span,
-257    span_softmax: tracing::Span,
-258}
-259
-260impl MHA {
-261    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-262        let head_dim = cfg.n_embd / cfg.n_head;
-263        let op_size = cfg.n_embd;
-264        let wqkv = linear(cfg.n_embd, 3 * op_size, vb.pp("Wqkv"))?;
-265        let out_proj = linear(op_size, cfg.n_embd, vb.pp("out_proj"))?;
-266        let rotary_emb =
-267            RotaryEmbedding::new(cfg.rotary_dim, MAX_SEQ_LEN, vb.dtype(), vb.device())?;
-268        let softmax_scale = 1f64 / (head_dim as f64).sqrt();
-269        Ok(Self {
-270            wqkv,
-271            out_proj,
-272            head_dim,
-273            kv_cache: None,
-274            rotary_emb,
-275            softmax_scale,
-276            span: tracing::span!(tracing::Level::TRACE, "mha"),
-277            span_rope: tracing::span!(tracing::Level::TRACE, "rope"),
-278            span_mask: tracing::span!(tracing::Level::TRACE, "mask"),
-279            span_softmax: tracing::span!(tracing::Level::TRACE, "softmax"),
-280        })
-281    }
-282
-283    fn forward(&mut self, xs: &Tensor, mask: Option<&Tensor>) -> Result<Tensor> {
-284        let _enter = self.span.enter();
-285        let (b_size, seq_len, _n_embd) = xs.dims3()?;
-286        let qkv = self
-287            .wqkv
-288            .forward(xs)?
-289            .reshape((b_size, seq_len, 3, (), self.head_dim))?;
-290        let seqlen_offset = match &self.kv_cache {
-291            None => 0,
-292            Some((prev_k, _)) => prev_k.dim(1)?,
-293        };
-294        // In the python implementation, a single tensor is returned with the third axis of size 3.
-295        let (q, k, v) = {
-296            let _enter = self.span_rope.enter();
-297            self.rotary_emb.apply_rotary_emb_qkv(&qkv, seqlen_offset)?
-298        };
-299        let (k, v) = match &self.kv_cache {
-300            None => (k, v),
-301            Some((prev_k, prev_v)) => {
-302                let k = Tensor::cat(&[prev_k, &k], 1)?;
-303                let v = Tensor::cat(&[prev_v, &v], 1)?;
-304                (k, v)
-305            }
-306        };
-307        self.kv_cache = Some((k.clone(), v.clone()));
-308        // scores = torch.einsum('bthd,bshd->bhts', q, k * softmax_scale)
-309        let q = q.transpose(1, 2)?.flatten_to(1)?; // b*h, t, d
-310        let k = k.transpose(1, 2)?.flatten_to(1)?; // b*h, s, d
-311        let v = v.transpose(1, 2)?.flatten_to(1)?; // b*h, s, d
-312        let attn_weights = (q.matmul(&k.t()?)? * self.softmax_scale)?; // b*h, t, s
-313
-314        // causal_mask = torch.triu(torch.full((seqlen_q, seqlen_k), -10000.0, device=scores.device), 1)
-315        // scores = scores + causal_mask.to(dtype=scores.dtype)
-316        let attn_weights = match mask {
-317            None => attn_weights,
-318            Some(mask) => {
-319                let _enter = self.span_mask.enter();
-320                attn_weights.broadcast_add(mask)?
-321            }
-322        };
-323        let attn_weights = {
-324            let _enter = self.span_softmax.enter();
-325            candle_nn::ops::softmax_last_dim(&attn_weights)?
-326        };
-327
-328        // output = torch.einsum('bhts,bshd->bthd', attention_drop, v)
-329        // attn_weights: b*h,t,s, v: b*h,s,d
-330        let attn_output = attn_weights.matmul(&v)?;
-331        // b*h,t,d
-332        let attn_output = attn_output
-333            .reshape((b_size, (), seq_len, self.head_dim))?
-334            .transpose(1, 2)?
-335            .flatten_from(D::Minus2)?;
-336        attn_output.apply(&self.out_proj)
-337    }
-338
-339    fn clear_kv_cache(&mut self) {
-340        self.kv_cache = None
-341    }
-342}
-343
-344#[derive(Debug, Clone)]
-345struct ParallelBlock {
-346    ln: candle_nn::LayerNorm,
-347    mixer: MHA,
-348    mlp: MLP,
-349    span: tracing::Span,
-350}
-351
-352impl ParallelBlock {
-353    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-354        let ln = candle_nn::layer_norm(cfg.n_embd, cfg.layer_norm_epsilon, vb.pp("ln"))?;
-355        let mixer = MHA::new(cfg, vb.pp("mixer"))?;
-356        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-357        Ok(Self {
-358            ln,
-359            mixer,
-360            mlp,
-361            span: tracing::span!(tracing::Level::TRACE, "block"),
-362        })
-363    }
-364
-365    fn forward(&mut self, xs: &Tensor, mask: Option<&Tensor>) -> Result<Tensor> {
-366        let _enter = self.span.enter();
-367        let residual = xs;
-368        let xs = xs.apply(&self.ln)?;
-369        let attn_outputs = self.mixer.forward(&xs, mask)?;
-370        let feed_forward_hidden_states = self.mlp.forward(&xs)?;
-371        attn_outputs + feed_forward_hidden_states + residual
-372    }
-373
-374    fn clear_kv_cache(&mut self) {
-375        self.mixer.clear_kv_cache()
-376    }
-377}
-378
-379#[derive(Debug, Clone)]
-380pub struct MixFormerSequentialForCausalLM {
-381    embedding: Embedding,
-382    blocks: Vec<ParallelBlock>,
-383    head: CausalLMHead,
-384    span: tracing::Span,
-385}
-386
-387impl MixFormerSequentialForCausalLM {
-388    pub fn new_v2(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-389        let vb_head = vb.pp("lm_head");
-390        let vb = vb.pp("transformer");
-391        let embedding = Embedding::new(cfg, vb.pp("embd"))?;
-392        let mut blocks = Vec::new();
-393        for i in 0..cfg.n_layer {
-394            let block = ParallelBlock::new(cfg, vb.pp("h").pp(i))?;
-395            blocks.push(block)
-396        }
-397        let head = CausalLMHead::new(cfg, vb_head)?;
-398        Ok(Self {
-399            embedding,
-400            blocks,
-401            head,
-402            span: tracing::span!(tracing::Level::TRACE, "mixformer"),
-403        })
-404    }
-405
-406    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-407        let vb = vb.pp("layers");
-408        let embedding = Embedding::new(cfg, vb.pp(0))?;
-409        let mut blocks = Vec::new();
-410        for i in 0..cfg.n_layer {
-411            let block = ParallelBlock::new(cfg, vb.pp(i + 1))?;
-412            blocks.push(block)
-413        }
-414        let head = CausalLMHead::new(cfg, vb.pp(cfg.n_layer + 1))?;
-415        Ok(Self {
-416            embedding,
-417            blocks,
-418            head,
-419            span: tracing::span!(tracing::Level::TRACE, "mixformer"),
-420        })
-421    }
-422
-423    pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor> {
-424        let _enter = self.span.enter();
-425        let (_b_size, seq_len) = xs.dims2()?;
-426        let mut xs = xs.apply(&self.embedding)?;
-427        let mask = if seq_len <= 1 {
-428            None
-429        } else {
-430            Some(get_mask(seq_len, xs.dtype(), xs.device())?)
-431        };
-432        for block in self.blocks.iter_mut() {
-433            xs = block.forward(&xs, mask.as_ref())?
-434        }
-435        xs.narrow(1, seq_len - 1, 1)?.apply(&self.head)?.squeeze(1)
-436    }
-437
-438    pub fn forward_with_img(
-439        &mut self,
-440        bos_token: &Tensor,
-441        xs: &Tensor,
-442        img_embeds: &Tensor,
-443    ) -> Result<Tensor> {
-444        let _enter = self.span.enter();
-445        let xs = xs.apply(&self.embedding)?;
-446        let bos_token = bos_token.apply(&self.embedding)?;
-447        // Python implementation sequence order is <bos token embedding><img embedding><rest of text embedding>
-448        // https://github.com/vikhyat/moondream/blob/a9d788a20d1543fb1479edc54106e88cff7759d3/moondream/moondream.py#L43-L56
-449        let mut xs = Tensor::cat(&[bos_token, img_embeds.clone(), xs], 1)?;
-450        let (_b_size, seq_len, _embds) = xs.dims3()?;
-451        let mask = Some(get_mask(seq_len, xs.dtype(), xs.device())?);
-452        for block in self.blocks.iter_mut() {
-453            xs = block.forward(&xs, mask.as_ref())?
-454        }
-455        let xs = xs
-456            .narrow(1, seq_len - 1, 1)?
-457            .apply(&self.head)?
-458            .squeeze(1)?;
-459        Ok(xs)
-460    }
-461
-462    pub fn clear_kv_cache(&mut self) {
-463        self.blocks.iter_mut().for_each(|b| b.clear_kv_cache())
-464    }
-465}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mixtral.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mixtral.rs.html deleted file mode 100644 index 752340f..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mixtral.rs.html +++ /dev/null @@ -1,484 +0,0 @@ -mixtral.rs - source

candle_transformers/models/
mixtral.rs

1//! Mixtral Model, a sparse mixture of expert model based on the Mistral architecture
-2//!
-3//! See Mixtral model details at:
-4//! - [Hugging Face](https://huggingface.co/docs/transformers/model_doc/mixtral)
-5//! - [Mixtral-8x7B Blog Post](https://mistral.ai/news/mixtral-of-experts/)
-6//!
-7//! The model uses a mixture of experts architecture with:
-8//! - 8 experts per layer
-9//! - Top 2 expert routing
-10//! - Sliding window attention
-11//! - RoPE embeddings
-12//!
-13//! References:
-14//! - [Hugging Face Implementation](https://github.com/huggingface/transformers/blob/main/src/transformers/models/mixtral/modeling_mixtral.py)
-15//! - [Mixtral Blog Post](https://mistral.ai/news/mixtral-of-experts/)
-16//!
-17
-18use crate::models::with_tracing::{linear_no_bias, Linear, RmsNorm};
-19/// Mixtral Model
-20/// https://github.com/huggingface/transformers/blob/main/src/transformers/models/mixtral/modeling_mixtral.py
-21/// https://mistral.ai/news/mixtral-of-experts/
-22use candle::{DType, Device, Module, Result, Tensor, D};
-23use candle_nn::{Activation, VarBuilder};
-24use serde::Deserialize;
-25use std::sync::Arc;
-26
-27/// https://github.com/huggingface/transformers/blob/1a585c1222a56bcaecc070966d558d4a9d862e83/src/transformers/models/mixtral/configuration_mixtral.py#L113
-28#[derive(Debug, Clone, PartialEq, Deserialize)]
-29pub struct Config {
-30    pub(crate) vocab_size: usize,
-31    pub(crate) hidden_size: usize,
-32    pub(crate) intermediate_size: usize,
-33    pub(crate) num_hidden_layers: usize,
-34    pub(crate) num_attention_heads: usize,
-35    pub(crate) num_key_value_heads: usize,
-36    pub(crate) hidden_act: Activation,
-37    pub(crate) max_position_embeddings: usize,
-38    pub(crate) rms_norm_eps: f64,
-39    pub(crate) rope_theta: f64,
-40    pub(crate) sliding_window: usize,
-41    pub(crate) num_experts_per_tok: usize,
-42    pub(crate) num_local_experts: usize,
-43    pub(crate) use_flash_attn: bool,
-44}
-45
-46impl Config {
-47    /// https://huggingface.co/mistralai/Mixtral-8x7B-v0.1/blob/main/config.json
-48    pub fn v0_1_8x7b(use_flash_attn: bool) -> Self {
-49        Self {
-50            vocab_size: 32000,
-51            hidden_size: 4096,
-52            intermediate_size: 14336,
-53            num_hidden_layers: 32,
-54            num_attention_heads: 32,
-55            num_key_value_heads: 8,
-56            hidden_act: Activation::Silu,
-57            max_position_embeddings: 32768,
-58            rms_norm_eps: 1e-5,
-59            rope_theta: 1e6,
-60            sliding_window: 4096,
-61            num_experts_per_tok: 2,
-62            num_local_experts: 8,
-63            use_flash_attn,
-64        }
-65    }
-66}
-67
-68#[derive(Debug, Clone)]
-69struct RotaryEmbedding {
-70    sin: Tensor,
-71    cos: Tensor,
-72}
-73
-74fn rotate_half(xs: &Tensor) -> Result<Tensor> {
-75    let last_dim = xs.dim(D::Minus1)?;
-76    let xs1 = xs.narrow(D::Minus1, 0, last_dim / 2)?;
-77    let xs2 = xs.narrow(D::Minus1, last_dim / 2, last_dim - last_dim / 2)?;
-78    Tensor::cat(&[&xs2.neg()?, &xs1], D::Minus1)
-79}
-80
-81impl RotaryEmbedding {
-82    fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-83        let dim = cfg.hidden_size / cfg.num_attention_heads;
-84        let max_seq_len = cfg.max_position_embeddings;
-85        let inv_freq: Vec<_> = (0..dim)
-86            .step_by(2)
-87            .map(|i| 1f32 / (cfg.rope_theta as f32).powf(i as f32 / dim as f32))
-88            .collect();
-89        let inv_freq_len = inv_freq.len();
-90        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-91        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-92            .to_dtype(dtype)?
-93            .reshape((max_seq_len, 1))?;
-94        let freqs = t.matmul(&inv_freq)?;
-95        let freqs = Tensor::cat(&[&freqs, &freqs], D::Minus1)?;
-96        Ok(Self {
-97            sin: freqs.sin()?,
-98            cos: freqs.cos()?,
-99        })
-100    }
-101
-102    fn apply_rotary_emb_qkv(
-103        &self,
-104        q: &Tensor,
-105        k: &Tensor,
-106        seqlen_offset: usize,
-107    ) -> Result<(Tensor, Tensor)> {
-108        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-109        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-110        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-111        let cos = cos.unsqueeze(0)?.unsqueeze(0)?; // (1, 1, seq_len, dim)
-112        let sin = sin.unsqueeze(0)?.unsqueeze(0)?; // (1, 1, seq_len, dim)
-113        let q_embed = (q.broadcast_mul(&cos)? + rotate_half(q)?.broadcast_mul(&sin))?;
-114        let k_embed = (k.broadcast_mul(&cos)? + rotate_half(k)?.broadcast_mul(&sin))?;
-115        Ok((q_embed, k_embed))
-116    }
-117}
-118
-119#[cfg(feature = "flash-attn")]
-120fn flash_attn(
-121    q: &Tensor,
-122    k: &Tensor,
-123    v: &Tensor,
-124    softmax_scale: f32,
-125    causal: bool,
-126) -> Result<Tensor> {
-127    candle_flash_attn::flash_attn(q, k, v, softmax_scale, causal)
-128}
-129
-130#[cfg(not(feature = "flash-attn"))]
-131fn flash_attn(_: &Tensor, _: &Tensor, _: &Tensor, _: f32, _: bool) -> Result<Tensor> {
-132    unimplemented!("compile with '--features flash-attn'")
-133}
-134
-135#[derive(Debug, Clone)]
-136struct Attention {
-137    q_proj: Linear,
-138    k_proj: Linear,
-139    v_proj: Linear,
-140    o_proj: Linear,
-141    num_heads: usize,
-142    num_kv_heads: usize,
-143    num_kv_groups: usize,
-144    head_dim: usize,
-145    hidden_size: usize,
-146    rotary_emb: Arc<RotaryEmbedding>,
-147    kv_cache: Option<(Tensor, Tensor)>,
-148    use_flash_attn: bool,
-149}
-150
-151impl Attention {
-152    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-153        let hidden_sz = cfg.hidden_size;
-154        let num_heads = cfg.num_attention_heads;
-155        let num_kv_heads = cfg.num_key_value_heads;
-156        let num_kv_groups = num_heads / num_kv_heads;
-157        let head_dim = hidden_sz / num_heads;
-158        let q_proj = linear_no_bias(hidden_sz, num_heads * head_dim, vb.pp("q_proj"))?;
-159        let k_proj = linear_no_bias(hidden_sz, num_kv_heads * head_dim, vb.pp("k_proj"))?;
-160        let v_proj = linear_no_bias(hidden_sz, num_kv_heads * head_dim, vb.pp("v_proj"))?;
-161        let o_proj = linear_no_bias(num_heads * head_dim, hidden_sz, vb.pp("o_proj"))?;
-162        Ok(Self {
-163            q_proj,
-164            k_proj,
-165            v_proj,
-166            o_proj,
-167            num_heads,
-168            num_kv_heads,
-169            num_kv_groups,
-170            head_dim,
-171            hidden_size: hidden_sz,
-172            rotary_emb,
-173            kv_cache: None,
-174            use_flash_attn: cfg.use_flash_attn,
-175        })
-176    }
-177
-178    fn forward(
-179        &mut self,
-180        xs: &Tensor,
-181        attention_mask: Option<&Tensor>,
-182        seqlen_offset: usize,
-183    ) -> Result<Tensor> {
-184        let (b_sz, q_len, _) = xs.dims3()?;
-185
-186        let query_states = self.q_proj.forward(xs)?;
-187        let key_states = self.k_proj.forward(xs)?;
-188        let value_states = self.v_proj.forward(xs)?;
-189
-190        let query_states = query_states
-191            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-192            .transpose(1, 2)?;
-193        let key_states = key_states
-194            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-195            .transpose(1, 2)?;
-196        let value_states = value_states
-197            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-198            .transpose(1, 2)?;
-199
-200        let (query_states, key_states) =
-201            self.rotary_emb
-202                .apply_rotary_emb_qkv(&query_states, &key_states, seqlen_offset)?;
-203
-204        let (key_states, value_states) = match &self.kv_cache {
-205            None => (key_states, value_states),
-206            Some((prev_k, prev_v)) => {
-207                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-208                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-209                (key_states, value_states)
-210            }
-211        };
-212        self.kv_cache = Some((key_states.clone(), value_states.clone()));
-213
-214        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?;
-215        let value_states = crate::utils::repeat_kv(value_states, self.num_kv_groups)?;
-216
-217        let attn_output = if self.use_flash_attn {
-218            // flash-attn expects (b_sz, seq_len, nheads, head_dim)
-219            let q = query_states.transpose(1, 2)?;
-220            let k = key_states.transpose(1, 2)?;
-221            let v = value_states.transpose(1, 2)?;
-222            let softmax_scale = 1f32 / (self.head_dim as f32).sqrt();
-223            flash_attn(&q, &k, &v, softmax_scale, q_len > 1)?.transpose(1, 2)?
-224        } else {
-225            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-226            let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-227
-228            let attn_weights = match attention_mask {
-229                None => attn_weights,
-230                Some(mask) => attn_weights.broadcast_add(mask)?,
-231            };
-232            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-233            attn_weights.matmul(&value_states)?
-234        };
-235        attn_output
-236            .transpose(1, 2)?
-237            .reshape((b_sz, q_len, self.hidden_size))?
-238            .apply(&self.o_proj)
-239    }
-240}
-241
-242#[derive(Debug, Clone)]
-243struct BlockSparseTop2MLP {
-244    w1: Linear,
-245    w2: Linear,
-246    w3: Linear,
-247    act_fn: Activation,
-248}
-249
-250impl BlockSparseTop2MLP {
-251    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-252        let hidden_sz = cfg.hidden_size;
-253        let intermediate_sz = cfg.intermediate_size;
-254        let w1 = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("w1"))?;
-255        let w2 = linear_no_bias(intermediate_sz, hidden_sz, vb.pp("w2"))?;
-256        let w3 = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("w3"))?;
-257        Ok(Self {
-258            w1,
-259            w2,
-260            w3,
-261            act_fn: cfg.hidden_act,
-262        })
-263    }
-264}
-265
-266impl Module for BlockSparseTop2MLP {
-267    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-268        let lhs = xs.apply(&self.w1)?.apply(&self.act_fn)?;
-269        let rhs = xs.apply(&self.w3)?;
-270        (lhs * rhs)?.apply(&self.w2)
-271    }
-272}
-273
-274#[derive(Debug, Clone)]
-275struct SparseMoeBlock {
-276    gate: Linear,
-277    experts: Vec<BlockSparseTop2MLP>,
-278    num_experts_per_tok: usize,
-279}
-280
-281impl SparseMoeBlock {
-282    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-283        let gate = linear_no_bias(cfg.hidden_size, cfg.num_local_experts, vb.pp("gate"))?;
-284        let mut experts = Vec::with_capacity(cfg.num_local_experts);
-285        let vb = vb.pp("experts");
-286        for idx in 0..cfg.num_local_experts {
-287            let expert = BlockSparseTop2MLP::new(cfg, vb.pp(idx))?;
-288            experts.push(expert)
-289        }
-290        Ok(SparseMoeBlock {
-291            gate,
-292            experts,
-293            num_experts_per_tok: cfg.num_experts_per_tok,
-294        })
-295    }
-296}
-297
-298impl Module for SparseMoeBlock {
-299    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-300        let (b_size, seq_len, hidden_dim) = xs.dims3()?;
-301        let xs = xs.reshape(((), hidden_dim))?;
-302        let router_logits = xs.apply(&self.gate)?;
-303        let routing_weights = candle_nn::ops::softmax_last_dim(&router_logits)?;
-304
-305        // In order to extract topk, we extract the data from the tensor and manipulate it
-306        // directly. Maybe we will want to use some custom ops instead at some point.
-307        let routing_weights = routing_weights.to_dtype(DType::F32)?.to_vec2::<f32>()?;
-308
-309        // routing_weights, selected_experts = torch.topk(routing_weights, self.top_k, dim=-1)
-310        // top_x contains the row indexes to evaluate for each expert.
-311        let mut top_x = vec![vec![]; self.experts.len()];
-312        let mut selected_rws = vec![vec![]; self.experts.len()];
-313        for (row_idx, rw) in routing_weights.iter().enumerate() {
-314            let mut dst = (0..rw.len() as u32).collect::<Vec<u32>>();
-315            dst.sort_by(|&i, &j| rw[j as usize].total_cmp(&rw[i as usize]));
-316            let mut sum_routing_weights = 0f32;
-317            for &expert_idx in dst.iter().take(self.num_experts_per_tok) {
-318                let expert_idx = expert_idx as usize;
-319                let routing_weight = rw[expert_idx];
-320                sum_routing_weights += routing_weight;
-321                top_x[expert_idx].push(row_idx as u32);
-322            }
-323            for &expert_idx in dst.iter().take(self.num_experts_per_tok) {
-324                let expert_idx = expert_idx as usize;
-325                let routing_weight = rw[expert_idx];
-326                selected_rws[expert_idx].push(routing_weight / sum_routing_weights)
-327            }
-328        }
-329
-330        // routing_weights /= routing_weights.sum(dim=-1, keepdim=True)
-331        // expert_mask = torch.nn.functional.one_hot(selected_experts, num_classes=self.num_experts).permute(2, 1, 0)
-332
-333        let mut ys = xs.zeros_like()?;
-334        for (expert_idx, expert_layer) in self.experts.iter().enumerate() {
-335            let top_x = &top_x[expert_idx];
-336            if top_x.is_empty() {
-337                continue;
-338            }
-339            let top_x = Tensor::new(top_x.as_slice(), xs.device())?;
-340            let selected_rws =
-341                Tensor::new(selected_rws[expert_idx].as_slice(), xs.device())?.reshape(((), 1))?;
-342            // Index the correct hidden states and compute the expert hidden state for
-343            // the current expert. We need to make sure to multiply the output hidden
-344            // states by `routing_weights` on the corresponding tokens (top-1 and top-2)
-345            let current_state = xs.index_select(&top_x, 0)?.reshape(((), hidden_dim))?;
-346            // current_hidden_states = expert_layer(current_state, routing_weights[top_x_list, idx_list, None])
-347            let current_hidden_states = expert_layer.forward(&current_state)?;
-348            let current_hidden_states = current_hidden_states.broadcast_mul(&selected_rws)?;
-349            ys = ys.index_add(&top_x, &current_hidden_states, 0)?;
-350        }
-351
-352        let ys = ys.reshape((b_size, seq_len, hidden_dim))?;
-353        Ok(ys)
-354    }
-355}
-356
-357#[derive(Debug, Clone)]
-358struct DecoderLayer {
-359    self_attn: Attention,
-360    block_sparse_moe: SparseMoeBlock,
-361    input_layernorm: RmsNorm,
-362    post_attention_layernorm: RmsNorm,
-363}
-364
-365impl DecoderLayer {
-366    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-367        let self_attn = Attention::new(rotary_emb, cfg, vb.pp("self_attn"))?;
-368        let block_sparse_moe = SparseMoeBlock::new(cfg, vb.pp("block_sparse_moe"))?;
-369        let input_layernorm =
-370            RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("input_layernorm"))?;
-371        let post_attention_layernorm = RmsNorm::new(
-372            cfg.hidden_size,
-373            cfg.rms_norm_eps,
-374            vb.pp("post_attention_layernorm"),
-375        )?;
-376        Ok(Self {
-377            self_attn,
-378            block_sparse_moe,
-379            input_layernorm,
-380            post_attention_layernorm,
-381        })
-382    }
-383
-384    fn forward(
-385        &mut self,
-386        xs: &Tensor,
-387        attention_mask: Option<&Tensor>,
-388        seqlen_offset: usize,
-389    ) -> Result<Tensor> {
-390        let residual = xs;
-391        let xs = self.input_layernorm.forward(xs)?;
-392        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-393        let xs = (xs + residual)?;
-394        let residual = &xs;
-395        let xs = xs
-396            .apply(&self.post_attention_layernorm)?
-397            .apply(&self.block_sparse_moe)?;
-398        residual + xs
-399    }
-400}
-401
-402#[derive(Debug, Clone)]
-403pub struct Model {
-404    embed_tokens: candle_nn::Embedding,
-405    layers: Vec<DecoderLayer>,
-406    norm: RmsNorm,
-407    lm_head: Linear,
-408    sliding_window: usize,
-409    device: Device,
-410    dtype: DType,
-411}
-412
-413impl Model {
-414    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-415        let vb_m = vb.pp("model");
-416        let embed_tokens =
-417            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-418        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb_m.device())?);
-419        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-420        let vb_l = vb_m.pp("layers");
-421        for layer_idx in 0..cfg.num_hidden_layers {
-422            let layer = DecoderLayer::new(rotary_emb.clone(), cfg, vb_l.pp(layer_idx))?;
-423            layers.push(layer)
-424        }
-425        let norm = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb_m.pp("norm"))?;
-426        let lm_head = linear_no_bias(cfg.hidden_size, cfg.vocab_size, vb.pp("lm_head"))?;
-427        Ok(Self {
-428            embed_tokens,
-429            layers,
-430            norm,
-431            lm_head,
-432            sliding_window: cfg.sliding_window,
-433            device: vb.device().clone(),
-434            dtype: vb.dtype(),
-435        })
-436    }
-437
-438    fn prepare_decoder_attention_mask(
-439        &self,
-440        b_size: usize,
-441        tgt_len: usize,
-442        seqlen_offset: usize,
-443    ) -> Result<Tensor> {
-444        // Sliding window mask?
-445        let mask: Vec<_> = (0..tgt_len)
-446            .flat_map(|i| {
-447                (0..tgt_len).map(move |j| {
-448                    if i < j || j + self.sliding_window < i {
-449                        f32::NEG_INFINITY
-450                    } else {
-451                        0.
-452                    }
-453                })
-454            })
-455            .collect();
-456        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-457        let mask = if seqlen_offset > 0 {
-458            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-459            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-460        } else {
-461            mask
-462        };
-463        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-464            .to_dtype(self.dtype)
-465    }
-466
-467    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-468        let (b_size, seq_len) = input_ids.dims2()?;
-469        let attention_mask = if seq_len <= 1 {
-470            None
-471        } else {
-472            let mask = self.prepare_decoder_attention_mask(b_size, seq_len, seqlen_offset)?;
-473            Some(mask)
-474        };
-475        let mut xs = self.embed_tokens.forward(input_ids)?;
-476        for layer in self.layers.iter_mut() {
-477            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-478        }
-479        xs.narrow(1, seq_len - 1, 1)?
-480            .apply(&self.norm)?
-481            .apply(&self.lm_head)
-482    }
-483}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mmdit/blocks.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mmdit/blocks.rs.html deleted file mode 100644 index 1e69a6a..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mmdit/blocks.rs.html +++ /dev/null @@ -1,498 +0,0 @@ -blocks.rs - source

candle_transformers/models/mmdit/
blocks.rs

1use candle::{Module, Result, Tensor, D};
-2use candle_nn as nn;
-3
-4use super::projections::{AttnProjections, Mlp, Qkv, QkvOnlyAttnProjections};
-5
-6pub struct ModulateIntermediates {
-7    gate_msa: Tensor,
-8    shift_mlp: Tensor,
-9    scale_mlp: Tensor,
-10    gate_mlp: Tensor,
-11}
-12
-13pub struct DiTBlock {
-14    norm1: LayerNormNoAffine,
-15    attn: AttnProjections,
-16    norm2: LayerNormNoAffine,
-17    mlp: Mlp,
-18    ada_ln_modulation: nn::Sequential,
-19}
-20
-21pub struct LayerNormNoAffine {
-22    eps: f64,
-23}
-24
-25impl LayerNormNoAffine {
-26    pub fn new(eps: f64) -> Self {
-27        Self { eps }
-28    }
-29}
-30
-31impl Module for LayerNormNoAffine {
-32    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-33        nn::LayerNorm::new_no_bias(Tensor::ones_like(x)?, self.eps).forward(x)
-34    }
-35}
-36
-37impl DiTBlock {
-38    pub fn new(hidden_size: usize, num_heads: usize, vb: nn::VarBuilder) -> Result<Self> {
-39        let norm1 = LayerNormNoAffine::new(1e-6);
-40        let attn = AttnProjections::new(hidden_size, num_heads, vb.pp("attn"))?;
-41        let norm2 = LayerNormNoAffine::new(1e-6);
-42        let mlp_ratio = 4;
-43        let mlp = Mlp::new(hidden_size, hidden_size * mlp_ratio, vb.pp("mlp"))?;
-44        let n_mods = 6;
-45        let ada_ln_modulation = nn::seq().add(nn::Activation::Silu).add(nn::linear(
-46            hidden_size,
-47            n_mods * hidden_size,
-48            vb.pp("adaLN_modulation.1"),
-49        )?);
-50
-51        Ok(Self {
-52            norm1,
-53            attn,
-54            norm2,
-55            mlp,
-56            ada_ln_modulation,
-57        })
-58    }
-59
-60    pub fn pre_attention(&self, x: &Tensor, c: &Tensor) -> Result<(Qkv, ModulateIntermediates)> {
-61        let modulation = self.ada_ln_modulation.forward(c)?;
-62        let chunks = modulation.chunk(6, D::Minus1)?;
-63        let (shift_msa, scale_msa, gate_msa, shift_mlp, scale_mlp, gate_mlp) = (
-64            chunks[0].clone(),
-65            chunks[1].clone(),
-66            chunks[2].clone(),
-67            chunks[3].clone(),
-68            chunks[4].clone(),
-69            chunks[5].clone(),
-70        );
-71
-72        let norm_x = self.norm1.forward(x)?;
-73        let modulated_x = modulate(&norm_x, &shift_msa, &scale_msa)?;
-74        let qkv = self.attn.pre_attention(&modulated_x)?;
-75
-76        Ok((
-77            qkv,
-78            ModulateIntermediates {
-79                gate_msa,
-80                shift_mlp,
-81                scale_mlp,
-82                gate_mlp,
-83            },
-84        ))
-85    }
-86
-87    pub fn post_attention(
-88        &self,
-89        attn: &Tensor,
-90        x: &Tensor,
-91        mod_interm: &ModulateIntermediates,
-92    ) -> Result<Tensor> {
-93        let attn_out = self.attn.post_attention(attn)?;
-94        let x = x.add(&attn_out.broadcast_mul(&mod_interm.gate_msa.unsqueeze(1)?)?)?;
-95
-96        let norm_x = self.norm2.forward(&x)?;
-97        let modulated_x = modulate(&norm_x, &mod_interm.shift_mlp, &mod_interm.scale_mlp)?;
-98        let mlp_out = self.mlp.forward(&modulated_x)?;
-99        let x = x.add(&mlp_out.broadcast_mul(&mod_interm.gate_mlp.unsqueeze(1)?)?)?;
-100
-101        Ok(x)
-102    }
-103}
-104
-105pub struct SelfAttnModulateIntermediates {
-106    gate_msa: Tensor,
-107    shift_mlp: Tensor,
-108    scale_mlp: Tensor,
-109    gate_mlp: Tensor,
-110    gate_msa2: Tensor,
-111}
-112
-113pub struct SelfAttnDiTBlock {
-114    norm1: LayerNormNoAffine,
-115    attn: AttnProjections,
-116    attn2: AttnProjections,
-117    norm2: LayerNormNoAffine,
-118    mlp: Mlp,
-119    ada_ln_modulation: nn::Sequential,
-120}
-121
-122impl SelfAttnDiTBlock {
-123    pub fn new(hidden_size: usize, num_heads: usize, vb: nn::VarBuilder) -> Result<Self> {
-124        let norm1 = LayerNormNoAffine::new(1e-6);
-125        let attn = AttnProjections::new(hidden_size, num_heads, vb.pp("attn"))?;
-126        let attn2 = AttnProjections::new(hidden_size, num_heads, vb.pp("attn2"))?;
-127        let norm2 = LayerNormNoAffine::new(1e-6);
-128        let mlp_ratio = 4;
-129        let mlp = Mlp::new(hidden_size, hidden_size * mlp_ratio, vb.pp("mlp"))?;
-130        let n_mods = 9;
-131        let ada_ln_modulation = nn::seq().add(nn::Activation::Silu).add(nn::linear(
-132            hidden_size,
-133            n_mods * hidden_size,
-134            vb.pp("adaLN_modulation.1"),
-135        )?);
-136
-137        Ok(Self {
-138            norm1,
-139            attn,
-140            attn2,
-141            norm2,
-142            mlp,
-143            ada_ln_modulation,
-144        })
-145    }
-146
-147    pub fn pre_attention(
-148        &self,
-149        x: &Tensor,
-150        c: &Tensor,
-151    ) -> Result<(Qkv, Qkv, SelfAttnModulateIntermediates)> {
-152        let modulation = self.ada_ln_modulation.forward(c)?;
-153        let chunks = modulation.chunk(9, D::Minus1)?;
-154        let (
-155            shift_msa,
-156            scale_msa,
-157            gate_msa,
-158            shift_mlp,
-159            scale_mlp,
-160            gate_mlp,
-161            shift_msa2,
-162            scale_msa2,
-163            gate_msa2,
-164        ) = (
-165            chunks[0].clone(),
-166            chunks[1].clone(),
-167            chunks[2].clone(),
-168            chunks[3].clone(),
-169            chunks[4].clone(),
-170            chunks[5].clone(),
-171            chunks[6].clone(),
-172            chunks[7].clone(),
-173            chunks[8].clone(),
-174        );
-175
-176        let norm_x = self.norm1.forward(x)?;
-177        let modulated_x = modulate(&norm_x, &shift_msa, &scale_msa)?;
-178        let qkv = self.attn.pre_attention(&modulated_x)?;
-179
-180        let modulated_x2 = modulate(&norm_x, &shift_msa2, &scale_msa2)?;
-181        let qkv2 = self.attn2.pre_attention(&modulated_x2)?;
-182
-183        Ok((
-184            qkv,
-185            qkv2,
-186            SelfAttnModulateIntermediates {
-187                gate_msa,
-188                shift_mlp,
-189                scale_mlp,
-190                gate_mlp,
-191                gate_msa2,
-192            },
-193        ))
-194    }
-195
-196    pub fn post_attention(
-197        &self,
-198        attn: &Tensor,
-199        attn2: &Tensor,
-200        x: &Tensor,
-201        mod_interm: &SelfAttnModulateIntermediates,
-202    ) -> Result<Tensor> {
-203        let attn_out = self.attn.post_attention(attn)?;
-204        let x = x.add(&attn_out.broadcast_mul(&mod_interm.gate_msa.unsqueeze(1)?)?)?;
-205        let attn_out2 = self.attn2.post_attention(attn2)?;
-206        let x = x.add(&attn_out2.broadcast_mul(&mod_interm.gate_msa2.unsqueeze(1)?)?)?;
-207
-208        let norm_x = self.norm2.forward(&x)?;
-209        let modulated_x = modulate(&norm_x, &mod_interm.shift_mlp, &mod_interm.scale_mlp)?;
-210        let mlp_out = self.mlp.forward(&modulated_x)?;
-211        let x = x.add(&mlp_out.broadcast_mul(&mod_interm.gate_mlp.unsqueeze(1)?)?)?;
-212        Ok(x)
-213    }
-214}
-215
-216pub struct QkvOnlyDiTBlock {
-217    norm1: LayerNormNoAffine,
-218    attn: QkvOnlyAttnProjections,
-219    ada_ln_modulation: nn::Sequential,
-220}
-221
-222impl QkvOnlyDiTBlock {
-223    pub fn new(hidden_size: usize, num_heads: usize, vb: nn::VarBuilder) -> Result<Self> {
-224        let norm1 = LayerNormNoAffine::new(1e-6);
-225        let attn = QkvOnlyAttnProjections::new(hidden_size, num_heads, vb.pp("attn"))?;
-226        let n_mods = 2;
-227        let ada_ln_modulation = nn::seq().add(nn::Activation::Silu).add(nn::linear(
-228            hidden_size,
-229            n_mods * hidden_size,
-230            vb.pp("adaLN_modulation.1"),
-231        )?);
-232
-233        Ok(Self {
-234            norm1,
-235            attn,
-236            ada_ln_modulation,
-237        })
-238    }
-239
-240    pub fn pre_attention(&self, x: &Tensor, c: &Tensor) -> Result<Qkv> {
-241        let modulation = self.ada_ln_modulation.forward(c)?;
-242        let chunks = modulation.chunk(2, D::Minus1)?;
-243        let (shift_msa, scale_msa) = (chunks[0].clone(), chunks[1].clone());
-244
-245        let norm_x = self.norm1.forward(x)?;
-246        let modulated_x = modulate(&norm_x, &shift_msa, &scale_msa)?;
-247        self.attn.pre_attention(&modulated_x)
-248    }
-249}
-250
-251pub struct FinalLayer {
-252    norm_final: LayerNormNoAffine,
-253    linear: nn::Linear,
-254    ada_ln_modulation: nn::Sequential,
-255}
-256
-257impl FinalLayer {
-258    pub fn new(
-259        hidden_size: usize,
-260        patch_size: usize,
-261        out_channels: usize,
-262        vb: nn::VarBuilder,
-263    ) -> Result<Self> {
-264        let norm_final = LayerNormNoAffine::new(1e-6);
-265        let linear = nn::linear(
-266            hidden_size,
-267            patch_size * patch_size * out_channels,
-268            vb.pp("linear"),
-269        )?;
-270        let ada_ln_modulation = nn::seq().add(nn::Activation::Silu).add(nn::linear(
-271            hidden_size,
-272            2 * hidden_size,
-273            vb.pp("adaLN_modulation.1"),
-274        )?);
-275
-276        Ok(Self {
-277            norm_final,
-278            linear,
-279            ada_ln_modulation,
-280        })
-281    }
-282
-283    pub fn forward(&self, x: &Tensor, c: &Tensor) -> Result<Tensor> {
-284        let modulation = self.ada_ln_modulation.forward(c)?;
-285        let chunks = modulation.chunk(2, D::Minus1)?;
-286        let (shift, scale) = (chunks[0].clone(), chunks[1].clone());
-287
-288        let norm_x = self.norm_final.forward(x)?;
-289        let modulated_x = modulate(&norm_x, &shift, &scale)?;
-290        let output = self.linear.forward(&modulated_x)?;
-291
-292        Ok(output)
-293    }
-294}
-295
-296fn modulate(x: &Tensor, shift: &Tensor, scale: &Tensor) -> Result<Tensor> {
-297    let shift = shift.unsqueeze(1)?;
-298    let scale = scale.unsqueeze(1)?;
-299    let scale_plus_one = scale.add(&Tensor::ones_like(&scale)?)?;
-300    shift.broadcast_add(&x.broadcast_mul(&scale_plus_one)?)
-301}
-302
-303pub trait JointBlock {
-304    fn forward(&self, context: &Tensor, x: &Tensor, c: &Tensor) -> Result<(Tensor, Tensor)>;
-305}
-306
-307pub struct MMDiTJointBlock {
-308    x_block: DiTBlock,
-309    context_block: DiTBlock,
-310    num_heads: usize,
-311    use_flash_attn: bool,
-312}
-313
-314impl MMDiTJointBlock {
-315    pub fn new(
-316        hidden_size: usize,
-317        num_heads: usize,
-318        use_flash_attn: bool,
-319        vb: nn::VarBuilder,
-320    ) -> Result<Self> {
-321        let x_block = DiTBlock::new(hidden_size, num_heads, vb.pp("x_block"))?;
-322        let context_block = DiTBlock::new(hidden_size, num_heads, vb.pp("context_block"))?;
-323
-324        Ok(Self {
-325            x_block,
-326            context_block,
-327            num_heads,
-328            use_flash_attn,
-329        })
-330    }
-331}
-332
-333impl JointBlock for MMDiTJointBlock {
-334    fn forward(&self, context: &Tensor, x: &Tensor, c: &Tensor) -> Result<(Tensor, Tensor)> {
-335        let (context_qkv, context_interm) = self.context_block.pre_attention(context, c)?;
-336        let (x_qkv, x_interm) = self.x_block.pre_attention(x, c)?;
-337        let (context_attn, x_attn) =
-338            joint_attn(&context_qkv, &x_qkv, self.num_heads, self.use_flash_attn)?;
-339        let context_out =
-340            self.context_block
-341                .post_attention(&context_attn, context, &context_interm)?;
-342        let x_out = self.x_block.post_attention(&x_attn, x, &x_interm)?;
-343        Ok((context_out, x_out))
-344    }
-345}
-346
-347pub struct MMDiTXJointBlock {
-348    x_block: SelfAttnDiTBlock,
-349    context_block: DiTBlock,
-350    num_heads: usize,
-351    use_flash_attn: bool,
-352}
-353
-354impl MMDiTXJointBlock {
-355    pub fn new(
-356        hidden_size: usize,
-357        num_heads: usize,
-358        use_flash_attn: bool,
-359        vb: nn::VarBuilder,
-360    ) -> Result<Self> {
-361        let x_block = SelfAttnDiTBlock::new(hidden_size, num_heads, vb.pp("x_block"))?;
-362        let context_block = DiTBlock::new(hidden_size, num_heads, vb.pp("context_block"))?;
-363
-364        Ok(Self {
-365            x_block,
-366            context_block,
-367            num_heads,
-368            use_flash_attn,
-369        })
-370    }
-371}
-372
-373impl JointBlock for MMDiTXJointBlock {
-374    fn forward(&self, context: &Tensor, x: &Tensor, c: &Tensor) -> Result<(Tensor, Tensor)> {
-375        let (context_qkv, context_interm) = self.context_block.pre_attention(context, c)?;
-376        let (x_qkv, x_qkv2, x_interm) = self.x_block.pre_attention(x, c)?;
-377        let (context_attn, x_attn) =
-378            joint_attn(&context_qkv, &x_qkv, self.num_heads, self.use_flash_attn)?;
-379        let x_attn2 = attn(&x_qkv2, self.num_heads, self.use_flash_attn)?;
-380        let context_out =
-381            self.context_block
-382                .post_attention(&context_attn, context, &context_interm)?;
-383        let x_out = self
-384            .x_block
-385            .post_attention(&x_attn, &x_attn2, x, &x_interm)?;
-386        Ok((context_out, x_out))
-387    }
-388}
-389
-390pub struct ContextQkvOnlyJointBlock {
-391    x_block: DiTBlock,
-392    context_block: QkvOnlyDiTBlock,
-393    num_heads: usize,
-394    use_flash_attn: bool,
-395}
-396
-397impl ContextQkvOnlyJointBlock {
-398    pub fn new(
-399        hidden_size: usize,
-400        num_heads: usize,
-401        use_flash_attn: bool,
-402        vb: nn::VarBuilder,
-403    ) -> Result<Self> {
-404        let x_block = DiTBlock::new(hidden_size, num_heads, vb.pp("x_block"))?;
-405        let context_block = QkvOnlyDiTBlock::new(hidden_size, num_heads, vb.pp("context_block"))?;
-406        Ok(Self {
-407            x_block,
-408            context_block,
-409            num_heads,
-410            use_flash_attn,
-411        })
-412    }
-413
-414    pub fn forward(&self, context: &Tensor, x: &Tensor, c: &Tensor) -> Result<Tensor> {
-415        let context_qkv = self.context_block.pre_attention(context, c)?;
-416        let (x_qkv, x_interm) = self.x_block.pre_attention(x, c)?;
-417
-418        let (_, x_attn) = joint_attn(&context_qkv, &x_qkv, self.num_heads, self.use_flash_attn)?;
-419
-420        let x_out = self.x_block.post_attention(&x_attn, x, &x_interm)?;
-421        Ok(x_out)
-422    }
-423}
-424
-425// A QKV-attention that is compatible with the interface of candle_flash_attn::flash_attn
-426// Flash attention regards q, k, v dimensions as (batch_size, seqlen, nheads, headdim)
-427fn flash_compatible_attention(
-428    q: &Tensor,
-429    k: &Tensor,
-430    v: &Tensor,
-431    softmax_scale: f32,
-432) -> Result<Tensor> {
-433    let q_dims_for_matmul = q.transpose(1, 2)?.dims().to_vec();
-434    let rank = q_dims_for_matmul.len();
-435    let q = q.transpose(1, 2)?.flatten_to(rank - 3)?;
-436    let k = k.transpose(1, 2)?.flatten_to(rank - 3)?;
-437    let v = v.transpose(1, 2)?.flatten_to(rank - 3)?;
-438    let attn_weights = (q.matmul(&k.t()?)? * softmax_scale as f64)?;
-439    let attn_scores = candle_nn::ops::softmax_last_dim(&attn_weights)?.matmul(&v)?;
-440    attn_scores.reshape(q_dims_for_matmul)?.transpose(1, 2)
-441}
-442
-443#[cfg(feature = "flash-attn")]
-444fn flash_attn(
-445    q: &Tensor,
-446    k: &Tensor,
-447    v: &Tensor,
-448    softmax_scale: f32,
-449    causal: bool,
-450) -> Result<Tensor> {
-451    candle_flash_attn::flash_attn(q, k, v, softmax_scale, causal)
-452}
-453
-454#[cfg(not(feature = "flash-attn"))]
-455fn flash_attn(_: &Tensor, _: &Tensor, _: &Tensor, _: f32, _: bool) -> Result<Tensor> {
-456    unimplemented!("compile with '--features flash-attn'")
-457}
-458
-459fn joint_attn(
-460    context_qkv: &Qkv,
-461    x_qkv: &Qkv,
-462    num_heads: usize,
-463    use_flash_attn: bool,
-464) -> Result<(Tensor, Tensor)> {
-465    let qkv = Qkv {
-466        q: Tensor::cat(&[&context_qkv.q, &x_qkv.q], 1)?,
-467        k: Tensor::cat(&[&context_qkv.k, &x_qkv.k], 1)?,
-468        v: Tensor::cat(&[&context_qkv.v, &x_qkv.v], 1)?,
-469    };
-470
-471    let seqlen = qkv.q.dim(1)?;
-472    let attn = attn(&qkv, num_heads, use_flash_attn)?;
-473    let context_qkv_seqlen = context_qkv.q.dim(1)?;
-474    let context_attn = attn.narrow(1, 0, context_qkv_seqlen)?;
-475    let x_attn = attn.narrow(1, context_qkv_seqlen, seqlen - context_qkv_seqlen)?;
-476
-477    Ok((context_attn, x_attn))
-478}
-479
-480fn attn(qkv: &Qkv, num_heads: usize, use_flash_attn: bool) -> Result<Tensor> {
-481    let batch_size = qkv.q.dim(0)?;
-482    let seqlen = qkv.q.dim(1)?;
-483    let qkv = Qkv {
-484        q: qkv.q.reshape((batch_size, seqlen, num_heads, ()))?,
-485        k: qkv.k.reshape((batch_size, seqlen, num_heads, ()))?,
-486        v: qkv.v.clone(),
-487    };
-488
-489    let headdim = qkv.q.dim(D::Minus1)?;
-490    let softmax_scale = 1.0 / (headdim as f64).sqrt();
-491    let attn = if use_flash_attn {
-492        flash_attn(&qkv.q, &qkv.k, &qkv.v, softmax_scale as f32, false)?
-493    } else {
-494        flash_compatible_attention(&qkv.q, &qkv.k, &qkv.v, softmax_scale as f32)?
-495    };
-496    attn.reshape((batch_size, seqlen, ()))
-497}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mmdit/embedding.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mmdit/embedding.rs.html deleted file mode 100644 index 09a0353..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mmdit/embedding.rs.html +++ /dev/null @@ -1,198 +0,0 @@ -embedding.rs - source

candle_transformers/models/mmdit/
embedding.rs

1use candle::{bail, DType, Module, Result, Tensor};
-2use candle_nn as nn;
-3
-4pub struct PatchEmbedder {
-5    proj: nn::Conv2d,
-6}
-7
-8impl PatchEmbedder {
-9    pub fn new(
-10        patch_size: usize,
-11        in_channels: usize,
-12        embed_dim: usize,
-13        vb: nn::VarBuilder,
-14    ) -> Result<Self> {
-15        let proj = nn::conv2d(
-16            in_channels,
-17            embed_dim,
-18            patch_size,
-19            nn::Conv2dConfig {
-20                stride: patch_size,
-21                ..Default::default()
-22            },
-23            vb.pp("proj"),
-24        )?;
-25
-26        Ok(Self { proj })
-27    }
-28}
-29
-30impl Module for PatchEmbedder {
-31    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-32        let x = self.proj.forward(x)?;
-33
-34        // flatten spatial dim and transpose to channels last
-35        let (b, c, h, w) = x.dims4()?;
-36        x.reshape((b, c, h * w))?.transpose(1, 2)
-37    }
-38}
-39
-40pub struct Unpatchifier {
-41    patch_size: usize,
-42    out_channels: usize,
-43}
-44
-45impl Unpatchifier {
-46    pub fn new(patch_size: usize, out_channels: usize) -> Result<Self> {
-47        Ok(Self {
-48            patch_size,
-49            out_channels,
-50        })
-51    }
-52
-53    pub fn unpatchify(&self, x: &Tensor, h: usize, w: usize) -> Result<Tensor> {
-54        let h = (h + 1) / self.patch_size;
-55        let w = (w + 1) / self.patch_size;
-56
-57        let x = x.reshape((
-58            x.dim(0)?,
-59            h,
-60            w,
-61            self.patch_size,
-62            self.patch_size,
-63            self.out_channels,
-64        ))?;
-65        let x = x.permute((0, 5, 1, 3, 2, 4))?; // "nhwpqc->nchpwq"
-66        x.reshape((
-67            x.dim(0)?,
-68            self.out_channels,
-69            self.patch_size * h,
-70            self.patch_size * w,
-71        ))
-72    }
-73}
-74
-75pub struct PositionEmbedder {
-76    pos_embed: Tensor,
-77    patch_size: usize,
-78    pos_embed_max_size: usize,
-79}
-80
-81impl PositionEmbedder {
-82    pub fn new(
-83        hidden_size: usize,
-84        patch_size: usize,
-85        pos_embed_max_size: usize,
-86        vb: nn::VarBuilder,
-87    ) -> Result<Self> {
-88        let pos_embed = vb.get(
-89            (1, pos_embed_max_size * pos_embed_max_size, hidden_size),
-90            "pos_embed",
-91        )?;
-92        Ok(Self {
-93            pos_embed,
-94            patch_size,
-95            pos_embed_max_size,
-96        })
-97    }
-98    pub fn get_cropped_pos_embed(&self, h: usize, w: usize) -> Result<Tensor> {
-99        let h = (h + 1) / self.patch_size;
-100        let w = (w + 1) / self.patch_size;
-101
-102        if h > self.pos_embed_max_size || w > self.pos_embed_max_size {
-103            bail!("Input size is too large for the position embedding")
-104        }
-105
-106        let top = (self.pos_embed_max_size - h) / 2;
-107        let left = (self.pos_embed_max_size - w) / 2;
-108
-109        let pos_embed =
-110            self.pos_embed
-111                .reshape((1, self.pos_embed_max_size, self.pos_embed_max_size, ()))?;
-112        let pos_embed = pos_embed.narrow(1, top, h)?.narrow(2, left, w)?;
-113        pos_embed.reshape((1, h * w, ()))
-114    }
-115}
-116
-117pub struct TimestepEmbedder {
-118    mlp: nn::Sequential,
-119    frequency_embedding_size: usize,
-120}
-121
-122impl TimestepEmbedder {
-123    pub fn new(
-124        hidden_size: usize,
-125        frequency_embedding_size: usize,
-126        vb: nn::VarBuilder,
-127    ) -> Result<Self> {
-128        let mlp = nn::seq()
-129            .add(nn::linear(
-130                frequency_embedding_size,
-131                hidden_size,
-132                vb.pp("mlp.0"),
-133            )?)
-134            .add(nn::Activation::Silu)
-135            .add(nn::linear(hidden_size, hidden_size, vb.pp("mlp.2"))?);
-136
-137        Ok(Self {
-138            mlp,
-139            frequency_embedding_size,
-140        })
-141    }
-142
-143    fn timestep_embedding(t: &Tensor, dim: usize, max_period: f64) -> Result<Tensor> {
-144        if dim % 2 != 0 {
-145            bail!("Embedding dimension must be even")
-146        }
-147
-148        if t.dtype() != DType::F32 && t.dtype() != DType::F64 {
-149            bail!("Input tensor must be floating point")
-150        }
-151
-152        let half = dim / 2;
-153        let freqs = Tensor::arange(0f32, half as f32, t.device())?
-154            .to_dtype(candle::DType::F32)?
-155            .mul(&Tensor::full(
-156                (-f64::ln(max_period) / half as f64) as f32,
-157                half,
-158                t.device(),
-159            )?)?
-160            .exp()?;
-161
-162        let args = t
-163            .unsqueeze(1)?
-164            .to_dtype(candle::DType::F32)?
-165            .matmul(&freqs.unsqueeze(0)?)?;
-166        let embedding = Tensor::cat(&[args.cos()?, args.sin()?], 1)?;
-167        embedding.to_dtype(candle::DType::F16)
-168    }
-169}
-170
-171impl Module for TimestepEmbedder {
-172    fn forward(&self, t: &Tensor) -> Result<Tensor> {
-173        let t_freq = Self::timestep_embedding(t, self.frequency_embedding_size, 10000.0)?;
-174        self.mlp.forward(&t_freq)
-175    }
-176}
-177
-178pub struct VectorEmbedder {
-179    mlp: nn::Sequential,
-180}
-181
-182impl VectorEmbedder {
-183    pub fn new(input_dim: usize, hidden_size: usize, vb: nn::VarBuilder) -> Result<Self> {
-184        let mlp = nn::seq()
-185            .add(nn::linear(input_dim, hidden_size, vb.pp("mlp.0"))?)
-186            .add(nn::Activation::Silu)
-187            .add(nn::linear(hidden_size, hidden_size, vb.pp("mlp.2"))?);
-188
-189        Ok(Self { mlp })
-190    }
-191}
-192
-193impl Module for VectorEmbedder {
-194    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-195        self.mlp.forward(x)
-196    }
-197}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mmdit/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mmdit/mod.rs.html deleted file mode 100644 index ae2ab80..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mmdit/mod.rs.html +++ /dev/null @@ -1,20 +0,0 @@ -mod.rs - source

candle_transformers/models/mmdit/
mod.rs

1//! Mix of Multi-scale Dilated and Traditional Convolutions
-2//!
-3//! Mix of Multi-scale Dilated and Traditional Convolutions (MMDiT) is an architecture
-4//! introduced for Stable Diffusion 3, with the MMDiT-X variant used in Stable Diffusion 3.5.
-5//!
-6//! - 📝 [Research Paper](https://arxiv.org/abs/2403.03206)
-7//! - 💻 ComfyUI [reference implementation](https://github.com/comfyanonymous/ComfyUI/blob/78e133d0415784924cd2674e2ee48f3eeca8a2aa/comfy/ldm/modules/diffusionmodules/mmdit.py)
-8//! - 💻 Stability-AI [MMDiT-X implementation](https://github.com/Stability-AI/sd3.5/blob/4e484e05308d83fb77ae6f680028e6c313f9da54/mmditx.py)
-9
-10//! - ⚡ [Interactive Wasm Example](https://huggingface.co/spaces/radames/Candle-BLIP-Image-Captioning)
-11//! - 💻 [GH Link](https://github.com/salesforce/BLIP)
-12//! - 🤗 [HF Link](https://huggingface.co/Salesforce/blip-image-captioning-base)
-13//! - 📝 [Paper](https://arxiv.org/abs/2201.12086)
-14//!
-15
-16pub mod blocks;
-17pub mod embedding;
-18pub mod model;
-19pub mod projections;
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mmdit/model.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mmdit/model.rs.html deleted file mode 100644 index d1a7a25..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mmdit/model.rs.html +++ /dev/null @@ -1,241 +0,0 @@ -model.rs - source

candle_transformers/models/mmdit/
model.rs

1// Implement the MMDiT model originally introduced for Stable Diffusion 3 (https://arxiv.org/abs/2403.03206),
-2// as well as the MMDiT-X variant introduced for Stable Diffusion 3.5-medium (https://huggingface.co/stabilityai/stable-diffusion-3.5-medium)
-3// This follows the implementation of the MMDiT model in the ComfyUI repository.
-4// https://github.com/comfyanonymous/ComfyUI/blob/78e133d0415784924cd2674e2ee48f3eeca8a2aa/comfy/ldm/modules/diffusionmodules/mmdit.py#L1
-5// with MMDiT-X support following the Stability-AI/sd3.5 repository.
-6// https://github.com/Stability-AI/sd3.5/blob/4e484e05308d83fb77ae6f680028e6c313f9da54/mmditx.py#L1
-7use candle::{Module, Result, Tensor, D};
-8use candle_nn as nn;
-9
-10use super::blocks::{
-11    ContextQkvOnlyJointBlock, FinalLayer, JointBlock, MMDiTJointBlock, MMDiTXJointBlock,
-12};
-13use super::embedding::{
-14    PatchEmbedder, PositionEmbedder, TimestepEmbedder, Unpatchifier, VectorEmbedder,
-15};
-16
-17#[derive(Debug, Clone)]
-18pub struct Config {
-19    pub patch_size: usize,
-20    pub in_channels: usize,
-21    pub out_channels: usize,
-22    pub depth: usize,
-23    pub head_size: usize,
-24    pub adm_in_channels: usize,
-25    pub pos_embed_max_size: usize,
-26    pub context_embed_size: usize,
-27    pub frequency_embedding_size: usize,
-28}
-29
-30impl Config {
-31    pub fn sd3_medium() -> Self {
-32        Self {
-33            patch_size: 2,
-34            in_channels: 16,
-35            out_channels: 16,
-36            depth: 24,
-37            head_size: 64,
-38            adm_in_channels: 2048,
-39            pos_embed_max_size: 192,
-40            context_embed_size: 4096,
-41            frequency_embedding_size: 256,
-42        }
-43    }
-44
-45    pub fn sd3_5_medium() -> Self {
-46        Self {
-47            patch_size: 2,
-48            in_channels: 16,
-49            out_channels: 16,
-50            depth: 24,
-51            head_size: 64,
-52            adm_in_channels: 2048,
-53            pos_embed_max_size: 384,
-54            context_embed_size: 4096,
-55            frequency_embedding_size: 256,
-56        }
-57    }
-58
-59    pub fn sd3_5_large() -> Self {
-60        Self {
-61            patch_size: 2,
-62            in_channels: 16,
-63            out_channels: 16,
-64            depth: 38,
-65            head_size: 64,
-66            adm_in_channels: 2048,
-67            pos_embed_max_size: 192,
-68            context_embed_size: 4096,
-69            frequency_embedding_size: 256,
-70        }
-71    }
-72}
-73
-74pub struct MMDiT {
-75    core: MMDiTCore,
-76    patch_embedder: PatchEmbedder,
-77    pos_embedder: PositionEmbedder,
-78    timestep_embedder: TimestepEmbedder,
-79    vector_embedder: VectorEmbedder,
-80    context_embedder: nn::Linear,
-81    unpatchifier: Unpatchifier,
-82}
-83
-84impl MMDiT {
-85    pub fn new(cfg: &Config, use_flash_attn: bool, vb: nn::VarBuilder) -> Result<Self> {
-86        let hidden_size = cfg.head_size * cfg.depth;
-87        let core = MMDiTCore::new(
-88            cfg.depth,
-89            hidden_size,
-90            cfg.depth,
-91            cfg.patch_size,
-92            cfg.out_channels,
-93            use_flash_attn,
-94            vb.clone(),
-95        )?;
-96        let patch_embedder = PatchEmbedder::new(
-97            cfg.patch_size,
-98            cfg.in_channels,
-99            hidden_size,
-100            vb.pp("x_embedder"),
-101        )?;
-102        let pos_embedder = PositionEmbedder::new(
-103            hidden_size,
-104            cfg.patch_size,
-105            cfg.pos_embed_max_size,
-106            vb.clone(),
-107        )?;
-108        let timestep_embedder = TimestepEmbedder::new(
-109            hidden_size,
-110            cfg.frequency_embedding_size,
-111            vb.pp("t_embedder"),
-112        )?;
-113        let vector_embedder =
-114            VectorEmbedder::new(cfg.adm_in_channels, hidden_size, vb.pp("y_embedder"))?;
-115        let context_embedder = nn::linear(
-116            cfg.context_embed_size,
-117            hidden_size,
-118            vb.pp("context_embedder"),
-119        )?;
-120        let unpatchifier = Unpatchifier::new(cfg.patch_size, cfg.out_channels)?;
-121
-122        Ok(Self {
-123            core,
-124            patch_embedder,
-125            pos_embedder,
-126            timestep_embedder,
-127            vector_embedder,
-128            context_embedder,
-129            unpatchifier,
-130        })
-131    }
-132
-133    pub fn forward(
-134        &self,
-135        x: &Tensor,
-136        t: &Tensor,
-137        y: &Tensor,
-138        context: &Tensor,
-139        skip_layers: Option<&[usize]>,
-140    ) -> Result<Tensor> {
-141        // Following the convention of the ComfyUI implementation.
-142        // https://github.com/comfyanonymous/ComfyUI/blob/78e133d0415784924cd2674e2ee48f3eeca8a2aa/comfy/ldm/modules/diffusionmodules/mmdit.py#L919
-143        //
-144        // Forward pass of DiT.
-145        // x: (N, C, H, W) tensor of spatial inputs (images or latent representations of images)
-146        // t: (N,) tensor of diffusion timesteps
-147        // y: (N,) tensor of class labels
-148        let h = x.dim(D::Minus2)?;
-149        let w = x.dim(D::Minus1)?;
-150        let cropped_pos_embed = self.pos_embedder.get_cropped_pos_embed(h, w)?;
-151        let x = self
-152            .patch_embedder
-153            .forward(x)?
-154            .broadcast_add(&cropped_pos_embed)?;
-155        let c = self.timestep_embedder.forward(t)?;
-156        let y = self.vector_embedder.forward(y)?;
-157        let c = (c + y)?;
-158        let context = self.context_embedder.forward(context)?;
-159
-160        let x = self.core.forward(&context, &x, &c, skip_layers)?;
-161        let x = self.unpatchifier.unpatchify(&x, h, w)?;
-162        x.narrow(2, 0, h)?.narrow(3, 0, w)
-163    }
-164}
-165
-166pub struct MMDiTCore {
-167    joint_blocks: Vec<Box<dyn JointBlock>>,
-168    context_qkv_only_joint_block: ContextQkvOnlyJointBlock,
-169    final_layer: FinalLayer,
-170}
-171
-172impl MMDiTCore {
-173    pub fn new(
-174        depth: usize,
-175        hidden_size: usize,
-176        num_heads: usize,
-177        patch_size: usize,
-178        out_channels: usize,
-179        use_flash_attn: bool,
-180        vb: nn::VarBuilder,
-181    ) -> Result<Self> {
-182        let mut joint_blocks = Vec::with_capacity(depth - 1);
-183        for i in 0..depth - 1 {
-184            let joint_block_vb_pp = format!("joint_blocks.{}", i);
-185            let joint_block: Box<dyn JointBlock> =
-186                if vb.contains_tensor(&format!("{}.x_block.attn2.qkv.weight", joint_block_vb_pp)) {
-187                    Box::new(MMDiTXJointBlock::new(
-188                        hidden_size,
-189                        num_heads,
-190                        use_flash_attn,
-191                        vb.pp(&joint_block_vb_pp),
-192                    )?)
-193                } else {
-194                    Box::new(MMDiTJointBlock::new(
-195                        hidden_size,
-196                        num_heads,
-197                        use_flash_attn,
-198                        vb.pp(&joint_block_vb_pp),
-199                    )?)
-200                };
-201            joint_blocks.push(joint_block);
-202        }
-203
-204        Ok(Self {
-205            joint_blocks,
-206            context_qkv_only_joint_block: ContextQkvOnlyJointBlock::new(
-207                hidden_size,
-208                num_heads,
-209                use_flash_attn,
-210                vb.pp(format!("joint_blocks.{}", depth - 1)),
-211            )?,
-212            final_layer: FinalLayer::new(
-213                hidden_size,
-214                patch_size,
-215                out_channels,
-216                vb.pp("final_layer"),
-217            )?,
-218        })
-219    }
-220
-221    pub fn forward(
-222        &self,
-223        context: &Tensor,
-224        x: &Tensor,
-225        c: &Tensor,
-226        skip_layers: Option<&[usize]>,
-227    ) -> Result<Tensor> {
-228        let (mut context, mut x) = (context.clone(), x.clone());
-229        for (i, joint_block) in self.joint_blocks.iter().enumerate() {
-230            if let Some(skip_layers) = &skip_layers {
-231                if skip_layers.contains(&i) {
-232                    continue;
-233                }
-234            }
-235            (context, x) = joint_block.forward(&context, &x, c)?;
-236        }
-237        let x = self.context_qkv_only_joint_block.forward(&context, &x, c)?;
-238        self.final_layer.forward(&x, c)
-239    }
-240}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mmdit/projections.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mmdit/projections.rs.html deleted file mode 100644 index 719d70b..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mmdit/projections.rs.html +++ /dev/null @@ -1,122 +0,0 @@ -projections.rs - source

candle_transformers/models/mmdit/
projections.rs

1use candle::{Module, Result, Tensor};
-2use candle_nn as nn;
-3
-4pub struct Qkv {
-5    pub q: Tensor,
-6    pub k: Tensor,
-7    pub v: Tensor,
-8}
-9
-10pub struct Mlp {
-11    fc1: nn::Linear,
-12    act: nn::Activation,
-13    fc2: nn::Linear,
-14}
-15
-16impl Mlp {
-17    pub fn new(
-18        in_features: usize,
-19        hidden_features: usize,
-20        vb: candle_nn::VarBuilder,
-21    ) -> Result<Self> {
-22        let fc1 = nn::linear(in_features, hidden_features, vb.pp("fc1"))?;
-23        let act = nn::Activation::GeluPytorchTanh;
-24        let fc2 = nn::linear(hidden_features, in_features, vb.pp("fc2"))?;
-25
-26        Ok(Self { fc1, act, fc2 })
-27    }
-28}
-29
-30impl Module for Mlp {
-31    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-32        let x = self.fc1.forward(x)?;
-33        let x = self.act.forward(&x)?;
-34        self.fc2.forward(&x)
-35    }
-36}
-37
-38pub struct QkvOnlyAttnProjections {
-39    qkv: nn::Linear,
-40    head_dim: usize,
-41}
-42
-43impl QkvOnlyAttnProjections {
-44    pub fn new(dim: usize, num_heads: usize, vb: nn::VarBuilder) -> Result<Self> {
-45        let head_dim = dim / num_heads;
-46        let qkv = nn::linear(dim, dim * 3, vb.pp("qkv"))?;
-47        Ok(Self { qkv, head_dim })
-48    }
-49
-50    pub fn pre_attention(&self, x: &Tensor) -> Result<Qkv> {
-51        let qkv = self.qkv.forward(x)?;
-52        split_qkv(&qkv, self.head_dim)
-53    }
-54}
-55
-56pub struct AttnProjections {
-57    head_dim: usize,
-58    qkv: nn::Linear,
-59    ln_k: Option<candle_nn::RmsNorm>,
-60    ln_q: Option<candle_nn::RmsNorm>,
-61    proj: nn::Linear,
-62}
-63
-64impl AttnProjections {
-65    pub fn new(dim: usize, num_heads: usize, vb: nn::VarBuilder) -> Result<Self> {
-66        let head_dim = dim / num_heads;
-67        let qkv = nn::linear(dim, dim * 3, vb.pp("qkv"))?;
-68        let proj = nn::linear(dim, dim, vb.pp("proj"))?;
-69        let (ln_k, ln_q) = if vb.contains_tensor("ln_k.weight") {
-70            let ln_k = candle_nn::rms_norm(head_dim, 1e-6, vb.pp("ln_k"))?;
-71            let ln_q = candle_nn::rms_norm(head_dim, 1e-6, vb.pp("ln_q"))?;
-72            (Some(ln_k), Some(ln_q))
-73        } else {
-74            (None, None)
-75        };
-76        Ok(Self {
-77            head_dim,
-78            qkv,
-79            proj,
-80            ln_k,
-81            ln_q,
-82        })
-83    }
-84
-85    pub fn pre_attention(&self, x: &Tensor) -> Result<Qkv> {
-86        let qkv = self.qkv.forward(x)?;
-87        let Qkv { q, k, v } = split_qkv(&qkv, self.head_dim)?;
-88        let q = match self.ln_q.as_ref() {
-89            None => q,
-90            Some(l) => {
-91                let (b, t, h) = q.dims3()?;
-92                l.forward(&q.reshape((b, t, (), self.head_dim))?)?
-93                    .reshape((b, t, h))?
-94            }
-95        };
-96        let k = match self.ln_k.as_ref() {
-97            None => k,
-98            Some(l) => {
-99                let (b, t, h) = k.dims3()?;
-100                l.forward(&k.reshape((b, t, (), self.head_dim))?)?
-101                    .reshape((b, t, h))?
-102            }
-103        };
-104        Ok(Qkv { q, k, v })
-105    }
-106
-107    pub fn post_attention(&self, x: &Tensor) -> Result<Tensor> {
-108        self.proj.forward(x)
-109    }
-110}
-111
-112fn split_qkv(qkv: &Tensor, head_dim: usize) -> Result<Qkv> {
-113    let (batch_size, seq_len, _) = qkv.dims3()?;
-114    let qkv = qkv.reshape((batch_size, seq_len, 3, (), head_dim))?;
-115    let q = qkv.get_on_dim(2, 0)?;
-116    let q = q.reshape((batch_size, seq_len, ()))?;
-117    let k = qkv.get_on_dim(2, 1)?;
-118    let k = k.reshape((batch_size, seq_len, ()))?;
-119    let v = qkv.get_on_dim(2, 2)?;
-120    Ok(Qkv { q, k, v })
-121}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mobileclip.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mobileclip.rs.html deleted file mode 100644 index 7beb473..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mobileclip.rs.html +++ /dev/null @@ -1,102 +0,0 @@ -mobileclip.rs - source

candle_transformers/models/
mobileclip.rs

1//! Mobile CLIP model, combining a lightweight vision encoder with a text encoder
-2//!
-3//! A mobile-optimized CLIP implementation that uses:
-4//! - FastViT as the vision encoder
-5//! - OpenCLIP text encoder
-6//! - Projection layers to align the feature spaces
-7//!
-8//! See model details at:
-9//! - [FastViT](https://arxiv.org/abs/2303.14189)
-10//! - [OpenCLIP](https://github.com/mlfoundations/open_clip)
-11//!
-12//! References:
-13//! - [MobileVLM](https://huggingface.co/mobileVLM)
-14//! - [MetaCLIP](https://arxiv.org/abs/2309.16671)
-15//!
-16
-17use super::fastvit;
-18use super::openclip::text_model;
-19use candle::{Result, Tensor, D};
-20use candle_nn::{Func, VarBuilder};
-21
-22#[derive(Clone, Debug)]
-23pub struct MobileClipModel {
-24    text_model: text_model::OpenClipTextTransformer,
-25    vision_model: Func<'static>,
-26    text_projection: Tensor,
-27    logit_scale: Tensor,
-28}
-29
-30#[derive(Clone, Debug)]
-31pub struct MobileClipConfig {
-32    pub text_config: text_model::Config,
-33    pub vision_config: fastvit::Config,
-34    pub image_size: usize,
-35}
-36
-37impl MobileClipConfig {
-38    pub fn s1() -> Self {
-39        let text_config = text_model::Config::vit_base_patch32();
-40        let vision_config = fastvit::Config::mci1();
-41        Self {
-42            text_config,
-43            vision_config,
-44            image_size: 256,
-45        }
-46    }
-47    pub fn s2() -> Self {
-48        let text_config = text_model::Config::vit_base_patch32();
-49        let vision_config = fastvit::Config::mci2();
-50        Self {
-51            text_config,
-52            vision_config,
-53            image_size: 256,
-54        }
-55    }
-56}
-57
-58impl MobileClipModel {
-59    pub fn new(vs: VarBuilder, c: &MobileClipConfig) -> Result<Self> {
-60        let vision_model = fastvit::fastvit(&c.vision_config, 512, vs.pp("visual.trunk"))?;
-61        let text_model = text_model::OpenClipTextTransformer::new(vs.pp("text"), &c.text_config)?;
-62        let text_projection = vs.get(
-63            (c.text_config.embed_dim, c.text_config.projection_dim),
-64            "text.text_projection",
-65        )?;
-66        let logit_scale = vs.get(&[], "logit_scale")?;
-67        Ok(Self {
-68            text_model,
-69            vision_model,
-70            text_projection,
-71            logit_scale,
-72        })
-73    }
-74
-75    pub fn get_text_features(&self, input_ids: &Tensor) -> Result<Tensor> {
-76        input_ids
-77            .apply(&self.text_model)?
-78            .matmul(&self.text_projection)
-79    }
-80
-81    pub fn get_image_features(&self, pixel_values: &Tensor) -> Result<Tensor> {
-82        pixel_values.apply(&self.vision_model)
-83    }
-84
-85    pub fn forward(&self, pixel_values: &Tensor, input_ids: &Tensor) -> Result<(Tensor, Tensor)> {
-86        let image_features = self.get_image_features(pixel_values)?;
-87        let text_features = self.get_text_features(input_ids)?;
-88        let image_features_normalized = div_l2_norm(&image_features)?;
-89        let text_features_normalized = div_l2_norm(&text_features)?;
-90        let logits_per_text = text_features_normalized.matmul(&image_features_normalized.t()?)?;
-91        let logit_scale = self.logit_scale.exp()?;
-92        let logits_per_text = logits_per_text.broadcast_mul(&logit_scale)?;
-93        let logits_per_image = logits_per_text.t()?;
-94        Ok((logits_per_text, logits_per_image))
-95    }
-96}
-97
-98pub fn div_l2_norm(v: &Tensor) -> Result<Tensor> {
-99    let l2_norm = v.sqr()?.sum_keepdim(D::Minus1)?.sqrt()?;
-100    v.broadcast_div(&l2_norm)
-101}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mobilenetv4.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mobilenetv4.rs.html deleted file mode 100644 index b9fb705..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mobilenetv4.rs.html +++ /dev/null @@ -1,806 +0,0 @@ -mobilenetv4.rs - source

candle_transformers/models/
mobilenetv4.rs

1//! # MobileNet-v4
-2//!
-3//! MobileNet-v4 inference implementation based on timm.
-4//!
-5//! ## Paper
-6//!
-7//! ["MobileNetV4 - Universal Models for the Mobile Ecosystem"](https://arxiv.org/abs/2404.10518)
-8//!
-9//! ## References
-10//!
-11//! - [PyTorch Implementation](https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/mobilenetv3.py)
-12
-13use candle::{Result, Tensor, D};
-14use candle_nn::{
-15    batch_norm, conv2d_no_bias, linear, ops::softmax, Activation, Conv2dConfig, Func, VarBuilder,
-16};
-17
-18#[derive(Clone, Debug)]
-19enum BlockType {
-20    Convolutional {
-21        out_channels: usize,
-22        kernel: usize,
-23        stride: usize,
-24    },
-25    UniversalBottleneck {
-26        out_channels: usize,
-27        start_kernel: usize,
-28        mid_kernel: usize,
-29        stride: usize,
-30        expand: usize,
-31    },
-32    EdgeResidual {
-33        out_channels: usize,
-34        kernel: usize,
-35        stride: usize,
-36        expand: usize,
-37    },
-38    Attention {
-39        out_channels: usize,
-40        heads: usize,
-41        kernel: usize,
-42        stride: usize,
-43        kv_dim: usize,
-44        kv_stride: usize,
-45    },
-46}
-47
-48#[derive(Clone, Debug)]
-49pub struct Config {
-50    stem_dim: usize,
-51    activation: Activation,
-52    stages: [Vec<BlockType>; 5],
-53}
-54
-55#[rustfmt::skip]
-56impl Config {
-57    pub fn small() -> Self {
-58        Self {
-59            stem_dim: 32,
-60            activation: Activation::Relu,
-61            stages: [
-62                vec![
-63                    BlockType::Convolutional { out_channels: 32, kernel: 3, stride: 2},
-64                    BlockType::Convolutional { out_channels: 32, kernel: 1, stride: 1},
-65                ],
-66                vec![
-67                    BlockType::Convolutional { out_channels: 96, kernel: 3, stride: 2},
-68                    BlockType::Convolutional { out_channels: 64, kernel: 1, stride: 1},
-69                ],
-70                vec![
-71                    BlockType::UniversalBottleneck { out_channels: 96, start_kernel: 5, mid_kernel: 5, stride: 2, expand: 3},
-72                    BlockType::UniversalBottleneck { out_channels: 96, start_kernel: 0, mid_kernel: 3, stride: 1, expand: 2},
-73                    BlockType::UniversalBottleneck { out_channels: 96, start_kernel: 0, mid_kernel: 3, stride: 1, expand: 2},
-74                    BlockType::UniversalBottleneck { out_channels: 96, start_kernel: 0, mid_kernel: 3, stride: 1, expand: 2},
-75                    BlockType::UniversalBottleneck { out_channels: 96, start_kernel: 0, mid_kernel: 3, stride: 1, expand: 2},
-76                    BlockType::UniversalBottleneck { out_channels: 96, start_kernel: 3, mid_kernel: 0, stride: 1, expand: 4},
-77                ],
-78                vec![
-79                    BlockType::UniversalBottleneck { out_channels: 128, start_kernel: 3, mid_kernel: 3, stride: 2, expand: 6},
-80                    BlockType::UniversalBottleneck { out_channels: 128, start_kernel: 5, mid_kernel: 5, stride: 1, expand: 4},
-81                    BlockType::UniversalBottleneck { out_channels: 128, start_kernel: 0, mid_kernel: 5, stride: 1, expand: 4},
-82                    BlockType::UniversalBottleneck { out_channels: 128, start_kernel: 0, mid_kernel: 5, stride: 1, expand: 3},
-83                    BlockType::UniversalBottleneck { out_channels: 128, start_kernel: 0, mid_kernel: 3, stride: 1, expand: 4},
-84                    BlockType::UniversalBottleneck { out_channels: 128, start_kernel: 0, mid_kernel: 3, stride: 1, expand: 4},
-85                ],
-86                vec![
-87                    BlockType::Convolutional { out_channels: 960, kernel: 1, stride: 1},
-88                ],
-89            ],
-90        }
-91    }
-92
-93    pub fn medium() -> Self {
-94        Self {
-95            stem_dim: 32,
-96            activation: Activation::Relu,
-97            stages: [
-98                 vec![
-99                    BlockType::EdgeResidual { out_channels: 48, kernel: 3, stride: 2, expand: 4},
-100                ],
-101                vec![
-102                    BlockType::UniversalBottleneck { out_channels: 80, start_kernel: 3, mid_kernel: 5, stride: 2, expand: 4},
-103                    BlockType::UniversalBottleneck { out_channels: 80, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 2},
-104                ],
-105                vec![
-106                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 3, mid_kernel: 5, stride: 2, expand: 6},
-107                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 4},
-108                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 4},
-109                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 3, mid_kernel: 5, stride: 1, expand: 4},
-110                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 4},
-111                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 3, mid_kernel: 0, stride: 1, expand: 4},
-112                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 0, mid_kernel: 0, stride: 1, expand: 2},
-113                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 3, mid_kernel: 0, stride: 1, expand: 4},
-114                ],
-115                vec![
-116                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 5, mid_kernel: 5, stride: 2, expand: 6},
-117                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 5, mid_kernel: 5, stride: 1, expand: 4},
-118                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 3, mid_kernel: 5, stride: 1, expand: 4},
-119                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 3, mid_kernel: 5, stride: 1, expand: 4},
-120                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 0, mid_kernel: 0, stride: 1, expand: 4},
-121                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 3, mid_kernel: 0, stride: 1, expand: 4},
-122                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 3, mid_kernel: 5, stride: 1, expand: 2},
-123                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 5, mid_kernel: 5, stride: 1, expand: 4},
-124                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 0, mid_kernel: 0, stride: 1, expand: 4},
-125                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 0, mid_kernel: 0, stride: 1, expand: 4},
-126                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 2},
-127
-128               ],
-129                vec![
-130                    BlockType::Convolutional { out_channels: 960, kernel: 1, stride: 1},
-131                ],
-132            ],
-133        }
-134    }
-135
-136    pub fn hybrid_medium() -> Self {
-137        Self {
-138            stem_dim: 32,
-139            activation: Activation::Relu,
-140            stages: [
-141                 vec![
-142                    BlockType::EdgeResidual { out_channels: 48, kernel: 3, stride: 2, expand: 4},
-143                ],
-144                vec![
-145                    BlockType::UniversalBottleneck { out_channels: 80, start_kernel: 3, mid_kernel: 5, stride: 2, expand: 4},
-146                    BlockType::UniversalBottleneck { out_channels: 80, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 2},
-147                ],
-148                vec![
-149                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 3, mid_kernel: 5, stride: 2, expand: 6},
-150                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 0, mid_kernel: 0, stride: 1, expand: 2},
-151                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 4},
-152                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 3, mid_kernel: 5, stride: 1, expand: 4},
-153                    BlockType::Attention { out_channels: 160, heads: 4, kernel: 3, stride: 1, kv_stride:2, kv_dim: 64},
-154                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 4},
-155                    BlockType::Attention { out_channels: 160, heads: 4, kernel: 3, stride: 1, kv_stride:2, kv_dim: 64},
-156                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 3, mid_kernel: 0, stride: 1, expand: 4},
-157                    BlockType::Attention { out_channels: 160, heads: 4, kernel: 3, stride: 1, kv_stride:2, kv_dim: 64},
-158                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 4},
-159                    BlockType::Attention { out_channels: 160, heads: 4, kernel: 3, stride: 1, kv_stride:2, kv_dim: 64},
-160                    BlockType::UniversalBottleneck { out_channels: 160, start_kernel: 3, mid_kernel: 0, stride: 1, expand: 4},
-161                ],
-162
-163               vec![
-164                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 5, mid_kernel: 5, stride: 2, expand: 6},
-165                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 5, mid_kernel: 5, stride: 1, expand: 4},
-166                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 3, mid_kernel: 5, stride: 1, expand: 4},
-167                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 3, mid_kernel: 5, stride: 1, expand: 4},
-168                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 0, mid_kernel: 0, stride: 1, expand: 2},
-169                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 3, mid_kernel: 5, stride: 1, expand: 2},
-170                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 0, mid_kernel: 0, stride: 1, expand: 2},
-171                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 0, mid_kernel: 0, stride: 1, expand: 4},
-172                    BlockType::Attention { out_channels: 256, heads: 4, kernel: 3, stride: 1, kv_stride:1, kv_dim: 64},
-173                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 3, mid_kernel: 0, stride: 1, expand: 4},
-174                    BlockType::Attention { out_channels: 256, heads: 4, kernel: 3, stride: 1, kv_stride:1, kv_dim: 64},
-175                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 5, mid_kernel: 5, stride: 1, expand: 4},
-176                    BlockType::Attention { out_channels: 256, heads: 4, kernel: 3, stride: 1, kv_stride:1, kv_dim: 64},
-177                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 4},
-178                    BlockType::Attention { out_channels: 256, heads: 4, kernel: 3, stride: 1, kv_stride:1, kv_dim: 64},
-179                    BlockType::UniversalBottleneck { out_channels: 256, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 4},
-180               ],
-181                vec![
-182                    BlockType::Convolutional { out_channels: 960, kernel: 1, stride: 1},
-183                ],
-184            ],
-185        }
-186    }
-187
-188    pub fn large() -> Self {
-189        Self {
-190            stem_dim: 24,
-191            activation: Activation::Relu,
-192            stages: [
-193                vec![
-194                    BlockType::EdgeResidual { out_channels: 48, kernel: 3, stride: 2, expand: 4},
-195                ],
-196                vec![
-197                    BlockType::UniversalBottleneck { out_channels: 96, start_kernel: 3, mid_kernel: 5, stride: 2, expand: 4},
-198                    BlockType::UniversalBottleneck { out_channels: 96, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 4},
-199                ],
-200                vec![
-201                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 3, mid_kernel: 5, stride: 2, expand: 4},
-202                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 4},
-203                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 4},
-204                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 4},
-205                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 3, mid_kernel: 5, stride: 1, expand: 4},
-206                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 5, mid_kernel: 3, stride: 1, expand: 4},
-207                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 5, mid_kernel: 3, stride: 1, expand: 4},
-208                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 5, mid_kernel: 3, stride: 1, expand: 4},
-209                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 5, mid_kernel: 3, stride: 1, expand: 4},
-210                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 5, mid_kernel: 3, stride: 1, expand: 4},
-211                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 3, mid_kernel: 0, stride: 1, expand: 4},
-212                ],
-213                vec![
-214                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 5, stride: 2, expand: 4},
-215                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 5, stride: 1, expand: 4},
-216                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 5, stride: 1, expand: 4},
-217                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 5, stride: 1, expand: 4},
-218                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 4},
-219                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 3, stride: 1, expand: 4},
-220                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 4},
-221                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 4},
-222                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 3, stride: 1, expand: 4},
-223                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 5, stride: 1, expand: 4},
-224                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 4},
-225                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 4},
-226                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 4},
-227                ],
-228                vec![
-229                    BlockType::Convolutional { out_channels: 960, kernel: 1, stride: 1},
-230                ],
-231            ],
-232        }
-233    }
-234
-235    pub fn hybrid_large() -> Self {
-236        Self {
-237            stem_dim: 24,
-238            activation: Activation::Gelu,
-239            stages: [
-240                vec![
-241                    BlockType::EdgeResidual { out_channels: 48, kernel: 3, stride: 2, expand: 4},
-242                ],
-243                vec![
-244                    BlockType::UniversalBottleneck { out_channels: 96, start_kernel: 3, mid_kernel: 5, stride: 2, expand: 4},
-245                    BlockType::UniversalBottleneck { out_channels: 96, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 4},
-246                ],
-247                vec![
-248                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 3, mid_kernel: 5, stride: 2, expand: 4},
-249                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 4},
-250                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 4},
-251                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 3, mid_kernel: 3, stride: 1, expand: 4},
-252                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 3, mid_kernel: 5, stride: 1, expand: 4},
-253                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 5, mid_kernel: 3, stride: 1, expand: 4},
-254                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 5, mid_kernel: 3, stride: 1, expand: 4},
-255                    BlockType::Attention { out_channels: 192, heads: 8, kernel: 3, stride: 1, kv_stride:2, kv_dim: 48},
-256                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 5, mid_kernel: 3, stride: 1, expand: 4},
-257                    BlockType::Attention { out_channels: 192, heads: 8, kernel: 3, stride: 1, kv_stride:2, kv_dim: 48},
-258                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 5, mid_kernel: 3, stride: 1, expand: 4},
-259                    BlockType::Attention { out_channels: 192, heads: 8, kernel: 3, stride: 1, kv_stride:2, kv_dim: 48},
-260                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 5, mid_kernel: 3, stride: 1, expand: 4},
-261                    BlockType::Attention { out_channels: 192, heads: 8, kernel: 3, stride: 1, kv_stride:2, kv_dim: 48},
-262                    BlockType::UniversalBottleneck { out_channels: 192, start_kernel: 3, mid_kernel: 0, stride: 1, expand: 4},
-263                ],
-264
-265                vec![
-266                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 5, stride: 2, expand: 4},
-267                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 5, stride: 1, expand: 4},
-268                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 5, stride: 1, expand: 4},
-269                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 5, stride: 1, expand: 4},
-270                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 4},
-271                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 3, stride: 1, expand: 4},
-272                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 4},
-273                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 4},
-274                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 3, stride: 1, expand: 4},
-275                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 5, stride: 1, expand: 4},
-276                    BlockType::Attention { out_channels: 512, heads: 8, kernel: 3, stride: 1, kv_stride:1, kv_dim: 64},
-277                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 4},
-278                    BlockType::Attention { out_channels: 512, heads: 8, kernel: 3, stride: 1, kv_stride:1, kv_dim: 64},
-279                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 4},
-280                    BlockType::Attention { out_channels: 512, heads: 8, kernel: 3, stride: 1, kv_stride:1, kv_dim: 64},
-281                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 4},
-282                    BlockType::Attention { out_channels: 512, heads: 8, kernel: 3, stride: 1, kv_stride:1, kv_dim: 64},
-283                    BlockType::UniversalBottleneck { out_channels: 512, start_kernel: 5, mid_kernel: 0, stride: 1, expand: 4},
-284                ],
-285                vec![
-286                    BlockType::Convolutional { out_channels: 960, kernel: 1, stride: 1},
-287                ],
-288            ],
-289          }
-290    }
-291}
-292
-293fn depthwise_conv(
-294    channels: usize,
-295    kernel: usize,
-296    stride: usize,
-297    padding: usize,
-298    vb: VarBuilder,
-299) -> Result<Func<'static>> {
-300    let conv2d_cfg = Conv2dConfig {
-301        stride,
-302        padding,
-303        groups: channels,
-304        ..Default::default()
-305    };
-306
-307    let bn = batch_norm(channels, 1e-5, vb.pp("bn"))?;
-308    let conv = conv2d_no_bias(channels, channels, kernel, conv2d_cfg, vb.pp("conv"))?;
-309
-310    Ok(Func::new(move |xs| xs.apply(&conv)?.apply_t(&bn, false)))
-311}
-312
-313fn pointwise_conv(
-314    in_channels: usize,
-315    out_channels: usize,
-316    vb: VarBuilder,
-317) -> Result<Func<'static>> {
-318    let conv2d_cfg = Conv2dConfig {
-319        ..Default::default()
-320    };
-321
-322    let bn = batch_norm(out_channels, 1e-5, vb.pp("bn"))?;
-323    let conv = conv2d_no_bias(in_channels, out_channels, 1, conv2d_cfg, vb.pp("conv"))?;
-324
-325    Ok(Func::new(move |xs| xs.apply(&conv)?.apply_t(&bn, false)))
-326}
-327
-328//Universal block that uses two pointwise convolutions and all combinations of two depthwise convolutions.
-329#[allow(clippy::too_many_arguments)]
-330fn universal_inverted_bottleneck_block(
-331    cfg: &Config,
-332    in_channels: usize,
-333    out_channels: usize,
-334    expand: usize,
-335    start_kernel: usize,
-336    mid_kernel: usize,
-337    stride: usize,
-338    vb: VarBuilder,
-339) -> Result<Func<'static>> {
-340    let act = cfg.activation;
-341    let skip_connection = (in_channels == out_channels) && (stride == 1);
-342
-343    let dw_start_stride = if mid_kernel > 0 { 1 } else { stride };
-344    let dw_start = depthwise_conv(
-345        in_channels,
-346        start_kernel,
-347        dw_start_stride,
-348        start_kernel / 2,
-349        vb.pp("dw_start"),
-350    );
-351    let pw_exp = pointwise_conv(in_channels, in_channels * expand, vb.pp("pw_exp"))?;
-352    let dw_mid = depthwise_conv(
-353        in_channels * expand,
-354        mid_kernel,
-355        stride,
-356        mid_kernel / 2,
-357        vb.pp("dw_mid"),
-358    );
-359    let pw_proj = pointwise_conv(in_channels * expand, out_channels, vb.pp("pw_proj"))?;
-360
-361    let gamma = vb.get(out_channels, "layer_scale.gamma");
-362
-363    Ok(Func::new(move |xs| {
-364        let residual = xs.clone();
-365
-366        let mut xs = xs.clone();
-367
-368        if let Ok(f) = &dw_start {
-369            xs = xs.apply(f)?;
-370        }
-371
-372        xs = xs.apply(&pw_exp)?.apply(&act)?;
-373
-374        if let Ok(f) = &dw_mid {
-375            xs = xs.apply(f)?.apply(&act)?;
-376        }
-377
-378        xs = xs.apply(&pw_proj)?;
-379
-380        if let Ok(g) = &gamma {
-381            xs = xs.broadcast_mul(&g.reshape((1, (), 1, 1))?)?;
-382        };
-383
-384        if skip_connection {
-385            xs = (xs + residual)?;
-386        }
-387
-388        Ok(xs)
-389    }))
-390}
-391
-392// Convolutional block including norm and activation.
-393fn conv_block(
-394    cfg: &Config,
-395    in_channels: usize,
-396    out_channels: usize,
-397    kernel: usize,
-398    stride: usize,
-399    vb: VarBuilder,
-400) -> Result<Func<'static>> {
-401    let conv2d_cfg = Conv2dConfig {
-402        stride,
-403        padding: kernel / 2,
-404        ..Default::default()
-405    };
-406
-407    let act = cfg.activation;
-408    let bn = batch_norm(out_channels, 1e-5, vb.pp("bn1"))?;
-409    let conv = conv2d_no_bias(in_channels, out_channels, kernel, conv2d_cfg, vb.pp("conv"))?;
-410
-411    Ok(Func::new(move |xs| {
-412        xs.apply(&conv)?.apply_t(&bn, false)?.apply(&act)
-413    }))
-414}
-415
-416fn edge_residual_block(
-417    cfg: &Config,
-418    in_channels: usize,
-419    out_channels: usize,
-420    kernel: usize,
-421    stride: usize,
-422    expand: usize,
-423    vb: VarBuilder,
-424) -> Result<Func<'static>> {
-425    let conv_exp_cfg = Conv2dConfig {
-426        stride,
-427        padding: kernel / 2,
-428        ..Default::default()
-429    };
-430
-431    let conv_pwl_cfg = Conv2dConfig {
-432        ..Default::default()
-433    };
-434
-435    let act = cfg.activation;
-436    let mid_channels = in_channels * expand;
-437    let conv_exp = conv2d_no_bias(
-438        in_channels,
-439        mid_channels,
-440        kernel,
-441        conv_exp_cfg,
-442        vb.pp("conv_exp"),
-443    )?;
-444    let bn1 = batch_norm(mid_channels, 1e-5, vb.pp("bn1"))?;
-445
-446    let conv_pwl = conv2d_no_bias(
-447        mid_channels,
-448        out_channels,
-449        1,
-450        conv_pwl_cfg,
-451        vb.pp("conv_pwl"),
-452    )?;
-453    let bn2 = batch_norm(out_channels, 1e-5, vb.pp("bn2"))?;
-454
-455    Ok(Func::new(move |xs| {
-456        let xs = xs
-457            .apply(&conv_exp)?
-458            .apply_t(&bn1, false)?
-459            .apply(&act)?
-460            .apply(&conv_pwl)?
-461            .apply_t(&bn2, false)?;
-462
-463        Ok(xs)
-464    }))
-465}
-466
-467fn reshape_kv(t: &Tensor) -> Result<Tensor> {
-468    let d = t.dims4()?;
-469    let t = t
-470        .reshape((d.0, d.1, ()))?
-471        .transpose(1, 2)?
-472        .unsqueeze(1)?
-473        .contiguous()?;
-474    Ok(t)
-475}
-476
-477fn reshape_query(t: &Tensor, heads: usize, kv_dim: usize) -> Result<Tensor> {
-478    let d = t.dims4()?;
-479
-480    let t = t
-481        .reshape((d.0, heads, kv_dim, ()))?
-482        .transpose(D::Minus1, D::Minus2)?
-483        .contiguous()?;
-484    Ok(t)
-485}
-486
-487fn reshape_output(t: &Tensor, heads: usize, h: usize, w: usize) -> Result<Tensor> {
-488    let d = t.dims4()?;
-489    let t = t.transpose(1, 2)?;
-490    let t = t
-491        .reshape((d.0, h, w, d.3 * heads))?
-492        .permute((0, 3, 1, 2))?
-493        .contiguous()?;
-494    Ok(t)
-495}
-496
-497// Mobile multi-query attention
-498#[allow(clippy::too_many_arguments)]
-499fn mqa_block(
-500    in_channels: usize,
-501    out_channels: usize,
-502    heads: usize,
-503    kernel: usize,
-504    stride: usize,
-505    kv_dim: usize,
-506    kv_stride: usize,
-507    vb: VarBuilder,
-508) -> Result<Func<'static>> {
-509    let down_conv2d_cfg = Conv2dConfig {
-510        stride: kv_stride,
-511        padding: kernel / 2,
-512        groups: in_channels,
-513        ..Default::default()
-514    };
-515
-516    let proj_conv2d_cfg = Conv2dConfig {
-517        stride,
-518        ..Default::default()
-519    };
-520
-521    let skip_connection = (in_channels == out_channels) && (stride == 1);
-522    let gamma = vb.get(out_channels, "layer_scale.gamma");
-523    let norm = batch_norm(out_channels, 1e-5, vb.pp("norm"))?;
-524    let scale = (kv_dim as f64).powf(-0.5);
-525
-526    let vb = vb.pp("attn");
-527
-528    let query_proj = conv2d_no_bias(
-529        out_channels,
-530        kv_dim * heads,
-531        1,
-532        proj_conv2d_cfg,
-533        vb.pp("query.proj"),
-534    )?;
-535
-536    let key_down_conv = conv2d_no_bias(
-537        in_channels,
-538        out_channels,
-539        kernel,
-540        down_conv2d_cfg,
-541        vb.pp("key.down_conv"),
-542    );
-543    let key_norm = batch_norm(out_channels, 1e-5, vb.pp("key.norm"));
-544
-545    let key_proj = conv2d_no_bias(out_channels, kv_dim, 1, proj_conv2d_cfg, vb.pp("key.proj"))?;
-546
-547    let value_down_conv = conv2d_no_bias(
-548        in_channels,
-549        out_channels,
-550        kernel,
-551        down_conv2d_cfg,
-552        vb.pp("value.down_conv"),
-553    );
-554
-555    let value_norm = batch_norm(out_channels, 1e-5, vb.pp("value.norm"));
-556    let value_proj = conv2d_no_bias(
-557        out_channels,
-558        kv_dim,
-559        1,
-560        proj_conv2d_cfg,
-561        vb.pp("value.proj"),
-562    )?;
-563
-564    let output_proj = conv2d_no_bias(
-565        kv_dim * heads,
-566        out_channels,
-567        1,
-568        proj_conv2d_cfg,
-569        vb.pp("output.proj"),
-570    )?;
-571
-572    Ok(Func::new(move |xs| {
-573        let (_, _, h, w) = xs.dims4()?;
-574
-575        let residual = xs.clone();
-576
-577        let xs = xs.apply_t(&norm, false)?;
-578
-579        // Query
-580        let q = xs.apply(&query_proj)?;
-581
-582        let q = reshape_query(&q, heads, kv_dim)?;
-583        let q = (q * scale)?;
-584
-585        // Keys
-586        let mut k = xs.clone();
-587
-588        if let (Ok(kd), Ok(n)) = (&key_down_conv, &key_norm) {
-589            k = k.apply(kd)?.apply_t(n, false)?;
-590        }
-591
-592        let k = k.apply(&key_proj)?;
-593
-594        let k = reshape_kv(&k)?;
-595
-596        // Value
-597        let mut v = xs.clone();
-598
-599        if let (Ok(vd), Ok(n)) = (&value_down_conv, &value_norm) {
-600            v = v.apply(vd)?;
-601            v = v.apply_t(n, false)?;
-602        }
-603
-604        let v = v.apply(&value_proj)?;
-605        let v = reshape_kv(&v)?;
-606
-607        let attn = q.broadcast_matmul(&(k.transpose(D::Minus2, D::Minus1)?))?;
-608        let attn = softmax(&attn, D::Minus1)?;
-609        let o = attn.broadcast_matmul(&v)?;
-610
-611        let o = reshape_output(&o, heads, h, w)?;
-612
-613        let mut xs = o.apply(&output_proj)?;
-614
-615        // Layer scale
-616
-617        if let Ok(g) = &gamma {
-618            xs = xs.broadcast_mul(&g.reshape((1, (), 1, 1))?)?;
-619        };
-620
-621        if skip_connection {
-622            xs = (xs + residual)?;
-623        }
-624        Ok(xs)
-625    }))
-626}
-627
-628// Stem.
-629fn mobilenetv4_stem(cfg: &Config, vb: VarBuilder) -> Result<Func<'static>> {
-630    let conv2d_cfg = Conv2dConfig {
-631        stride: 2,
-632        padding: 1,
-633        ..Default::default()
-634    };
-635
-636    let act = cfg.activation;
-637    let out_channels = cfg.stem_dim;
-638    let bn = batch_norm(out_channels, 1e-5, vb.pp("bn1"))?;
-639    let conv = conv2d_no_bias(3, out_channels, 3, conv2d_cfg, vb.pp("conv_stem"))?;
-640
-641    Ok(Func::new(move |xs| {
-642        let xs = xs.apply(&conv)?.apply_t(&bn, false)?.apply(&act)?;
-643        Ok(xs)
-644    }))
-645}
-646
-647// The blocks in all the 5 stages of the model.
-648fn mobilenetv4_blocks(cfg: &Config, vb: VarBuilder) -> Result<Func<'static>> {
-649    let mut in_channels = cfg.stem_dim;
-650    let mut blocks = Vec::new();
-651
-652    for stage in 0..5 {
-653        let nblocks = cfg.stages[stage].len();
-654
-655        for block in 0..nblocks {
-656            match cfg.stages[stage][block] {
-657                BlockType::Convolutional {
-658                    out_channels,
-659                    kernel,
-660                    stride,
-661                } => {
-662                    blocks.push(conv_block(
-663                        cfg,
-664                        in_channels,
-665                        out_channels,
-666                        kernel,
-667                        stride,
-668                        vb.pp(format!("{stage}.{block}")),
-669                    )?);
-670                    in_channels = out_channels;
-671                }
-672
-673                BlockType::EdgeResidual {
-674                    out_channels,
-675                    kernel,
-676                    stride,
-677                    expand,
-678                } => {
-679                    blocks.push(edge_residual_block(
-680                        cfg,
-681                        in_channels,
-682                        out_channels,
-683                        kernel,
-684                        stride,
-685                        expand,
-686                        vb.pp(format!("{stage}.{block}")),
-687                    )?);
-688                    in_channels = out_channels;
-689                }
-690
-691                BlockType::UniversalBottleneck {
-692                    out_channels,
-693                    start_kernel,
-694                    mid_kernel,
-695                    stride,
-696                    expand,
-697                } => {
-698                    blocks.push(universal_inverted_bottleneck_block(
-699                        cfg,
-700                        in_channels,
-701                        out_channels,
-702                        expand,
-703                        start_kernel,
-704                        mid_kernel,
-705                        stride,
-706                        vb.pp(format!("{stage}.{block}")),
-707                    )?);
-708                    in_channels = out_channels;
-709                }
-710
-711                BlockType::Attention {
-712                    out_channels,
-713                    heads,
-714                    kernel,
-715                    stride,
-716                    kv_dim,
-717                    kv_stride,
-718                } => {
-719                    blocks.push(mqa_block(
-720                        in_channels,
-721                        out_channels,
-722                        heads,
-723                        kernel,
-724                        stride,
-725                        kv_dim,
-726                        kv_stride,
-727                        vb.pp(format!("{stage}.{block}")),
-728                    )?);
-729                    in_channels = out_channels;
-730                }
-731            }
-732        }
-733    }
-734
-735    Ok(Func::new(move |xs| {
-736        let mut xs = xs.clone();
-737        for block in blocks.iter() {
-738            xs = xs.apply(block)?
-739        }
-740        Ok(xs)
-741    }))
-742}
-743
-744// Classification head.
-745fn mobilenetv4_head(
-746    cfg: &Config,
-747    outputs: usize,
-748    nclasses: usize,
-749    vb: VarBuilder,
-750) -> Result<Func<'static>> {
-751    let conv2d_cfg = Conv2dConfig {
-752        ..Default::default()
-753    };
-754
-755    let act = cfg.activation;
-756    let conv = conv2d_no_bias(960, outputs, 1, conv2d_cfg, vb.pp("conv_head"))?;
-757    let norm = batch_norm(outputs, 1e-5, vb.pp("norm_head"))?;
-758    let cls = linear(outputs, nclasses, vb.pp("classifier"))?;
-759
-760    Ok(Func::new(move |xs| {
-761        let mut xs = xs.clone();
-762        xs = xs.apply(&conv)?;
-763        xs = xs.apply_t(&norm, false)?.apply(&act)?;
-764        xs = xs.flatten_from(1)?;
-765        xs = xs.apply(&cls)?;
-766        Ok(xs)
-767    }))
-768}
-769
-770// Build a mobilenetv4 model for a given configuration.
-771fn mobilenetv4_model(
-772    cfg: &Config,
-773    nclasses: Option<usize>,
-774    vb: VarBuilder,
-775) -> Result<Func<'static>> {
-776    let cls = match nclasses {
-777        None => None,
-778        Some(nclasses) => {
-779            let outputs = 1280;
-780            let head = mobilenetv4_head(cfg, outputs, nclasses, vb.clone())?;
-781            Some(head)
-782        }
-783    };
-784
-785    let stem = mobilenetv4_stem(cfg, vb.clone())?;
-786
-787    let blocks = mobilenetv4_blocks(cfg, vb.pp("blocks"))?;
-788
-789    Ok(Func::new(move |xs| {
-790        let xs = xs.apply(&stem)?.apply(&blocks)?;
-791        let xs = xs.mean_keepdim(D::Minus1)?.mean_keepdim(D::Minus2)?;
-792        match &cls {
-793            None => Ok(xs),
-794            Some(cls) => xs.apply(cls),
-795        }
-796    }))
-797}
-798
-799pub fn mobilenetv4(cfg: &Config, nclasses: usize, vb: VarBuilder) -> Result<Func<'static>> {
-800    mobilenetv4_model(cfg, Some(nclasses), vb)
-801}
-802
-803pub fn mobilenetv4_no_final_layer(cfg: &Config, vb: VarBuilder) -> Result<Func<'static>> {
-804    mobilenetv4_model(cfg, None, vb)
-805}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mobileone.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mobileone.rs.html deleted file mode 100644 index 85b59bf..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mobileone.rs.html +++ /dev/null @@ -1,335 +0,0 @@ -mobileone.rs - source

candle_transformers/models/
mobileone.rs

1//! # MobileOne
-2//!
-3//! MobileOne inference implementation based on timm and candle-repvgg
-4//!
-5//! See ["MobileOne: An Improved One millisecond Mobile Backbone"](https://arxiv.org/abs/2206.04040)
-6
-7use candle::{DType, Result, Tensor, D};
-8use candle_nn::{
-9    batch_norm, conv2d, conv2d_no_bias, linear, ops::sigmoid, BatchNorm, Conv2d, Conv2dConfig,
-10    Func, VarBuilder,
-11};
-12
-13struct StageConfig {
-14    blocks: usize,
-15    channels: usize,
-16}
-17
-18// The architecture in the paper has 6 stages. The timm implementation uses an equivalent form
-19// by concatenating the 5th stage (starts with stride 1) to the previous one.
-20const STAGES: [StageConfig; 5] = [
-21    StageConfig {
-22        blocks: 1,
-23        channels: 64,
-24    },
-25    StageConfig {
-26        blocks: 2,
-27        channels: 64,
-28    },
-29    StageConfig {
-30        blocks: 8,
-31        channels: 128,
-32    },
-33    StageConfig {
-34        blocks: 10,
-35        channels: 256,
-36    },
-37    StageConfig {
-38        blocks: 1,
-39        channels: 512,
-40    },
-41];
-42
-43#[derive(Clone)]
-44pub struct Config {
-45    /// overparameterization factor
-46    k: usize,
-47    /// per-stage channel number multipliers
-48    alphas: [f32; 5],
-49}
-50
-51impl Config {
-52    pub fn s0() -> Self {
-53        Self {
-54            k: 4,
-55            alphas: [0.75, 0.75, 1.0, 1.0, 2.0],
-56        }
-57    }
-58    pub fn s1() -> Self {
-59        Self {
-60            k: 1,
-61            alphas: [1.5, 1.5, 1.5, 2.0, 2.5],
-62        }
-63    }
-64    pub fn s2() -> Self {
-65        Self {
-66            k: 1,
-67            alphas: [1.5, 1.5, 2.0, 2.5, 4.0],
-68        }
-69    }
-70    pub fn s3() -> Self {
-71        Self {
-72            k: 1,
-73            alphas: [2.0, 2.0, 2.5, 3.0, 4.0],
-74        }
-75    }
-76    pub fn s4() -> Self {
-77        Self {
-78            k: 1,
-79            alphas: [3.0, 3.0, 3.5, 3.5, 4.0],
-80        }
-81    }
-82}
-83
-84// SE blocks are used in the last stages of the s4 variant.
-85fn squeeze_and_excitation(
-86    in_channels: usize,
-87    squeeze_channels: usize,
-88    vb: VarBuilder,
-89) -> Result<Func<'static>> {
-90    let conv2d_cfg = Conv2dConfig {
-91        ..Default::default()
-92    };
-93    let fc1 = conv2d(in_channels, squeeze_channels, 1, conv2d_cfg, vb.pp("fc1"))?;
-94    let fc2 = conv2d(squeeze_channels, in_channels, 1, conv2d_cfg, vb.pp("fc2"))?;
-95
-96    Ok(Func::new(move |xs| {
-97        let residual = xs;
-98        let xs = xs.mean_keepdim(D::Minus2)?.mean_keepdim(D::Minus1)?;
-99        let xs = sigmoid(&xs.apply(&fc1)?.relu()?.apply(&fc2)?)?;
-100
-101        residual.broadcast_mul(&xs)
-102    }))
-103}
-104
-105// fuses a convolutional kernel and a batchnorm layer into a convolutional layer
-106// based on the _fuse_bn_tensor method in timm
-107// see https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/byobnet.py#L602
-108fn fuse_conv_bn(weights: &Tensor, bn: BatchNorm) -> Result<(Tensor, Tensor)> {
-109    let (gamma, beta) = bn.weight_and_bias().unwrap();
-110    let mu = bn.running_mean();
-111    let sigma = (bn.running_var() + bn.eps())?.sqrt();
-112    let gps = (gamma / sigma)?;
-113    let bias = (beta - mu * &gps)?;
-114    let weights = weights.broadcast_mul(&gps.reshape(((), 1, 1, 1))?)?;
-115
-116    Ok((weights, bias))
-117}
-118
-119// A mobileone block has a different training time and inference time architecture.
-120// The latter is a simple and efficient equivalent transformation of the former
-121// realized by a structural reparameterization technique, where convolutions
-122// along with identity branches and batchnorm layers are fused into a single convolution.
-123#[allow(clippy::too_many_arguments)]
-124fn mobileone_block(
-125    has_identity: bool,
-126    k: usize,
-127    dim: usize,
-128    stride: usize,
-129    padding: usize,
-130    groups: usize,
-131    kernel: usize,
-132    in_channels: usize,
-133    out_channels: usize,
-134    vb: VarBuilder,
-135) -> Result<Func<'static>> {
-136    let conv2d_cfg = Conv2dConfig {
-137        stride,
-138        padding,
-139        groups,
-140        ..Default::default()
-141    };
-142
-143    let mut w = Tensor::zeros(
-144        (out_channels, in_channels / groups, kernel, kernel),
-145        DType::F32,
-146        vb.device(),
-147    )?;
-148    let mut b = Tensor::zeros(dim, DType::F32, vb.device())?;
-149
-150    // k is the training-time overparameterization factor, larger than 1 only in the s0 variant
-151    for i in 0..k {
-152        let conv_kxk_bn = batch_norm(dim, 1e-5, vb.pp(format!("conv_kxk.{i}.bn")))?;
-153        let conv_kxk = conv2d_no_bias(
-154            in_channels,
-155            out_channels,
-156            kernel,
-157            conv2d_cfg,
-158            vb.pp(format!("conv_kxk.{i}.conv")),
-159        )?;
-160        let (wk, bk) = fuse_conv_bn(conv_kxk.weight(), conv_kxk_bn)?;
-161        w = (w + wk)?;
-162        b = (b + bk)?;
-163    }
-164
-165    if kernel > 1 {
-166        let conv_scale_bn = batch_norm(dim, 1e-5, vb.pp("conv_scale.bn"))?;
-167        let conv_scale = conv2d_no_bias(
-168            in_channels,
-169            out_channels,
-170            1,
-171            conv2d_cfg,
-172            vb.pp("conv_scale.conv"),
-173        )?;
-174
-175        let (mut ws, bs) = fuse_conv_bn(conv_scale.weight(), conv_scale_bn)?;
-176        // resize to 3x3
-177        ws = ws.pad_with_zeros(D::Minus1, 1, 1)?;
-178        ws = ws.pad_with_zeros(D::Minus2, 1, 1)?;
-179
-180        w = (w + ws)?;
-181        b = (b + bs)?;
-182    }
-183
-184    // Use SE blocks if present (last layers of the s4 variant)
-185    let se = squeeze_and_excitation(out_channels, out_channels / 16, vb.pp("attn"));
-186
-187    // read and reparameterize the identity bn into wi and bi
-188    if has_identity {
-189        let identity_bn = batch_norm(dim, 1e-5, vb.pp("identity"))?;
-190
-191        let mut weights: Vec<f32> = vec![0.0; w.elem_count()];
-192
-193        let id = in_channels / groups;
-194        // See https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/byobnet.py#L809
-195        for i in 0..in_channels {
-196            if kernel > 1 {
-197                weights[i * kernel * kernel + 4] = 1.0;
-198            } else {
-199                weights[i * (id + 1)] = 1.0;
-200            }
-201        }
-202
-203        let weights = &Tensor::from_vec(weights, w.shape(), w.device())?;
-204        let (wi, bi) = fuse_conv_bn(weights, identity_bn)?;
-205
-206        w = (w + wi)?;
-207        b = (b + bi)?;
-208    }
-209
-210    let reparam_conv = Conv2d::new(w, Some(b), conv2d_cfg);
-211
-212    Ok(Func::new(move |xs| {
-213        let mut xs = xs.apply(&reparam_conv)?;
-214        if let Ok(f) = &se {
-215            xs = xs.apply(f)?;
-216        }
-217        xs = xs.relu()?;
-218        Ok(xs)
-219    }))
-220}
-221
-222// Get the number of output channels per stage taking into account the multipliers
-223fn output_channels_per_stage(cfg: &Config, stage: usize) -> usize {
-224    let channels = STAGES[stage].channels as f32;
-225    let alpha = cfg.alphas[stage];
-226
-227    match stage {
-228        0 => std::cmp::min(64, (channels * alpha) as usize),
-229        _ => (channels * alpha) as usize,
-230    }
-231}
-232
-233// Each stage is made of blocks. The first layer always downsamples with stride 2.
-234// All but the first block have a residual connection.
-235fn mobileone_stage(cfg: &Config, idx: usize, vb: VarBuilder) -> Result<Func<'static>> {
-236    let nblocks = STAGES[idx].blocks;
-237    let mut blocks = Vec::with_capacity(nblocks);
-238
-239    let mut in_channels = output_channels_per_stage(cfg, idx - 1);
-240
-241    for block_idx in 0..nblocks {
-242        let out_channels = output_channels_per_stage(cfg, idx);
-243        let (has_identity, stride) = if block_idx == 0 {
-244            (false, 2)
-245        } else {
-246            (true, 1)
-247        };
-248
-249        // depthwise convolution layer
-250        blocks.push(mobileone_block(
-251            has_identity,
-252            cfg.k,
-253            in_channels,
-254            stride,
-255            1,
-256            in_channels,
-257            3,
-258            in_channels,
-259            in_channels,
-260            vb.pp(block_idx * 2),
-261        )?);
-262
-263        // pointwise convolution layer
-264        blocks.push(mobileone_block(
-265            has_identity,
-266            cfg.k,
-267            out_channels,
-268            1, // stride
-269            0, // padding
-270            1, // groups
-271            1, // kernel
-272            in_channels,
-273            out_channels,
-274            vb.pp(block_idx * 2 + 1),
-275        )?);
-276
-277        in_channels = out_channels;
-278    }
-279
-280    Ok(Func::new(move |xs| {
-281        let mut xs = xs.clone();
-282        for block in blocks.iter() {
-283            xs = xs.apply(block)?
-284        }
-285        Ok(xs)
-286    }))
-287}
-288
-289// Build a mobileone model for a given configuration.
-290fn mobileone_model(
-291    config: &Config,
-292    nclasses: Option<usize>,
-293    vb: VarBuilder,
-294) -> Result<Func<'static>> {
-295    let cls = match nclasses {
-296        None => None,
-297        Some(nclasses) => {
-298            let outputs = output_channels_per_stage(config, 4);
-299            let linear = linear(outputs, nclasses, vb.pp("head.fc"))?;
-300            Some(linear)
-301        }
-302    };
-303
-304    let stem_dim = output_channels_per_stage(config, 0);
-305    let stem = mobileone_block(false, 1, stem_dim, 2, 1, 1, 3, 3, stem_dim, vb.pp("stem"))?;
-306    let vb = vb.pp("stages");
-307    let stage1 = mobileone_stage(config, 1, vb.pp(0))?;
-308    let stage2 = mobileone_stage(config, 2, vb.pp(1))?;
-309    let stage3 = mobileone_stage(config, 3, vb.pp(2))?;
-310    let stage4 = mobileone_stage(config, 4, vb.pp(3))?;
-311
-312    Ok(Func::new(move |xs| {
-313        let xs = xs
-314            .apply(&stem)?
-315            .apply(&stage1)?
-316            .apply(&stage2)?
-317            .apply(&stage3)?
-318            .apply(&stage4)?
-319            .mean(D::Minus2)?
-320            .mean(D::Minus1)?;
-321        match &cls {
-322            None => Ok(xs),
-323            Some(cls) => xs.apply(cls),
-324        }
-325    }))
-326}
-327
-328pub fn mobileone(cfg: &Config, nclasses: usize, vb: VarBuilder) -> Result<Func<'static>> {
-329    mobileone_model(cfg, Some(nclasses), vb)
-330}
-331
-332pub fn mobileone_no_final_layer(cfg: &Config, vb: VarBuilder) -> Result<Func<'static>> {
-333    mobileone_model(cfg, None, vb)
-334}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mod.rs.html deleted file mode 100644 index acf69e4..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mod.rs.html +++ /dev/null @@ -1,119 +0,0 @@ -mod.rs - source

candle_transformers/models/
mod.rs

1//! Candle implementations for various deep learning models
-2//!
-3//! This crate provides implementations of popular machine learning models and architectures for different modalities.
-4//!
-5//!  - Large language models: [`llama`], [`phi3`], [`mamba`], [`mixtral`], [`bert`], ...
-6//!  - Text to text models: [`t5`], ...
-7//!  - Image to text models: [`blip`], ...
-8//!  - Text to image models: [`stable_diffusion`] and [`wuerstchen`], ...
-9//!  - Audio models: [`whisper`], [`encodec`], [`metavoice`], [`parler_tts`], ...
-10//!  - Computer vision models: [`dinov2`], [`convmixer`], [`efficientnet`], ...
-11//!  
-12//! Some of the models also have quantized variants, e.g.  [`quantized_blip`], [`quantized_llama`] and  [`quantized_qwen2`].
-13//!
-14//! The implementations aim to be readable while maintaining good performance. For more information
-15//! on each model see the model's module docs in the links below.
-16
-17pub mod based;
-18pub mod beit;
-19pub mod bert;
-20pub mod bigcode;
-21pub mod blip;
-22pub mod blip_text;
-23pub mod chatglm;
-24pub mod chinese_clip;
-25pub mod clip;
-26pub mod codegeex4_9b;
-27pub mod colpali;
-28pub mod convmixer;
-29pub mod convnext;
-30pub mod dac;
-31pub mod debertav2;
-32pub mod deepseek2;
-33pub mod depth_anything_v2;
-34pub mod dinov2;
-35pub mod dinov2reg4;
-36pub mod distilbert;
-37pub mod efficientnet;
-38pub mod efficientvit;
-39pub mod encodec;
-40pub mod eva2;
-41pub mod falcon;
-42pub mod fastvit;
-43pub mod flux;
-44pub mod gemma;
-45pub mod gemma2;
-46pub mod gemma3;
-47pub mod glm4;
-48pub mod granite;
-49pub mod helium;
-50pub mod hiera;
-51pub mod jina_bert;
-52pub mod llama;
-53pub mod llama2_c;
-54pub mod llama2_c_weights;
-55pub mod llava;
-56pub mod mamba;
-57pub mod marian;
-58pub mod metavoice;
-59pub mod mimi;
-60pub mod mistral;
-61pub mod mixformer;
-62pub mod mixtral;
-63pub mod mmdit;
-64pub mod mobileclip;
-65pub mod mobilenetv4;
-66pub mod mobileone;
-67pub mod modernbert;
-68pub mod moondream;
-69pub mod mpt;
-70pub mod nvembed_v2;
-71pub mod olmo;
-72pub mod openclip;
-73pub mod paligemma;
-74pub mod parler_tts;
-75pub mod persimmon;
-76pub mod phi;
-77pub mod phi3;
-78pub mod pixtral;
-79pub mod quantized_blip;
-80pub mod quantized_blip_text;
-81pub mod quantized_llama;
-82pub mod quantized_llama2_c;
-83pub mod quantized_metavoice;
-84pub mod quantized_mistral;
-85pub mod quantized_mixformer;
-86pub mod quantized_moondream;
-87pub mod quantized_mpt;
-88pub mod quantized_phi;
-89pub mod quantized_phi3;
-90pub mod quantized_qwen2;
-91pub mod quantized_recurrent_gemma;
-92pub mod quantized_rwkv_v5;
-93pub mod quantized_rwkv_v6;
-94pub mod quantized_stable_lm;
-95pub mod quantized_t5;
-96pub mod qwen2;
-97pub mod qwen2_moe;
-98pub mod recurrent_gemma;
-99pub mod repvgg;
-100pub mod resnet;
-101pub mod rwkv_v5;
-102pub mod rwkv_v6;
-103pub mod segformer;
-104pub mod segment_anything;
-105pub mod siglip;
-106pub mod stable_diffusion;
-107pub mod stable_lm;
-108pub mod starcoder2;
-109pub mod stella_en_v5;
-110pub mod t5;
-111pub mod trocr;
-112pub mod vgg;
-113pub mod vit;
-114pub mod whisper;
-115pub mod with_tracing;
-116pub mod wuerstchen;
-117pub mod xlm_roberta;
-118pub mod yi;
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/modernbert.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/modernbert.rs.html deleted file mode 100644 index 52d37d7..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/modernbert.rs.html +++ /dev/null @@ -1,505 +0,0 @@ -modernbert.rs - source

candle_transformers/models/
modernbert.rs

1//! ModernBERT
-2//!
-3//! ModernBERT is a modernized bidirectional encoder-only Transformer model.
-4//! - [Arxiv](https://arxiv.org/abs/2412.13663) "Smarter, Better, Faster, Longer: A Modern Bidirectional Encoder for Fast, Memory Efficient, and Long Context Finetuning and Inference"
-5//! - Upstream [Github repo](https://github.com/AnswerDotAI/ModernBERT).
-6//! - See modernbert in [candle-examples](https://github.com/huggingface/candle/tree/main/candle-examples/) for runnable code
-7//!
-8
-9use candle::{DType, Device, IndexOp, Result, Tensor, D};
-10use candle_nn::{
-11    embedding, layer_norm_no_bias, linear, linear_no_bias, ops::softmax, Embedding, LayerNorm,
-12    Linear, Module, VarBuilder,
-13};
-14use serde::Deserialize;
-15
-16use core::f32;
-17use std::collections::HashMap;
-18use std::sync::Arc;
-19
-20#[derive(Debug, Clone, PartialEq, Deserialize)]
-21pub struct Config {
-22    pub vocab_size: usize,
-23    pub hidden_size: usize,
-24    pub num_hidden_layers: usize,
-25    pub num_attention_heads: usize,
-26    pub intermediate_size: usize,
-27    pub max_position_embeddings: usize,
-28    pub layer_norm_eps: f64,
-29    pub pad_token_id: u32,
-30    pub global_attn_every_n_layers: usize,
-31    pub global_rope_theta: f64,
-32    pub local_attention: usize,
-33    pub local_rope_theta: f64,
-34    #[serde(default)]
-35    #[serde(flatten)]
-36    pub classifier_config: Option<ClassifierConfig>,
-37}
-38
-39#[derive(Debug, Clone, Deserialize, PartialEq, Copy, Default)]
-40#[serde(rename_all = "lowercase")]
-41pub enum ClassifierPooling {
-42    #[default]
-43    CLS,
-44    MEAN,
-45}
-46
-47#[derive(Debug, Clone, PartialEq, Deserialize)]
-48pub struct ClassifierConfig {
-49    pub id2label: HashMap<String, String>,
-50    pub label2id: HashMap<String, String>,
-51    pub classifier_pooling: ClassifierPooling,
-52}
-53
-54#[derive(Debug, Clone)]
-55struct RotaryEmbedding {
-56    sin: Tensor,
-57    cos: Tensor,
-58}
-59
-60impl RotaryEmbedding {
-61    fn new(dtype: DType, config: &Config, rope_theta: f64, dev: &Device) -> Result<Self> {
-62        let dim = config.hidden_size / config.num_attention_heads;
-63        let inv_freq: Vec<_> = (0..dim)
-64            .step_by(2)
-65            .map(|i| 1f32 / rope_theta.powf(i as f64 / dim as f64) as f32)
-66            .collect();
-67        let inv_freq_len = inv_freq.len();
-68        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-69        let max_seq_len = config.max_position_embeddings;
-70        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-71            .to_dtype(dtype)?
-72            .reshape((max_seq_len, 1))?;
-73        let freqs = t.matmul(&inv_freq)?;
-74        Ok(Self {
-75            sin: freqs.sin()?,
-76            cos: freqs.cos()?,
-77        })
-78    }
-79
-80    fn apply_rotary_emb_qkv(&self, q: &Tensor, k: &Tensor) -> Result<(Tensor, Tensor)> {
-81        let q_embed = candle_nn::rotary_emb::rope(&q.contiguous()?, &self.cos, &self.sin)?;
-82        let k_embed = candle_nn::rotary_emb::rope(&k.contiguous()?, &self.cos, &self.sin)?;
-83        Ok((q_embed, k_embed))
-84    }
-85}
-86
-87#[derive(Clone)]
-88struct ModernBertAttention {
-89    qkv: Linear,
-90    proj: Linear,
-91    num_attention_heads: usize,
-92    attention_head_size: usize,
-93    rotary_emb: Arc<RotaryEmbedding>,
-94}
-95
-96impl ModernBertAttention {
-97    fn load(vb: VarBuilder, config: &Config, rotary_emb: Arc<RotaryEmbedding>) -> Result<Self> {
-98        let num_attention_heads = config.num_attention_heads;
-99        let attention_head_size = config.hidden_size / config.num_attention_heads;
-100
-101        let qkv = linear_no_bias(config.hidden_size, config.hidden_size * 3, vb.pp("Wqkv"))?;
-102        let proj = linear_no_bias(config.hidden_size, config.hidden_size, vb.pp("Wo"))?;
-103
-104        Ok(Self {
-105            qkv,
-106            proj,
-107            num_attention_heads,
-108            attention_head_size,
-109            rotary_emb,
-110        })
-111    }
-112
-113    fn forward(&self, hidden_states: &Tensor, attention_mask: &Tensor) -> Result<Tensor> {
-114        let xs = hidden_states.clone();
-115        let (b, seq_len, d) = xs.dims3()?;
-116        let qkv = xs
-117            .apply(&self.qkv)?
-118            .reshape((
-119                b,
-120                seq_len,
-121                3,
-122                self.num_attention_heads,
-123                self.attention_head_size,
-124            ))?
-125            .permute((2, 0, 3, 1, 4))?;
-126
-127        let q = qkv.get(0)?;
-128        let k = qkv.get(1)?;
-129        let v = qkv.get(2)?;
-130
-131        let (q, k) = self.rotary_emb.apply_rotary_emb_qkv(&q, &k)?;
-132
-133        let scale = (self.attention_head_size as f64).powf(-0.5);
-134        let q = (q * scale)?;
-135
-136        let att = q.matmul(&k.transpose(D::Minus2, D::Minus1)?)?;
-137
-138        let att = att.broadcast_add(attention_mask)?;
-139        let att = softmax(&att, D::Minus1)?;
-140
-141        let xs = att.matmul(&v)?;
-142
-143        let xs = xs.transpose(1, 2)?.reshape((b, seq_len, d))?;
-144        let xs = xs.apply(&self.proj)?;
-145        let xs = xs.reshape((b, seq_len, d))?;
-146
-147        Ok(xs)
-148    }
-149}
-150
-151#[derive(Clone)]
-152pub struct ModernBertMLP {
-153    wi: Linear,
-154    wo: Linear,
-155}
-156
-157impl ModernBertMLP {
-158    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-159        let wi = linear_no_bias(
-160            config.hidden_size,
-161            config.intermediate_size * 2,
-162            vb.pp("Wi"),
-163        )?;
-164        let wo = linear_no_bias(config.intermediate_size, config.hidden_size, vb.pp("Wo"))?;
-165        Ok(Self { wi, wo })
-166    }
-167}
-168
-169impl Module for ModernBertMLP {
-170    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-171        let xs = xs.apply(&self.wi)?;
-172        let xs = xs.chunk(2, D::Minus1)?;
-173        let xs = (&xs[0].gelu_erf()? * &xs[1])?.apply(&self.wo)?; // GeGLU
-174        Ok(xs)
-175    }
-176}
-177
-178#[derive(Clone)]
-179pub struct ModernBertLayer {
-180    attn: ModernBertAttention,
-181    mlp: ModernBertMLP,
-182    attn_norm: Option<LayerNorm>,
-183    mlp_norm: LayerNorm,
-184    uses_local_attention: bool,
-185}
-186
-187impl ModernBertLayer {
-188    fn load(
-189        vb: VarBuilder,
-190        config: &Config,
-191        rotary_emb: Arc<RotaryEmbedding>,
-192        uses_local_attention: bool,
-193    ) -> Result<Self> {
-194        let attn = ModernBertAttention::load(vb.pp("attn"), config, rotary_emb)?;
-195        let mlp = ModernBertMLP::load(vb.pp("mlp"), config)?;
-196        let attn_norm = layer_norm_no_bias(
-197            config.hidden_size,
-198            config.layer_norm_eps,
-199            vb.pp("attn_norm"),
-200        )
-201        .ok();
-202        let mlp_norm =
-203            layer_norm_no_bias(config.hidden_size, config.layer_norm_eps, vb.pp("mlp_norm"))?;
-204        Ok(Self {
-205            attn,
-206            mlp,
-207            attn_norm,
-208            mlp_norm,
-209            uses_local_attention,
-210        })
-211    }
-212
-213    fn forward(
-214        &self,
-215        xs: &Tensor,
-216        global_attention_mask: &Tensor,
-217        local_attention_mask: &Tensor,
-218    ) -> Result<Tensor> {
-219        let residual = xs.clone();
-220        let mut xs = xs.clone();
-221        if let Some(norm) = &self.attn_norm {
-222            xs = xs.apply(norm)?;
-223        }
-224
-225        let attention_mask = if self.uses_local_attention {
-226            &global_attention_mask.broadcast_add(local_attention_mask)?
-227        } else {
-228            global_attention_mask
-229        };
-230        let xs = self.attn.forward(&xs, attention_mask)?;
-231        let xs = (xs + residual)?;
-232        let mlp_out = xs.apply(&self.mlp_norm)?.apply(&self.mlp)?;
-233        let xs = (xs + mlp_out)?;
-234        Ok(xs)
-235    }
-236}
-237
-238#[derive(Clone)]
-239pub struct ModernBertHead {
-240    dense: Linear,
-241    norm: LayerNorm,
-242}
-243
-244impl ModernBertHead {
-245    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-246        let dense = linear_no_bias(config.hidden_size, config.hidden_size, vb.pp("dense"))?;
-247        let norm = layer_norm_no_bias(config.hidden_size, config.layer_norm_eps, vb.pp("norm"))?;
-248        Ok(Self { dense, norm })
-249    }
-250}
-251
-252impl Module for ModernBertHead {
-253    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-254        let xs = xs.apply(&self.dense)?.gelu_erf()?.apply(&self.norm)?;
-255        Ok(xs)
-256    }
-257}
-258
-259#[derive(Clone)]
-260pub struct ModernBertDecoder {
-261    decoder: Linear,
-262}
-263
-264impl ModernBertDecoder {
-265    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-266        // The decoder weights are tied with the embeddings layer weights
-267        let decoder_weights = vb.get(
-268            (config.vocab_size, config.hidden_size),
-269            "model.embeddings.tok_embeddings.weight",
-270        )?;
-271        let decoder_bias = vb.get(config.vocab_size, "decoder.bias")?;
-272        let decoder = Linear::new(decoder_weights, Some(decoder_bias));
-273        Ok(Self { decoder })
-274    }
-275}
-276
-277impl Module for ModernBertDecoder {
-278    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-279        let xs = xs.apply(&self.decoder)?;
-280        Ok(xs)
-281    }
-282}
-283
-284// Global attention mask calculated from padded token inputs
-285fn prepare_4d_attention_mask(
-286    mask: &Tensor,
-287    dtype: DType,
-288    tgt_len: Option<usize>,
-289) -> Result<Tensor> {
-290    let bsz = mask.dim(0)?;
-291    let src_len = mask.dim(1)?;
-292    let tgt_len = tgt_len.unwrap_or(src_len);
-293
-294    let expanded_mask = mask
-295        .unsqueeze(1)?
-296        .unsqueeze(2)?
-297        .expand((bsz, 1, tgt_len, src_len))?
-298        .to_dtype(dtype)?;
-299
-300    let inverted_mask = (1.0 - expanded_mask)?;
-301
-302    (inverted_mask * f32::MIN as f64)?.to_dtype(dtype)
-303}
-304
-305// Attention mask caused by the sliding window
-306fn get_local_attention_mask(
-307    seq_len: usize,
-308    max_distance: usize,
-309    device: &Device,
-310) -> Result<Tensor> {
-311    let mask: Vec<_> = (0..seq_len)
-312        .flat_map(|i| {
-313            (0..seq_len).map(move |j| {
-314                if (j as i32 - i as i32).abs() > max_distance as i32 {
-315                    f32::NEG_INFINITY
-316                } else {
-317                    0.
-318                }
-319            })
-320        })
-321        .collect();
-322    Tensor::from_slice(&mask, (seq_len, seq_len), device)
-323}
-324
-325// ModernBERT backbone
-326#[derive(Clone)]
-327pub struct ModernBert {
-328    word_embeddings: Embedding,
-329    norm: LayerNorm,
-330    layers: Vec<ModernBertLayer>,
-331    final_norm: LayerNorm,
-332    local_attention_size: usize,
-333}
-334
-335impl ModernBert {
-336    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-337        let word_embeddings = embedding(
-338            config.vocab_size,
-339            config.hidden_size,
-340            vb.pp("model.embeddings.tok_embeddings"),
-341        )?;
-342        let norm = layer_norm_no_bias(
-343            config.hidden_size,
-344            config.layer_norm_eps,
-345            vb.pp("model.embeddings.norm"),
-346        )?;
-347        let global_rotary_emb = Arc::new(RotaryEmbedding::new(
-348            vb.dtype(),
-349            config,
-350            config.global_rope_theta,
-351            vb.device(),
-352        )?);
-353        let local_rotary_emb = Arc::new(RotaryEmbedding::new(
-354            vb.dtype(),
-355            config,
-356            config.local_rope_theta,
-357            vb.device(),
-358        )?);
-359
-360        let mut layers = Vec::with_capacity(config.num_hidden_layers);
-361        for layer_id in 0..config.num_hidden_layers {
-362            let layer_uses_local_attention = layer_id % config.global_attn_every_n_layers != 0;
-363            layers.push(ModernBertLayer::load(
-364                vb.pp(format!("model.layers.{layer_id}")),
-365                config,
-366                if layer_uses_local_attention {
-367                    local_rotary_emb.clone()
-368                } else {
-369                    global_rotary_emb.clone()
-370                },
-371                layer_uses_local_attention,
-372            )?);
-373        }
-374
-375        let final_norm = layer_norm_no_bias(
-376            config.hidden_size,
-377            config.layer_norm_eps,
-378            vb.pp("model.final_norm"),
-379        )?;
-380
-381        Ok(Self {
-382            word_embeddings,
-383            norm,
-384            layers,
-385            final_norm,
-386            local_attention_size: config.local_attention,
-387        })
-388    }
-389
-390    pub fn forward(&self, xs: &Tensor, mask: &Tensor) -> Result<Tensor> {
-391        let seq_len = xs.shape().dims()[1];
-392        let global_attention_mask =
-393            prepare_4d_attention_mask(mask, DType::F32, None)?.to_device(xs.device())?;
-394        let local_attention_mask =
-395            get_local_attention_mask(seq_len, self.local_attention_size / 2, xs.device())?;
-396        let mut xs = xs.apply(&self.word_embeddings)?.apply(&self.norm)?;
-397        for layer in self.layers.iter() {
-398            xs = layer.forward(&xs, &global_attention_mask, &local_attention_mask)?;
-399        }
-400        let xs = xs.apply(&self.final_norm)?;
-401        Ok(xs)
-402    }
-403}
-404
-405// ModernBERT for the fill-mask task
-406#[derive(Clone)]
-407pub struct ModernBertForMaskedLM {
-408    model: ModernBert,
-409    decoder: ModernBertDecoder,
-410    head: ModernBertHead,
-411}
-412
-413impl ModernBertForMaskedLM {
-414    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-415        let model = ModernBert::load(vb.clone(), config)?;
-416        let decoder = ModernBertDecoder::load(vb.clone(), config)?;
-417        let head = ModernBertHead::load(vb.pp("head"), config)?;
-418        Ok(Self {
-419            model,
-420            decoder,
-421            head,
-422        })
-423    }
-424
-425    pub fn forward(&self, xs: &Tensor, mask: &Tensor) -> Result<Tensor> {
-426        let xs = self
-427            .model
-428            .forward(xs, mask)?
-429            .apply(&self.head)?
-430            .apply(&self.decoder)?;
-431        Ok(xs)
-432    }
-433}
-434
-435#[derive(Clone)]
-436pub struct ModernBertClassifier {
-437    classifier: Linear,
-438}
-439
-440impl ModernBertClassifier {
-441    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-442        // The decoder weights are tied with the embeddings layer weights
-443        let classifier = linear(
-444            config.hidden_size,
-445            config
-446                .classifier_config
-447                .as_ref()
-448                .map(|cc| cc.id2label.len())
-449                .unwrap_or_default(),
-450            vb.pp("classifier"),
-451        )?;
-452        Ok(Self { classifier })
-453    }
-454}
-455
-456impl Module for ModernBertClassifier {
-457    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-458        let xs = xs.apply(&self.classifier)?;
-459        softmax(&xs, D::Minus1)
-460    }
-461}
-462
-463#[derive(Clone)]
-464pub struct ModernBertForSequenceClassification {
-465    model: ModernBert,
-466    head: ModernBertHead,
-467    classifier: ModernBertClassifier,
-468    classifier_pooling: ClassifierPooling,
-469}
-470
-471impl ModernBertForSequenceClassification {
-472    pub fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-473        let model = ModernBert::load(vb.clone(), config)?;
-474        let classifier = ModernBertClassifier::load(vb.clone(), config)?;
-475        let head = ModernBertHead::load(vb.pp("head"), config)?;
-476        Ok(Self {
-477            model,
-478            head,
-479            classifier,
-480            classifier_pooling: config
-481                .classifier_config
-482                .as_ref()
-483                .map(|cc| cc.classifier_pooling)
-484                .unwrap_or_default(),
-485        })
-486    }
-487
-488    pub fn forward(&self, xs: &Tensor, mask: &Tensor) -> Result<Tensor> {
-489        let output = self.model.forward(xs, mask)?;
-490        let last_hidden_state = match self.classifier_pooling {
-491            ClassifierPooling::CLS => output.i((.., .., 0))?,
-492            ClassifierPooling::MEAN => {
-493                let unsqueezed_mask = &mask.unsqueeze(D::Minus1)?.to_dtype(DType::F32)?;
-494                let sum_output = output.broadcast_mul(unsqueezed_mask)?.sum(1)?;
-495                sum_output.broadcast_div(&mask.sum_keepdim(1)?.to_dtype(DType::F32)?)?
-496            }
-497        };
-498        let xs = self
-499            .head
-500            .forward(&last_hidden_state)?
-501            .apply(&self.classifier)?;
-502        Ok(xs)
-503    }
-504}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/moondream.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/moondream.rs.html deleted file mode 100644 index 684d777..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/moondream.rs.html +++ /dev/null @@ -1,367 +0,0 @@ -moondream.rs - source

candle_transformers/models/
moondream.rs

1//! MoonDream Model vision-to-text
-2//!
-3//!
-4//! Moondream is a computer-vision model that can answer real-world questions about images.
-5//! It's lightweight with only 1.6B parameters, enabling it to run on mobile phones and edge devices.
-6//! [MoonDream Original Implementation](https://github.com/vikhyat/moondream)
-7//!
-8//! The model consists of:
-9//! - Vision encoder using a ViT-style architecture
-10//! - Text decoder based on Microsoft's Phi model
-11//! - Vision projection module to align vision and text embeddings
-12//!
-13//! # Examples
-14//!
-15//! <img src="https://raw.githubusercontent.com/vikhyat/moondream/main/assets/demo-1.jpg" width="200">
-16//!
-17//! ```bash
-18//! # download an example image
-19//! wget https://raw.githubusercontent.com/vikhyat/moondream/main/assets/demo-1.jpg
-20//!
-21//! # Now you can run Moondream from the `candle-examples` crate:
-22//! cargo run --example moondream \
-23//!   --release -- \
-24//!   --prompt "What is the girl eating?"
-25//!   --image "./demo-1.jpg"
-26//!
-27//! > avavx: false, neon: true, simd128: false, f16c: false
-28//! > temp: 0.00 repeat-penalty: 1.00 repeat-last-n: 64
-29//! > retrieved the files in 3.395583ms
-30//! > Running on CPU, to run on GPU(metal), build this example with `--features metal`
-31//! > loaded the model in 5.485493792s
-32//! > loaded and encoded the image Tensor[dims 3, 378, 378; f32] in 4.801396417s
-33//! > starting the inference loop
-34//! > The girl is eating a hamburger.<
-35//! > 9 tokens generated (0.68 token/s)
-36//! ```
-37
-38use crate::models::mixformer::{Config as PhiConfig, MixFormerSequentialForCausalLM as PhiModel};
-39use crate::models::with_tracing::{layer_norm, linear_b, LayerNorm, Linear};
-40use candle::{IndexOp, Module, Result, Tensor, D};
-41use candle_nn::VarBuilder;
-42
-43#[derive(Debug, Clone, serde::Deserialize)]
-44pub struct Config {
-45    pub phi_config: PhiConfig,
-46    pub vision_config: VisionConfig,
-47}
-48
-49impl Config {
-50    pub fn v2() -> Self {
-51        Self {
-52            phi_config: PhiConfig::v1_5(),
-53            vision_config: VisionConfig::v2(),
-54        }
-55    }
-56}
-57
-58fn scaled_dot_product_attention(q: &Tensor, k: &Tensor, v: &Tensor) -> Result<Tensor> {
-59    let dim = q.dim(D::Minus1)?;
-60    let scale_factor = 1.0 / (dim as f64).sqrt();
-61    let attn_weights = (q.matmul(&k.t()?)? * scale_factor)?;
-62    candle_nn::ops::softmax_last_dim(&attn_weights)?.matmul(v)
-63}
-64
-65#[derive(Debug, Clone, PartialEq, serde::Deserialize)]
-66pub struct VisionConfig {
-67    pub(crate) image_embedding_dim: usize,
-68    pub(crate) model_dim: usize,
-69    pub(crate) hidden_dim: usize,
-70    pub(crate) hidden_features: usize,
-71    pub(crate) embed_len: usize,
-72    pub(crate) embed_dim: usize,
-73    pub(crate) num_blocks: usize,
-74    pub(crate) num_heads: usize,
-75    pub(crate) act: candle_nn::Activation,
-76}
-77
-78impl VisionConfig {
-79    pub fn v2() -> Self {
-80        Self {
-81            image_embedding_dim: 1152,
-82            model_dim: 2048,
-83            hidden_dim: 2048 * 4,
-84            hidden_features: 4304,
-85            embed_len: 729,
-86            embed_dim: 1152,
-87            num_blocks: 27,
-88            num_heads: 16,
-89            act: candle_nn::Activation::GeluPytorchTanh,
-90        }
-91    }
-92}
-93
-94#[derive(Debug, Clone)]
-95struct LinearPatchEmbedding {
-96    linear: Linear,
-97}
-98
-99impl LinearPatchEmbedding {
-100    fn new(vb: VarBuilder) -> Result<Self> {
-101        let linear = linear_b(588, 1152, true, vb.pp("linear"))?;
-102        Ok(Self { linear })
-103    }
-104}
-105
-106impl Module for LinearPatchEmbedding {
-107    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-108        xs.apply(&self.linear)
-109    }
-110}
-111
-112#[derive(Debug, Clone)]
-113struct Attention {
-114    num_heads: usize,
-115    head_dim: usize,
-116    qkv: Linear,
-117    proj: Linear,
-118    span: tracing::Span,
-119}
-120
-121impl Attention {
-122    pub fn new(vb: VarBuilder, dim: usize, num_heads: usize) -> Result<Self> {
-123        let qkv = linear_b(dim, dim * 3, true, vb.pp("qkv"))?;
-124        let proj = linear_b(dim, dim, true, vb.pp("proj"))?;
-125        Ok(Self {
-126            num_heads,
-127            head_dim: dim / num_heads,
-128            qkv,
-129            proj,
-130            span: tracing::span!(tracing::Level::TRACE, "vit-attn"),
-131        })
-132    }
-133}
-134
-135impl Module for Attention {
-136    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-137        let _enter = self.span.enter();
-138        let (b, n, c) = xs.dims3()?;
-139        let qkv = xs
-140            .apply(&self.qkv)?
-141            .reshape((b, n, 3, self.num_heads, self.head_dim))?
-142            .permute((2, 0, 3, 1, 4))?;
-143        let (q, k, v) = (
-144            qkv.i(0)?.contiguous()?,
-145            qkv.i(1)?.contiguous()?,
-146            qkv.i(2)?.contiguous()?,
-147        );
-148        scaled_dot_product_attention(&q, &k, &v)?
-149            .transpose(1, 2)?
-150            .reshape((b, n, c))?
-151            .apply(&self.proj)
-152    }
-153}
-154
-155#[derive(Debug, Clone)]
-156struct VitBlock {
-157    attn: Attention,
-158    mlp: Mlp,
-159    norm1: LayerNorm,
-160    norm2: LayerNorm,
-161    span: tracing::Span,
-162}
-163
-164impl VitBlock {
-165    fn new(vb: VarBuilder, dim: usize, num_heads: usize, cfg: &VisionConfig) -> Result<Self> {
-166        let attn = Attention::new(vb.pp("attn"), dim, num_heads)?;
-167        let mlp = Mlp::new(vb.pp("mlp"), dim, cfg.hidden_features, dim, cfg.act)?;
-168        let norm1 = layer_norm(dim, 1e-5, vb.pp("norm1"))?;
-169        let norm2 = layer_norm(dim, 1e-5, vb.pp("norm2"))?;
-170        Ok(Self {
-171            attn,
-172            mlp,
-173            norm1,
-174            norm2,
-175            span: tracing::span!(tracing::Level::TRACE, "vit-block"),
-176        })
-177    }
-178}
-179
-180impl Module for VitBlock {
-181    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-182        let _enter = self.span.enter();
-183        let ys = xs.apply(&self.norm1)?.apply(&self.attn)?;
-184        let xs = (xs + &ys)?;
-185        let ys = xs.apply(&self.norm2)?.apply(&self.mlp)?;
-186        let xs = (&xs + &ys)?;
-187        Ok(xs)
-188    }
-189}
-190
-191#[derive(Debug, Clone)]
-192struct VisionTransformer {
-193    patch_embed: LinearPatchEmbedding,
-194    pos_embed: Tensor,
-195    blocks: Vec<VitBlock>,
-196    norm: LayerNorm,
-197    span: tracing::Span,
-198}
-199
-200impl VisionTransformer {
-201    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-202        let patch_embed = LinearPatchEmbedding::new(vb.pp("patch_embed"))?;
-203        let pos_embed = vb.get((1, cfg.embed_len, cfg.embed_dim), "pos_embed")?;
-204        let blocks = (0..cfg.num_blocks)
-205            .map(|i| {
-206                VitBlock::new(
-207                    vb.pp(format!("blocks.{}", i)),
-208                    cfg.embed_dim,
-209                    cfg.num_heads,
-210                    cfg,
-211                )
-212            })
-213            .collect::<Result<_>>()?;
-214        let norm = layer_norm(cfg.embed_dim, 1e-5, vb.pp("norm"))?;
-215        Ok(Self {
-216            patch_embed,
-217            pos_embed,
-218            blocks,
-219            norm,
-220            span: tracing::span!(tracing::Level::TRACE, "vit"),
-221        })
-222    }
-223}
-224
-225impl Module for VisionTransformer {
-226    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-227        let _enter = self.span.enter();
-228        let mut xs = (&xs.apply(&self.patch_embed)? + &self.pos_embed)?;
-229        for block in self.blocks.iter() {
-230            xs = xs.apply(block)?;
-231        }
-232        xs.apply(&self.norm)
-233    }
-234}
-235
-236#[derive(Debug, Clone)]
-237pub struct Encoder {
-238    model: VisionTransformer,
-239}
-240
-241impl Encoder {
-242    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-243        let model = VisionTransformer::new(cfg, vb.pp("model.visual"))?;
-244        Ok(Self { model })
-245    }
-246}
-247
-248impl Module for Encoder {
-249    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-250        xs.apply(&self.model)
-251    }
-252}
-253
-254#[derive(Debug, Clone)]
-255struct Mlp {
-256    fc1: Linear,
-257    act: candle_nn::Activation,
-258    fc2: Linear,
-259    span: tracing::Span,
-260}
-261
-262impl Mlp {
-263    fn new(
-264        vb: VarBuilder,
-265        in_features: usize,
-266        hidden_features: usize,
-267        out_features: usize,
-268        act: candle_nn::Activation,
-269    ) -> Result<Self> {
-270        let fc1 = linear_b(in_features, hidden_features, true, vb.pp("fc1"))?;
-271        let fc2 = linear_b(hidden_features, out_features, true, vb.pp("fc2"))?;
-272        Ok(Self {
-273            fc1,
-274            act,
-275            fc2,
-276            span: tracing::span!(tracing::Level::TRACE, "mlp"),
-277        })
-278    }
-279}
-280
-281impl Module for Mlp {
-282    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-283        let _enter = self.span.enter();
-284        xs.apply(&self.fc1)?.apply(&self.act)?.apply(&self.fc2)
-285    }
-286}
-287
-288#[derive(Debug, Clone)]
-289struct VisionProjection {
-290    mlp: Mlp,
-291}
-292
-293impl VisionProjection {
-294    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-295        let mlp = Mlp::new(
-296            vb.pp("mlp"),
-297            cfg.image_embedding_dim,
-298            cfg.hidden_dim,
-299            cfg.model_dim,
-300            cfg.act,
-301        )?;
-302        Ok(Self { mlp })
-303    }
-304}
-305
-306impl Module for VisionProjection {
-307    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-308        xs.apply(&self.mlp)
-309    }
-310}
-311
-312#[derive(Debug, Clone)]
-313pub struct VisionEncoder {
-314    encoder: Encoder,
-315    projection: VisionProjection,
-316}
-317
-318impl VisionEncoder {
-319    pub fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-320        let encoder = Encoder::new(cfg, vb.pp("encoder"))?;
-321        let projection = VisionProjection::new(cfg, vb.pp("projection"))?;
-322        Ok(Self {
-323            encoder,
-324            projection,
-325        })
-326    }
-327}
-328
-329impl Module for VisionEncoder {
-330    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-331        let (b, c, hp1, wp2) = xs.dims4()?;
-332        let (p1, p2) = (14, 14);
-333        let h = hp1 / p1;
-334        let w = wp2 / p2;
-335        xs.reshape((b, c, h, p1, h, p2))?
-336            .permute((0, 2, 4, 1, 3, 5))?
-337            .reshape((b, h * w, c * p1 * p2))?
-338            .apply(&self.encoder)?
-339            .apply(&self.projection)
-340    }
-341}
-342
-343#[derive(Debug, Clone)]
-344pub struct Model {
-345    pub text_model: PhiModel,
-346    pub vision_encoder: VisionEncoder,
-347}
-348
-349impl Model {
-350    pub fn new(config: &Config, vb: VarBuilder) -> Result<Self> {
-351        let text_model = PhiModel::new_v2(&config.phi_config, vb.pp("text_model"))?;
-352        let vision_encoder = VisionEncoder::new(&config.vision_config, vb.pp("vision_encoder"))?;
-353        Ok(Self {
-354            text_model,
-355            vision_encoder,
-356        })
-357    }
-358
-359    pub fn vision_encoder(&self) -> &VisionEncoder {
-360        &self.vision_encoder
-361    }
-362
-363    pub fn text_model(&mut self) -> &mut PhiModel {
-364        &mut self.text_model
-365    }
-366}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/mpt.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/mpt.rs.html deleted file mode 100644 index 08c89e7..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/mpt.rs.html +++ /dev/null @@ -1,299 +0,0 @@ -mpt.rs - source

candle_transformers/models/
mpt.rs

1//! Module implementing the MPT (Multi-Purpose Transformer) model
-2//!
-3//! References:
-4//! - [MPT Model used by replit-code-v1_5-3b](https://huggingface.co/replit/replit-code-v1_5-3b/blob/main/modeling_mpt.py)
-5//! - [Configuration](https://huggingface.co/replit/replit-code-v1_5-3b/blob/main/configuration_mpt.py)
-6//!
-7//! The model uses grouped query attention and alibi positional embeddings.
-8
-9use crate::models::with_tracing::{linear_no_bias, Embedding, Linear};
-10/// MPT model used by replit-code-v1_5-3b
-11/// https://huggingface.co/replit/replit-code-v1_5-3b/blob/main/modeling_mpt.py
-12use candle::{DType, Device, IndexOp, Module, Result, Tensor, D};
-13use candle_nn::{layer_norm, LayerNorm, VarBuilder};
-14
-15// https://huggingface.co/replit/replit-code-v1_5-3b/blob/main/configuration_mpt.py
-16#[derive(Debug, Clone, PartialEq)]
-17pub struct Config {
-18    pub(crate) d_model: usize,
-19    pub(crate) n_heads: usize,
-20    pub(crate) n_layers: usize,
-21    pub(crate) expansion_ratio: usize,
-22    pub(crate) max_seq_len: usize,
-23    pub(crate) vocab_size: usize,
-24    pub(crate) kv_n_heads: usize,
-25    pub(crate) attn_prefix_lm: bool,
-26    pub(crate) attn_alibi: bool,
-27    pub(crate) attn_alibi_bias_max: usize,
-28}
-29
-30impl Config {
-31    pub fn replit_code_v1_5_3b() -> Self {
-32        Self {
-33            d_model: 3072,
-34            n_heads: 24,
-35            n_layers: 32,
-36            expansion_ratio: 4,
-37            max_seq_len: 4096,
-38            vocab_size: 32768,
-39            kv_n_heads: 8,
-40            attn_prefix_lm: false,
-41            attn_alibi: true,
-42            attn_alibi_bias_max: 8,
-43        }
-44    }
-45
-46    pub fn is_causal(&self) -> bool {
-47        !self.attn_prefix_lm
-48    }
-49}
-50
-51#[derive(Debug, Clone)]
-52struct GroupedQueryAttention {
-53    wqkv: Linear,
-54    out_proj: Linear,
-55    kv_cache: Option<(Tensor, Tensor)>,
-56    softmax_scale: f64,
-57    head_dim: usize,
-58    d_model: usize,
-59    n_heads: usize,
-60    kv_n_heads: usize,
-61    attn_bias: Tensor,
-62    span: tracing::Span,
-63}
-64
-65impl GroupedQueryAttention {
-66    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-67        let head_dim = cfg.d_model / cfg.n_heads;
-68        let wqkv_size = cfg.d_model + 2 * cfg.kv_n_heads * head_dim;
-69        let wqkv = linear_no_bias(cfg.d_model, wqkv_size, vb.pp("Wqkv"))?;
-70        let softmax_scale = 1f64 / (head_dim as f64).sqrt();
-71        let out_proj = linear_no_bias(cfg.d_model, cfg.d_model, vb.pp("out_proj"))?;
-72        let attn_bias = build_alibi_bias(cfg)?.to_device(vb.device())?;
-73        Ok(Self {
-74            wqkv,
-75            out_proj,
-76            kv_cache: None,
-77            softmax_scale,
-78            head_dim,
-79            d_model: cfg.d_model,
-80            n_heads: cfg.n_heads,
-81            kv_n_heads: cfg.kv_n_heads,
-82            attn_bias,
-83            span: tracing::span!(tracing::Level::TRACE, "gqa"),
-84        })
-85    }
-86
-87    fn forward(&mut self, xs: &Tensor, mask: Option<&Tensor>) -> Result<Tensor> {
-88        let _enter = self.span.enter();
-89        let (b_size, seq_len, _n_embd) = xs.dims3()?;
-90        let qkv = self.wqkv.forward(xs)?;
-91        let query = qkv.narrow(2, 0, self.d_model)?;
-92        let kv_size = self.kv_n_heads * self.head_dim;
-93        let key = qkv.narrow(2, self.d_model, kv_size)?;
-94        let value = qkv.narrow(2, self.d_model + kv_size, kv_size)?;
-95        // scaled_multihead_dot_product_attention
-96        let query = query
-97            .reshape((b_size, seq_len, self.n_heads, ()))?
-98            .transpose(1, 2)?; // b,h,s,d
-99        let key = key
-100            .reshape((b_size, seq_len, self.kv_n_heads, ()))?
-101            .permute((0, 2, 3, 1))?; // b,h,d,s
-102        let value = value
-103            .reshape((b_size, seq_len, self.kv_n_heads, ()))?
-104            .transpose(1, 2)?; // b,h,s,d
-105        let (key, value) = match &self.kv_cache {
-106            None => (key, value),
-107            Some((prev_k, prev_v)) => {
-108                let k = Tensor::cat(&[prev_k, &key], 3)?;
-109                let v = Tensor::cat(&[prev_v, &value], 2)?;
-110                (k, v)
-111            }
-112        };
-113        self.kv_cache = Some((key.clone(), value.clone()));
-114        let query = query.contiguous()?;
-115        let key = crate::utils::repeat_kv(key, self.n_heads / self.kv_n_heads)?.contiguous()?;
-116        let value = crate::utils::repeat_kv(value, self.n_heads / self.kv_n_heads)?.contiguous()?;
-117        let attn_weights = (query.matmul(&key)? * self.softmax_scale)?;
-118        let attn_bias = {
-119            let s_q = query.dim(D::Minus2)?;
-120            let s_k = key.dim(D::Minus1)?;
-121            let (_, _, a_q, a_k) = self.attn_bias.dims4()?;
-122            let start_q = a_q.saturating_sub(s_q);
-123            let start_k = a_k.saturating_sub(s_k);
-124            self.attn_bias.i((.., .., start_q.., start_k..))?
-125        };
-126        let attn_weights = attn_weights.broadcast_add(&attn_bias)?;
-127        let attn_weights = match mask {
-128            None => attn_weights,
-129            Some(mask) => masked_fill(
-130                &attn_weights,
-131                &mask.broadcast_as(attn_weights.shape())?,
-132                f32::NEG_INFINITY,
-133            )?,
-134        };
-135        let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-136        let attn_output = attn_weights
-137            .matmul(&value)?
-138            .transpose(1, 2)?
-139            .flatten_from(D::Minus2)?;
-140        let out = attn_output.apply(&self.out_proj)?;
-141        Ok(out)
-142    }
-143}
-144
-145#[derive(Debug, Clone)]
-146struct Ffn {
-147    up_proj: Linear,
-148    down_proj: Linear,
-149}
-150
-151impl Ffn {
-152    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-153        let hidden = cfg.d_model * cfg.expansion_ratio;
-154        let up_proj = linear_no_bias(cfg.d_model, hidden, vb.pp("up_proj"))?;
-155        let down_proj = linear_no_bias(hidden, cfg.d_model, vb.pp("down_proj"))?;
-156        Ok(Self { up_proj, down_proj })
-157    }
-158}
-159
-160impl Module for Ffn {
-161    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-162        xs.apply(&self.up_proj)?.gelu_erf()?.apply(&self.down_proj)
-163    }
-164}
-165
-166#[derive(Debug, Clone)]
-167struct MPTBlock {
-168    norm1: LayerNorm, // Do we need the low-precision variant?
-169    attn: GroupedQueryAttention,
-170    norm2: LayerNorm,
-171    ffn: Ffn,
-172}
-173
-174impl MPTBlock {
-175    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-176        let ln_cfg = candle_nn::LayerNormConfig {
-177            affine: false,
-178            ..Default::default()
-179        };
-180        let norm1 = layer_norm(cfg.d_model, ln_cfg, vb.pp("norm_1"))?;
-181        let norm2 = layer_norm(cfg.d_model, ln_cfg, vb.pp("norm_2"))?;
-182        let attn = GroupedQueryAttention::new(cfg, vb.pp("attn"))?;
-183        let ffn = Ffn::new(cfg, vb.pp("ffn"))?;
-184        Ok(Self {
-185            norm1,
-186            attn,
-187            norm2,
-188            ffn,
-189        })
-190    }
-191
-192    fn forward(&mut self, xs: &Tensor, mask: Option<&Tensor>) -> Result<Tensor> {
-193        let residual = xs;
-194        let xs = xs.apply(&self.norm1)?;
-195        let xs = self.attn.forward(&xs, mask)?;
-196        let xs = (xs + residual)?;
-197        let residual = &xs;
-198        let xs = xs.apply(&self.norm2)?.apply(&self.ffn)?;
-199        xs + residual
-200    }
-201}
-202
-203pub(crate) fn build_alibi_bias(cfg: &Config) -> Result<Tensor> {
-204    let full = !cfg.is_causal();
-205    let seq_len = cfg.max_seq_len;
-206    let alibi_bias = Tensor::arange(1 - seq_len as i64, 1, &Device::Cpu)?;
-207    let alibi_bias = if full {
-208        let a1 = alibi_bias.reshape((1, 1, 1, seq_len))?;
-209        let a2 = alibi_bias.reshape((1, 1, seq_len, 1))?;
-210        a1.broadcast_sub(&a2)?.abs()?.neg()?
-211    } else {
-212        alibi_bias.reshape((1, 1, 1, seq_len))?
-213    };
-214    let mut n_heads2 = 1;
-215    while n_heads2 < cfg.n_heads {
-216        n_heads2 *= 2
-217    }
-218    let slopes = (1..=n_heads2)
-219        .map(|v| 1f32 / 2f32.powf((v * cfg.attn_alibi_bias_max) as f32 / n_heads2 as f32))
-220        .collect::<Vec<_>>();
-221    let slopes = if n_heads2 == cfg.n_heads {
-222        slopes
-223    } else {
-224        slopes
-225            .iter()
-226            .skip(1)
-227            .step_by(2)
-228            .chain(slopes.iter().step_by(2))
-229            .take(cfg.n_heads)
-230            .cloned()
-231            .collect::<Vec<f32>>()
-232    };
-233    let slopes = Tensor::new(slopes, &Device::Cpu)?.reshape((1, (), 1, 1))?;
-234    alibi_bias.to_dtype(DType::F32)?.broadcast_mul(&slopes)
-235}
-236
-237#[derive(Debug, Clone)]
-238pub struct Model {
-239    wte: Embedding,
-240    blocks: Vec<MPTBlock>,
-241    norm_f: LayerNorm,
-242}
-243
-244impl Model {
-245    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-246        let wte = Embedding::new(cfg.vocab_size, cfg.d_model, vb.pp("wte"))?;
-247        let vb_b = vb.pp("blocks");
-248        let mut blocks = Vec::with_capacity(cfg.n_layers);
-249        for i in 0..cfg.n_layers {
-250            let block = MPTBlock::new(cfg, vb_b.pp(i))?;
-251            blocks.push(block)
-252        }
-253        let ln_cfg = candle_nn::LayerNormConfig {
-254            affine: false,
-255            ..Default::default()
-256        };
-257        let norm_f = candle_nn::layer_norm(cfg.d_model, ln_cfg, vb.pp("norm_f"))?;
-258        Ok(Self {
-259            wte,
-260            blocks,
-261            norm_f,
-262        })
-263    }
-264
-265    pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor> {
-266        let (_b_size, seq_len) = xs.dims2()?;
-267        let mut xs = xs.apply(&self.wte)?;
-268        let mask = if seq_len <= 1 {
-269            None
-270        } else {
-271            Some(get_mask(seq_len, xs.device())?)
-272        };
-273        for block in self.blocks.iter_mut() {
-274            xs = block.forward(&xs, mask.as_ref())?;
-275        }
-276        let xs = xs.apply(&self.norm_f)?;
-277        let logits = xs
-278            .narrow(1, seq_len - 1, 1)?
-279            .squeeze(1)?
-280            .matmul(&self.wte.embeddings().t()?)?
-281            .squeeze(1)?;
-282        Ok(logits)
-283    }
-284}
-285
-286pub(crate) fn get_mask(size: usize, device: &Device) -> Result<Tensor> {
-287    let mask: Vec<_> = (0..size)
-288        .flat_map(|i| (0..size).map(move |j| u8::from(j > i)))
-289        .collect();
-290    Tensor::from_slice(&mask, (size, size), device)
-291}
-292
-293pub(crate) fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: f32) -> Result<Tensor> {
-294    let shape = mask.shape();
-295    let on_true = Tensor::new(on_true, on_false.device())?.broadcast_as(shape.dims())?;
-296    let m = mask.where_cond(&on_true, on_false)?;
-297    Ok(m)
-298}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/nvembed_v2/embedding.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/nvembed_v2/embedding.rs.html deleted file mode 100644 index a708e05..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/nvembed_v2/embedding.rs.html +++ /dev/null @@ -1,295 +0,0 @@ -embedding.rs - source

candle_transformers/models/nvembed_v2/
embedding.rs

1/// Mistral LLM, https://github.com/mistralai/mistral-src
-2use crate::models::{
-3    mistral::Config,
-4    with_tracing::{linear_no_bias, Linear, RmsNorm},
-5};
-6use crate::utils::repeat_kv;
-7use candle::{DType, Device, Module, Result, Tensor};
-8use candle_nn::{Activation, VarBuilder};
-9use std::sync::Arc;
-10
-11#[derive(Debug, Clone)]
-12struct RotaryEmbedding {
-13    sin: Tensor,
-14    cos: Tensor,
-15}
-16
-17impl RotaryEmbedding {
-18    fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-19        let rope_theta = cfg.rope_theta as f32;
-20        let dim = cfg.hidden_size / cfg.num_attention_heads;
-21        let max_seq_len = cfg.max_position_embeddings;
-22        let inv_freq: Vec<_> = (0..dim)
-23            .step_by(2)
-24            .map(|i| 1f32 / rope_theta.powf(i as f32 / dim as f32))
-25            .collect();
-26        let inv_freq_len = inv_freq.len();
-27        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-28        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-29            .to_dtype(dtype)?
-30            .reshape((max_seq_len, 1))?;
-31        let freqs = t.matmul(&inv_freq)?;
-32        Ok(Self {
-33            sin: freqs.sin()?,
-34            cos: freqs.cos()?,
-35        })
-36    }
-37
-38    fn apply_rotary_emb_qkv(
-39        &self,
-40        q: &Tensor,
-41        k: &Tensor,
-42        seqlen_offset: usize,
-43    ) -> Result<(Tensor, Tensor)> {
-44        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-45        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-46        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-47        let q_embed = candle_nn::rotary_emb::rope(q, &cos, &sin)?;
-48        let k_embed = candle_nn::rotary_emb::rope(k, &cos, &sin)?;
-49        Ok((q_embed, k_embed))
-50    }
-51}
-52
-53#[derive(Debug, Clone)]
-54#[allow(clippy::upper_case_acronyms)]
-55struct MLP {
-56    gate_proj: Linear,
-57    up_proj: Linear,
-58    down_proj: Linear,
-59    act_fn: Activation,
-60}
-61
-62impl MLP {
-63    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-64        let hidden_sz = cfg.hidden_size;
-65        let intermediate_sz = cfg.intermediate_size;
-66        let gate_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("gate_proj"))?;
-67        let up_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("up_proj"))?;
-68        let down_proj = linear_no_bias(intermediate_sz, hidden_sz, vb.pp("down_proj"))?;
-69        Ok(Self {
-70            gate_proj,
-71            up_proj,
-72            down_proj,
-73            act_fn: cfg.hidden_act,
-74        })
-75    }
-76}
-77
-78impl Module for MLP {
-79    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-80        let lhs = xs.apply(&self.gate_proj)?.apply(&self.act_fn)?;
-81        let rhs = xs.apply(&self.up_proj)?;
-82        (lhs * rhs)?.apply(&self.down_proj)
-83    }
-84}
-85
-86#[derive(Debug, Clone)]
-87struct Attention {
-88    q_proj: Linear,
-89    k_proj: Linear,
-90    v_proj: Linear,
-91    o_proj: Linear,
-92    num_heads: usize,
-93    num_kv_heads: usize,
-94    num_kv_groups: usize,
-95    head_dim: usize,
-96    hidden_size: usize,
-97    rotary_emb: Arc<RotaryEmbedding>,
-98}
-99
-100impl Attention {
-101    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-102        let hidden_sz = cfg.hidden_size;
-103        let num_heads = cfg.num_attention_heads;
-104        let num_kv_heads = cfg.num_key_value_heads;
-105        let num_kv_groups = num_heads / num_kv_heads;
-106        let head_dim = hidden_sz / num_heads;
-107        let q_proj = linear_no_bias(hidden_sz, num_heads * head_dim, vb.pp("q_proj"))?;
-108        let k_proj = linear_no_bias(hidden_sz, num_kv_heads * head_dim, vb.pp("k_proj"))?;
-109        let v_proj = linear_no_bias(hidden_sz, num_kv_heads * head_dim, vb.pp("v_proj"))?;
-110        let o_proj = linear_no_bias(num_heads * head_dim, hidden_sz, vb.pp("o_proj"))?;
-111        Ok(Self {
-112            q_proj,
-113            k_proj,
-114            v_proj,
-115            o_proj,
-116            num_heads,
-117            num_kv_heads,
-118            num_kv_groups,
-119            head_dim,
-120            hidden_size: hidden_sz,
-121            rotary_emb,
-122        })
-123    }
-124
-125    fn forward(
-126        &mut self,
-127        xs: &Tensor,
-128        attention_mask: Option<&Tensor>,
-129        seqlen_offset: usize,
-130    ) -> Result<Tensor> {
-131        let (b_sz, q_len, _) = xs.dims3()?;
-132
-133        let query_states = self.q_proj.forward(xs)?;
-134        let key_states = self.k_proj.forward(xs)?;
-135        let value_states = self.v_proj.forward(xs)?;
-136
-137        let query_states = query_states
-138            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-139            .transpose(1, 2)?
-140            .contiguous()?;
-141
-142        let key_states = key_states
-143            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-144            .transpose(1, 2)?
-145            .contiguous()?;
-146        let value_states = value_states
-147            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-148            .transpose(1, 2)?;
-149
-150        let (query_states, key_states) =
-151            self.rotary_emb
-152                .apply_rotary_emb_qkv(&query_states, &key_states, seqlen_offset)?;
-153
-154        let key_states = repeat_kv(key_states, self.num_kv_groups)?;
-155        let value_states = repeat_kv(value_states, self.num_kv_groups)?;
-156
-157        let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-158        let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-159
-160        let attn_weights = match attention_mask {
-161            None => attn_weights,
-162            Some(mask) => attn_weights.broadcast_add(mask)?,
-163        };
-164        let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-165        let attn_output = attn_weights.matmul(&value_states)?;
-166
-167        attn_output
-168            .transpose(1, 2)?
-169            .reshape((b_sz, q_len, self.hidden_size))?
-170            .apply(&self.o_proj)
-171    }
-172}
-173
-174#[derive(Debug, Clone)]
-175struct DecoderLayer {
-176    self_attn: Attention,
-177    mlp: MLP,
-178    input_layernorm: RmsNorm,
-179    post_attention_layernorm: RmsNorm,
-180}
-181
-182impl DecoderLayer {
-183    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-184        let self_attn = Attention::new(rotary_emb, cfg, vb.pp("self_attn"))?;
-185        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-186        let input_layernorm =
-187            RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("input_layernorm"))?;
-188        let post_attention_layernorm = RmsNorm::new(
-189            cfg.hidden_size,
-190            cfg.rms_norm_eps,
-191            vb.pp("post_attention_layernorm"),
-192        )?;
-193        Ok(Self {
-194            self_attn,
-195            mlp,
-196            input_layernorm,
-197            post_attention_layernorm,
-198        })
-199    }
-200
-201    fn forward(
-202        &mut self,
-203        xs: &Tensor,
-204        attention_mask: Option<&Tensor>,
-205        seqlen_offset: usize,
-206    ) -> Result<Tensor> {
-207        let residual = xs;
-208        let xs = self.input_layernorm.forward(xs)?;
-209
-210        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-211
-212        let xs = (xs + residual)?;
-213        let residual = &xs;
-214        let xs = xs.apply(&self.post_attention_layernorm)?.apply(&self.mlp)?;
-215        residual + xs
-216    }
-217}
-218
-219#[derive(Debug, Clone)]
-220pub struct Model {
-221    embed_tokens: candle_nn::Embedding,
-222    layers: Vec<DecoderLayer>,
-223    norm: RmsNorm,
-224    pub cfg: Config,
-225}
-226
-227impl Model {
-228    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-229        let embed_tokens =
-230            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb.pp("embed_tokens"))?;
-231        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb.device())?);
-232        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-233        let vb_l = vb.pp("layers");
-234        for layer_idx in 0..cfg.num_hidden_layers {
-235            let layer = DecoderLayer::new(rotary_emb.clone(), cfg, vb_l.pp(layer_idx))?;
-236            layers.push(layer)
-237        }
-238        let norm = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("norm"))?;
-239        Ok(Self {
-240            embed_tokens,
-241            layers,
-242            norm,
-243            cfg: cfg.clone(),
-244        })
-245    }
-246
-247    // Attn mask used to mask out padding tokens
-248    pub fn forward(
-249        &mut self,
-250        attn_mask: &Tensor,
-251        input_ids: &Tensor,
-252        dtype: DType,
-253    ) -> Result<Tensor> {
-254        let mut xs = self.embed_tokens.forward(input_ids)?;
-255
-256        // Expand to 4d mask for sdpa
-257        let attn_mask = prepare_4d_attention_mask(attn_mask, dtype, None)?;
-258
-259        for layer in self.layers.iter_mut() {
-260            xs = layer.forward(&xs, Some(&attn_mask), 0)?;
-261        }
-262
-263        // Return hiddens instead of logits
-264        xs.apply(&self.norm)
-265    }
-266}
-267
-268fn prepare_4d_attention_mask(
-269    mask: &Tensor,
-270    dtype: DType,
-271    tgt_len: Option<usize>,
-272) -> Result<Tensor> {
-273    let bsz = mask.dims()[0];
-274    let src_len = mask.dims()[1];
-275    let tgt_len = tgt_len.unwrap_or(src_len);
-276
-277    let expanded_mask = mask
-278        .unsqueeze(1)?
-279        .unsqueeze(2)?
-280        .expand((bsz, 1, tgt_len, src_len))?
-281        .to_dtype(dtype)?;
-282
-283    let inverted_mask = (1.0 - expanded_mask)?;
-284
-285    (inverted_mask * get_dtype_min_val(dtype))?.to_dtype(dtype)
-286}
-287
-288fn get_dtype_min_val(dtype: DType) -> f64 {
-289    match dtype {
-290        DType::F32 => f32::MIN as f64,
-291        DType::F64 => f64::MIN,
-292        _ => panic!("Unsupported data type"),
-293    }
-294}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/nvembed_v2/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/nvembed_v2/mod.rs.html deleted file mode 100644 index 4df0803..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/nvembed_v2/mod.rs.html +++ /dev/null @@ -1,19 +0,0 @@ -mod.rs - source

candle_transformers/models/nvembed_v2/
mod.rs

1//! NV-Embed-v2
-2//!
-3//! NV-Embed-v2 is a text embedding model that combines a Mistral decoder with a latent attention mechanism to produce high-quality text embeddings.
-4//!
-5//! This implementation is based on the [paper](https://arxiv.org/pdf/2405.17428) and [weights](https://huggingface.co/nvidia/NV-Embed-v2)
-6//!
-7//! # Query-Passage Retrieval Example
-8//! ```bash
-9//! cargo run --example nvembed_v2 --release
-10//! ```
-11//!
-12//! # Sentence Embedding Example
-13//! ```bash
-14//! cargo run --example nvembed_v2 --release -- --prompt "Here is a test sentence"
-15//! ```
-16
-17pub mod embedding;
-18pub mod model;
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/nvembed_v2/model.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/nvembed_v2/model.rs.html deleted file mode 100644 index 2913174..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/nvembed_v2/model.rs.html +++ /dev/null @@ -1,234 +0,0 @@ -model.rs - source

candle_transformers/models/nvembed_v2/
model.rs

1use super::embedding::Model as EmbeddingModel;
-2use crate::models::{
-3    mistral::Config,
-4    with_tracing::{layer_norm, linear, linear_no_bias, LayerNorm, Linear},
-5};
-6use candle::{DType, Device, Result, Tensor, D};
-7use candle_nn::{ops::softmax_last_dim, LayerNormConfig, Module, VarBuilder};
-8
-9// Geglu and feedforward from candle-transformers/src/models/stable_diffusion/attention.rs
-10#[derive(Debug)]
-11struct GeGlu {
-12    proj: Linear,
-13    span: tracing::Span,
-14}
-15
-16impl GeGlu {
-17    fn new(vs: VarBuilder, dim_in: usize, dim_out: usize) -> Result<Self> {
-18        let proj = linear(dim_in, dim_out * 2, vs)?;
-19        let span = tracing::span!(tracing::Level::TRACE, "geglu");
-20        Ok(Self { proj, span })
-21    }
-22}
-23
-24impl Module for GeGlu {
-25    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-26        let _enter = self.span.enter();
-27        let hidden_states_and_gate = self.proj.forward(xs)?.chunk(2, D::Minus1)?;
-28        &hidden_states_and_gate[0] * hidden_states_and_gate[1].gelu()?
-29    }
-30}
-31
-32#[derive(Debug)]
-33struct FeedForward {
-34    project_in: GeGlu,
-35    linear: Linear,
-36    span: tracing::Span,
-37}
-38
-39impl FeedForward {
-40    fn new(vs: VarBuilder, dim: usize, dim_out: Option<usize>, mult: usize) -> Result<Self> {
-41        let inner_dim = dim * mult;
-42        let dim_out = dim_out.unwrap_or(dim);
-43        let vs = vs.pp("net");
-44        let project_in = GeGlu::new(vs.pp("0"), dim, inner_dim)?;
-45        let linear = linear(inner_dim, dim_out, vs.pp("2"))?;
-46        let span = tracing::span!(tracing::Level::TRACE, "ff");
-47        Ok(Self {
-48            project_in,
-49            linear,
-50            span,
-51        })
-52    }
-53}
-54
-55impl Module for FeedForward {
-56    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-57        let _enter = self.span.enter();
-58        let xs = self.project_in.forward(xs)?;
-59        self.linear.forward(&xs)
-60    }
-61}
-62
-63// CrossAttention from candle-transformers/src/models/stable_diffusion/attention.rs
-64#[derive(Debug)]
-65struct CrossAttention {
-66    to_q: Linear,
-67    to_kv: Linear,
-68    to_out: Linear,
-69    heads: usize,
-70    scale: f64,
-71    span: tracing::Span,
-72    span_attn: tracing::Span,
-73    span_softmax: tracing::Span,
-74}
-75
-76impl CrossAttention {
-77    fn new(
-78        vs: VarBuilder,
-79        query_dim: usize,
-80        context_dim: Option<usize>,
-81        heads: usize,
-82        dim_head: usize,
-83    ) -> Result<Self> {
-84        let inner_dim = dim_head * heads;
-85        let context_dim = context_dim.unwrap_or(query_dim);
-86        let scale = 1.0 / f64::sqrt(dim_head as f64);
-87        let to_q = linear_no_bias(query_dim, inner_dim, vs.pp("to_q"))?;
-88        let to_kv = linear_no_bias(context_dim, inner_dim * 2, vs.pp("to_kv"))?;
-89        let to_out = linear_no_bias(inner_dim, query_dim, vs.pp("to_out"))?;
-90        let span = tracing::span!(tracing::Level::TRACE, "xa");
-91        let span_attn = tracing::span!(tracing::Level::TRACE, "xa-attn");
-92        let span_softmax = tracing::span!(tracing::Level::TRACE, "xa-softmax");
-93        Ok(Self {
-94            to_q,
-95            to_kv,
-96            to_out,
-97            heads,
-98            scale,
-99            span,
-100            span_attn,
-101            span_softmax,
-102        })
-103    }
-104
-105    fn reshape_heads_to_batch_dim(&self, xs: &Tensor) -> Result<Tensor> {
-106        let (batch_size, seq_len, dim) = xs.dims3()?;
-107        xs.reshape((batch_size, seq_len, self.heads, dim / self.heads))?
-108            .transpose(1, 2)?
-109            .reshape((batch_size * self.heads, seq_len, dim / self.heads))
-110    }
-111
-112    fn reshape_batch_dim_to_heads(&self, xs: &Tensor) -> Result<Tensor> {
-113        let (batch_size, seq_len, dim) = xs.dims3()?;
-114        xs.reshape((batch_size / self.heads, self.heads, seq_len, dim))?
-115            .transpose(1, 2)?
-116            .reshape((batch_size / self.heads, seq_len, dim * self.heads))
-117    }
-118
-119    fn attention(&self, query: &Tensor, key: &Tensor, value: &Tensor) -> Result<Tensor> {
-120        let _enter = self.span_attn.enter();
-121
-122        let in_dtype = query.dtype();
-123        let query = query.to_dtype(DType::F32)?;
-124        let key = key.to_dtype(DType::F32)?;
-125        let value = value.to_dtype(DType::F32)?;
-126        let xs = query.matmul(&(key.t()? * self.scale)?)?;
-127        let xs = {
-128            let _enter = self.span_softmax.enter();
-129            softmax_last_dim(&xs)?
-130        };
-131        let xs = xs.matmul(&value)?.to_dtype(in_dtype)?;
-132
-133        self.reshape_batch_dim_to_heads(&xs)
-134    }
-135
-136    fn forward(&self, xs: &Tensor, context: Option<&Tensor>) -> Result<Tensor> {
-137        let _enter = self.span.enter();
-138        let query = self.to_q.forward(xs)?;
-139        let context = context.unwrap_or(xs).contiguous()?;
-140        let kv_chunks = self
-141            .to_kv
-142            .forward(&context)?
-143            .chunk(2, context.shape().dims().len() - 1)?;
-144        let (key, value) = (kv_chunks[0].clone(), kv_chunks[1].clone());
-145        let query = self.reshape_heads_to_batch_dim(&query)?;
-146        let key = self.reshape_heads_to_batch_dim(&key)?;
-147        let value = self.reshape_heads_to_batch_dim(&value)?;
-148
-149        let xs = self.attention(&query, &key, &value)?;
-150        self.to_out.forward(&xs)
-151    }
-152}
-153
-154#[derive(Debug)]
-155pub struct Model {
-156    embedding_model: EmbeddingModel,
-157    cross_attn: CrossAttention,
-158    cross_attn_norm: LayerNorm,
-159    cross_attn_context_norm: LayerNorm,
-160    ff: FeedForward,
-161    ff_norm: LayerNorm,
-162    latents: Tensor,
-163    pub device: Device,
-164    pub dtype: DType,
-165}
-166
-167impl Model {
-168    pub fn new(vb: VarBuilder) -> Result<Self> {
-169        // Embedding model
-170        let cfg = Config::config_7b_v0_1(false);
-171        let embedding_model = EmbeddingModel::new(&cfg, vb.pp("embedding_model"))?;
-172
-173        // Latent attention
-174        let dim = 4096;
-175        let vb = vb.pp("latent_attention_model");
-176        let latents = vb.get((512, dim), "latents")?;
-177
-178        // Cross attend blocks
-179        let vb = vb.pp("cross_attend_blocks");
-180        let cross_attn_norm = layer_norm(dim, LayerNormConfig::default(), vb.pp("0.norm"))?;
-181        let cross_attn_context_norm = layer_norm(
-182            dim,
-183            candle_nn::LayerNormConfig::default(),
-184            vb.pp("0.norm_context"),
-185        )?;
-186        let cross_attn = CrossAttention::new(vb.pp("0.fn"), dim, None, 8, 4096)?;
-187
-188        let ff_norm = layer_norm(dim, LayerNormConfig::default(), vb.pp("1.norm"))?;
-189        let ff = FeedForward::new(vb.pp("1.fn"), dim, None, 4)?;
-190
-191        Ok(Self {
-192            embedding_model,
-193            cross_attn,
-194            cross_attn_norm,
-195            cross_attn_context_norm,
-196            ff,
-197            ff_norm,
-198            latents,
-199            device: vb.device().clone(),
-200            dtype: vb.dtype(),
-201        })
-202    }
-203
-204    pub fn forward(
-205        &mut self,
-206        input_ids: &Tensor,
-207        attn_mask: &Tensor,
-208        pool_mask: &Tensor,
-209    ) -> Result<Tensor> {
-210        // Embedding model
-211        let hiddens = self
-212            .embedding_model
-213            .forward(attn_mask, input_ids, self.dtype)?;
-214
-215        // Latent attention
-216        let b = hiddens.dims()[0];
-217        let x = self.latents.unsqueeze(0)?.repeat((b, 1, 1))?;
-218        let original_hiddens = &hiddens;
-219
-220        let hiddens = self.cross_attn_norm.forward(original_hiddens)?;
-221        let x = self.cross_attn_context_norm.forward(&x)?;
-222        let cross_hiddens = (self.cross_attn.forward(&hiddens, Some(&x))? + original_hiddens)?;
-223
-224        let hiddens = self.ff_norm.forward(&cross_hiddens)?;
-225        let hiddens = (self.ff.forward(&hiddens)? + cross_hiddens)?;
-226
-227        // Mean pooling
-228        let hiddens_masked = hiddens.broadcast_mul(&pool_mask.unsqueeze(D::Minus1)?)?;
-229        let s = hiddens_masked.sum(1)?;
-230        let d = pool_mask.sum_keepdim(1)?;
-231        s.broadcast_div(&d)
-232    }
-233}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/olmo.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/olmo.rs.html deleted file mode 100644 index 9a59033..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/olmo.rs.html +++ /dev/null @@ -1,354 +0,0 @@ -olmo.rs - source

candle_transformers/models/
olmo.rs

1//! OLMo (Open Language Model) implementation
-2//!
-3//! See OLMo model details at:
-4//! - [Hugging Face](https://huggingface.co/allenai/OLMo)
-5//! - [OLMo Paper](https://allenai.org/olmo)
-6//!
-7//! The model uses:
-8//! - RoPE embeddings
-9//! - Sliding window attention
-10//! - Transformer architecture
-11//!
-12//! References:
-13//! - [Hugging Face Implementation](https://huggingface.co/allenai/OLMo)
-14//! - [OLMo Paper](https://allenai.org/olmo)
-15//!
-16
-17use candle::{DType, Device, Module, Result, Tensor, D};
-18use candle_nn::{linear_b, linear_no_bias, Activation, LayerNorm, Linear, VarBuilder};
-19use std::sync::Arc;
-20
-21#[derive(Debug, Clone, serde::Deserialize)]
-22pub struct Config {
-23    pub vocab_size: usize,
-24    pub hidden_size: usize,
-25    pub intermediate_size: usize,
-26    pub attention_bias: bool,
-27    pub num_hidden_layers: usize,
-28    pub num_attention_heads: usize,
-29    pub num_key_value_heads: usize,
-30    pub hidden_act: candle_nn::Activation,
-31    pub max_position_embeddings: usize,
-32    pub rope_theta: f64,
-33    pub tie_word_embeddings: bool,
-34    pub clip_qkv: Option<f64>,
-35}
-36
-37#[derive(Debug, Clone)]
-38struct RotaryEmbedding {
-39    sin: Tensor,
-40    cos: Tensor,
-41}
-42
-43impl RotaryEmbedding {
-44    fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-45        let dim = cfg.hidden_size / cfg.num_attention_heads;
-46        let max_seq_len = cfg.max_position_embeddings;
-47        let inv_freq: Vec<_> = (0..dim)
-48            .step_by(2)
-49            .map(|i| 1f32 / cfg.rope_theta.powf(i as f64 / dim as f64) as f32)
-50            .collect();
-51        let inv_freq_len = inv_freq.len();
-52        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-53        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-54            .to_dtype(dtype)?
-55            .reshape((max_seq_len, 1))?;
-56        let freqs = t.matmul(&inv_freq)?;
-57        Ok(Self {
-58            sin: freqs.sin()?,
-59            cos: freqs.cos()?,
-60        })
-61    }
-62
-63    fn apply_rotary_emb_qkv(
-64        &self,
-65        q: &Tensor,
-66        k: &Tensor,
-67        seqlen_offset: usize,
-68    ) -> Result<(Tensor, Tensor)> {
-69        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-70        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-71        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-72        let q_embed = candle_nn::rotary_emb::rope(&q.contiguous()?, &cos, &sin)?;
-73        let k_embed = candle_nn::rotary_emb::rope(&k.contiguous()?, &cos, &sin)?;
-74        Ok((q_embed, k_embed))
-75    }
-76}
-77
-78#[derive(Debug, Clone)]
-79#[allow(clippy::upper_case_acronyms)]
-80struct MLP {
-81    gate_proj: Linear,
-82    up_proj: Linear,
-83    down_proj: Linear,
-84    act_fn: Activation,
-85}
-86
-87impl MLP {
-88    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-89        let hidden_sz = cfg.hidden_size;
-90        let intermediate_sz = cfg.intermediate_size;
-91        let gate_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("gate_proj"))?;
-92        let up_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("up_proj"))?;
-93        let down_proj = linear_no_bias(intermediate_sz, hidden_sz, vb.pp("down_proj"))?;
-94        Ok(Self {
-95            gate_proj,
-96            up_proj,
-97            down_proj,
-98            act_fn: cfg.hidden_act,
-99        })
-100    }
-101}
-102
-103impl Module for MLP {
-104    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-105        let lhs = xs.apply(&self.gate_proj)?.apply(&self.act_fn)?;
-106        let rhs = xs.apply(&self.up_proj)?;
-107        (lhs * rhs)?.apply(&self.down_proj)
-108    }
-109}
-110
-111#[derive(Debug, Clone)]
-112struct Attention {
-113    q_proj: Linear,
-114    k_proj: Linear,
-115    v_proj: Linear,
-116    o_proj: Linear,
-117    num_heads: usize,
-118    num_kv_heads: usize,
-119    num_kv_groups: usize,
-120    head_dim: usize,
-121    hidden_size: usize,
-122    rotary_emb: Arc<RotaryEmbedding>,
-123    qkv_clip: Option<f64>,
-124    kv_cache: Option<(Tensor, Tensor)>,
-125}
-126
-127impl Attention {
-128    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-129        let hidden_sz = cfg.hidden_size;
-130        let num_heads = cfg.num_attention_heads;
-131        let num_kv_heads = cfg.num_key_value_heads;
-132        let num_kv_groups = num_heads / num_kv_heads;
-133        let head_dim = hidden_sz / num_heads;
-134        let b = cfg.attention_bias;
-135        let qkv_clip = cfg.clip_qkv;
-136        let q_proj = linear_b(hidden_sz, num_heads * head_dim, b, vb.pp("q_proj"))?;
-137        let k_proj = linear_b(hidden_sz, num_kv_heads * head_dim, b, vb.pp("k_proj"))?;
-138        let v_proj = linear_b(hidden_sz, num_kv_heads * head_dim, b, vb.pp("v_proj"))?;
-139        let o_proj = linear_b(num_heads * head_dim, hidden_sz, b, vb.pp("o_proj"))?;
-140        Ok(Self {
-141            q_proj,
-142            k_proj,
-143            v_proj,
-144            o_proj,
-145            num_heads,
-146            num_kv_heads,
-147            num_kv_groups,
-148            head_dim,
-149            hidden_size: hidden_sz,
-150            rotary_emb,
-151            qkv_clip,
-152            kv_cache: None,
-153        })
-154    }
-155
-156    fn forward(
-157        &mut self,
-158        xs: &Tensor,
-159        attention_mask: Option<&Tensor>,
-160        seqlen_offset: usize,
-161    ) -> Result<Tensor> {
-162        let (b_sz, q_len, _) = xs.dims3()?;
-163
-164        let query_states = self.q_proj.forward(xs)?;
-165        let key_states = self.k_proj.forward(xs)?;
-166        let value_states = self.v_proj.forward(xs)?;
-167
-168        let (query_states, key_states, value_states) = match &self.qkv_clip {
-169            None => (query_states, key_states, value_states),
-170            Some(qkv_clip) => {
-171                let query_states = Tensor::clamp(&query_states, -qkv_clip, *qkv_clip)?;
-172                let key_states = Tensor::clamp(&key_states, -qkv_clip, *qkv_clip)?;
-173                let value_states = Tensor::clamp(&value_states, -qkv_clip, *qkv_clip)?;
-174                (query_states, key_states, value_states)
-175            }
-176        };
-177
-178        let query_states = query_states
-179            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-180            .transpose(1, 2)?;
-181        let key_states = key_states
-182            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-183            .transpose(1, 2)?;
-184        let value_states = value_states
-185            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-186            .transpose(1, 2)?;
-187
-188        let (query_states, key_states) =
-189            self.rotary_emb
-190                .apply_rotary_emb_qkv(&query_states, &key_states, seqlen_offset)?;
-191
-192        let (key_states, value_states) = match &self.kv_cache {
-193            None => (key_states, value_states),
-194            Some((prev_k, prev_v)) => {
-195                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-196                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-197                (key_states, value_states)
-198            }
-199        };
-200        self.kv_cache = Some((key_states.clone(), value_states.clone()));
-201
-202        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?.contiguous()?;
-203        let value_states =
-204            crate::utils::repeat_kv(value_states, self.num_kv_groups)?.contiguous()?;
-205
-206        let attn_output = {
-207            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-208            let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-209
-210            let attn_weights = match attention_mask {
-211                None => attn_weights,
-212                Some(mask) => attn_weights.broadcast_add(mask)?,
-213            };
-214            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-215            attn_weights.matmul(&value_states)?
-216        };
-217        attn_output
-218            .transpose(1, 2)?
-219            .reshape((b_sz, q_len, self.hidden_size))?
-220            .apply(&self.o_proj)
-221    }
-222
-223    fn clear_kv_cache(&mut self) {
-224        self.kv_cache = None
-225    }
-226}
-227
-228#[derive(Debug, Clone)]
-229struct DecoderLayer {
-230    self_attn: Attention,
-231    mlp: MLP,
-232    input_layernorm: LayerNorm,
-233    post_attention_layernorm: LayerNorm,
-234}
-235
-236impl DecoderLayer {
-237    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-238        let self_attn = Attention::new(rotary_emb, cfg, vb.pp("self_attn"))?;
-239        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-240        let ln_weight = Tensor::ones(cfg.hidden_size, vb.dtype(), vb.device())?;
-241        let input_layernorm = LayerNorm::new_no_bias(ln_weight.clone(), 1e-5);
-242        let post_attention_layernorm = LayerNorm::new_no_bias(ln_weight.clone(), 1e-5);
-243        Ok(Self {
-244            self_attn,
-245            mlp,
-246            input_layernorm,
-247            post_attention_layernorm,
-248        })
-249    }
-250
-251    fn forward(
-252        &mut self,
-253        xs: &Tensor,
-254        attention_mask: Option<&Tensor>,
-255        seqlen_offset: usize,
-256    ) -> Result<Tensor> {
-257        let residual = xs;
-258        let xs = self.input_layernorm.forward(xs)?;
-259        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-260        let xs = (xs + residual)?;
-261        let residual = &xs;
-262        let xs = xs.apply(&self.post_attention_layernorm)?.apply(&self.mlp)?;
-263        residual + xs
-264    }
-265
-266    fn clear_kv_cache(&mut self) {
-267        self.self_attn.clear_kv_cache()
-268    }
-269}
-270
-271#[derive(Debug, Clone)]
-272pub struct Model {
-273    embed_tokens: candle_nn::Embedding,
-274    layers: Vec<DecoderLayer>,
-275    norm: LayerNorm,
-276    lm_head: Linear,
-277    device: Device,
-278    dtype: DType,
-279}
-280
-281impl Model {
-282    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-283        let vb_m = vb.pp("model");
-284        let embed_tokens =
-285            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-286        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb_m.device())?);
-287        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-288        let vb_l = vb_m.pp("layers");
-289        for layer_idx in 0..cfg.num_hidden_layers {
-290            let layer = DecoderLayer::new(rotary_emb.clone(), cfg, vb_l.pp(layer_idx))?;
-291            layers.push(layer)
-292        }
-293        let ln_weight = Tensor::ones(cfg.hidden_size, vb.dtype(), vb.device())?;
-294        let norm = LayerNorm::new_no_bias(ln_weight, 1e-5);
-295        let lm_head = if cfg.tie_word_embeddings {
-296            Linear::new(embed_tokens.embeddings().clone(), None)
-297        } else {
-298            linear_no_bias(cfg.hidden_size, cfg.vocab_size, vb.pp("lm_head"))?
-299        };
-300        Ok(Self {
-301            embed_tokens,
-302            layers,
-303            norm,
-304            lm_head,
-305            device: vb.device().clone(),
-306            dtype: vb.dtype(),
-307        })
-308    }
-309
-310    fn prepare_decoder_attention_mask(
-311        &self,
-312        b_size: usize,
-313        tgt_len: usize,
-314        seqlen_offset: usize,
-315    ) -> Result<Tensor> {
-316        // Sliding window mask?
-317        let mask: Vec<_> = (0..tgt_len)
-318            .flat_map(|i| (0..tgt_len).map(move |j| if i < j { f32::NEG_INFINITY } else { 0. }))
-319            .collect();
-320        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-321        let mask = if seqlen_offset > 0 {
-322            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), self.dtype, &self.device)?;
-323            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-324        } else {
-325            mask
-326        };
-327        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-328            .to_dtype(self.dtype)
-329    }
-330
-331    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-332        let (b_size, seq_len) = input_ids.dims2()?;
-333        let attention_mask = if seq_len <= 1 {
-334            None
-335        } else {
-336            let mask = self.prepare_decoder_attention_mask(b_size, seq_len, seqlen_offset)?;
-337            Some(mask)
-338        };
-339        let mut xs = self.embed_tokens.forward(input_ids)?;
-340        for layer in self.layers.iter_mut() {
-341            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-342        }
-343        xs.narrow(1, seq_len - 1, 1)?
-344            .apply(&self.norm)?
-345            .apply(&self.lm_head)
-346    }
-347
-348    pub fn clear_kv_cache(&mut self) {
-349        for layer in self.layers.iter_mut() {
-350            layer.clear_kv_cache()
-351        }
-352    }
-353}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/openclip/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/openclip/mod.rs.html deleted file mode 100644 index aefcc23..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/openclip/mod.rs.html +++ /dev/null @@ -1,14 +0,0 @@ -mod.rs - source

candle_transformers/models/openclip/
mod.rs

1//! Open Contrastive Language-Image Pre-Training
-2//!
-3//! Open Contrastive Language-Image Pre-Training (OpenCLIP) is an architecture trained on
-4//! pairs of images with related texts.
-5//!
-6//! - 💻 [GH Link](https://github.com/mlfoundations/open_clip)
-7//! - 📝 [Paper](https://arxiv.org/abs/2212.07143)
-8//!
-9//! ## Overview
-10//!
-11//! ![](https://raw.githubusercontent.com/mlfoundations/open_clip/main/docs/CLIP.png)
-12
-13pub mod text_model;
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/openclip/text_model.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/openclip/text_model.rs.html deleted file mode 100644 index 4da0975..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/openclip/text_model.rs.html +++ /dev/null @@ -1,267 +0,0 @@ -text_model.rs - source

candle_transformers/models/openclip/
text_model.rs

1//! Text encoder as used in most OpenCLIP pretrained models
-2//! https://github.com/mlfoundations/open_clip
-3
-4use candle::{DType, IndexOp, Result, Tensor, D};
-5use candle_nn::{
-6    embedding, layer_norm, linear, ops::softmax_last_dim, Embedding, LayerNorm, Linear, Module,
-7    VarBuilder,
-8};
-9
-10#[derive(Debug, Clone)]
-11pub struct Config {
-12    pub vocab_size: usize,
-13    pub embed_dim: usize,
-14    pub intermediate_size: usize,
-15    pub max_position_embeddings: usize,
-16    pub pad_with: Option<String>,
-17    pub num_hidden_layers: usize,
-18    pub num_attention_heads: usize,
-19    pub projection_dim: usize,
-20}
-21
-22impl Config {
-23    pub fn vit_base_patch32() -> Self {
-24        Self {
-25            vocab_size: 49408,
-26            embed_dim: 512,
-27            intermediate_size: 2048,
-28            max_position_embeddings: 77,
-29            pad_with: None,
-30            num_hidden_layers: 12,
-31            num_attention_heads: 8,
-32            projection_dim: 512,
-33        }
-34    }
-35}
-36
-37#[derive(Clone, Debug)]
-38struct TextEmbeddings {
-39    token_embedding: Embedding,
-40    position_embedding: Tensor,
-41}
-42
-43impl TextEmbeddings {
-44    fn new(vs: VarBuilder, c: &Config) -> Result<Self> {
-45        let token_embedding = embedding(c.vocab_size, c.embed_dim, vs.pp("token_embedding"))?;
-46        let position_embedding = vs.get(
-47            (c.max_position_embeddings, c.embed_dim),
-48            "positional_embedding",
-49        )?;
-50        Ok(TextEmbeddings {
-51            token_embedding,
-52            position_embedding,
-53        })
-54    }
-55}
-56
-57impl Module for TextEmbeddings {
-58    fn forward(&self, input_ids: &Tensor) -> Result<Tensor> {
-59        let seq_length = input_ids.dim(D::Minus1)?;
-60        let inputs_embeds = self.token_embedding.forward(input_ids)?;
-61
-62        let position_embedding = self.position_embedding.narrow(0, 0, seq_length)?;
-63
-64        inputs_embeds.broadcast_add(&position_embedding)
-65    }
-66}
-67
-68#[derive(Clone, Debug)]
-69struct Attention {
-70    k_proj: candle_nn::Linear,
-71    v_proj: candle_nn::Linear,
-72    q_proj: candle_nn::Linear,
-73    out_proj: Linear,
-74    head_dim: usize,
-75    scale: f64,
-76    num_attention_heads: usize,
-77}
-78
-79impl Attention {
-80    fn new(vs: candle_nn::VarBuilder, c: &Config) -> Result<Self> {
-81        let embed_dim = c.embed_dim;
-82        let num_attention_heads = c.num_attention_heads;
-83
-84        let in_proj_weights = vs
-85            .get((embed_dim * 3, embed_dim), "in_proj_weight")?
-86            .chunk(3, 0)?;
-87        let (q_w, k_w, v_w) = (
-88            &in_proj_weights[0],
-89            &in_proj_weights[1],
-90            &in_proj_weights[2],
-91        );
-92        let in_proj_biases = vs.get(embed_dim * 3, "in_proj_bias")?.chunk(3, 0)?;
-93        let (q_b, k_b, v_b) = (&in_proj_biases[0], &in_proj_biases[1], &in_proj_biases[2]);
-94
-95        let q_proj = Linear::new(q_w.clone(), Some(q_b.clone()));
-96        let k_proj = Linear::new(k_w.clone(), Some(k_b.clone()));
-97        let v_proj = Linear::new(v_w.clone(), Some(v_b.clone()));
-98        let out_proj = candle_nn::linear(embed_dim, embed_dim, vs.pp("out_proj"))?;
-99        let head_dim = embed_dim / num_attention_heads;
-100        let scale = (head_dim as f64).powf(-0.5);
-101
-102        Ok(Attention {
-103            k_proj,
-104            v_proj,
-105            q_proj,
-106            out_proj,
-107            head_dim,
-108            scale,
-109            num_attention_heads,
-110        })
-111    }
-112
-113    fn shape_multihead(&self, xs: &Tensor, bsz: usize, seq_len: usize) -> Result<Tensor> {
-114        xs.reshape((bsz, seq_len, self.num_attention_heads, self.head_dim))?
-115            .transpose(1, 2)?
-116            .contiguous()?
-117            .to_dtype(DType::F32)
-118    }
-119
-120    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-121        let in_dtype = xs.dtype();
-122        let (bsz, seq_len, embed_dim) = xs.dims3()?;
-123
-124        let q = self.shape_multihead(&self.q_proj.forward(xs)?, bsz, seq_len)?;
-125        let k = self.shape_multihead(&self.k_proj.forward(xs)?, bsz, seq_len)?;
-126        let v = self.shape_multihead(&self.v_proj.forward(xs)?, bsz, seq_len)?;
-127        let q = (q * self.scale)?;
-128
-129        let attn_weights = q.matmul(&k.transpose(D::Minus1, D::Minus2)?)?;
-130
-131        let attn_weights = softmax_last_dim(&attn_weights)?;
-132
-133        let attn_output = attn_weights.matmul(&v)?.to_dtype(in_dtype)?;
-134        let attn_output = attn_output
-135            .transpose(1, 2)?
-136            .contiguous()?
-137            .reshape((bsz, seq_len, embed_dim))?;
-138        let out = self.out_proj.forward(&attn_output)?;
-139        Ok(out)
-140    }
-141}
-142
-143#[derive(Clone, Debug)]
-144struct Mlp {
-145    fc1: Linear,
-146    fc2: Linear,
-147}
-148
-149impl Mlp {
-150    fn new(vs: VarBuilder, c: &Config) -> Result<Self> {
-151        let fc1 = linear(c.embed_dim, c.intermediate_size, vs.pp("c_fc"))?;
-152        let fc2 = linear(c.intermediate_size, c.embed_dim, vs.pp("c_proj"))?;
-153
-154        Ok(Mlp { fc1, fc2 })
-155    }
-156}
-157
-158impl Mlp {
-159    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-160        let xs = self.fc1.forward(xs)?;
-161        self.fc2.forward(&xs.gelu_erf()?)
-162    }
-163}
-164
-165#[derive(Clone, Debug)]
-166struct EncoderLayer {
-167    self_attn: Attention,
-168    layer_norm1: LayerNorm,
-169    mlp: Mlp,
-170    layer_norm2: LayerNorm,
-171}
-172
-173impl EncoderLayer {
-174    fn new(vs: VarBuilder, c: &Config) -> Result<Self> {
-175        let self_attn = Attention::new(vs.pp("attn"), c)?;
-176        let layer_norm1 = layer_norm(c.embed_dim, 1e-5, vs.pp("ln_1"))?;
-177        let mlp = Mlp::new(vs.pp("mlp"), c)?;
-178        let layer_norm2 = layer_norm(c.embed_dim, 1e-5, vs.pp("ln_2"))?;
-179
-180        Ok(EncoderLayer {
-181            self_attn,
-182            layer_norm1,
-183            mlp,
-184            layer_norm2,
-185        })
-186    }
-187
-188    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-189        let residual = xs;
-190        let xs = self.layer_norm1.forward(xs)?;
-191        let xs = self.self_attn.forward(&xs)?;
-192        let xs = (xs + residual)?;
-193
-194        let residual = &xs;
-195        let xs = self.layer_norm2.forward(&xs)?;
-196        let xs = self.mlp.forward(&xs)?;
-197        let out = (xs + residual)?;
-198        Ok(out)
-199    }
-200}
-201
-202#[derive(Clone, Debug)]
-203pub struct Encoder {
-204    layers: Vec<EncoderLayer>,
-205}
-206
-207impl Encoder {
-208    pub fn new(vs: VarBuilder, c: &Config) -> Result<Self> {
-209        let vs = vs.pp("resblocks");
-210        let mut layers: Vec<EncoderLayer> = Vec::new();
-211        for index in 0..c.num_hidden_layers {
-212            let layer = EncoderLayer::new(vs.pp(index.to_string()), c)?;
-213            layers.push(layer)
-214        }
-215        Ok(Encoder { layers })
-216    }
-217
-218    pub fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-219        let mut xs = xs.clone();
-220        for layer in self.layers.iter() {
-221            xs = layer.forward(&xs)?;
-222        }
-223        Ok(xs)
-224    }
-225}
-226
-227/// A text transformer as used in CLIP variants.
-228#[derive(Clone, Debug)]
-229pub struct OpenClipTextTransformer {
-230    embeddings: TextEmbeddings,
-231    encoder: Encoder,
-232    final_layer_norm: LayerNorm,
-233}
-234
-235impl OpenClipTextTransformer {
-236    pub fn new(vs: VarBuilder, c: &Config) -> Result<Self> {
-237        let embeddings = TextEmbeddings::new(vs.clone(), c)?;
-238        let final_layer_norm = layer_norm(c.embed_dim, 1e-5, vs.pp("ln_final"))?;
-239        let encoder = Encoder::new(vs.pp("transformer"), c)?;
-240        Ok(OpenClipTextTransformer {
-241            embeddings,
-242            encoder,
-243            final_layer_norm,
-244        })
-245    }
-246
-247    pub fn forward(&self, input_ids: &Tensor) -> Result<Tensor> {
-248        let input_ids = self.embeddings.forward(input_ids)?;
-249        let input_ids = self.encoder.forward(&input_ids)?;
-250        self.final_layer_norm.forward(&input_ids)
-251    }
-252}
-253
-254impl Module for OpenClipTextTransformer {
-255    fn forward(&self, input_ids: &Tensor) -> Result<Tensor> {
-256        let output = self.forward(input_ids)?;
-257        let sequence_max_indices = input_ids.argmax(D::Minus1)?.to_dtype(DType::I64)?;
-258
-259        let mut indices = Vec::new();
-260        for (batch_idx, &seq_idx) in sequence_max_indices.to_vec1::<i64>()?.iter().enumerate() {
-261            let index = output.i((batch_idx, seq_idx as usize))?.unsqueeze(0)?;
-262            indices.push(index);
-263        }
-264        Tensor::cat(&indices, 0)
-265    }
-266}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/paligemma.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/paligemma.rs.html deleted file mode 100644 index 2b7bbed..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/paligemma.rs.html +++ /dev/null @@ -1,171 +0,0 @@ -paligemma.rs - source

candle_transformers/models/
paligemma.rs

1//! Multimodal multi-purpose model combining Gemma-based language model with SigLIP image understanding
-2//!
-3//! See PaLiGemma details at:
-4//! - [Paper](https://arxiv.org/abs/2402.05257)
-5//! - [Google Blog Post](https://blog.research.google/2024/02/paligemma-scaling-language-image.html)
-6//!
-7//! The model is a multimodal combination of:
-8//! - SigLIP vision encoder
-9//! - Gemma language model
-10//! - Cross-projection layers
-11//!
-12//! References:
-13//! - [HuggingFace Implementation](https://huggingface.co/google/paligemma-3b)
-14//! - [Paper: PaLI-3 and Beyond: Scaling Language-Image Learning](https://arxiv.org/abs/2402.05257)
-15//!
-16
-17use crate::models::{gemma, siglip};
-18use candle::{Module, Result, Tensor};
-19use candle_nn::{linear, Linear, VarBuilder};
-20
-21#[derive(serde::Deserialize, Clone, Debug)]
-22pub struct Config {
-23    pub vision_config: siglip::VisionConfig,
-24    pub text_config: gemma::Config,
-25    pub projection_dim: usize,
-26}
-27
-28impl Config {
-29    pub fn paligemma_3b_224() -> Self {
-30        // https://huggingface.co/google/paligemma-3b-pt-224/blob/main/config.json
-31        Self {
-32            vision_config: siglip::VisionConfig::paligemma_3b_224(),
-33            text_config: gemma::Config {
-34                hidden_size: 2048,
-35                intermediate_size: 16384,
-36                num_attention_heads: 8,
-37                num_hidden_layers: 18,
-38                num_key_value_heads: 1,
-39                vocab_size: 257216,
-40                // Default values.
-41                rope_theta: 10000.,
-42                head_dim: 256,
-43                hidden_act: Some(candle_nn::Activation::GeluPytorchTanh),
-44                hidden_activation: None,
-45                attention_bias: false,
-46                max_position_embeddings: 8192,
-47                rms_norm_eps: 1e-6,
-48            },
-49            projection_dim: 2048,
-50        }
-51    }
-52
-53    pub fn paligemma_3b_448() -> Self {
-54        Self {
-55            vision_config: siglip::VisionConfig::paligemma_3b_448(),
-56            text_config: gemma::Config {
-57                hidden_size: 2048,
-58                intermediate_size: 16384,
-59                num_attention_heads: 8,
-60                num_hidden_layers: 18,
-61                num_key_value_heads: 1,
-62                // Default values.
-63                rope_theta: 10000.,
-64                head_dim: 256,
-65                hidden_act: Some(candle_nn::Activation::GeluPytorchTanh),
-66                hidden_activation: None,
-67                attention_bias: false,
-68                max_position_embeddings: 8192,
-69                rms_norm_eps: 1e-6,
-70                vocab_size: 257216,
-71            },
-72            projection_dim: 2048,
-73        }
-74    }
-75}
-76
-77#[derive(Clone, Debug)]
-78pub struct MultiModalProjector {
-79    linear: Linear,
-80}
-81
-82impl MultiModalProjector {
-83    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-84        let linear = linear(
-85            cfg.vision_config.hidden_size,
-86            cfg.projection_dim,
-87            vb.pp("linear"),
-88        )?;
-89        Ok(Self { linear })
-90    }
-91}
-92
-93impl Module for MultiModalProjector {
-94    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-95        xs.apply(&self.linear)
-96    }
-97}
-98
-99#[derive(Clone, Debug)]
-100pub struct Model {
-101    pos: usize,
-102    vision_tower: siglip::VisionModel,
-103    multi_modal_projector: MultiModalProjector,
-104    language_model: gemma::Model,
-105}
-106
-107impl Model {
-108    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-109        let vision_tower = siglip::VisionModel::new(
-110            &cfg.vision_config,
-111            false,
-112            vb.pp("vision_tower.vision_model"),
-113        )?;
-114        let multi_modal_projector = MultiModalProjector::new(cfg, vb.pp("multi_modal_projector"))?;
-115        let language_model = gemma::Model::new(false, &cfg.text_config, vb.pp("language_model"))?;
-116        Ok(Self {
-117            pos: 0,
-118            language_model,
-119            vision_tower,
-120            multi_modal_projector,
-121        })
-122    }
-123
-124    pub fn setup(&mut self, pixel_values: &Tensor, input_ids: &Tensor) -> Result<Tensor> {
-125        self.clear_kv_cache();
-126        let image_features = self
-127            .vision_tower
-128            .forward(pixel_values)?
-129            .apply(&self.multi_modal_projector)?;
-130        let image_features = crate::models::clip::div_l2_norm(&image_features)?;
-131        let text_features = self.language_model.embed_tokens().forward(input_ids)?;
-132        let input_embeds = Tensor::cat(&[image_features, text_features], 1)?;
-133        self.pos = input_embeds.dim(1)?;
-134        self.language_model.forward_embeds(&input_embeds, None, 0)
-135    }
-136
-137    pub fn forward(&mut self, input_ids: &Tensor) -> Result<Tensor> {
-138        let pos = self.pos;
-139        let seq_len = input_ids.dim(1)?;
-140        self.pos = pos + seq_len;
-141        self.language_model.forward(input_ids, pos)
-142    }
-143
-144    pub fn forward_without_projection(&mut self, input_ids: &Tensor) -> Result<Tensor> {
-145        self.clear_kv_cache();
-146        let input_embeds = self.language_model.embed_tokens().forward(input_ids)?;
-147        self.language_model
-148            .forward_embeds_without_projection(&input_embeds, None, 0)
-149    }
-150    pub fn setup_without_projection(
-151        &mut self,
-152        pixel_values: &Tensor,
-153        input_ids: &Tensor,
-154    ) -> Result<Tensor> {
-155        self.clear_kv_cache();
-156        let image_features = self
-157            .vision_tower
-158            .forward(pixel_values)?
-159            .apply(&self.multi_modal_projector)?;
-160        let image_features = crate::models::clip::div_l2_norm(&image_features)?;
-161        let text_features = self.language_model.embed_tokens().forward(input_ids)?;
-162        let input_embeds = Tensor::cat(&[image_features, text_features], 1)?;
-163        self.language_model
-164            .forward_embeds_without_projection(&input_embeds, None, 0)
-165    }
-166    pub fn clear_kv_cache(&mut self) {
-167        self.pos = 0;
-168        self.language_model.clear_kv_cache()
-169    }
-170}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/parler_tts.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/parler_tts.rs.html deleted file mode 100644 index 15a9e45..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/parler_tts.rs.html +++ /dev/null @@ -1,474 +0,0 @@ -parler_tts.rs - source

candle_transformers/models/
parler_tts.rs

1//! Parler Model implementation for parler_tts text-to-speech synthesis
-2//!
-3//! Implements a transformer-based decoder architecture for generating audio tokens
-4//! from text using discrete tokens. The model converts text into audio segments
-5//! using multiple codebooks of quantized audio tokens.
-6//!
-7//! The model architecture includes:
-8//! - Multi-head attention layers for text and audio processing
-9//! - Feed-forward networks
-10//! - Layer normalization
-11//! - Positional embeddings
-12//! - Multiple codebook prediction heads
-13//!
-14//! The implementation follows the original parler_tts architecture while focusing
-15//! on audio token generation for text-to-speech synthesis.
-16//!
-17
-18use crate::generation::LogitsProcessor;
-19use crate::models::t5;
-20use candle::{IndexOp, Result, Tensor};
-21use candle_nn::{layer_norm, linear_b as linear, Activation, LayerNorm, Linear, VarBuilder};
-22
-23#[derive(serde::Deserialize, Debug, Clone)]
-24pub struct DecoderConfig {
-25    pub vocab_size: usize,
-26    pub max_position_embeddings: usize,
-27    pub num_hidden_layers: usize,
-28    pub ffn_dim: usize,
-29    pub num_attention_heads: usize,
-30    pub num_key_value_heads: Option<usize>,
-31    pub num_cross_attention_key_value_heads: Option<usize>,
-32    pub activation_function: Activation,
-33    pub hidden_size: usize,
-34    pub scale_embedding: bool,
-35    pub num_codebooks: usize,
-36    pub pad_token_id: usize,
-37    pub bos_token_id: usize,
-38    pub eos_token_id: usize,
-39    pub tie_word_embeddings: bool,
-40    pub rope_embeddings: bool,
-41    pub rope_theta: f64,
-42}
-43
-44#[derive(serde::Deserialize, Debug, Clone)]
-45pub struct Config {
-46    pub decoder_start_token_id: u32,
-47    pub pad_token_id: u32,
-48    pub decoder: DecoderConfig,
-49    pub text_encoder: t5::Config,
-50    pub vocab_size: usize,
-51    pub audio_encoder: crate::models::dac::Config,
-52}
-53
-54#[derive(Debug, Clone)]
-55pub struct Attention {
-56    k_proj: Linear,
-57    v_proj: Linear,
-58    q_proj: Linear,
-59    out_proj: Linear,
-60    is_causal: bool,
-61    kv_cache: Option<(Tensor, Tensor)>,
-62    scaling: f64,
-63    num_heads: usize,
-64    num_kv_heads: usize,
-65    num_kv_groups: usize,
-66    head_dim: usize,
-67}
-68
-69impl Attention {
-70    fn new(
-71        num_kv_heads: usize,
-72        is_causal: bool,
-73        cfg: &DecoderConfig,
-74        vb: VarBuilder,
-75    ) -> Result<Self> {
-76        if cfg.rope_embeddings {
-77            candle::bail!("rope embeddings are not supported");
-78        }
-79        let embed_dim = cfg.hidden_size;
-80        let head_dim = embed_dim / cfg.num_attention_heads;
-81        let kv_out_dim = num_kv_heads * head_dim;
-82        let k_proj = linear(embed_dim, kv_out_dim, false, vb.pp("k_proj"))?;
-83        let v_proj = linear(embed_dim, kv_out_dim, false, vb.pp("v_proj"))?;
-84        let q_proj = linear(embed_dim, embed_dim, false, vb.pp("q_proj"))?;
-85        let out_proj = linear(embed_dim, embed_dim, false, vb.pp("out_proj"))?;
-86        Ok(Self {
-87            k_proj,
-88            v_proj,
-89            q_proj,
-90            out_proj,
-91            is_causal,
-92            kv_cache: None,
-93            scaling: (head_dim as f64).powf(-0.5),
-94            num_heads: cfg.num_attention_heads,
-95            num_kv_heads,
-96            num_kv_groups: cfg.num_attention_heads / num_kv_heads,
-97            head_dim,
-98        })
-99    }
-100
-101    fn forward(
-102        &mut self,
-103        xs: &Tensor,
-104        key_value_states: Option<&Tensor>,
-105        attention_mask: Option<&Tensor>,
-106    ) -> Result<Tensor> {
-107        let (b_sz, tgt_len, _) = xs.dims3()?;
-108        let query_states = (xs.apply(&self.q_proj)? * self.scaling)?
-109            .reshape((b_sz, tgt_len, self.num_heads, self.head_dim))?
-110            .transpose(1, 2)?
-111            .contiguous()?;
-112        let key_states = match key_value_states {
-113            Some(states) => states.apply(&self.k_proj)?,
-114            None => xs.apply(&self.k_proj)?,
-115        };
-116        let key_states = key_states
-117            .reshape((b_sz, (), self.num_kv_heads, self.head_dim))?
-118            .transpose(1, 2)?
-119            .contiguous()?;
-120        let value_states = match key_value_states {
-121            Some(states) => states.apply(&self.v_proj)?,
-122            None => xs.apply(&self.v_proj)?,
-123        };
-124        let value_states = value_states
-125            .reshape((b_sz, (), self.num_kv_heads, self.head_dim))?
-126            .transpose(1, 2)?
-127            .contiguous()?;
-128
-129        let (key_states, value_states) = match &self.kv_cache {
-130            None => (key_states, value_states),
-131            Some((prev_k, prev_v)) => {
-132                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-133                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-134                (key_states, value_states)
-135            }
-136        };
-137        if self.is_causal {
-138            self.kv_cache = Some((key_states.clone(), value_states.clone()));
-139        }
-140
-141        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?.contiguous()?;
-142        let value_states =
-143            crate::utils::repeat_kv(value_states, self.num_kv_groups)?.contiguous()?;
-144
-145        let attn_weights = query_states.matmul(&key_states.transpose(2, 3)?)?;
-146        let attn_weights = match attention_mask {
-147            None => attn_weights,
-148            Some(mask) => attn_weights.broadcast_add(mask)?,
-149        };
-150        let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-151        let attn_output = attn_weights.matmul(&value_states)?;
-152        attn_output
-153            .transpose(1, 2)?
-154            .reshape((b_sz, tgt_len, ()))?
-155            .apply(&self.out_proj)
-156    }
-157
-158    fn clear_kv_cache(&mut self) {
-159        self.kv_cache = None
-160    }
-161}
-162
-163#[derive(Debug, Clone)]
-164pub struct DecoderLayer {
-165    self_attn: Attention,
-166    self_attn_layer_norm: LayerNorm,
-167    encoder_attn: Attention,
-168    encoder_attn_layer_norm: LayerNorm,
-169    fc1: Linear,
-170    fc2: Linear,
-171    final_layer_norm: LayerNorm,
-172    activation: Activation,
-173}
-174
-175impl DecoderLayer {
-176    fn new(cfg: &DecoderConfig, vb: VarBuilder) -> Result<Self> {
-177        let kv_heads = cfg.num_key_value_heads.unwrap_or(cfg.num_attention_heads);
-178        let kv_heads_cross = cfg.num_cross_attention_key_value_heads.unwrap_or(kv_heads);
-179
-180        let self_attn = Attention::new(kv_heads, true, cfg, vb.pp("self_attn"))?;
-181        let encoder_attn = Attention::new(kv_heads_cross, false, cfg, vb.pp("encoder_attn"))?;
-182        let self_attn_layer_norm =
-183            layer_norm(cfg.hidden_size, 1e-5, vb.pp("self_attn_layer_norm"))?;
-184        let encoder_attn_layer_norm =
-185            layer_norm(cfg.hidden_size, 1e-5, vb.pp("encoder_attn_layer_norm"))?;
-186        let fc1 = linear(cfg.hidden_size, cfg.ffn_dim, false, vb.pp("fc1"))?;
-187        let fc2 = linear(cfg.ffn_dim, cfg.hidden_size, false, vb.pp("fc2"))?;
-188        let final_layer_norm = layer_norm(cfg.hidden_size, 1e-5, vb.pp("final_layer_norm"))?;
-189        Ok(Self {
-190            self_attn,
-191            self_attn_layer_norm,
-192            encoder_attn,
-193            encoder_attn_layer_norm,
-194            fc1,
-195            fc2,
-196            final_layer_norm,
-197            activation: cfg.activation_function,
-198        })
-199    }
-200
-201    fn forward(
-202        &mut self,
-203        xs: &Tensor,
-204        attention_mask: Option<&Tensor>,
-205        encoder_xs: &Tensor,
-206        encoder_attention_mask: Option<&Tensor>,
-207    ) -> Result<Tensor> {
-208        // Self attention
-209        let residual = xs;
-210        let xs = xs.apply(&self.self_attn_layer_norm)?;
-211        let xs = self.self_attn.forward(&xs, None, attention_mask)?;
-212        let xs = (residual + xs)?;
-213
-214        // Cross attention
-215        let residual = &xs;
-216        let xs = xs.apply(&self.encoder_attn_layer_norm)?;
-217        let xs = self
-218            .encoder_attn
-219            .forward(&xs, Some(encoder_xs), encoder_attention_mask)?;
-220        let xs = (residual + xs)?;
-221
-222        // Fully connected
-223        let residual = &xs;
-224        let xs = xs
-225            .apply(&self.final_layer_norm)?
-226            .apply(&self.fc1)?
-227            .apply(&self.activation)?
-228            .apply(&self.fc2)?;
-229        residual + xs
-230    }
-231
-232    fn clear_kv_cache(&mut self) {
-233        self.self_attn.clear_kv_cache();
-234        self.encoder_attn.clear_kv_cache();
-235    }
-236}
-237
-238#[derive(Debug, Clone)]
-239pub struct Decoder {
-240    embed_tokens: Vec<candle_nn::Embedding>,
-241    embed_positions: Tensor,
-242    layers: Vec<DecoderLayer>,
-243    layer_norm: LayerNorm,
-244    num_codebooks: usize,
-245    hidden_size: usize,
-246    lm_heads: Vec<Linear>,
-247    dtype: candle::DType,
-248}
-249
-250impl Decoder {
-251    pub fn new(cfg: &DecoderConfig, vb: VarBuilder) -> Result<Self> {
-252        let vb_d = vb.pp("model.decoder");
-253        let mut embed_tokens = Vec::with_capacity(cfg.num_codebooks);
-254        let vb_e = vb_d.pp("embed_tokens");
-255        for embed_idx in 0..cfg.num_codebooks {
-256            let e = candle_nn::embedding(cfg.vocab_size + 1, cfg.hidden_size, vb_e.pp(embed_idx))?;
-257            embed_tokens.push(e)
-258        }
-259        let embed_positions = vb_d.get(
-260            (cfg.max_position_embeddings, cfg.hidden_size),
-261            "embed_positions.weights",
-262        )?;
-263        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-264        let vb_l = vb_d.pp("layers");
-265        for layer_idx in 0..cfg.num_hidden_layers {
-266            let layer = DecoderLayer::new(cfg, vb_l.pp(layer_idx))?;
-267            layers.push(layer)
-268        }
-269        let layer_norm = layer_norm(cfg.hidden_size, 1e-5, vb_d.pp("layer_norm"))?;
-270
-271        let mut lm_heads = Vec::with_capacity(cfg.num_codebooks);
-272        let vb_l = vb.pp("lm_heads");
-273        for lm_idx in 0..cfg.num_codebooks {
-274            let lm_head = linear(cfg.hidden_size, cfg.vocab_size, false, vb_l.pp(lm_idx))?;
-275            lm_heads.push(lm_head)
-276        }
-277        Ok(Self {
-278            embed_tokens,
-279            embed_positions,
-280            layers,
-281            layer_norm,
-282            num_codebooks: cfg.num_codebooks,
-283            lm_heads,
-284            hidden_size: cfg.hidden_size,
-285            dtype: vb.dtype(),
-286        })
-287    }
-288
-289    pub fn forward(
-290        &mut self,
-291        input_ids: &Tensor,
-292        prompt_hidden_states: Option<&Tensor>,
-293        attention_mask: Option<&Tensor>,
-294        encoder_xs: &Tensor,
-295        encoder_attention_mask: Option<&Tensor>,
-296        seqlen_offset: usize,
-297    ) -> Result<Vec<Tensor>> {
-298        let (b_sz, num_codebooks, seq_len) = input_ids.dims3()?;
-299        if num_codebooks != self.num_codebooks {
-300            candle::bail!("unexpected num codebooks in input {:?}", input_ids.shape())
-301        }
-302        let mut inputs_embeds = Tensor::zeros(
-303            (b_sz, seq_len, self.hidden_size),
-304            self.dtype,
-305            input_ids.device(),
-306        )?;
-307        for (idx, embs) in self.embed_tokens.iter().enumerate() {
-308            let e = input_ids.i((.., idx))?.apply(embs)?;
-309            inputs_embeds = (inputs_embeds + e)?
-310        }
-311        let inputs_embeds = match prompt_hidden_states {
-312            None => inputs_embeds,
-313            Some(pis) => Tensor::cat(&[pis, &inputs_embeds], 1)?,
-314        };
-315        let embed_positions = self
-316            .embed_positions
-317            .i(seqlen_offset..seqlen_offset + inputs_embeds.dim(1)?)?;
-318        let mut xs = (inputs_embeds + embed_positions.unsqueeze(0))?;
-319        for layer in self.layers.iter_mut() {
-320            xs = layer.forward(&xs, attention_mask, encoder_xs, encoder_attention_mask)?;
-321        }
-322        let xs = xs.apply(&self.layer_norm)?;
-323        let mut lm_logits = Vec::with_capacity(self.num_codebooks);
-324        for lm_head in self.lm_heads.iter() {
-325            let logits = xs.apply(lm_head)?;
-326            lm_logits.push(logits)
-327        }
-328        Ok(lm_logits)
-329    }
-330
-331    pub fn clear_kv_cache(&mut self) {
-332        for layer in self.layers.iter_mut() {
-333            layer.clear_kv_cache()
-334        }
-335    }
-336}
-337
-338#[derive(Debug, Clone)]
-339pub struct Model {
-340    pub embed_prompts: candle_nn::Embedding,
-341    pub enc_to_dec_proj: Option<Linear>,
-342    pub decoder: Decoder,
-343    pub text_encoder: t5::T5EncoderModel,
-344    pub decoder_start_token_id: u32,
-345    pub pad_token_id: u32,
-346    pub audio_encoder: crate::models::dac::Model,
-347}
-348
-349impl Model {
-350    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-351        let text_encoder = t5::T5EncoderModel::load(vb.pp("text_encoder"), &cfg.text_encoder)?;
-352        let decoder = Decoder::new(&cfg.decoder, vb.pp("decoder"))?;
-353        let embed_prompts = candle_nn::embedding(
-354            cfg.vocab_size,
-355            cfg.decoder.hidden_size,
-356            vb.pp("embed_prompts"),
-357        )?;
-358        let enc_to_dec_proj = if cfg.text_encoder.d_model != cfg.decoder.hidden_size {
-359            let proj = linear(
-360                cfg.text_encoder.d_model,
-361                cfg.decoder.hidden_size,
-362                true,
-363                vb.pp("enc_to_dec_proj"),
-364            )?;
-365            Some(proj)
-366        } else {
-367            None
-368        };
-369        let audio_encoder =
-370            crate::models::dac::Model::new(&cfg.audio_encoder, vb.pp("audio_encoder"))?;
-371        Ok(Self {
-372            decoder,
-373            text_encoder,
-374            embed_prompts,
-375            enc_to_dec_proj,
-376            decoder_start_token_id: cfg.decoder_start_token_id,
-377            pad_token_id: cfg.pad_token_id,
-378            audio_encoder,
-379        })
-380    }
-381
-382    /// Note that the returned tensor uses the CPU device.
-383    pub fn generate(
-384        &mut self,
-385        prompt_tokens: &Tensor,
-386        description_tokens: &Tensor,
-387        mut lp: LogitsProcessor,
-388        max_steps: usize,
-389    ) -> Result<Tensor> {
-390        self.decoder.clear_kv_cache();
-391        self.text_encoder.clear_kv_cache();
-392        let encoded = self.text_encoder.forward(description_tokens)?;
-393        let encoded = match self.enc_to_dec_proj.as_ref() {
-394            None => encoded,
-395            Some(proj) => encoded.apply(proj)?,
-396        };
-397        let prompt_hidden_states = prompt_tokens.apply(&self.embed_prompts)?;
-398        let num_codebooks = self.decoder.num_codebooks;
-399        let mut audio_tokens = vec![self.decoder_start_token_id; num_codebooks];
-400        let mut all_audio_tokens = vec![vec![]; num_codebooks];
-401        let prompt_len = prompt_hidden_states.dim(1)?;
-402        for step in 0..max_steps {
-403            let input_ids = Tensor::from_slice(
-404                audio_tokens.as_slice(),
-405                (1, num_codebooks, 1),
-406                prompt_tokens.device(),
-407            )?;
-408            let (prompt_hidden_states, pos) = if step == 0 {
-409                (Some(&prompt_hidden_states), 0)
-410            } else {
-411                (None, step + prompt_len)
-412            };
-413            let causal_mask = if pos == 0 {
-414                self.prepare_causal_mask(prompt_len + 1, prompt_len + 1, input_ids.device())?
-415            } else {
-416                self.prepare_causal_mask(1, pos + 1, input_ids.device())?
-417            };
-418            let logits = self.decoder.forward(
-419                &input_ids,
-420                prompt_hidden_states,
-421                Some(&causal_mask),
-422                &encoded,
-423                None,
-424                pos,
-425            )?;
-426            for (logit_idx, logit) in logits.iter().enumerate() {
-427                if logit_idx > step {
-428                    break;
-429                }
-430                if audio_tokens[logit_idx] != self.pad_token_id {
-431                    let logit = logit.i((0, logit.dim(1)? - 1))?;
-432                    let token = lp.sample(&logit)?;
-433                    audio_tokens[logit_idx] = token
-434                }
-435            }
-436            if audio_tokens.iter().all(|v| v == &self.pad_token_id) {
-437                break;
-438            }
-439            for (cb_idx, &token) in audio_tokens.iter().enumerate() {
-440                if token != self.decoder_start_token_id && token != self.pad_token_id {
-441                    all_audio_tokens[cb_idx].push(token)
-442                }
-443            }
-444        }
-445
-446        let min_len = all_audio_tokens.iter().map(|v| v.len()).min().unwrap_or(0);
-447        all_audio_tokens.iter_mut().for_each(|v| {
-448            v.resize(min_len, 0);
-449        });
-450        let all_audio_tokens = Tensor::new(all_audio_tokens, &candle::Device::Cpu)?;
-451        Ok(all_audio_tokens)
-452    }
-453
-454    fn prepare_causal_mask(
-455        &self,
-456        q_len: usize,
-457        kv_len: usize,
-458        device: &candle::Device,
-459    ) -> Result<Tensor> {
-460        let mask: Vec<_> = (0..q_len)
-461            .flat_map(|i| {
-462                (0..kv_len).map(move |j| {
-463                    if i + kv_len < j + q_len {
-464                        f32::NEG_INFINITY
-465                    } else {
-466                        0.
-467                    }
-468                })
-469            })
-470            .collect();
-471        Tensor::from_slice(&mask, (q_len, kv_len), device)
-472    }
-473}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/persimmon.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/persimmon.rs.html deleted file mode 100644 index d466492..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/persimmon.rs.html +++ /dev/null @@ -1,71 +0,0 @@ -persimmon.rs - source

candle_transformers/models/
persimmon.rs

1//! Persimmon Model
-2//!
-3//! A transformer language model for efficient inference and general-purpose tasks. The model uses a standard transformer architecture with:
-4//! - Layer normalization for Q/K attention
-5//! - RoPE embeddings with partial rotary factor
-6//! - ReLU activation
-7//! - Separate number of attention heads and KV heads
-8//!
-9//! References:
-10//! - 💻 [Hugging Face Implementation](https://github.com/huggingface/transformers/blob/main/src/transformers/models/persimmon/modeling_persimmon.py)
-11//! - 💻 [Persimmon Config](https://github.com/huggingface/transformers/blob/main/src/transformers/models/persimmon/configuration_persimmon.py)
-12//! - 🤗 [Hugging Face](https://huggingface.co/adept/persimmon-8b-base)
-13//!
-14
-15use candle::DType;
-16use serde::Deserialize;
-17
-18pub const DTYPE: DType = DType::F32;
-19
-20#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)]
-21#[serde(rename_all = "lowercase")]
-22pub enum PositionEmbeddingType {
-23    Absolute,
-24    Alibi,
-25}
-26
-27// https://github.com/huggingface/transformers/blob/main/src/transformers/models/persimmon/configuration_persimmon.py
-28#[derive(Debug, Clone, PartialEq, Deserialize)]
-29pub struct Config {
-30    pub vocab_size: usize,
-31    pub hidden_size: usize,
-32    pub intermediate_size: usize,
-33    pub num_hidden_layers: usize,
-34    pub num_attention_heads: usize,
-35    pub num_key_value_heads: usize,
-36    pub hidden_act: candle_nn::Activation,
-37    pub max_position_embeddings: usize,
-38    pub initializer_range: f64,
-39    pub layer_norm_eps: f64,
-40    pub rms_norm_eps: f64,
-41    pub use_cache: bool,
-42    pub tie_word_embeddings: bool,
-43    pub rope_theta: f64,
-44    pub qk_layernorm: bool,
-45    pub partial_rotary_factor: f64,
-46}
-47
-48impl Config {
-49    pub fn base_8b() -> Self {
-50        // https://huggingface.co/adept/persimmon-8b-base/blob/main/config.json
-51        Self {
-52            hidden_act: candle_nn::Activation::Relu,
-53            hidden_size: 4096,
-54            initializer_range: 0.02,
-55            intermediate_size: 16384,
-56            layer_norm_eps: 1e-05,
-57            max_position_embeddings: 16384,
-58            num_attention_heads: 64,
-59            num_hidden_layers: 36,
-60            num_key_value_heads: 64,
-61            qk_layernorm: true,
-62            rms_norm_eps: 1e-06,
-63            rope_theta: 25000.0,
-64            tie_word_embeddings: false,
-65            use_cache: true,
-66            vocab_size: 262144,
-67            partial_rotary_factor: 0.5,
-68        }
-69    }
-70}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/phi.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/phi.rs.html deleted file mode 100644 index 53505a0..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/phi.rs.html +++ /dev/null @@ -1,366 +0,0 @@ -phi.rs - source

candle_transformers/models/
phi.rs

1//! Microsoft Phi model implementation
-2//!
-3//! The Phi series are decoder-only transformers designed for code and language tasks.
-4//!
-5//! Key characteristics:
-6//! - Decoder-only transformer architecture
-7//! - RoPE embeddings
-8//! - Layer normalization
-9//! - QK normalization
-10//!
-11//! - ⚡ [Interactive Wasm Example](https://huggingface.co/spaces/radames/Candle-phi1-phi2-wasm-demo)
-12//! - 🤗 [HF Link](https://huggingface.co/microsoft/phi-2)
-13//!
-14
-15use crate::models::with_tracing::{layer_norm, linear, Embedding, LayerNorm, Linear};
-16/// Phi model.
-17/// https://huggingface.co/microsoft/phi-2
-18/// There is an alternative implementation of the phi model in mixformers.rs.
-19/// This corresponds to the model update made with the following commit:
-20/// https://huggingface.co/microsoft/phi-2/commit/cb2f4533604d8b67de604e7df03bfe6f3ca22869
-21use candle::{DType, Device, IndexOp, Module, Result, Tensor, D};
-22use candle_nn::{Activation, VarBuilder};
-23use serde::Deserialize;
-24
-25// https://huggingface.co/microsoft/phi-2/blob/main/configuration_phi.py
-26#[derive(Debug, Clone, PartialEq, Deserialize)]
-27pub struct Config {
-28    pub(crate) vocab_size: usize,
-29    pub(crate) hidden_size: usize,
-30    pub(crate) intermediate_size: usize,
-31    pub(crate) num_hidden_layers: usize,
-32    pub(crate) num_attention_heads: usize,
-33    pub(crate) num_key_value_heads: Option<usize>,
-34    pub(crate) hidden_act: Activation,
-35    pub(crate) max_position_embeddings: usize,
-36    pub(crate) layer_norm_eps: f64,
-37    pub(crate) tie_word_embeddings: bool,
-38    pub(crate) rope_theta: f32,
-39    pub(crate) partial_rotary_factor: f64,
-40    pub(crate) qk_layernorm: bool,
-41}
-42
-43impl Config {
-44    fn num_key_value_heads(&self) -> usize {
-45        self.num_key_value_heads.unwrap_or(self.num_attention_heads)
-46    }
-47
-48    fn head_dim(&self) -> usize {
-49        self.hidden_size / self.num_attention_heads
-50    }
-51}
-52
-53#[derive(Debug, Clone)]
-54struct RotaryEmbedding {
-55    dim: usize,
-56    sin: Tensor,
-57    cos: Tensor,
-58}
-59
-60impl RotaryEmbedding {
-61    fn new(cfg: &Config, dev: &Device) -> Result<Self> {
-62        let dim = (cfg.partial_rotary_factor * cfg.head_dim() as f64) as usize;
-63        let inv_freq: Vec<_> = (0..dim)
-64            .step_by(2)
-65            .map(|i| 1f32 / cfg.rope_theta.powf(i as f32 / dim as f32))
-66            .collect();
-67        let inv_freq_len = inv_freq.len();
-68        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?;
-69        let t = Tensor::arange(0u32, cfg.max_position_embeddings as u32, dev)?
-70            .to_dtype(DType::F32)?
-71            .reshape((cfg.max_position_embeddings, 1))?;
-72        let freqs = t.matmul(&inv_freq)?;
-73        Ok(Self {
-74            dim,
-75            sin: freqs.sin()?,
-76            cos: freqs.cos()?,
-77        })
-78    }
-79
-80    fn apply_rotary_emb(&self, xs: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-81        let (_b_size, _num_heads, seq_len, _headdim) = xs.dims4()?;
-82        let xs_rot = xs.i((.., .., .., ..self.dim))?.contiguous()?;
-83        let xs_pass = xs.i((.., .., .., self.dim..))?;
-84        let c = self.cos.narrow(0, seqlen_offset, seq_len)?;
-85        let s = self.sin.narrow(0, seqlen_offset, seq_len)?;
-86        let xs_rot = candle_nn::rotary_emb::rope(&xs_rot, &c, &s)?;
-87        Tensor::cat(&[&xs_rot, &xs_pass], D::Minus1)
-88    }
-89}
-90
-91#[derive(Debug, Clone)]
-92#[allow(clippy::upper_case_acronyms)]
-93struct MLP {
-94    fc1: Linear,
-95    fc2: Linear,
-96    act: Activation,
-97}
-98
-99impl MLP {
-100    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-101        let fc1 = linear(cfg.hidden_size, cfg.intermediate_size, vb.pp("fc1"))?;
-102        let fc2 = linear(cfg.intermediate_size, cfg.hidden_size, vb.pp("fc2"))?;
-103        Ok(Self {
-104            fc1,
-105            fc2,
-106            // This does not match the mixformers implementation where Gelu is used rather than
-107            // GeluNew.
-108            act: cfg.hidden_act,
-109        })
-110    }
-111}
-112
-113impl Module for MLP {
-114    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-115        xs.apply(&self.fc1)?.apply(&self.act)?.apply(&self.fc2)
-116    }
-117}
-118
-119#[derive(Clone)]
-120struct Attention {
-121    q_proj: Linear,
-122    k_proj: Linear,
-123    v_proj: Linear,
-124    dense: Linear,
-125    kv_cache: Option<(Tensor, Tensor)>,
-126    q_layernorm: Option<LayerNorm>,
-127    k_layernorm: Option<LayerNorm>,
-128    rotary_emb: RotaryEmbedding,
-129    softmax_scale: f64,
-130    num_heads: usize,
-131    num_kv_heads: usize,
-132    head_dim: usize,
-133    span: tracing::Span,
-134}
-135
-136fn get_mask(size: usize, device: &Device) -> Result<Tensor> {
-137    let mask: Vec<_> = (0..size)
-138        .flat_map(|i| (0..size).map(move |j| u8::from(j > i)))
-139        .collect();
-140    Tensor::from_slice(&mask, (size, size), device)
-141}
-142
-143fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: f32) -> Result<Tensor> {
-144    let shape = mask.shape();
-145    let on_true = Tensor::new(on_true, on_false.device())?.broadcast_as(shape.dims())?;
-146    let m = mask.where_cond(&on_true, on_false)?;
-147    Ok(m)
-148}
-149
-150impl Attention {
-151    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-152        let num_heads = cfg.num_attention_heads;
-153        let num_kv_heads = cfg.num_key_value_heads();
-154        let head_dim = cfg.head_dim();
-155        let q_proj = linear(cfg.hidden_size, num_heads * head_dim, vb.pp("q_proj"))?;
-156        let k_proj = linear(cfg.hidden_size, num_kv_heads * head_dim, vb.pp("k_proj"))?;
-157        let v_proj = linear(cfg.hidden_size, num_kv_heads * head_dim, vb.pp("v_proj"))?;
-158        let dense = linear(num_heads * head_dim, cfg.hidden_size, vb.pp("dense"))?;
-159        // Alternative rope scalings are not supported.
-160        let rotary_emb = RotaryEmbedding::new(cfg, vb.device())?;
-161        let (q_layernorm, k_layernorm) = if cfg.qk_layernorm {
-162            let q_layernorm = layer_norm(head_dim, cfg.layer_norm_eps, vb.pp("q_layernorm"))?;
-163            let k_layernorm = layer_norm(head_dim, cfg.layer_norm_eps, vb.pp("k_layernorm"))?;
-164            (Some(q_layernorm), Some(k_layernorm))
-165        } else {
-166            (None, None)
-167        };
-168        let softmax_scale = 1f64 / (head_dim as f64).sqrt();
-169        Ok(Self {
-170            q_proj,
-171            k_proj,
-172            v_proj,
-173            dense,
-174            kv_cache: None,
-175            q_layernorm,
-176            k_layernorm,
-177            rotary_emb,
-178            softmax_scale,
-179            num_heads,
-180            num_kv_heads,
-181            head_dim,
-182            span: tracing::span!(tracing::Level::TRACE, "attention"),
-183        })
-184    }
-185
-186    fn repeat_kv(&self, xs: Tensor) -> Result<Tensor> {
-187        crate::utils::repeat_kv(xs, self.num_heads / self.num_kv_heads)
-188    }
-189
-190    fn forward(&mut self, xs: &Tensor, mask: Option<&Tensor>) -> Result<Tensor> {
-191        let _enter = self.span.enter();
-192        let (b_size, seq_len, _n_embd) = xs.dims3()?;
-193        let query_states = self.q_proj.forward(xs)?;
-194        let key_states = self.k_proj.forward(xs)?;
-195        let value_states = self.v_proj.forward(xs)?;
-196
-197        let query_states = match &self.q_layernorm {
-198            None => query_states,
-199            Some(ln) => query_states.apply(ln)?,
-200        };
-201        let key_states = match &self.k_layernorm {
-202            None => key_states,
-203            Some(ln) => key_states.apply(ln)?,
-204        };
-205
-206        let query_states = query_states
-207            .reshape((b_size, seq_len, self.num_heads, self.head_dim))?
-208            .transpose(1, 2)?;
-209        let key_states = key_states
-210            .reshape((b_size, seq_len, self.num_kv_heads, self.head_dim))?
-211            .transpose(1, 2)?;
-212        let value_states = value_states
-213            .reshape((b_size, seq_len, self.num_kv_heads, self.head_dim))?
-214            .transpose(1, 2)?;
-215
-216        // Rotary embeddings.
-217        let seqlen_offset = match &self.kv_cache {
-218            None => 0,
-219            Some((prev_k, _)) => prev_k.dim(2)?,
-220        };
-221        let query_states = self
-222            .rotary_emb
-223            .apply_rotary_emb(&query_states, seqlen_offset)?;
-224        let key_states = self
-225            .rotary_emb
-226            .apply_rotary_emb(&key_states, seqlen_offset)?;
-227
-228        // KV cache.
-229        let (key_states, value_states) = match &self.kv_cache {
-230            None => (key_states, value_states),
-231            Some((prev_k, prev_v)) => {
-232                let k = Tensor::cat(&[prev_k, &key_states], 2)?;
-233                let v = Tensor::cat(&[prev_v, &value_states], 2)?;
-234                (k, v)
-235            }
-236        };
-237        self.kv_cache = Some((key_states.clone(), value_states.clone()));
-238
-239        // Repeat kv.
-240        let key_states = self.repeat_kv(key_states)?.contiguous()?;
-241        let value_states = self.repeat_kv(value_states)?.contiguous()?;
-242
-243        let attn_weights = (query_states
-244            .to_dtype(DType::F32)?
-245            .contiguous()?
-246            .matmul(&key_states.to_dtype(DType::F32)?.t()?)?
-247            * self.softmax_scale)?;
-248        let attn_weights = match mask {
-249            None => attn_weights,
-250            Some(mask) => masked_fill(
-251                &attn_weights,
-252                &mask.broadcast_left((b_size, self.num_heads))?,
-253                f32::NEG_INFINITY,
-254            )?,
-255        };
-256        let attn_weights =
-257            candle_nn::ops::softmax_last_dim(&attn_weights)?.to_dtype(value_states.dtype())?;
-258        let attn_output = attn_weights.matmul(&value_states)?;
-259        let attn_output = attn_output
-260            .transpose(1, 2)?
-261            .reshape((b_size, seq_len, ()))?;
-262        attn_output.apply(&self.dense)
-263    }
-264
-265    fn clear_kv_cache(&mut self) {
-266        self.kv_cache = None
-267    }
-268}
-269
-270#[derive(Clone)]
-271struct DecoderLayer {
-272    self_attn: Attention,
-273    mlp: MLP,
-274    input_layernorm: LayerNorm,
-275    span: tracing::Span,
-276}
-277
-278impl DecoderLayer {
-279    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-280        let self_attn = Attention::new(cfg, vb.pp("self_attn"))?;
-281        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-282        let input_layernorm = layer_norm(
-283            cfg.hidden_size,
-284            cfg.layer_norm_eps,
-285            vb.pp("input_layernorm"),
-286        )?;
-287        Ok(Self {
-288            self_attn,
-289            mlp,
-290            input_layernorm,
-291            span: tracing::span!(tracing::Level::TRACE, "block"),
-292        })
-293    }
-294
-295    fn forward(&mut self, xs: &Tensor, mask: Option<&Tensor>) -> Result<Tensor> {
-296        let _enter = self.span.enter();
-297        let residual = xs;
-298        let xs = xs.apply(&self.input_layernorm)?;
-299        let attn_outputs = self.self_attn.forward(&xs, mask)?;
-300        let feed_forward_hidden_states = self.mlp.forward(&xs)?;
-301        attn_outputs + feed_forward_hidden_states + residual
-302    }
-303
-304    fn clear_kv_cache(&mut self) {
-305        self.self_attn.clear_kv_cache()
-306    }
-307}
-308
-309#[derive(Clone)]
-310pub struct Model {
-311    embed_tokens: Embedding,
-312    layers: Vec<DecoderLayer>,
-313    final_layernorm: LayerNorm,
-314    lm_head: Linear,
-315    span: tracing::Span,
-316}
-317
-318impl Model {
-319    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-320        let vb_m = vb.pp("model");
-321        let embed_tokens =
-322            Embedding::new(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-323        let final_layernorm = layer_norm(
-324            cfg.hidden_size,
-325            cfg.layer_norm_eps,
-326            vb_m.pp("final_layernorm"),
-327        )?;
-328        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-329        let vb_m = vb_m.pp("layers");
-330        for layer_idx in 0..cfg.num_hidden_layers {
-331            let layer = DecoderLayer::new(cfg, vb_m.pp(layer_idx))?;
-332            layers.push(layer)
-333        }
-334        let lm_head = linear(cfg.hidden_size, cfg.vocab_size, vb.pp("lm_head"))?;
-335        Ok(Self {
-336            embed_tokens,
-337            layers,
-338            final_layernorm,
-339            lm_head,
-340            span: tracing::span!(tracing::Level::TRACE, "model"),
-341        })
-342    }
-343
-344    pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor> {
-345        let _enter = self.span.enter();
-346        let (_b_size, seq_len) = xs.dims2()?;
-347        let mut xs = xs.apply(&self.embed_tokens)?;
-348        let mask = if seq_len <= 1 {
-349            None
-350        } else {
-351            Some(get_mask(seq_len, xs.device())?)
-352        };
-353        for layer in self.layers.iter_mut() {
-354            xs = layer.forward(&xs, mask.as_ref())?;
-355        }
-356        xs.apply(&self.final_layernorm)?
-357            .narrow(1, seq_len - 1, 1)?
-358            .apply(&self.lm_head)?
-359            .squeeze(1)
-360    }
-361
-362    pub fn clear_kv_cache(&mut self) {
-363        self.layers.iter_mut().for_each(|b| b.clear_kv_cache())
-364    }
-365}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/phi3.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/phi3.rs.html deleted file mode 100644 index 97c8273..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/phi3.rs.html +++ /dev/null @@ -1,349 +0,0 @@ -phi3.rs - source

candle_transformers/models/
phi3.rs

1//! Microsoft Phi-3 model implementation
-2//!
-3//! See Phi model details at:
-4//! - [Phi-3 Model](https://huggingface.co/microsoft/phi-3)
-5//!
-6//! The Phi series are decoder-only transformers designed for code and language tasks.
-7//! Key characteristics:
-8//! - Decoder-only transformer architecture
-9//! - RoPE embeddings
-10//! - Layer normalization
-11//! - QK normalization
-12//! - Mixed activation functions
-13//! - Improved context window handling
-14//!
-15//! References:
-16//! - [Hugging Face Implementation](https://huggingface.co/microsoft/phi-3)
-17//! - [Alternative Implementation](https://huggingface.co/microsoft/phi-3/tree/main)
-18//!
-19
-20// This implementation is based on:
-21// https://huggingface.co/microsoft/Phi-3-mini-4k-instruct/blob/main/modeling_phi3.py
-22use crate::models::with_tracing::{linear_no_bias as linear, Linear, RmsNorm};
-23use candle::{DType, Device, Module, Result, Tensor, D};
-24use candle_nn::VarBuilder;
-25use std::sync::Arc;
-26
-27// https://huggingface.co/microsoft/Phi-3-mini-4k-instruct/blob/main/config.json
-28#[derive(Debug, Clone, serde::Deserialize)]
-29pub struct Config {
-30    pub vocab_size: usize,
-31    pub hidden_act: candle_nn::Activation,
-32    pub hidden_size: usize,
-33    pub intermediate_size: usize,
-34    pub num_hidden_layers: usize,
-35    pub num_attention_heads: usize,
-36    pub num_key_value_heads: usize,
-37    pub rms_norm_eps: f64,
-38    pub rope_theta: f64,
-39    pub bos_token_id: Option<u32>,
-40    pub eos_token_id: Option<u32>,
-41    pub rope_scaling: Option<String>,
-42    pub max_position_embeddings: usize,
-43}
-44
-45impl Config {
-46    pub fn head_dim(&self) -> usize {
-47        self.hidden_size / self.num_attention_heads
-48    }
-49}
-50
-51#[derive(Debug, Clone)]
-52pub struct RotaryEmbedding {
-53    sin: Tensor,
-54    cos: Tensor,
-55}
-56
-57impl RotaryEmbedding {
-58    pub fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-59        let dim = cfg.head_dim();
-60        let max_seq_len = cfg.max_position_embeddings;
-61        let inv_freq: Vec<_> = (0..dim)
-62            .step_by(2)
-63            .map(|i| 1f32 / cfg.rope_theta.powf(i as f64 / dim as f64) as f32)
-64            .collect();
-65        let inv_freq_len = inv_freq.len();
-66        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-67        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-68            .to_dtype(dtype)?
-69            .reshape((max_seq_len, 1))?;
-70        let freqs = t.matmul(&inv_freq)?;
-71        Ok(Self {
-72            sin: freqs.sin()?,
-73            cos: freqs.cos()?,
-74        })
-75    }
-76
-77    pub fn apply_rotary_emb_qkv(
-78        &self,
-79        q: &Tensor,
-80        k: &Tensor,
-81        seqlen_offset: usize,
-82    ) -> Result<(Tensor, Tensor)> {
-83        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-84        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-85        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-86        let q_embed = candle_nn::rotary_emb::rope(&q.contiguous()?, &cos, &sin)?;
-87        let k_embed = candle_nn::rotary_emb::rope(&k.contiguous()?, &cos, &sin)?;
-88        Ok((q_embed, k_embed))
-89    }
-90}
-91
-92#[derive(Debug, Clone)]
-93struct Attention {
-94    qkv_proj: Linear,
-95    o_proj: Linear,
-96    num_heads: usize,
-97    num_kv_heads: usize,
-98    num_kv_groups: usize,
-99    head_dim: usize,
-100    rotary_emb: Arc<RotaryEmbedding>,
-101    kv_cache: Option<(Tensor, Tensor)>,
-102}
-103
-104impl Attention {
-105    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-106        let num_heads = cfg.num_attention_heads;
-107        let num_kv_heads = cfg.num_key_value_heads;
-108        let head_dim = cfg.head_dim();
-109        let op_size = num_heads * head_dim + 2 * num_kv_heads * head_dim;
-110        let qkv_proj = linear(cfg.hidden_size, op_size, vb.pp("qkv_proj"))?;
-111        let o_proj = linear(num_heads * head_dim, cfg.hidden_size, vb.pp("o_proj"))?;
-112        Ok(Self {
-113            qkv_proj,
-114            o_proj,
-115            rotary_emb,
-116            kv_cache: None,
-117            num_heads,
-118            num_kv_heads,
-119            num_kv_groups: num_heads / num_kv_heads,
-120            head_dim,
-121        })
-122    }
-123
-124    fn forward(
-125        &mut self,
-126        xs: &Tensor,
-127        attention_mask: Option<&Tensor>,
-128        seqlen_offset: usize,
-129    ) -> Result<Tensor> {
-130        let (b_sz, q_len, _) = xs.dims3()?;
-131
-132        let qkv = self.qkv_proj.forward(xs)?;
-133        let query_pos = self.num_heads * self.head_dim;
-134        let query_states = qkv.narrow(D::Minus1, 0, query_pos)?;
-135        let key_states = qkv.narrow(D::Minus1, query_pos, self.num_kv_heads * self.head_dim)?;
-136        let value_states = qkv.narrow(
-137            D::Minus1,
-138            query_pos + self.num_kv_heads * self.head_dim,
-139            self.num_kv_heads * self.head_dim,
-140        )?;
-141
-142        let query_states = query_states
-143            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-144            .transpose(1, 2)?;
-145        let key_states = key_states
-146            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-147            .transpose(1, 2)?;
-148        let value_states = value_states
-149            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-150            .transpose(1, 2)?;
-151
-152        let (query_states, key_states) =
-153            self.rotary_emb
-154                .apply_rotary_emb_qkv(&query_states, &key_states, seqlen_offset)?;
-155
-156        let (key_states, value_states) = match &self.kv_cache {
-157            None => (key_states, value_states),
-158            Some((prev_k, prev_v)) => {
-159                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-160                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-161                (key_states, value_states)
-162            }
-163        };
-164        self.kv_cache = Some((key_states.clone(), value_states.clone()));
-165
-166        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?.contiguous()?;
-167        let value_states =
-168            crate::utils::repeat_kv(value_states, self.num_kv_groups)?.contiguous()?;
-169
-170        let attn_output = {
-171            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-172            let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-173
-174            let attn_weights = match attention_mask {
-175                None => attn_weights,
-176                Some(mask) => attn_weights.broadcast_add(mask)?,
-177            };
-178            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-179            attn_weights.matmul(&value_states)?
-180        };
-181        attn_output
-182            .transpose(1, 2)?
-183            .reshape((b_sz, q_len, ()))?
-184            .apply(&self.o_proj)
-185    }
-186
-187    fn clear_kv_cache(&mut self) {
-188        self.kv_cache = None
-189    }
-190}
-191
-192#[derive(Debug, Clone)]
-193struct Mlp {
-194    gate_up_proj: Linear,
-195    down_proj: Linear,
-196    act_fn: candle_nn::Activation,
-197    i_size: usize,
-198}
-199
-200impl Mlp {
-201    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-202        let hidden_size = cfg.hidden_size;
-203        let i_size = cfg.intermediate_size;
-204        let gate_up_proj = linear(hidden_size, 2 * i_size, vb.pp("gate_up_proj"))?;
-205        let down_proj = linear(i_size, hidden_size, vb.pp("down_proj"))?;
-206        Ok(Self {
-207            gate_up_proj,
-208            down_proj,
-209            act_fn: cfg.hidden_act,
-210            i_size,
-211        })
-212    }
-213}
-214
-215impl Module for Mlp {
-216    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-217        let up_states = xs.apply(&self.gate_up_proj)?;
-218        let gate = up_states.narrow(D::Minus1, 0, self.i_size)?;
-219        let up_states = up_states.narrow(D::Minus1, self.i_size, self.i_size)?;
-220        let up_states = (up_states * gate.apply(&self.act_fn))?;
-221        up_states.apply(&self.down_proj)
-222    }
-223}
-224
-225#[derive(Debug, Clone)]
-226struct DecoderLayer {
-227    self_attn: Attention,
-228    mlp: Mlp,
-229    input_layernorm: RmsNorm,
-230    post_attention_layernorm: RmsNorm,
-231}
-232
-233impl DecoderLayer {
-234    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-235        let self_attn = Attention::new(rotary_emb, cfg, vb.pp("self_attn"))?;
-236        let mlp = Mlp::new(cfg, vb.pp("mlp"))?;
-237        let input_layernorm =
-238            RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("input_layernorm"))?;
-239        let post_attention_layernorm = RmsNorm::new(
-240            cfg.hidden_size,
-241            cfg.rms_norm_eps,
-242            vb.pp("post_attention_layernorm"),
-243        )?;
-244        Ok(Self {
-245            self_attn,
-246            mlp,
-247            input_layernorm,
-248            post_attention_layernorm,
-249        })
-250    }
-251
-252    fn forward(
-253        &mut self,
-254        xs: &Tensor,
-255        attention_mask: Option<&Tensor>,
-256        seqlen_offset: usize,
-257    ) -> Result<Tensor> {
-258        let residual = xs;
-259        let xs = self.input_layernorm.forward(xs)?;
-260        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-261        let xs = (xs + residual)?;
-262        let residual = &xs;
-263        let xs = xs.apply(&self.post_attention_layernorm)?.apply(&self.mlp)?;
-264        residual + xs
-265    }
-266
-267    fn clear_kv_cache(&mut self) {
-268        self.self_attn.clear_kv_cache()
-269    }
-270}
-271
-272#[derive(Debug, Clone)]
-273pub struct Model {
-274    embed_tokens: candle_nn::Embedding,
-275    layers: Vec<DecoderLayer>,
-276    norm: RmsNorm,
-277    lm_head: Linear,
-278    device: Device,
-279    dtype: DType,
-280}
-281
-282impl Model {
-283    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-284        let vb_m = vb.pp("model");
-285        let embed_tokens =
-286            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-287        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb_m.device())?);
-288        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-289        let vb_l = vb_m.pp("layers");
-290        for layer_idx in 0..cfg.num_hidden_layers {
-291            let layer = DecoderLayer::new(rotary_emb.clone(), cfg, vb_l.pp(layer_idx))?;
-292            layers.push(layer)
-293        }
-294        let norm = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb_m.pp("norm"))?;
-295        let lm_head = linear(cfg.hidden_size, cfg.vocab_size, vb.pp("lm_head"))?;
-296        Ok(Self {
-297            embed_tokens,
-298            layers,
-299            norm,
-300            lm_head,
-301            device: vb.device().clone(),
-302            dtype: vb.dtype(),
-303        })
-304    }
-305
-306    fn prepare_decoder_attention_mask(
-307        &self,
-308        b_size: usize,
-309        tgt_len: usize,
-310        seqlen_offset: usize,
-311    ) -> Result<Tensor> {
-312        let mask: Vec<_> = (0..tgt_len)
-313            .flat_map(|i| (0..tgt_len).map(move |j| if i < j { f32::NEG_INFINITY } else { 0. }))
-314            .collect();
-315        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-316        let mask = if seqlen_offset > 0 {
-317            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-318            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-319        } else {
-320            mask
-321        };
-322        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-323            .to_dtype(self.dtype)
-324    }
-325
-326    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-327        let (b_size, seq_len) = input_ids.dims2()?;
-328        let attention_mask = if seq_len <= 1 {
-329            None
-330        } else {
-331            let mask = self.prepare_decoder_attention_mask(b_size, seq_len, seqlen_offset)?;
-332            Some(mask)
-333        };
-334        let mut xs = self.embed_tokens.forward(input_ids)?;
-335        for layer in self.layers.iter_mut() {
-336            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-337        }
-338        xs.narrow(1, seq_len - 1, 1)?
-339            .apply(&self.norm)?
-340            .apply(&self.lm_head)
-341    }
-342
-343    pub fn clear_kv_cache(&mut self) {
-344        for layer in self.layers.iter_mut() {
-345            layer.clear_kv_cache()
-346        }
-347    }
-348}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/pixtral/llava.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/pixtral/llava.rs.html deleted file mode 100644 index 85f5d99..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/pixtral/llava.rs.html +++ /dev/null @@ -1,99 +0,0 @@ -llava.rs - source

candle_transformers/models/pixtral/
llava.rs

1use candle::{Module, Result, Tensor};
-2use candle_nn::{linear, Linear, VarBuilder};
-3
-4use super::vision_model;
-5use crate::models::mistral;
-6
-7#[derive(serde::Deserialize, Debug, Clone)]
-8pub struct Config {
-9    pub projector_hidden_act: candle_nn::Activation,
-10    pub text_config: mistral::Config,
-11    pub vision_config: vision_model::Config,
-12    pub image_token_index: usize,
-13    pub image_seq_length: usize,
-14}
-15
-16#[derive(Debug, Clone)]
-17pub struct MultiModalProjector {
-18    linear_1: Linear,
-19    act: candle_nn::Activation,
-20    linear_2: Linear,
-21}
-22
-23impl MultiModalProjector {
-24    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-25        let (hidden_v, hidden_t) = (cfg.vision_config.hidden_size, cfg.text_config.hidden_size);
-26        let linear_1 = linear(hidden_v, hidden_t, vb.pp("linear_1"))?;
-27        let linear_2 = linear(hidden_t, hidden_t, vb.pp("linear_2"))?;
-28        Ok(Self {
-29            linear_1,
-30            act: cfg.projector_hidden_act,
-31            linear_2,
-32        })
-33    }
-34}
-35
-36impl Module for MultiModalProjector {
-37    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-38        xs.apply(&self.linear_1)?
-39            .apply(&self.act)?
-40            .apply(&self.linear_2)
-41    }
-42}
-43
-44#[derive(Debug, Clone)]
-45pub struct Model {
-46    pub multi_modal_projector: MultiModalProjector,
-47    pub language_model: mistral::Model,
-48    pub vision_tower: vision_model::Model,
-49    pub patch_size: usize,
-50    pub dtype: candle::DType,
-51    pub pos: usize,
-52}
-53
-54impl Model {
-55    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-56        let language_model = mistral::Model::new(&cfg.text_config, vb.pp("language_model"))?;
-57        let vision_tower = vision_model::Model::new(
-58            &cfg.vision_config,
-59            vb.pp("vision_tower").to_dtype(candle::DType::F32),
-60        )?;
-61        let multi_modal_projector = MultiModalProjector::new(
-62            cfg,
-63            vb.pp("multi_modal_projector").to_dtype(candle::DType::F32),
-64        )?;
-65        Ok(Self {
-66            multi_modal_projector,
-67            language_model,
-68            vision_tower,
-69            patch_size: cfg.vision_config.patch_size,
-70            dtype: vb.dtype(),
-71            pos: 0,
-72        })
-73    }
-74
-75    pub fn clear_kv_cache(&mut self) {
-76        self.language_model.clear_kv_cache();
-77        self.pos = 0;
-78    }
-79
-80    pub fn encode_image(&self, image: &Tensor) -> Result<Tensor> {
-81        let image_embeds = self.vision_tower.forward(image)?;
-82        self.multi_modal_projector.forward(&image_embeds)
-83    }
-84
-85    pub fn lm_forward(&mut self, input_ids: &Tensor) -> Result<Tensor> {
-86        let (_, seq_len) = input_ids.dims2()?;
-87        let logits = self.language_model.forward(input_ids, self.pos)?;
-88        self.pos += seq_len;
-89        Ok(logits)
-90    }
-91
-92    pub fn lm_forward_embeds(&mut self, xs: &Tensor) -> Result<Tensor> {
-93        let (_, seq_len, _) = xs.dims3()?;
-94        let logits = self.language_model.forward_embeds(xs, None, self.pos)?;
-95        self.pos += seq_len;
-96        Ok(logits)
-97    }
-98}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/pixtral/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/pixtral/mod.rs.html deleted file mode 100644 index af06930..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/pixtral/mod.rs.html +++ /dev/null @@ -1,44 +0,0 @@ -mod.rs - source

candle_transformers/models/pixtral/
mod.rs

1//! Pixtral Language-Image Pre-Training
-2//!
-3//! Pixtral is an architecture trained for multimodal learning
-4//! using images paired with text descriptions.
-5//!
-6//! - 💻 Transformers Python [reference implementation](https://github.com/huggingface/transformers/tree/main/src/transformers/models/pixtral)
-7//! - 📝 [Blog Post](https://mistral.ai/news/pixtral-12b/)
-8//! - 🤗 [HF Model Card](https://huggingface.co/mistralai/Pixtral-12B-2409)
-9//! - 🤗 [HF Community Model Card](https://huggingface.co/mistral-community/pixtral-12b)
-10//!
-11//! # Example
-12//!
-13//! <div align=center>
-14//!   <img src="https://github.com/huggingface/candle/raw/main/candle-examples/examples/flux/assets/flux-robot.jpg" alt="" width=320>
-15//! </div>
-16//!
-17//! ```bash
-18//! cargo run --profile=release-with-debug \
-19//!    --features cuda \
-20//!    --example pixtral -- \
-21//!    --image candle-examples/examples/flux/assets/flux-robot.jpg
-22//! ```
-23//!
-24//! ```txt
-25//! Describe the image.
-26//!
-27//! The image depicts a charming, rustic robot standing on a sandy beach at sunset.
-28//! The robot has a vintage, steampunk aesthetic with visible gears and mechanical
-29//! parts. It is holding a small lantern in one hand, which emits a warm glow, and
-30//! its other arm is extended forward as if reaching out or guiding the way. The
-31//! robot's body is adorned with the word "RUST" in bright orange letters, adding to
-32//! its rustic theme.
-33//!
-34//! The background features a dramatic sky filled with clouds, illuminated by the
-35//! setting sun, casting a golden hue over the scene. Gentle waves lap against the
-36//! shore, creating a serene and picturesque atmosphere. The overall mood of the
-37//! image is whimsical and nostalgic, evoking a sense of adventure and tranquility.
-38//! ```
-39
-40pub mod llava;
-41pub mod vision_model;
-42
-43pub use llava::{Config, Model};
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/pixtral/vision_model.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/pixtral/vision_model.rs.html deleted file mode 100644 index d50821a..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/pixtral/vision_model.rs.html +++ /dev/null @@ -1,367 +0,0 @@ -vision_model.rs - source

candle_transformers/models/pixtral/
vision_model.rs

1use candle::{DType, Device, Module, Result, Tensor, D};
-2use candle_nn::{linear_b, rms_norm, Linear, RmsNorm, VarBuilder};
-3
-4fn default_act() -> candle_nn::Activation {
-5    candle_nn::Activation::Silu
-6}
-7
-8fn default_hidden_size() -> usize {
-9    1024
-10}
-11
-12fn default_intermediate_size() -> usize {
-13    4096
-14}
-15
-16fn default_num_channels() -> usize {
-17    3
-18}
-19
-20fn default_num_hidden_layers() -> usize {
-21    24
-22}
-23
-24fn default_num_attention_heads() -> usize {
-25    16
-26}
-27
-28#[derive(serde::Deserialize, Debug, Clone)]
-29pub struct Config {
-30    #[serde(default = "default_hidden_size")]
-31    pub hidden_size: usize,
-32    #[serde(default = "default_num_channels")]
-33    pub num_channels: usize,
-34    pub image_size: usize,
-35    pub patch_size: usize,
-36    pub rope_theta: f64,
-37    #[serde(default = "default_intermediate_size")]
-38    pub intermediate_size: usize,
-39    #[serde(default = "default_num_hidden_layers")]
-40    pub num_hidden_layers: usize,
-41    pub head_dim: Option<usize>,
-42    #[serde(default = "default_num_attention_heads")]
-43    pub num_attention_heads: usize,
-44    #[serde(default = "default_act")]
-45    pub hidden_act: candle_nn::Activation,
-46}
-47
-48impl Config {
-49    pub fn pixtral_12b_2409() -> Self {
-50        Self {
-51            hidden_size: 1024,
-52            num_channels: 3,
-53            image_size: 1024,
-54            patch_size: 16,
-55            rope_theta: 10000.0,
-56            intermediate_size: 4096,
-57            num_hidden_layers: 24,
-58            num_attention_heads: 16,
-59            head_dim: None,
-60            // Default
-61            hidden_act: candle_nn::Activation::Silu,
-62        }
-63    }
-64
-65    fn head_dim(&self) -> usize {
-66        self.head_dim
-67            .unwrap_or(self.hidden_size / self.num_attention_heads)
-68    }
-69}
-70
-71#[derive(Debug, Clone)]
-72struct Attention {
-73    q_proj: Linear,
-74    k_proj: Linear,
-75    v_proj: Linear,
-76    o_proj: Linear,
-77    scale: f64,
-78    num_heads: usize,
-79    head_dim: usize,
-80}
-81
-82impl Attention {
-83    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-84        let h = cfg.hidden_size;
-85        let num_heads = cfg.num_attention_heads;
-86        let head_dim = cfg.head_dim();
-87        let q_proj = linear_b(h, h, false, vb.pp("q_proj"))?;
-88        let k_proj = linear_b(h, h, false, vb.pp("k_proj"))?;
-89        let v_proj = linear_b(h, h, false, vb.pp("v_proj"))?;
-90        let o_proj = linear_b(h, h, false, vb.pp("o_proj"))?;
-91        let scale = (head_dim as f64).powf(-0.5);
-92        Ok(Self {
-93            q_proj,
-94            k_proj,
-95            v_proj,
-96            o_proj,
-97            scale,
-98            num_heads,
-99            head_dim,
-100        })
-101    }
-102
-103    fn forward(
-104        &self,
-105        xs: &Tensor,
-106        emb: &RotaryEmbedding,
-107        subsampled_positions: Option<&Tensor>,
-108        attention_mask: Option<&Tensor>,
-109    ) -> Result<Tensor> {
-110        let (b, patches, _) = xs.dims3()?;
-111        let query_states = xs.apply(&self.q_proj)?;
-112        let key_states = xs.apply(&self.k_proj)?;
-113        let value_states = xs.apply(&self.v_proj)?;
-114
-115        let shape = (b, patches, self.num_heads, self.head_dim);
-116        let query_states = query_states.reshape(shape)?.transpose(1, 2)?.contiguous()?;
-117        let key_states = key_states.reshape(shape)?.transpose(1, 2)?.contiguous()?;
-118        let value_states = value_states.reshape(shape)?.transpose(1, 2)?.contiguous()?;
-119
-120        let (query_states, key_states) =
-121            emb.apply_rotary_emb_qkv(&query_states, &key_states, subsampled_positions)?;
-122        let attn_weights = (query_states.matmul(&key_states.t()?)? * self.scale)?;
-123
-124        let attn_weights = match attention_mask {
-125            None => attn_weights,
-126            Some(mask) => attn_weights.broadcast_add(mask)?,
-127        };
-128
-129        let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-130        attn_weights
-131            .matmul(&value_states)?
-132            .transpose(1, 2)?
-133            .reshape((b, patches, ()))?
-134            .apply(&self.o_proj)
-135    }
-136}
-137
-138#[derive(Debug, Clone)]
-139struct Mlp {
-140    gate_proj: Linear,
-141    up_proj: Linear,
-142    down_proj: Linear,
-143    act_fn: candle_nn::Activation,
-144}
-145
-146impl Mlp {
-147    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-148        let (h, i) = (cfg.hidden_size, cfg.intermediate_size);
-149        let gate_proj = linear_b(h, i, false, vb.pp("gate_proj"))?;
-150        let up_proj = linear_b(h, i, false, vb.pp("up_proj"))?;
-151        let down_proj = linear_b(i, h, false, vb.pp("down_proj"))?;
-152        Ok(Self {
-153            gate_proj,
-154            up_proj,
-155            down_proj,
-156            act_fn: cfg.hidden_act,
-157        })
-158    }
-159}
-160
-161impl Module for Mlp {
-162    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-163        (xs.apply(&self.gate_proj)?.apply(&self.act_fn)? * xs.apply(&self.up_proj))?
-164            .apply(&self.down_proj)
-165    }
-166}
-167
-168#[derive(Debug, Clone)]
-169struct AttentionLayer {
-170    attention_norm: RmsNorm,
-171    feed_forward: Mlp,
-172    attention: Attention,
-173    ffn_norm: RmsNorm,
-174}
-175
-176impl AttentionLayer {
-177    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-178        let attention_norm = rms_norm(cfg.hidden_size, 1e-5, vb.pp("attention_norm"))?;
-179        let feed_forward = Mlp::new(cfg, vb.pp("feed_forward"))?;
-180        let attention = Attention::new(cfg, vb.pp("attention"))?;
-181        let ffn_norm = rms_norm(cfg.hidden_size, 1e-5, vb.pp("ffn_norm"))?;
-182        Ok(Self {
-183            attention_norm,
-184            feed_forward,
-185            attention,
-186            ffn_norm,
-187        })
-188    }
-189
-190    fn forward(
-191        &self,
-192        xs: &Tensor,
-193        emb: &RotaryEmbedding,
-194        subsampled_positions: Option<&Tensor>,
-195        attention_mask: Option<&Tensor>,
-196    ) -> Result<Tensor> {
-197        let residual = xs;
-198        let xs = self.attention.forward(
-199            &xs.apply(&self.attention_norm)?,
-200            emb,
-201            subsampled_positions,
-202            attention_mask,
-203        )?;
-204        let xs = (residual + xs)?;
-205        let residual = &xs;
-206        let xs = xs.apply(&self.ffn_norm)?.apply(&self.feed_forward)?;
-207        xs + residual
-208    }
-209}
-210
-211#[derive(Debug, Clone)]
-212struct Transformer {
-213    layers: Vec<AttentionLayer>,
-214}
-215
-216impl Transformer {
-217    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-218        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-219        let vb = vb.pp("layers");
-220        for layer_idx in 0..cfg.num_hidden_layers {
-221            let layer = AttentionLayer::new(cfg, vb.pp(layer_idx))?;
-222            layers.push(layer)
-223        }
-224        Ok(Self { layers })
-225    }
-226
-227    fn forward(
-228        &self,
-229        xs: &Tensor,
-230        emb: &RotaryEmbedding,
-231        subsampled_positions: Option<&Tensor>,
-232        attention_mask: Option<&Tensor>,
-233    ) -> Result<Tensor> {
-234        let mut xs = xs.clone();
-235        for layer in self.layers.iter() {
-236            xs = layer.forward(&xs, emb, subsampled_positions, attention_mask)?
-237        }
-238        Ok(xs)
-239    }
-240}
-241
-242#[derive(Debug, Clone)]
-243struct RotaryEmbedding {
-244    cos: Tensor,
-245    sin: Tensor,
-246}
-247
-248impl RotaryEmbedding {
-249    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-250        let dtype = vb.dtype();
-251        let dev = vb.device();
-252        let dim = cfg.head_dim();
-253        let rope_theta = cfg.rope_theta as f32;
-254        let max_patches_per_side = cfg.image_size / cfg.patch_size;
-255        let freqs: Vec<_> = (0..dim)
-256            .step_by(2)
-257            .map(|i| 1f32 / rope_theta.powf(i as f32 / dim as f32))
-258            .collect();
-259        let freqs_h = freqs.iter().step_by(2).copied().collect::<Vec<_>>();
-260        let freqs_h = Tensor::new(freqs_h, dev)?;
-261        let freqs_w = freqs.iter().skip(1).step_by(2).copied().collect::<Vec<_>>();
-262        let freqs_w = Tensor::new(freqs_w, dev)?;
-263        let h = Tensor::arange(0u32, max_patches_per_side as u32, dev)?.to_dtype(DType::F32)?;
-264        let w = Tensor::arange(0u32, max_patches_per_side as u32, dev)?.to_dtype(DType::F32)?;
-265        let freqs_h = h.unsqueeze(1)?.matmul(&freqs_h.unsqueeze(0)?)?;
-266        let freqs_w = w.unsqueeze(1)?.matmul(&freqs_w.unsqueeze(0)?)?;
-267        let inv_freq = Tensor::cat(
-268            &[
-269                freqs_h.unsqueeze(1)?.repeat((1, max_patches_per_side, 1))?,
-270                freqs_w.unsqueeze(0)?.repeat((max_patches_per_side, 1, 1))?,
-271            ],
-272            D::Minus1,
-273        )?
-274        .reshape(((), dim / 2))?;
-275        let cos = inv_freq.cos()?.to_dtype(dtype)?;
-276        let sin = inv_freq.sin()?.to_dtype(dtype)?;
-277        Ok(Self { cos, sin })
-278    }
-279
-280    fn apply_rotary_emb_qkv(
-281        &self,
-282        q: &Tensor,
-283        k: &Tensor,
-284        subsampled_positions: Option<&Tensor>,
-285    ) -> Result<(Tensor, Tensor)> {
-286        let (_b_sz, _h, _seq_len, _n_embd) = q.dims4()?;
-287        let (cos, sin) = match subsampled_positions {
-288            None => (&self.cos, &self.sin),
-289            Some(pos) => (
-290                &self.cos.index_select(pos, 0)?,
-291                &self.sin.index_select(pos, 0)?,
-292            ),
-293        };
-294        let q_embed = candle_nn::rotary_emb::rope(q, cos, sin)?;
-295        let k_embed = candle_nn::rotary_emb::rope(k, cos, sin)?;
-296        Ok((q_embed, k_embed))
-297    }
-298}
-299
-300#[derive(Debug, Clone)]
-301pub struct Model {
-302    patch_conv: candle_nn::Conv2d,
-303    ln_pre: RmsNorm,
-304    transformer: Transformer,
-305    patch_positional_embedding: RotaryEmbedding,
-306    max_image_width: u32,
-307}
-308
-309impl Model {
-310    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-311        let conv2d_cfg = candle_nn::Conv2dConfig {
-312            stride: cfg.patch_size,
-313            ..Default::default()
-314        };
-315        let patch_conv = candle_nn::conv2d_no_bias(
-316            cfg.num_channels,
-317            cfg.hidden_size,
-318            cfg.patch_size,
-319            conv2d_cfg,
-320            vb.pp("patch_conv"),
-321        )?;
-322        let ln_pre = candle_nn::rms_norm(cfg.hidden_size, 1e-5, vb.pp("ln_pre"))?;
-323        let transformer = Transformer::new(cfg, vb.pp("transformer"))?;
-324        let patch_positional_embedding =
-325            RotaryEmbedding::new(cfg, vb.pp("patch_positional_embedding"))?;
-326        let max_image_width = (cfg.image_size / cfg.patch_size) as u32;
-327        Ok(Self {
-328            patch_conv,
-329            ln_pre,
-330            transformer,
-331            patch_positional_embedding,
-332            max_image_width,
-333        })
-334    }
-335
-336    pub fn position_ids_in_meshgrid(
-337        &self,
-338        num_patches_h: usize,
-339        num_patches_w: usize,
-340        device: &Device,
-341    ) -> Result<Tensor> {
-342        let idx = Tensor::arange(0, num_patches_h as u32, device)?;
-343        let idy = Tensor::arange(0, num_patches_w as u32, device)?;
-344        let mesh = Tensor::meshgrid(&[idx, idy], false)?;
-345        let ids = (&mesh[0] * (self.max_image_width as f64) + &mesh[1])?.flatten_all()?;
-346        Ok(ids)
-347    }
-348}
-349
-350impl Module for Model {
-351    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-352        let patch_embeds = xs.apply(&self.patch_conv)?;
-353        let subsampled_positions = Some(self.position_ids_in_meshgrid(
-354            patch_embeds.dim(2)?,
-355            patch_embeds.dim(3)?,
-356            patch_embeds.device(),
-357        )?);
-358        let patch_embeds = patch_embeds.flatten_from(2)?.t()?.apply(&self.ln_pre)?;
-359        self.transformer.forward(
-360            &patch_embeds,
-361            &self.patch_positional_embedding,
-362            subsampled_positions.as_ref(),
-363            None,
-364        )
-365    }
-366}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_blip.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_blip.rs.html deleted file mode 100644 index 26fc299..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_blip.rs.html +++ /dev/null @@ -1,278 +0,0 @@ -quantized_blip.rs - source

candle_transformers/models/
quantized_blip.rs

1//! BLIP model implementation with quantization support.
-2//!
-3//! BLIP is a vision-language model for image understanding and generation tasks.
-4//! This implementation provides quantization for reduced memory and compute.
-5//!
-6//! Key characteristics:
-7//! - Vision encoder using ViT architecture
-8//! - Text decoder using BERT-style transformer
-9//! - Cross-attention between vision and text features
-10//! - Support for 8-bit quantization
-11//!
-12//! References:
-13//! - [BLIP Paper](https://arxiv.org/abs/2201.12086)
-14//! - [Hugging Face Implementation](https://huggingface.co/docs/transformers/model_doc/blip)
-15//!
-16
-17use super::quantized_blip_text as blip_text;
-18use crate::quantized_nn::{layer_norm, linear, Linear};
-19pub use crate::quantized_var_builder::VarBuilder;
-20use candle::{Module, Result, Tensor, D};
-21use candle_nn::{Conv2d, Conv2dConfig, LayerNorm};
-22
-23pub type VisionConfig = super::blip::VisionConfig;
-24pub type Config = super::blip::Config;
-25
-26#[derive(Debug, Clone)]
-27struct VisionEmbeddings {
-28    class_embedding: Tensor,
-29    patch_embedding: Conv2d,
-30    position_embedding: Tensor,
-31}
-32
-33impl VisionEmbeddings {
-34    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-35        let class_embedding = vb
-36            .get((1, 1, cfg.hidden_size), "class_embedding")?
-37            .dequantize(vb.device())?;
-38        let conv_cfg = Conv2dConfig {
-39            stride: cfg.patch_size,
-40            ..Default::default()
-41        };
-42        let pe_vb = vb.pp("patch_embedding");
-43        let pe_weight = pe_vb
-44            .get(
-45                (cfg.hidden_size, 3, cfg.patch_size, cfg.patch_size),
-46                "weight",
-47            )?
-48            .dequantize(vb.device())?;
-49        let pe_bias = pe_vb
-50            .get(cfg.hidden_size, "bias")?
-51            .dequantize(vb.device())?;
-52
-53        let patch_embedding = Conv2d::new(pe_weight, Some(pe_bias), conv_cfg);
-54        let num_patches1 = cfg.image_size / cfg.patch_size;
-55        let num_patches = num_patches1 * num_patches1;
-56        let num_positions = num_patches + 1;
-57        let position_embedding = vb
-58            .get((1, num_positions, cfg.hidden_size), "position_embedding")?
-59            .dequantize(vb.device())?;
-60        Ok(Self {
-61            class_embedding,
-62            patch_embedding,
-63            position_embedding,
-64        })
-65    }
-66}
-67
-68impl Module for VisionEmbeddings {
-69    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-70        let target_dtype = xs.dtype();
-71        let b_size = xs.dim(0)?;
-72        let patch_embeds = xs.apply(&self.patch_embedding)?.flatten_from(2)?.t()?;
-73        let d = self.class_embedding.dim(D::Minus1)?;
-74        let class_embeds = self
-75            .class_embedding
-76            .broadcast_as((b_size, 1, d))?
-77            .to_dtype(target_dtype)?;
-78        let embeddings = Tensor::cat(&[&class_embeds, &patch_embeds], 1)?;
-79        let position_embedding = self.position_embedding.narrow(1, 0, embeddings.dim(1)?)?;
-80        embeddings.broadcast_add(&position_embedding)
-81    }
-82}
-83
-84#[derive(Debug, Clone)]
-85struct Attention {
-86    qkv: Linear,
-87    projection: Linear,
-88    scale: f64,
-89    num_heads: usize,
-90}
-91
-92impl Attention {
-93    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-94        let embed_dim = cfg.hidden_size;
-95        let num_heads = cfg.num_attention_heads;
-96        let head_dim = embed_dim / num_heads;
-97        let scale = 1f64 / (head_dim as f64).sqrt();
-98        let qkv = linear(embed_dim, 3 * embed_dim, vb.pp("qkv"))?;
-99        let projection = linear(embed_dim, embed_dim, vb.pp("projection"))?;
-100        Ok(Self {
-101            qkv,
-102            projection,
-103            scale,
-104            num_heads,
-105        })
-106    }
-107
-108    fn forward(&self, xs: &Tensor, attn_mask: Option<&Tensor>) -> Result<Tensor> {
-109        let (b_sz, tgt_len, embed_dim) = xs.dims3()?;
-110        let mixed_qkv = xs
-111            .apply(&self.qkv)?
-112            .reshape((b_sz, tgt_len, 3, self.num_heads, embed_dim / self.num_heads))?
-113            .permute((2, 0, 3, 1, 4))?;
-114        let query = mixed_qkv.get(0)?;
-115        let key = mixed_qkv.get(1)?;
-116        let value = mixed_qkv.get(2)?;
-117        let attention_scores = query.matmul(&key.t()?)?;
-118        let attention_scores = (attention_scores * self.scale)?;
-119        let attention_probs = candle_nn::ops::softmax_last_dim(&attention_scores)?;
-120        let attention_probs = match attn_mask {
-121            None => attention_probs,
-122            Some(attn_mask) => (attention_probs * attn_mask)?,
-123        };
-124        attention_probs
-125            .matmul(&value)?
-126            .permute((0, 2, 1, 3))?
-127            .flatten_from(D::Minus2)?
-128            .apply(&self.projection)
-129    }
-130}
-131
-132#[derive(Debug, Clone)]
-133#[allow(clippy::upper_case_acronyms)]
-134struct MLP {
-135    activation_fn: candle_nn::Activation,
-136    fc1: Linear,
-137    fc2: Linear,
-138}
-139
-140impl MLP {
-141    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-142        let fc1 = linear(cfg.hidden_size, cfg.intermediate_size, vb.pp("fc1"))?;
-143        let fc2 = linear(cfg.intermediate_size, cfg.hidden_size, vb.pp("fc2"))?;
-144        Ok(Self {
-145            activation_fn: cfg.hidden_act,
-146            fc1,
-147            fc2,
-148        })
-149    }
-150}
-151
-152impl Module for MLP {
-153    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-154        xs.apply(&self.fc1)?
-155            .apply(&self.activation_fn)?
-156            .apply(&self.fc2)
-157    }
-158}
-159
-160#[derive(Debug, Clone)]
-161struct EncoderLayer {
-162    self_attn: Attention,
-163    layer_norm1: LayerNorm,
-164    mlp: MLP,
-165    layer_norm2: LayerNorm,
-166}
-167
-168impl EncoderLayer {
-169    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-170        let embed_dim = cfg.hidden_size;
-171        let self_attn = Attention::new(cfg, vb.pp("self_attn"))?;
-172        let layer_norm1 = layer_norm(embed_dim, cfg.layer_norm_eps, vb.pp("layer_norm1"))?;
-173        let layer_norm2 = layer_norm(embed_dim, cfg.layer_norm_eps, vb.pp("layer_norm2"))?;
-174        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-175        Ok(Self {
-176            self_attn,
-177            layer_norm1,
-178            mlp,
-179            layer_norm2,
-180        })
-181    }
-182
-183    fn forward(&self, xs: &Tensor, attention_mask: Option<&Tensor>) -> Result<Tensor> {
-184        let residual = xs;
-185        let xs = xs.apply(&self.layer_norm1)?;
-186        let xs = self.self_attn.forward(&xs, attention_mask)?;
-187        let xs = (xs + residual)?;
-188
-189        let residual = &xs;
-190        let xs = xs.apply(&self.layer_norm2)?.apply(&self.mlp)?;
-191        xs + residual
-192    }
-193}
-194
-195#[derive(Debug, Clone)]
-196struct Encoder {
-197    layers: Vec<EncoderLayer>,
-198}
-199
-200impl Encoder {
-201    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-202        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-203        let vb = vb.pp("layers");
-204        for i in 0..cfg.num_hidden_layers {
-205            let layer = EncoderLayer::new(cfg, vb.pp(i))?;
-206            layers.push(layer)
-207        }
-208        Ok(Self { layers })
-209    }
-210
-211    fn forward(&self, xs: &Tensor, attention_mask: Option<&Tensor>) -> Result<Tensor> {
-212        let mut xs = xs.clone();
-213        for layer in self.layers.iter() {
-214            xs = layer.forward(&xs, attention_mask)?
-215        }
-216        Ok(xs)
-217    }
-218}
-219
-220#[derive(Debug, Clone)]
-221pub struct VisionModel {
-222    embeddings: VisionEmbeddings,
-223    encoder: Encoder,
-224    post_layernorm: LayerNorm,
-225}
-226
-227impl VisionModel {
-228    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-229        let embeddings = VisionEmbeddings::new(cfg, vb.pp("embeddings"))?;
-230        let encoder = Encoder::new(cfg, vb.pp("encoder"))?;
-231        let post_layernorm =
-232            layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("post_layernorm"))?;
-233        Ok(Self {
-234            embeddings,
-235            encoder,
-236            post_layernorm,
-237        })
-238    }
-239}
-240
-241impl Module for VisionModel {
-242    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-243        let xs = xs.apply(&self.embeddings)?;
-244        let encoder_outputs = self.encoder.forward(&xs, None)?;
-245        // Return the last hidden state rather than pooled outputs.
-246        encoder_outputs.apply(&self.post_layernorm)
-247    }
-248}
-249
-250#[derive(Debug, Clone)]
-251pub struct BlipForConditionalGeneration {
-252    vision_model: VisionModel,
-253    text_decoder: blip_text::TextLMHeadModel,
-254}
-255
-256impl BlipForConditionalGeneration {
-257    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-258        let vision_model = VisionModel::new(&cfg.vision_config, vb.pp("vision_model"))?;
-259        let text_decoder =
-260            blip_text::TextLMHeadModel::new(&cfg.text_config, vb.pp("text_decoder"))?;
-261        Ok(Self {
-262            vision_model,
-263            text_decoder,
-264        })
-265    }
-266
-267    pub fn vision_model(&self) -> &VisionModel {
-268        &self.vision_model
-269    }
-270
-271    pub fn text_decoder(&mut self) -> &mut blip_text::TextLMHeadModel {
-272        &mut self.text_decoder
-273    }
-274    pub fn reset_kv_cache(&mut self) {
-275        self.text_decoder.reset_kv_cache();
-276    }
-277}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_blip_text.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_blip_text.rs.html deleted file mode 100644 index a6b6ecf..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_blip_text.rs.html +++ /dev/null @@ -1,494 +0,0 @@ -quantized_blip_text.rs - source

candle_transformers/models/
quantized_blip_text.rs

1//! Quantized BLIP text module implementation.
-2//!
-3//! Provides the text decoder portion of the BLIP model with 8-bit quantization.
-4//! Uses a BERT-style transformer architecture for text processing.
-5//!
-6//! Key components:
-7//! - Text embeddings layer with position embeddings
-8//! - Multi-head self attention layers
-9//! - Cross-attention for vision-text fusion
-10//! - Layer normalization and feed-forward layers
-11//! - Quantized linear transformations
-12//!
-13//! References:
-14//! - [BLIP Paper](https://arxiv.org/abs/2201.12086)
-15//! - [Hugging Face Implementation](https://huggingface.co/docs/transformers/model_doc/blip)
-16//!
-17
-18use crate::models::with_tracing::QMatMul;
-19use crate::quantized_nn::{layer_norm, linear, Embedding, Linear};
-20pub use crate::quantized_var_builder::VarBuilder;
-21use candle::{Module, Result, Tensor, D};
-22use candle_nn::LayerNorm;
-23
-24pub type Config = super::blip_text::Config;
-25
-26#[derive(Debug, Clone)]
-27struct TextEmbeddings {
-28    word_embedddings: Embedding,
-29    position_embeddings: Embedding,
-30    layer_norm: LayerNorm,
-31    position_ids: Tensor,
-32}
-33
-34impl TextEmbeddings {
-35    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-36        let word_embedddings =
-37            Embedding::new(cfg.vocab_size, cfg.hidden_size, vb.pp("word_embeddings"))?;
-38        let position_embeddings = Embedding::new(
-39            cfg.max_position_embeddings,
-40            cfg.hidden_size,
-41            vb.pp("position_embeddings"),
-42        )?;
-43        let layer_norm = layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("LayerNorm"))?;
-44        let position_ids =
-45            Tensor::arange(0, cfg.max_position_embeddings as u32, vb.device())?.unsqueeze(0)?;
-46        Ok(Self {
-47            word_embedddings,
-48            position_embeddings,
-49            layer_norm,
-50            position_ids,
-51        })
-52    }
-53
-54    fn forward(&self, xs: &Tensor, past_kv_len: usize) -> Result<Tensor> {
-55        let seq_len = xs.dim(1)?;
-56        let position_ids = self.position_ids.narrow(1, past_kv_len, seq_len)?;
-57        let embeddings = self.word_embedddings.forward(xs)?;
-58        let position_embeddings = self.position_embeddings.forward(&position_ids)?;
-59        (embeddings + position_embeddings)?.apply(&self.layer_norm)
-60    }
-61}
-62
-63#[derive(Debug, Clone)]
-64struct TextSelfAttention {
-65    query: Linear,
-66    key: Linear,
-67    value: Linear,
-68    attention_head_size: usize,
-69    num_attention_heads: usize,
-70    attention_scale: f64,
-71    kv_cache: Option<(Tensor, Tensor)>,
-72}
-73
-74impl TextSelfAttention {
-75    fn new(cfg: &Config, is_cross_attention: bool, vb: VarBuilder) -> Result<Self> {
-76        let num_attention_heads = cfg.num_attention_heads;
-77        let attention_head_size = cfg.hidden_size / num_attention_heads;
-78        let all_head_size = cfg.num_attention_heads * attention_head_size;
-79        let query = linear(cfg.hidden_size, all_head_size, vb.pp("query"))?;
-80        let in_size = if is_cross_attention {
-81            cfg.encoder_hidden_size
-82        } else {
-83            cfg.hidden_size
-84        };
-85        let key = linear(in_size, all_head_size, vb.pp("key"))?;
-86        let value = linear(in_size, all_head_size, vb.pp("value"))?;
-87        let attention_scale = 1f64 / (attention_head_size as f64).sqrt();
-88        Ok(Self {
-89            query,
-90            key,
-91            value,
-92            attention_head_size,
-93            num_attention_heads,
-94            attention_scale,
-95            kv_cache: None,
-96        })
-97    }
-98
-99    fn transpose_for_scores(&self, xs: &Tensor) -> Result<Tensor> {
-100        let (b_size, seq_len, _) = xs.dims3()?;
-101        xs.reshape((
-102            b_size,
-103            seq_len,
-104            self.num_attention_heads,
-105            self.attention_head_size,
-106        ))?
-107        .permute((0, 2, 1, 3))
-108    }
-109
-110    fn reset_kv_cache(&mut self) {
-111        self.kv_cache = None
-112    }
-113
-114    fn forward(
-115        &mut self,
-116        xs: &Tensor,
-117        encoder_hidden_states: Option<&Tensor>,
-118        attention_mask: Option<&Tensor>,
-119    ) -> Result<Tensor> {
-120        let query = self
-121            .transpose_for_scores(&self.query.forward(xs)?)?
-122            .contiguous()?;
-123        let (key, value) = match encoder_hidden_states {
-124            None => {
-125                let key = self.transpose_for_scores(&self.key.forward(xs)?)?;
-126                let value = self.transpose_for_scores(&self.value.forward(xs)?)?;
-127                let (key, value) = match &self.kv_cache {
-128                    None => (key, value),
-129                    Some((prev_key, prev_value)) => {
-130                        let key = Tensor::cat(&[prev_key, &key], 2)?;
-131                        let value = Tensor::cat(&[prev_value, &value], 2)?;
-132                        (key, value)
-133                    }
-134                };
-135                self.kv_cache = Some((key.clone(), value.clone()));
-136                (key, value)
-137            }
-138            Some(xs) => {
-139                let key = self.transpose_for_scores(&self.key.forward(xs)?)?;
-140                let value = self.transpose_for_scores(&self.value.forward(xs)?)?;
-141                // no kv-cache in this case, but the results could probably be memoized.
-142                (key, value)
-143            }
-144        };
-145        let key = key.contiguous()?;
-146        let value = value.contiguous()?;
-147        let attention_scores = query.matmul(&key.t()?)?;
-148        let attention_scores = (attention_scores * self.attention_scale)?;
-149        let attention_scores = match attention_mask {
-150            Some(mask) => attention_scores.broadcast_add(mask)?,
-151            None => attention_scores,
-152        };
-153        let attention_probs = candle_nn::ops::softmax_last_dim(&attention_scores)?;
-154        attention_probs
-155            .matmul(&value)?
-156            .permute((0, 2, 1, 3))?
-157            .flatten_from(D::Minus2)
-158    }
-159}
-160
-161#[derive(Debug, Clone)]
-162struct TextSelfOutput {
-163    dense: Linear,
-164    layer_norm: LayerNorm,
-165}
-166
-167impl TextSelfOutput {
-168    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-169        let dense = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("dense"))?;
-170        let layer_norm = layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("LayerNorm"))?;
-171        Ok(Self { dense, layer_norm })
-172    }
-173
-174    fn forward(&self, xs: &Tensor, input_tensor: &Tensor) -> Result<Tensor> {
-175        (xs.apply(&self.dense) + input_tensor)?.apply(&self.layer_norm)
-176    }
-177}
-178
-179#[derive(Debug, Clone)]
-180struct TextAttention {
-181    self_: TextSelfAttention,
-182    output: TextSelfOutput,
-183}
-184
-185impl TextAttention {
-186    fn new(cfg: &Config, is_cross_attention: bool, vb: VarBuilder) -> Result<Self> {
-187        let self_ = TextSelfAttention::new(cfg, is_cross_attention, vb.pp("self"))?;
-188        let output = TextSelfOutput::new(cfg, vb.pp("output"))?;
-189        Ok(Self { self_, output })
-190    }
-191
-192    fn reset_kv_cache(&mut self) {
-193        self.self_.reset_kv_cache()
-194    }
-195
-196    fn forward(
-197        &mut self,
-198        xs: &Tensor,
-199        encoder_hidden_states: Option<&Tensor>,
-200        attention_mask: Option<&Tensor>,
-201    ) -> Result<Tensor> {
-202        let self_outputs = self
-203            .self_
-204            .forward(xs, encoder_hidden_states, attention_mask)?;
-205        self.output.forward(&self_outputs, xs)
-206    }
-207}
-208
-209#[derive(Debug, Clone)]
-210struct TextIntermediate {
-211    dense: Linear,
-212    intermediate_act_fn: candle_nn::Activation,
-213}
-214
-215impl TextIntermediate {
-216    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-217        let dense = linear(cfg.hidden_size, cfg.intermediate_size, vb.pp("dense"))?;
-218        Ok(Self {
-219            dense,
-220            intermediate_act_fn: cfg.hidden_act,
-221        })
-222    }
-223}
-224
-225impl Module for TextIntermediate {
-226    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-227        xs.apply(&self.dense)?.apply(&self.intermediate_act_fn)
-228    }
-229}
-230
-231#[derive(Debug, Clone)]
-232struct TextOutput {
-233    dense: Linear,
-234    layer_norm: LayerNorm,
-235}
-236
-237impl TextOutput {
-238    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-239        let dense = linear(cfg.intermediate_size, cfg.hidden_size, vb.pp("dense"))?;
-240        let layer_norm = layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("LayerNorm"))?;
-241        Ok(Self { dense, layer_norm })
-242    }
-243
-244    fn forward(&self, xs: &Tensor, input_tensor: &Tensor) -> Result<Tensor> {
-245        (xs.apply(&self.dense)? + input_tensor)?.apply(&self.layer_norm)
-246    }
-247}
-248
-249#[derive(Debug, Clone)]
-250struct TextLayer {
-251    attention: TextAttention,
-252    cross_attention: Option<TextAttention>,
-253    intermediate: TextIntermediate,
-254    output: TextOutput,
-255}
-256
-257impl TextLayer {
-258    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-259        let attention = TextAttention::new(cfg, false, vb.pp("attention"))?;
-260        let cross_attention = if cfg.is_decoder {
-261            Some(TextAttention::new(cfg, true, vb.pp("crossattention"))?)
-262        } else {
-263            None
-264        };
-265        let intermediate = TextIntermediate::new(cfg, vb.pp("intermediate"))?;
-266        let output = TextOutput::new(cfg, vb.pp("output"))?;
-267        Ok(Self {
-268            attention,
-269            cross_attention,
-270            intermediate,
-271            output,
-272        })
-273    }
-274
-275    fn reset_kv_cache(&mut self) {
-276        self.attention.reset_kv_cache();
-277        if let Some(ca) = &mut self.cross_attention {
-278            ca.reset_kv_cache()
-279        }
-280    }
-281
-282    fn forward(
-283        &mut self,
-284        xs: &Tensor,
-285        encoder_hidden_states: &Tensor,
-286        attention_mask: &Tensor,
-287    ) -> Result<Tensor> {
-288        let attention_output = self.attention.forward(xs, None, Some(attention_mask))?;
-289        let attention_output = match &mut self.cross_attention {
-290            Some(ca) => ca.forward(&attention_output, Some(encoder_hidden_states), None)?,
-291            None => candle::bail!("expected some cross-attn"),
-292        };
-293        let intermediate_output = self.intermediate.forward(&attention_output)?;
-294        self.output.forward(&intermediate_output, &attention_output)
-295    }
-296}
-297
-298#[derive(Debug, Clone)]
-299struct TextEncoder {
-300    layers: Vec<TextLayer>,
-301}
-302
-303impl TextEncoder {
-304    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-305        let vb = vb.pp("layer");
-306        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-307        for i in 0..cfg.num_hidden_layers {
-308            let layer = TextLayer::new(cfg, vb.pp(i))?;
-309            layers.push(layer)
-310        }
-311        Ok(Self { layers })
-312    }
-313
-314    fn reset_kv_cache(&mut self) {
-315        self.layers.iter_mut().for_each(|l| l.reset_kv_cache())
-316    }
-317
-318    fn forward(
-319        &mut self,
-320        xs: &Tensor,
-321        encoder_hidden_states: &Tensor,
-322        attention_mask: &Tensor,
-323    ) -> Result<Tensor> {
-324        let mut xs = xs.clone();
-325        for layer in self.layers.iter_mut() {
-326            xs = layer.forward(&xs, encoder_hidden_states, attention_mask)?
-327        }
-328        Ok(xs)
-329    }
-330}
-331
-332#[derive(Debug, Clone)]
-333pub struct TextPooler {
-334    dense: Linear,
-335}
-336
-337impl TextPooler {
-338    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-339        let dense = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("dense"))?;
-340        Ok(Self { dense })
-341    }
-342}
-343
-344impl Module for TextPooler {
-345    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-346        xs.narrow(D::Minus1, 0, 1)?
-347            .squeeze(D::Minus1)?
-348            .apply(&self.dense)?
-349            .tanh()
-350    }
-351}
-352
-353#[derive(Debug, Clone)]
-354struct TextPredictionHeadTransform {
-355    dense: Linear,
-356    transform_act_fn: candle_nn::Activation,
-357    layer_norm: LayerNorm,
-358}
-359
-360impl TextPredictionHeadTransform {
-361    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-362        let dense = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("dense"))?;
-363        let layer_norm = layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("LayerNorm"))?;
-364        Ok(Self {
-365            dense,
-366            transform_act_fn: cfg.hidden_act,
-367            layer_norm,
-368        })
-369    }
-370}
-371
-372impl Module for TextPredictionHeadTransform {
-373    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-374        xs.apply(&self.dense)?
-375            .apply(&self.transform_act_fn)?
-376            .apply(&self.layer_norm)
-377    }
-378}
-379
-380#[derive(Debug, Clone)]
-381struct TextLMPredictionHead {
-382    transform: TextPredictionHeadTransform,
-383    decoder: Linear,
-384}
-385
-386impl TextLMPredictionHead {
-387    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-388        let transform = TextPredictionHeadTransform::new(cfg, vb.pp("transform"))?;
-389        let weight = QMatMul::new(cfg.hidden_size, cfg.vocab_size, vb.pp("decoder"))?;
-390        let bias = vb.get(cfg.vocab_size, "bias")?.dequantize(vb.device())?;
-391        let decoder = Linear::from_weights(weight, Some(bias));
-392        Ok(Self { transform, decoder })
-393    }
-394}
-395
-396impl Module for TextLMPredictionHead {
-397    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-398        xs.apply(&self.transform)?.apply(&self.decoder)
-399    }
-400}
-401
-402#[derive(Debug, Clone)]
-403struct TextOnlyMLMHead {
-404    predictions: TextLMPredictionHead,
-405}
-406
-407impl TextOnlyMLMHead {
-408    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-409        let predictions = TextLMPredictionHead::new(cfg, vb.pp("predictions"))?;
-410        Ok(Self { predictions })
-411    }
-412}
-413
-414impl Module for TextOnlyMLMHead {
-415    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-416        self.predictions.forward(xs)
-417    }
-418}
-419
-420#[derive(Debug, Clone)]
-421struct TextModel {
-422    embeddings: TextEmbeddings,
-423    encoder: TextEncoder,
-424    past_kv_len: usize,
-425    // We do not need the pooler for caption generation
-426}
-427
-428impl TextModel {
-429    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-430        let embeddings = TextEmbeddings::new(cfg, vb.pp("embeddings"))?;
-431        let encoder = TextEncoder::new(cfg, vb.pp("encoder"))?;
-432        Ok(Self {
-433            embeddings,
-434            encoder,
-435            past_kv_len: 0,
-436        })
-437    }
-438
-439    fn forward(
-440        &mut self,
-441        input_ids: &Tensor,
-442        encoder_hidden_states: &Tensor,
-443        attention_mask: &Tensor,
-444    ) -> Result<Tensor> {
-445        let (_b_sz, seq_len) = input_ids.dims2()?;
-446        let embedding_output = self.embeddings.forward(input_ids, self.past_kv_len)?;
-447        let sequence_output =
-448            self.encoder
-449                .forward(&embedding_output, encoder_hidden_states, attention_mask)?;
-450        self.past_kv_len += seq_len;
-451        // We're interested in the sequence-output rather than the pooled-output.
-452        Ok(sequence_output)
-453    }
-454
-455    fn reset_kv_cache(&mut self) {
-456        self.past_kv_len = 0;
-457        self.encoder.reset_kv_cache();
-458    }
-459}
-460
-461#[derive(Debug, Clone)]
-462pub struct TextLMHeadModel {
-463    bert: TextModel,
-464    cls: TextOnlyMLMHead,
-465}
-466
-467impl TextLMHeadModel {
-468    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-469        let bert = TextModel::new(cfg, vb.pp("bert"))?;
-470        let cls = TextOnlyMLMHead::new(cfg, vb.pp("cls"))?;
-471        Ok(Self { bert, cls })
-472    }
-473
-474    pub fn forward(
-475        &mut self,
-476        input_ids: &Tensor,
-477        encoder_hidden_states: &Tensor,
-478    ) -> Result<Tensor> {
-479        let seq_len = input_ids.dim(1)?;
-480        let mask: Vec<_> = (0..seq_len)
-481            .flat_map(|i| (0..seq_len).map(move |j| if j > i { f32::NEG_INFINITY } else { 0f32 }))
-482            .collect();
-483        let mask = Tensor::from_vec(mask, (seq_len, seq_len), input_ids.device())?;
-484        let sequence_output = self.bert.forward(input_ids, encoder_hidden_states, &mask)?;
-485        let prediction_scores = self.cls.forward(&sequence_output)?;
-486        // return_logits is false so we don't discard the last sequence element.
-487        Ok(prediction_scores)
-488    }
-489
-490    pub fn reset_kv_cache(&mut self) {
-491        self.bert.reset_kv_cache()
-492    }
-493}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_llama.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_llama.rs.html deleted file mode 100644 index 9d2cf3e..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_llama.rs.html +++ /dev/null @@ -1,513 +0,0 @@ -quantized_llama.rs - source

candle_transformers/models/
quantized_llama.rs

1//! Quantized llama model implementation.
-2//!
-3//! This provides a quantized implementation of the llama language model architecture.
-4//! The model implements parameter efficient quantization for reduced memory usage
-5//! while maintaining model quality.
-6//!
-7//! Key characteristics:
-8//! - Transformer decoder architecture
-9//! - Support for 2/3/4/8-bit quantization
-10//! - Optimized memory usage through quantization
-11//! - Configurable model sizes and parameter counts
-12//!
-13//! - 💻 [GH Link](https://github.com/facebookresearch/llama)
-14//! - 📝 [Paper](https://arxiv.org/abs/2302.13971)
-15//!
-16//! ![](https://raw.githubusercontent.com/huggingface/candle/main/candle-examples/examples/quantized/assets/aoc.gif)
-17//!
-18
-19use std::collections::HashMap;
-20
-21use crate::quantized_nn::RmsNorm;
-22use candle::quantized::QTensor;
-23use candle::quantized::{ggml_file, gguf_file};
-24use candle::{DType, Device, IndexOp, Result, Tensor};
-25use candle_nn::{Embedding, Module};
-26
-27pub const MAX_SEQ_LEN: usize = 4096;
-28
-29// QMatMul wrapper adding some tracing.
-30#[derive(Debug, Clone)]
-31struct QMatMul {
-32    inner: candle::quantized::QMatMul,
-33    span: tracing::Span,
-34}
-35
-36impl QMatMul {
-37    fn from_qtensor(qtensor: QTensor) -> Result<Self> {
-38        let inner = candle::quantized::QMatMul::from_qtensor(qtensor)?;
-39        let span = tracing::span!(tracing::Level::TRACE, "qmatmul");
-40        Ok(Self { inner, span })
-41    }
-42
-43    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-44        let _enter = self.span.enter();
-45        self.inner.forward(xs)
-46    }
-47}
-48
-49#[derive(Debug, Clone)]
-50struct Mlp {
-51    feed_forward_w1: QMatMul,
-52    feed_forward_w2: QMatMul,
-53    feed_forward_w3: QMatMul,
-54}
-55
-56impl Module for Mlp {
-57    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-58        let w1 = self.feed_forward_w1.forward(xs)?;
-59        let w3 = self.feed_forward_w3.forward(xs)?;
-60        self.feed_forward_w2
-61            .forward(&(candle_nn::ops::silu(&w1)? * w3)?)
-62    }
-63}
-64
-65#[derive(Debug, Clone)]
-66enum MlpOrMoe {
-67    Mlp(Mlp),
-68    MoE {
-69        n_expert_used: usize,
-70        feed_forward_gate_inp: QMatMul,
-71        experts: Vec<Mlp>,
-72    },
-73}
-74
-75impl Module for MlpOrMoe {
-76    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-77        match self {
-78            Self::MoE {
-79                feed_forward_gate_inp,
-80                experts,
-81                n_expert_used,
-82            } => {
-83                let (b_size, seq_len, hidden_dim) = xs.dims3()?;
-84                let xs = xs.reshape(((), hidden_dim))?;
-85                let router_logits = feed_forward_gate_inp.forward(&xs)?;
-86                let routing_weights = candle_nn::ops::softmax_last_dim(&router_logits)?;
-87
-88                // In order to extract topk, we extract the data from the tensor and manipulate it
-89                // directly. Maybe we will want to use some custom ops instead at some point.
-90                let routing_weights = routing_weights.to_dtype(DType::F32)?.to_vec2::<f32>()?;
-91
-92                // routing_weights, selected_experts = torch.topk(routing_weights, self.top_k, dim=-1)
-93                // top_x contains the row indexes to evaluate for each expert.
-94                let mut top_x = vec![vec![]; experts.len()];
-95                let mut selected_rws = vec![vec![]; experts.len()];
-96                for (row_idx, rw) in routing_weights.iter().enumerate() {
-97                    let mut dst = (0..rw.len() as u32).collect::<Vec<u32>>();
-98                    dst.sort_by(|&i, &j| rw[j as usize].total_cmp(&rw[i as usize]));
-99                    let mut sum_routing_weights = 0f32;
-100                    for &expert_idx in dst.iter().take(*n_expert_used) {
-101                        let expert_idx = expert_idx as usize;
-102                        let routing_weight = rw[expert_idx];
-103                        sum_routing_weights += routing_weight;
-104                        top_x[expert_idx].push(row_idx as u32);
-105                    }
-106                    for &expert_idx in dst.iter().take(*n_expert_used) {
-107                        let expert_idx = expert_idx as usize;
-108                        let routing_weight = rw[expert_idx];
-109                        selected_rws[expert_idx].push(routing_weight / sum_routing_weights)
-110                    }
-111                }
-112
-113                // routing_weights /= routing_weights.sum(dim=-1, keepdim=True)
-114                // expert_mask = torch.nn.functional.one_hot(selected_experts, num_classes=self.num_experts).permute(2, 1, 0)
-115
-116                let mut ys = xs.zeros_like()?;
-117                for (expert_idx, expert_layer) in experts.iter().enumerate() {
-118                    let top_x = &top_x[expert_idx];
-119                    if top_x.is_empty() {
-120                        continue;
-121                    }
-122                    let top_x = Tensor::new(top_x.as_slice(), xs.device())?;
-123                    let selected_rws =
-124                        Tensor::new(selected_rws[expert_idx].as_slice(), xs.device())?
-125                            .reshape(((), 1))?;
-126                    // Index the correct hidden states and compute the expert hidden state for
-127                    // the current expert. We need to make sure to multiply the output hidden
-128                    // states by `routing_weights` on the corresponding tokens (top-1 and top-2)
-129                    let current_state = xs.index_select(&top_x, 0)?.reshape(((), hidden_dim))?;
-130                    // current_hidden_states = expert_layer(current_state, routing_weights[top_x_list, idx_list, None])
-131                    let current_hidden_states = expert_layer.forward(&current_state)?;
-132                    let current_hidden_states =
-133                        current_hidden_states.broadcast_mul(&selected_rws)?;
-134                    ys = ys.index_add(&top_x, &current_hidden_states, 0)?;
-135                }
-136
-137                let ys = ys.reshape((b_size, seq_len, hidden_dim))?;
-138                Ok(ys)
-139            }
-140            Self::Mlp(mlp) => mlp.forward(xs),
-141        }
-142    }
-143}
-144
-145#[derive(Debug, Clone)]
-146struct LayerWeights {
-147    attention_wq: QMatMul,
-148    attention_wk: QMatMul,
-149    attention_wv: QMatMul,
-150    attention_wo: QMatMul,
-151    attention_norm: RmsNorm,
-152    mlp_or_moe: MlpOrMoe,
-153    ffn_norm: RmsNorm,
-154    n_head: usize,
-155    n_kv_head: usize,
-156    head_dim: usize,
-157    cos: Tensor,
-158    sin: Tensor,
-159    neg_inf: Tensor,
-160    kv_cache: Option<(Tensor, Tensor)>,
-161    span_attn: tracing::Span,
-162    span_rot: tracing::Span,
-163    span_mlp: tracing::Span,
-164}
-165
-166fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: &Tensor) -> Result<Tensor> {
-167    let shape = mask.shape();
-168    let m = mask.where_cond(&on_true.broadcast_as(shape.dims())?, on_false)?;
-169    Ok(m)
-170}
-171
-172impl LayerWeights {
-173    fn apply_rotary_emb(&self, x: &Tensor, index_pos: usize) -> Result<Tensor> {
-174        let _enter = self.span_rot.enter();
-175        let (_b_sz, _n_head, seq_len, _n_embd) = x.dims4()?;
-176        let cos = self.cos.narrow(0, index_pos, seq_len)?;
-177        let sin = self.sin.narrow(0, index_pos, seq_len)?;
-178        // The call to contiguous below is only necessary when processing the prompt.
-179        // When the seq_len is 1 in the inference loop, this is a no-op.
-180        candle_nn::rotary_emb::rope_i(&x.contiguous()?, &cos, &sin)
-181    }
-182
-183    fn forward_attn(
-184        &mut self,
-185        x: &Tensor,
-186        mask: Option<&Tensor>,
-187        index_pos: usize,
-188    ) -> Result<Tensor> {
-189        let _enter = self.span_attn.enter();
-190        let (b_sz, seq_len, n_embd) = x.dims3()?;
-191        let q = self.attention_wq.forward(x)?;
-192        let k = self.attention_wk.forward(x)?;
-193        let v = self.attention_wv.forward(x)?;
-194
-195        let q = q
-196            .reshape((b_sz, seq_len, self.n_head, self.head_dim))?
-197            .transpose(1, 2)?;
-198        let k = k
-199            .reshape((b_sz, seq_len, self.n_kv_head, self.head_dim))?
-200            .transpose(1, 2)?;
-201        let v = v
-202            .reshape((b_sz, seq_len, self.n_kv_head, self.head_dim))?
-203            .transpose(1, 2)?
-204            // This call to contiguous ensures that the fast kernel can be called below. It's
-205            // actually a no-op except when processing the initial prompt so has no significant
-206            // impact on performance.
-207            .contiguous()?;
-208
-209        let q = self.apply_rotary_emb(&q, index_pos)?;
-210        let k = self.apply_rotary_emb(&k, index_pos)?;
-211
-212        let (k, v) = match &self.kv_cache {
-213            None => (k, v),
-214            Some((k_cache, v_cache)) => {
-215                if index_pos == 0 {
-216                    (k, v)
-217                } else {
-218                    let k = Tensor::cat(&[k_cache, &k], 2)?;
-219                    let v = Tensor::cat(&[v_cache, &v], 2)?;
-220                    (k, v)
-221                }
-222            }
-223        };
-224        self.kv_cache = Some((k.clone(), v.clone()));
-225
-226        let y = if q.device().is_metal() && seq_len == 1 {
-227            // SDPA will do MQA for us
-228            candle_nn::ops::sdpa(&q, &k, &v, 1. / (self.head_dim as f32).sqrt(), 1.)?
-229        } else {
-230            // Support for MQA, useful for 70B models and mistral.
-231            let k = crate::utils::repeat_kv(k, self.n_head / self.n_kv_head)?;
-232            let v = crate::utils::repeat_kv(v, self.n_head / self.n_kv_head)?;
-233
-234            let att = (q.matmul(&k.t()?)? / (self.head_dim as f64).sqrt())?;
-235            let att = match mask {
-236                None => att,
-237                Some(mask) => {
-238                    let mask = mask.broadcast_as(att.shape())?;
-239                    masked_fill(&att, &mask, &self.neg_inf)?
-240                }
-241            };
-242            let att = candle_nn::ops::softmax_last_dim(&att)?;
-243            // Convert to contiguous as matmul doesn't support strided vs for now.
-244            att.matmul(&v.contiguous()?)?
-245        };
-246
-247        let y = y.transpose(1, 2)?.reshape(&[b_sz, seq_len, n_embd])?;
-248        let y = self.attention_wo.forward(&y)?;
-249        Ok(y)
-250    }
-251}
-252
-253#[derive(Debug, Clone)]
-254pub struct ModelWeights {
-255    tok_embeddings: Embedding,
-256    layers: Vec<LayerWeights>,
-257    norm: RmsNorm,
-258    output: QMatMul,
-259    masks: HashMap<usize, Tensor>,
-260    span: tracing::Span,
-261    span_output: tracing::Span,
-262}
-263
-264fn precomput_freqs_cis(
-265    head_dim: usize,
-266    freq_base: f32,
-267    device: &Device,
-268) -> Result<(Tensor, Tensor)> {
-269    let theta: Vec<_> = (0..head_dim)
-270        .step_by(2)
-271        .map(|i| 1f32 / freq_base.powf(i as f32 / head_dim as f32))
-272        .collect();
-273    let theta = Tensor::new(theta.as_slice(), device)?;
-274    let idx_theta = Tensor::arange(0, MAX_SEQ_LEN as u32, device)?
-275        .to_dtype(DType::F32)?
-276        .reshape((MAX_SEQ_LEN, 1))?
-277        .matmul(&theta.reshape((1, theta.elem_count()))?)?;
-278    let cos = idx_theta.cos()?;
-279    let sin = idx_theta.sin()?;
-280    Ok((cos, sin))
-281}
-282
-283impl ModelWeights {
-284    pub fn from_ggml(mut ct: ggml_file::Content, gqa: usize) -> Result<Self> {
-285        let head_dim = (ct.hparams.n_embd / ct.hparams.n_head) as usize;
-286        let (cos, sin) = precomput_freqs_cis(head_dim, 10000., &ct.device)?;
-287        let neg_inf = Tensor::new(f32::NEG_INFINITY, &ct.device)?;
-288        let tok_embeddings = ct.remove("tok_embeddings.weight")?;
-289        let tok_embeddings = tok_embeddings.dequantize(&ct.device)?;
-290        let norm = RmsNorm::from_qtensor(ct.remove("norm.weight")?, 1e-5)?;
-291        let output = ct.remove("output.weight")?;
-292        let mut layers = Vec::with_capacity(ct.hparams.n_layer as usize);
-293        for layer_idx in 0..ct.hparams.n_layer {
-294            let prefix = format!("layers.{layer_idx}");
-295            let attention_wq = ct.remove(&format!("{prefix}.attention.wq.weight"))?;
-296            let attention_wk = ct.remove(&format!("{prefix}.attention.wk.weight"))?;
-297            let attention_wv = ct.remove(&format!("{prefix}.attention.wv.weight"))?;
-298            let attention_wo = ct.remove(&format!("{prefix}.attention.wo.weight"))?;
-299            let mlp_or_moe = {
-300                let feed_forward_w1 = ct.remove(&format!("{prefix}.feed_forward.w1.weight"))?;
-301                let feed_forward_w2 = ct.remove(&format!("{prefix}.feed_forward.w2.weight"))?;
-302                let feed_forward_w3 = ct.remove(&format!("{prefix}.feed_forward.w3.weight"))?;
-303                MlpOrMoe::Mlp(Mlp {
-304                    feed_forward_w1: QMatMul::from_qtensor(feed_forward_w1)?,
-305                    feed_forward_w2: QMatMul::from_qtensor(feed_forward_w2)?,
-306                    feed_forward_w3: QMatMul::from_qtensor(feed_forward_w3)?,
-307                })
-308            };
-309            let attention_norm = ct.remove(&format!("{prefix}.attention_norm.weight"))?;
-310            let ffn_norm = ct.remove(&format!("{prefix}.ffn_norm.weight"))?;
-311            let span_attn = tracing::span!(tracing::Level::TRACE, "attn");
-312            let span_rot = tracing::span!(tracing::Level::TRACE, "attn-rot");
-313            let span_mlp = tracing::span!(tracing::Level::TRACE, "attn-mlp");
-314            layers.push(LayerWeights {
-315                attention_wq: QMatMul::from_qtensor(attention_wq)?,
-316                attention_wk: QMatMul::from_qtensor(attention_wk)?,
-317                attention_wv: QMatMul::from_qtensor(attention_wv)?,
-318                attention_wo: QMatMul::from_qtensor(attention_wo)?,
-319                attention_norm: RmsNorm::from_qtensor(attention_norm, 1e-5)?,
-320                mlp_or_moe,
-321                ffn_norm: RmsNorm::from_qtensor(ffn_norm, 1e-5)?,
-322                n_head: ct.hparams.n_head as usize,
-323                n_kv_head: ct.hparams.n_head as usize / gqa,
-324                head_dim: (ct.hparams.n_embd / ct.hparams.n_head) as usize,
-325                cos: cos.clone(),
-326                sin: sin.clone(),
-327                neg_inf: neg_inf.clone(),
-328                kv_cache: None,
-329                span_attn,
-330                span_rot,
-331                span_mlp,
-332            })
-333        }
-334        let span = tracing::span!(tracing::Level::TRACE, "model");
-335        let span_output = tracing::span!(tracing::Level::TRACE, "output");
-336        Ok(Self {
-337            tok_embeddings: Embedding::new(tok_embeddings, ct.hparams.n_embd as usize),
-338            layers,
-339            norm,
-340            output: QMatMul::from_qtensor(output)?,
-341            masks: HashMap::new(),
-342            span,
-343            span_output,
-344        })
-345    }
-346
-347    pub fn from_gguf<R: std::io::Seek + std::io::Read>(
-348        ct: gguf_file::Content,
-349        reader: &mut R,
-350        device: &Device,
-351    ) -> Result<Self> {
-352        let md_get = |s: &str| match ct.metadata.get(s) {
-353            None => candle::bail!("cannot find {s} in metadata"),
-354            Some(v) => Ok(v),
-355        };
-356
-357        // Parameter extraction from metadata.
-358        let n_expert = md_get("llama.expert_count")
-359            .and_then(|v| v.to_u32())
-360            .unwrap_or(0) as usize;
-361        let n_expert_used = md_get("llama.expert_used_count")
-362            .and_then(|v| v.to_u32())
-363            .unwrap_or(0) as usize;
-364        let head_count = md_get("llama.attention.head_count")?.to_u32()? as usize;
-365        let head_count_kv = md_get("llama.attention.head_count_kv")?.to_u32()? as usize;
-366        let block_count = md_get("llama.block_count")?.to_u32()? as usize;
-367        let embedding_length = md_get("llama.embedding_length")?.to_u32()? as usize;
-368        let rope_dim = md_get("llama.rope.dimension_count")?.to_u32()? as usize;
-369        // Strangely this value is generally 1e-6 in GGUF file but used to be 1e-5 by default.
-370        let rms_norm_eps = md_get("llama.attention.layer_norm_rms_epsilon")?.to_f32()? as f64;
-371
-372        let rope_freq_base = md_get("llama.rope.freq_base")
-373            .and_then(|m| m.to_f32())
-374            .unwrap_or(10000f32);
-375        let (cos, sin) = precomput_freqs_cis(rope_dim, rope_freq_base, device)?;
-376        let neg_inf = Tensor::new(f32::NEG_INFINITY, device)?;
-377
-378        let tok_embeddings_q = ct.tensor(reader, "token_embd.weight", device)?;
-379        let tok_embeddings = tok_embeddings_q.dequantize(device)?;
-380        let norm = RmsNorm::from_qtensor(
-381            ct.tensor(reader, "output_norm.weight", device)?,
-382            rms_norm_eps,
-383        )?;
-384        let output = match ct.tensor(reader, "output.weight", device) {
-385            Ok(tensor) => tensor,
-386            Err(_) => tok_embeddings_q,
-387        };
-388        let mut layers = Vec::with_capacity(block_count);
-389        for layer_idx in 0..block_count {
-390            let prefix = format!("blk.{layer_idx}");
-391            let attention_wq = ct.tensor(reader, &format!("{prefix}.attn_q.weight"), device)?;
-392            let attention_wk = ct.tensor(reader, &format!("{prefix}.attn_k.weight"), device)?;
-393            let attention_wv = ct.tensor(reader, &format!("{prefix}.attn_v.weight"), device)?;
-394            let attention_wo =
-395                ct.tensor(reader, &format!("{prefix}.attn_output.weight"), device)?;
-396            let mlp_or_moe = if n_expert <= 1 {
-397                let feed_forward_w1 =
-398                    ct.tensor(reader, &format!("{prefix}.ffn_gate.weight"), device)?;
-399                let feed_forward_w2 =
-400                    ct.tensor(reader, &format!("{prefix}.ffn_down.weight"), device)?;
-401                let feed_forward_w3 =
-402                    ct.tensor(reader, &format!("{prefix}.ffn_up.weight"), device)?;
-403                MlpOrMoe::Mlp(Mlp {
-404                    feed_forward_w1: QMatMul::from_qtensor(feed_forward_w1)?,
-405                    feed_forward_w2: QMatMul::from_qtensor(feed_forward_w2)?,
-406                    feed_forward_w3: QMatMul::from_qtensor(feed_forward_w3)?,
-407                })
-408            } else {
-409                let feed_forward_gate_inp =
-410                    ct.tensor(reader, &format!("{prefix}.ffn_gate_inp.weight"), device)?;
-411                let mut experts = Vec::with_capacity(n_expert);
-412                for i in 0..n_expert {
-413                    let feed_forward_w1 =
-414                        ct.tensor(reader, &format!("{prefix}.ffn_gate.{i}.weight"), device)?;
-415                    let feed_forward_w2 =
-416                        ct.tensor(reader, &format!("{prefix}.ffn_down.{i}.weight"), device)?;
-417                    let feed_forward_w3 =
-418                        ct.tensor(reader, &format!("{prefix}.ffn_up.{i}.weight"), device)?;
-419                    experts.push(Mlp {
-420                        feed_forward_w1: QMatMul::from_qtensor(feed_forward_w1)?,
-421                        feed_forward_w2: QMatMul::from_qtensor(feed_forward_w2)?,
-422                        feed_forward_w3: QMatMul::from_qtensor(feed_forward_w3)?,
-423                    })
-424                }
-425                MlpOrMoe::MoE {
-426                    n_expert_used,
-427                    feed_forward_gate_inp: QMatMul::from_qtensor(feed_forward_gate_inp)?,
-428                    experts,
-429                }
-430            };
-431            let attention_norm =
-432                ct.tensor(reader, &format!("{prefix}.attn_norm.weight"), device)?;
-433            let ffn_norm = ct.tensor(reader, &format!("{prefix}.ffn_norm.weight"), device)?;
-434            let span_attn = tracing::span!(tracing::Level::TRACE, "attn");
-435            let span_rot = tracing::span!(tracing::Level::TRACE, "attn-rot");
-436            let span_mlp = tracing::span!(tracing::Level::TRACE, "attn-mlp");
-437            layers.push(LayerWeights {
-438                attention_wq: QMatMul::from_qtensor(attention_wq)?,
-439                attention_wk: QMatMul::from_qtensor(attention_wk)?,
-440                attention_wv: QMatMul::from_qtensor(attention_wv)?,
-441                attention_wo: QMatMul::from_qtensor(attention_wo)?,
-442                attention_norm: RmsNorm::from_qtensor(attention_norm, rms_norm_eps)?,
-443                mlp_or_moe,
-444                ffn_norm: RmsNorm::from_qtensor(ffn_norm, rms_norm_eps)?,
-445                n_head: head_count,
-446                n_kv_head: head_count_kv,
-447                head_dim: embedding_length / head_count,
-448                cos: cos.clone(),
-449                sin: sin.clone(),
-450                neg_inf: neg_inf.clone(),
-451                kv_cache: None,
-452                span_attn,
-453                span_rot,
-454                span_mlp,
-455            })
-456        }
-457        let span = tracing::span!(tracing::Level::TRACE, "model");
-458        let span_output = tracing::span!(tracing::Level::TRACE, "output");
-459        Ok(Self {
-460            tok_embeddings: Embedding::new(tok_embeddings, embedding_length),
-461            layers,
-462            norm,
-463            output: QMatMul::from_qtensor(output)?,
-464            masks: HashMap::new(),
-465            span,
-466            span_output,
-467        })
-468    }
-469
-470    fn mask(&mut self, t: usize, device: &Device) -> Result<Tensor> {
-471        if let Some(mask) = self.masks.get(&t) {
-472            Ok(mask.clone())
-473        } else {
-474            let mask: Vec<_> = (0..t)
-475                .flat_map(|i| (0..t).map(move |j| u8::from(j > i)))
-476                .collect();
-477            let mask = Tensor::from_slice(&mask, (t, t), device)?;
-478            self.masks.insert(t, mask.clone());
-479            Ok(mask)
-480        }
-481    }
-482
-483    pub fn forward(&mut self, x: &Tensor, index_pos: usize) -> Result<Tensor> {
-484        let (_b_sz, seq_len) = x.dims2()?;
-485        let mask = if seq_len == 1 {
-486            None
-487        } else {
-488            Some(self.mask(seq_len, x.device())?)
-489        };
-490        let _enter = self.span.enter();
-491        let mut layer_in = self.tok_embeddings.forward(x)?;
-492        for layer in self.layers.iter_mut() {
-493            let x = layer_in;
-494            let residual = &x;
-495            let x = layer.attention_norm.forward(&x)?;
-496            let attn = layer.forward_attn(&x, mask.as_ref(), index_pos)?;
-497            let x = (attn + residual)?;
-498
-499            // MLP
-500            let _enter = layer.span_mlp.enter();
-501            let residual = &x;
-502            let x = layer.ffn_norm.forward(&x)?;
-503            let x = layer.mlp_or_moe.forward(&x)?;
-504            let x = (x + residual)?;
-505            layer_in = x
-506        }
-507        let x = self.norm.forward(&layer_in)?;
-508        let x = x.i((.., seq_len - 1, ..))?;
-509        let _enter = self.span_output.enter();
-510        self.output.forward(&x)
-511    }
-512}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_llama2_c.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_llama2_c.rs.html deleted file mode 100644 index ca17bbc..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_llama2_c.rs.html +++ /dev/null @@ -1,261 +0,0 @@ -quantized_llama2_c.rs - source

candle_transformers/models/
quantized_llama2_c.rs

1//! Quantized Llama2 model implementation.
-2//!
-3//! This provides an 8-bit quantized implementation of Meta's LLaMA2 language model
-4//! for reduced memory usage and faster inference.
-5//!
-6//! Key characteristics:
-7//! - Decoder-only transformer architecture
-8//! - RoPE position embeddings
-9//! - Grouped Query Attention
-10//! - 8-bit quantization of weights
-11//!
-12//! References:
-13//! - [LLaMA2 Paper](https://arxiv.org/abs/2307.09288)
-14//! - [LLaMA2 Technical Report](https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/)
-15//!
-16
-17use super::llama2_c::{Cache, Config};
-18use crate::quantized_nn::{linear_no_bias as linear, Embedding, Linear, RmsNorm};
-19pub use crate::quantized_var_builder::VarBuilder;
-20use candle::{DType, IndexOp, Module, Result, Tensor, D};
-21
-22fn silu(xs: &Tensor) -> Result<Tensor> {
-23    xs / (xs.neg()?.exp()? + 1.0)?
-24}
-25
-26#[derive(Debug, Clone)]
-27struct CausalSelfAttention {
-28    q_proj: Linear,
-29    k_proj: Linear,
-30    v_proj: Linear,
-31    o_proj: Linear,
-32    n_head: usize,
-33    n_key_value_head: usize,
-34    head_dim: usize,
-35}
-36
-37impl CausalSelfAttention {
-38    fn apply_rotary_emb(&self, x: &Tensor, index_pos: usize, cache: &Cache) -> Result<Tensor> {
-39        let (b_sz, seq_len, h, n_embd) = x.dims4()?;
-40        let cos = cache.cos.i(index_pos..index_pos + seq_len)?;
-41        let sin = cache.sin.i(index_pos..index_pos + seq_len)?;
-42        let cos = cos.unsqueeze(1)?;
-43        let sin = sin.unsqueeze(1)?;
-44        let cos = cos.broadcast_as((b_sz, seq_len, 1, n_embd / 2, 1))?;
-45        let sin = sin.broadcast_as((b_sz, seq_len, 1, n_embd / 2, 1))?;
-46        let x = x.reshape((b_sz, seq_len, h, n_embd / 2, 2))?;
-47        let x0 = x.narrow(D::Minus1, 0, 1)?;
-48        let x1 = x.narrow(D::Minus1, 1, 1)?;
-49        let dst0 = (x0.broadcast_mul(&cos)? - x1.broadcast_mul(&sin)?)?;
-50        let dst1 = (x0.broadcast_mul(&sin)? + x1.broadcast_mul(&cos)?)?;
-51        let rope = Tensor::cat(&[&dst0, &dst1], D::Minus1)?.reshape((b_sz, seq_len, h, n_embd))?;
-52        Ok(rope)
-53    }
-54
-55    fn forward(
-56        &self,
-57        x: &Tensor,
-58        index_pos: usize,
-59        block_idx: usize,
-60        cache: &mut Cache,
-61    ) -> Result<Tensor> {
-62        let (b_sz, seq_len, n_embd) = x.dims3()?;
-63        let q = self.q_proj.forward(x)?;
-64        let k = self.k_proj.forward(x)?;
-65        let v = self.v_proj.forward(x)?;
-66
-67        let q = q.reshape((b_sz, seq_len, self.n_head, self.head_dim))?;
-68        let k = k.reshape((b_sz, seq_len, self.n_key_value_head, self.head_dim))?;
-69        let mut v = v.reshape((b_sz, seq_len, self.n_key_value_head, self.head_dim))?;
-70
-71        let q = self.apply_rotary_emb(&q, index_pos, cache)?;
-72        let mut k = self.apply_rotary_emb(&k, index_pos, cache)?;
-73
-74        if cache.use_kv_cache {
-75            if let Some((cache_k, cache_v)) = &cache.kvs[block_idx] {
-76                k = Tensor::cat(&[cache_k, &k], 1)?.contiguous()?;
-77                v = Tensor::cat(&[cache_v, &v], 1)?.contiguous()?;
-78            }
-79            cache.kvs[block_idx] = Some((k.clone(), v.clone()))
-80        }
-81
-82        let k = self.repeat_kv(k)?;
-83        let v = self.repeat_kv(v)?;
-84
-85        let q = q.transpose(1, 2)?.contiguous()?;
-86        let k = k.transpose(1, 2)?.contiguous()?;
-87        let v = v.transpose(1, 2)?.contiguous()?;
-88
-89        let att = (q.matmul(&k.t()?)? / (self.head_dim as f64).sqrt())?;
-90        let att = if seq_len <= 1 {
-91            att
-92        } else {
-93            let mask = cache.mask(seq_len)?.broadcast_as(att.shape())?;
-94            masked_fill(&att, &mask, f32::NEG_INFINITY)?
-95        };
-96        let att = candle_nn::ops::softmax(&att, D::Minus1)?;
-97        // Convert to contiguous as matmul doesn't support strided vs for now.
-98        let y = att.matmul(&v.contiguous()?)?;
-99        let y = y.transpose(1, 2)?.reshape(&[b_sz, seq_len, n_embd])?;
-100        let y = self.o_proj.forward(&y)?;
-101        Ok(y)
-102    }
-103
-104    fn repeat_kv(&self, x: Tensor) -> Result<Tensor> {
-105        let n_rep = self.n_head / self.n_key_value_head;
-106        if n_rep == 1 {
-107            Ok(x)
-108        } else {
-109            let (b_sz, seq_len, n_kv_head, head_dim) = x.dims4()?;
-110            let x = x
-111                .unsqueeze(3)?
-112                .expand((b_sz, seq_len, n_kv_head, n_rep, head_dim))?
-113                .reshape((b_sz, seq_len, n_kv_head * n_rep, head_dim))?;
-114            Ok(x)
-115        }
-116    }
-117
-118    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-119        let size_in = cfg.dim;
-120        let size_q = (cfg.dim / cfg.n_heads) * cfg.n_heads;
-121        let size_kv = (cfg.dim / cfg.n_heads) * cfg.n_kv_heads;
-122        let q_proj = linear(size_in, size_q, vb.pp("q_proj"))?;
-123        let k_proj = linear(size_in, size_kv, vb.pp("k_proj"))?;
-124        let v_proj = linear(size_in, size_kv, vb.pp("v_proj"))?;
-125        let o_proj = linear(size_q, size_in, vb.pp("o_proj"))?;
-126        Ok(Self {
-127            q_proj,
-128            k_proj,
-129            v_proj,
-130            o_proj,
-131            n_head: cfg.n_heads,
-132            n_key_value_head: cfg.n_kv_heads,
-133            head_dim: cfg.dim / cfg.n_heads,
-134        })
-135    }
-136}
-137
-138fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: f32) -> Result<Tensor> {
-139    let shape = mask.shape();
-140    let on_true = Tensor::new(on_true, on_false.device())?.broadcast_as(shape.dims())?;
-141    let m = mask.where_cond(&on_true, on_false)?;
-142    Ok(m)
-143}
-144
-145#[derive(Debug, Clone)]
-146struct Mlp {
-147    c_fc1: Linear,
-148    c_fc2: Linear,
-149    c_proj: Linear,
-150}
-151
-152impl Mlp {
-153    fn new(c_fc1: Linear, c_fc2: Linear, c_proj: Linear) -> Self {
-154        Self {
-155            c_fc1,
-156            c_fc2,
-157            c_proj,
-158        }
-159    }
-160
-161    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-162        let x = (silu(&self.c_fc1.forward(x)?)? * self.c_fc2.forward(x)?)?;
-163        self.c_proj.forward(&x)
-164    }
-165
-166    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-167        let h_size = cfg.dim;
-168        let i_size = cfg.hidden_dim;
-169        let c_fc1 = linear(h_size, i_size, vb.pp("gate_proj"))?;
-170        let c_fc2 = linear(h_size, i_size, vb.pp("up_proj"))?;
-171        let c_proj = linear(i_size, h_size, vb.pp("down_proj"))?;
-172        Ok(Self::new(c_fc1, c_fc2, c_proj))
-173    }
-174}
-175
-176#[derive(Debug, Clone)]
-177struct Block {
-178    rms_1: RmsNorm,
-179    attn: CausalSelfAttention,
-180    rms_2: RmsNorm,
-181    mlp: Mlp,
-182}
-183
-184impl Block {
-185    fn new(rms_1: RmsNorm, attn: CausalSelfAttention, rms_2: RmsNorm, mlp: Mlp) -> Self {
-186        Self {
-187            rms_1,
-188            attn,
-189            rms_2,
-190            mlp,
-191        }
-192    }
-193
-194    fn forward(
-195        &self,
-196        x: &Tensor,
-197        index_pos: usize,
-198        block_idx: usize,
-199        cache: &mut Cache,
-200    ) -> Result<Tensor> {
-201        let residual = x;
-202        let x = self.rms_1.forward(x)?;
-203        let x = (self.attn.forward(&x, index_pos, block_idx, cache)? + residual)?;
-204        let residual = &x;
-205        let x = (self.mlp.forward(&self.rms_2.forward(&x)?)? + residual)?;
-206        Ok(x)
-207    }
-208
-209    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-210        let attn = CausalSelfAttention::load(vb.pp("self_attn"), cfg)?;
-211        let mlp = Mlp::load(vb.pp("mlp"), cfg)?;
-212        let input_layernorm = RmsNorm::new(cfg.dim, cfg.norm_eps, vb.pp("input_layernorm"))?;
-213        let post_attention_layernorm =
-214            RmsNorm::new(cfg.dim, cfg.norm_eps, vb.pp("post_attention_layernorm"))?;
-215        Ok(Self::new(
-216            input_layernorm,
-217            attn,
-218            post_attention_layernorm,
-219            mlp,
-220        ))
-221    }
-222}
-223
-224#[derive(Debug, Clone)]
-225pub struct QLlama {
-226    wte: Embedding,
-227    blocks: Vec<Block>,
-228    ln_f: RmsNorm,
-229    lm_head: Linear,
-230    pub config: Config,
-231}
-232
-233impl QLlama {
-234    pub fn forward(&self, x: &Tensor, index_pos: usize, cache: &mut Cache) -> Result<Tensor> {
-235        let (_b_sz, _seq_len) = x.dims2()?;
-236        let mut x = self.wte.forward(x)?;
-237        for (block_idx, block) in self.blocks.iter().enumerate() {
-238            x = block.forward(&x, index_pos, block_idx, cache)?;
-239        }
-240        let x = self.ln_f.forward(&x)?;
-241        let logits = self.lm_head.forward(&x)?;
-242        logits.to_dtype(DType::F32)
-243    }
-244
-245    pub fn load(vb: VarBuilder, cfg: Config) -> Result<Self> {
-246        let wte = Embedding::new(cfg.vocab_size, cfg.dim, vb.pp("model.embed_tokens"))?;
-247        let lm_head = linear(cfg.dim, cfg.vocab_size, vb.pp("lm_head"))?;
-248        let ln_f = RmsNorm::new(cfg.dim, cfg.norm_eps, vb.pp("model.norm"))?;
-249        let blocks: Vec<_> = (0..cfg.n_layers)
-250            .map(|i| Block::load(vb.pp(format!("model.layers.{i}")), &cfg).unwrap())
-251            .collect();
-252        Ok(Self {
-253            wte,
-254            blocks,
-255            ln_f,
-256            lm_head,
-257            config: cfg,
-258        })
-259    }
-260}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_metavoice.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_metavoice.rs.html deleted file mode 100644 index 8314312..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_metavoice.rs.html +++ /dev/null @@ -1,260 +0,0 @@ -quantized_metavoice.rs - source

candle_transformers/models/
quantized_metavoice.rs

1//! Quantized MetaVoice model implementation.
-2//!
-3//! MetaVoice is a conditional text-to-speech model based on a transformer architecture.
-4//! This implementation provides quantization for reduced memory and compute.
-5//!
-6//! Key characteristics:
-7//! - Transformer-based autoregressive decoder
-8//! - Speaker conditioning
-9//! - Support for 8-bit quantization
-10//! - Key-value caching for efficient inference
-11//! - RMS normalization layers
-12//!
-13//! References:
-14//! - [MetaVoice Code](https://github.com/metavoiceio/metavoice)
-15//!
-16
-17use crate::quantized_nn::{linear_b, Embedding, Linear, RmsNorm};
-18pub use crate::quantized_var_builder::VarBuilder;
-19
-20use crate::models::metavoice::repeat_interleave;
-21use candle::{Module, Result, Tensor, D};
-22
-23pub mod transformer {
-24    use super::*;
-25
-26    type Config = crate::models::metavoice::transformer::Config;
-27
-28    #[derive(Debug, Clone)]
-29    struct FeedForward {
-30        w1: Linear,
-31        w2: Linear,
-32        w3: Linear,
-33        span: tracing::Span,
-34    }
-35
-36    impl FeedForward {
-37        fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-38            let i_size = cfg.intermediate_size();
-39            let w1 = linear_b(cfg.dim, i_size, false, vb.pp("swiglu.w1"))?;
-40            let w2 = linear_b(i_size, cfg.dim, false, vb.pp("w2"))?;
-41            let w3 = linear_b(cfg.dim, i_size, false, vb.pp("swiglu.w3"))?;
-42            Ok(Self {
-43                w1,
-44                w2,
-45                w3,
-46                span: tracing::span!(tracing::Level::TRACE, "feed-forward"),
-47            })
-48        }
-49    }
-50
-51    impl Module for FeedForward {
-52        fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-53            let _enter = self.span.enter();
-54            let swiglu = (candle_nn::ops::silu(&xs.apply(&self.w1)?)? * xs.apply(&self.w3))?;
-55            swiglu.apply(&self.w2)
-56        }
-57    }
-58
-59    #[derive(Debug, Clone)]
-60    struct Attention {
-61        wqkv: Linear,
-62        wo: Linear,
-63        dim: usize,
-64        kv_size: usize,
-65        n_local_heads: usize,
-66        head_dim: usize,
-67        n_head: usize,
-68        kv_cache: Option<(Tensor, Tensor)>,
-69        span: tracing::Span,
-70    }
-71
-72    impl Attention {
-73        fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-74            let n_local_heads = cfg.n_local_heads();
-75            let head_dim = cfg.head_dim();
-76            let total_head_dim = (cfg.n_head + 2 * n_local_heads) * head_dim;
-77            let wqkv = linear_b(cfg.dim, total_head_dim, false, vb.pp("wqkv"))?;
-78            let wo = linear_b(cfg.dim, cfg.dim, false, vb.pp("wo"))?;
-79            Ok(Self {
-80                wqkv,
-81                wo,
-82                dim: cfg.dim,
-83                kv_size: n_local_heads * head_dim,
-84                n_local_heads,
-85                head_dim,
-86                n_head: cfg.n_head,
-87                kv_cache: None,
-88                span: tracing::span!(tracing::Level::TRACE, "attention"),
-89            })
-90        }
-91
-92        fn forward(&mut self, xs: &Tensor, _pos: usize, mask: &Tensor) -> Result<Tensor> {
-93            let _enter = self.span.enter();
-94            let (b_sz, seqlen, _) = xs.dims3()?;
-95
-96            let qkv = xs.apply(&self.wqkv)?;
-97            let q = qkv.narrow(D::Minus1, 0, self.dim)?;
-98            let k = qkv.narrow(D::Minus1, self.dim, self.kv_size)?;
-99            let v = qkv.narrow(D::Minus1, self.dim + self.kv_size, self.kv_size)?;
-100            let q = q
-101                .reshape((b_sz, seqlen, self.n_head, self.head_dim))?
-102                .transpose(1, 2)?
-103                .contiguous()?;
-104            let k = k
-105                .reshape((b_sz, seqlen, self.n_local_heads, self.head_dim))?
-106                .transpose(1, 2)?;
-107            let v = v
-108                .reshape((b_sz, seqlen, self.n_local_heads, self.head_dim))?
-109                .transpose(1, 2)?;
-110
-111            let (k, v) = match &self.kv_cache {
-112                None => (k, v),
-113                Some((prev_k, prev_v)) => {
-114                    let k = Tensor::cat(&[prev_k, &k], 2)?;
-115                    let v = Tensor::cat(&[prev_v, &v], 2)?;
-116                    (k, v)
-117                }
-118            };
-119            self.kv_cache = Some((k.clone(), v.clone()));
-120
-121            let k = repeat_interleave(&k, self.n_head / self.n_local_heads, 1)?;
-122            let v = repeat_interleave(&v, self.n_head / self.n_local_heads, 1)?;
-123
-124            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-125            let attn_weights = (q.matmul(&k.transpose(2, 3)?)? * scale)?;
-126
-127            let attn_weights = attn_weights.broadcast_add(mask)?;
-128            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-129            let attn_output = attn_weights.matmul(&v)?;
-130            attn_output
-131                .transpose(1, 2)?
-132                .reshape((b_sz, seqlen, self.dim))?
-133                .apply(&self.wo)
-134        }
-135
-136        fn clear_kv_cache(&mut self) {
-137            self.kv_cache = None
-138        }
-139    }
-140
-141    #[derive(Debug, Clone)]
-142    struct Block {
-143        attention: Attention,
-144        feed_forward: FeedForward,
-145        ffn_norm: RmsNorm,
-146        attention_norm: RmsNorm,
-147        span: tracing::Span,
-148    }
-149
-150    impl Block {
-151        fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-152            let attention = Attention::new(cfg, vb.pp("attention"))?;
-153            let feed_forward = FeedForward::new(cfg, vb.pp("feed_forward"))?;
-154            let ffn_norm = RmsNorm::new(cfg.dim, cfg.norm_eps, vb.pp("ffn_norm"))?;
-155            let attention_norm = RmsNorm::new(cfg.dim, cfg.norm_eps, vb.pp("attention_norm"))?;
-156            Ok(Self {
-157                attention,
-158                feed_forward,
-159                ffn_norm,
-160                attention_norm,
-161                span: tracing::span!(tracing::Level::TRACE, "block"),
-162            })
-163        }
-164
-165        fn forward(&mut self, xs: &Tensor, pos: usize, mask: &Tensor) -> Result<Tensor> {
-166            let _enter = self.span.enter();
-167            let hs = xs.apply(&self.attention_norm)?;
-168            let hs = (xs + self.attention.forward(&hs, pos, mask))?;
-169            &hs + hs.apply(&self.ffn_norm)?.apply(&self.feed_forward)
-170        }
-171
-172        fn clear_kv_cache(&mut self) {
-173            self.attention.clear_kv_cache()
-174        }
-175    }
-176
-177    #[derive(Debug, Clone)]
-178    pub struct Model {
-179        tok_embeddings: Embedding,
-180        pos_embeddings: Embedding,
-181        speaker_cond_pos: Linear,
-182        layers: Vec<Block>,
-183        norm: RmsNorm,
-184        output: Linear,
-185        spk_cond_mask: Tensor,
-186        span: tracing::Span,
-187    }
-188
-189    impl Model {
-190        pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-191            let tok_embeddings = Embedding::new(cfg.vocab_size, cfg.dim, vb.pp("tok_embeddings"))?;
-192            let pos_embeddings = Embedding::new(cfg.block_size, cfg.dim, vb.pp("pos_embeddings"))?;
-193            let speaker_cond_pos = linear_b(
-194                cfg.speaker_emb_dim,
-195                cfg.dim,
-196                false,
-197                vb.pp("speaker_cond_pos"),
-198            )?;
-199            let mut layers = Vec::with_capacity(cfg.n_layer);
-200            let vb_l = vb.pp("layers");
-201            for layer_idx in 0..cfg.n_layer {
-202                let layer = Block::new(cfg, vb_l.pp(layer_idx))?;
-203                layers.push(layer)
-204            }
-205            let norm = RmsNorm::new(cfg.dim, cfg.norm_eps, vb.pp("norm"))?;
-206            let output = linear_b(cfg.dim, cfg.vocab_size, false, vb.pp("output"))?;
-207            let spk_cond_mask = Tensor::cat(
-208                &[
-209                    Tensor::ones((1, 1, cfg.dim), candle::DType::F32, vb.device())?,
-210                    Tensor::zeros((1, 1, cfg.dim), candle::DType::F32, vb.device())?,
-211                ],
-212                0,
-213            )?;
-214            Ok(Self {
-215                tok_embeddings,
-216                pos_embeddings,
-217                speaker_cond_pos,
-218                layers,
-219                norm,
-220                output,
-221                spk_cond_mask,
-222                span: tracing::span!(tracing::Level::TRACE, "qtransformer"),
-223            })
-224        }
-225
-226        pub fn clear_kv_cache(&mut self) {
-227            for layer in self.layers.iter_mut() {
-228                layer.clear_kv_cache()
-229            }
-230        }
-231
-232        pub fn forward(&mut self, xs: &Tensor, spk_emb: &Tensor, pos: usize) -> Result<Tensor> {
-233            let _enter = self.span.enter();
-234            let (_b_sz, seqlen) = xs.dims2()?;
-235            let mask: Vec<_> = (0..seqlen)
-236                .flat_map(|i| (0..seqlen).map(move |j| if i < j { f32::NEG_INFINITY } else { 0. }))
-237                .collect();
-238            let mask = Tensor::from_slice(&mask, (1, 1, seqlen, seqlen), xs.device())?;
-239            let input_pos = Tensor::arange(pos as u32, (pos + seqlen) as u32, xs.device())?;
-240            let tok_embeddings = xs.apply(&self.tok_embeddings)?;
-241            let pos_embeddings = input_pos.apply(&self.pos_embeddings)?;
-242            let mut xs = tok_embeddings
-243                .broadcast_add(&pos_embeddings)?
-244                .broadcast_add(
-245                    &spk_emb
-246                        .apply(&self.speaker_cond_pos)?
-247                        .broadcast_mul(&self.spk_cond_mask)?,
-248                )?;
-249            let mask = mask.to_dtype(xs.dtype())?;
-250            for layer in self.layers.iter_mut() {
-251                xs = layer.forward(&xs, pos, &mask)?
-252            }
-253            xs.narrow(1, seqlen - 1, 1)?
-254                .contiguous()?
-255                .apply(&self.norm)?
-256                .apply(&self.output)
-257        }
-258    }
-259}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_mistral.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_mistral.rs.html deleted file mode 100644 index a7ef32c..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_mistral.rs.html +++ /dev/null @@ -1,338 +0,0 @@ -quantized_mistral.rs - source

candle_transformers/models/
quantized_mistral.rs

1//! Mistral model implementation with quantization support.
-2//!
-3//! Mistral is a large language model optimized for efficiency.
-4//! This implementation provides quantization for reduced memory and compute.
-5//!
-6//! Key characteristics:
-7//! - Sliding window attention mechanism
-8//! - Grouped query attention (GQA)
-9//! - RMSNorm for layer normalization
-10//! - Rotary positional embeddings (RoPE)
-11//! - Support for 8-bit quantization
-12//!
-13//! References:
-14//! - [Mistral Paper](https://arxiv.org/abs/2310.06825)
-15//! - [Model Card](https://huggingface.co/mistralai/Mistral-7B-v0.1)
-16//!
-17
-18use crate::quantized_nn::{linear_no_bias, Embedding, Linear, RmsNorm};
-19pub use crate::quantized_var_builder::VarBuilder;
-20use candle::{DType, Device, Module, Result, Tensor, D};
-21use candle_nn::Activation;
-22use std::sync::Arc;
-23
-24pub use crate::models::mistral::Config;
-25
-26#[derive(Debug, Clone)]
-27struct RotaryEmbedding {
-28    sin: Tensor,
-29    cos: Tensor,
-30}
-31
-32impl RotaryEmbedding {
-33    fn new(cfg: &Config, dev: &Device) -> Result<Self> {
-34        let rope_theta = cfg.rope_theta as f32;
-35        let dim = cfg.hidden_size / cfg.num_attention_heads;
-36        let max_seq_len = cfg.max_position_embeddings;
-37        let inv_freq: Vec<_> = (0..dim)
-38            .step_by(2)
-39            .map(|i| 1f32 / rope_theta.powf(i as f32 / dim as f32))
-40            .collect();
-41        let inv_freq_len = inv_freq.len();
-42        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?;
-43        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-44            .to_dtype(DType::F32)?
-45            .reshape((max_seq_len, 1))?;
-46        let freqs = t.matmul(&inv_freq)?;
-47        Ok(Self {
-48            sin: freqs.sin()?,
-49            cos: freqs.cos()?,
-50        })
-51    }
-52
-53    fn apply_rotary_emb_qkv(
-54        &self,
-55        q: &Tensor,
-56        k: &Tensor,
-57        seqlen_offset: usize,
-58    ) -> Result<(Tensor, Tensor)> {
-59        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-60        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-61        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-62        let q_embed = candle_nn::rotary_emb::rope(q, &cos, &sin)?;
-63        let k_embed = candle_nn::rotary_emb::rope(k, &cos, &sin)?;
-64        Ok((q_embed, k_embed))
-65    }
-66}
-67
-68#[derive(Debug, Clone)]
-69#[allow(clippy::upper_case_acronyms)]
-70struct MLP {
-71    gate_proj: Linear,
-72    up_proj: Linear,
-73    down_proj: Linear,
-74    act_fn: Activation,
-75}
-76
-77impl MLP {
-78    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-79        let hidden_sz = cfg.hidden_size;
-80        let intermediate_sz = cfg.intermediate_size;
-81        let gate_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("gate_proj"))?;
-82        let up_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("up_proj"))?;
-83        let down_proj = linear_no_bias(intermediate_sz, hidden_sz, vb.pp("down_proj"))?;
-84        Ok(Self {
-85            gate_proj,
-86            up_proj,
-87            down_proj,
-88            act_fn: cfg.hidden_act,
-89        })
-90    }
-91}
-92
-93impl Module for MLP {
-94    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-95        let lhs = xs.apply(&self.gate_proj)?.apply(&self.act_fn)?;
-96        let rhs = xs.apply(&self.up_proj)?;
-97        (lhs * rhs)?.apply(&self.down_proj)
-98    }
-99}
-100
-101#[derive(Debug, Clone)]
-102struct Attention {
-103    q_proj: Linear,
-104    k_proj: Linear,
-105    v_proj: Linear,
-106    o_proj: Linear,
-107    num_heads: usize,
-108    num_kv_heads: usize,
-109    num_kv_groups: usize,
-110    head_dim: usize,
-111    hidden_size: usize,
-112    rotary_emb: Arc<RotaryEmbedding>,
-113    kv_cache: Option<(Tensor, Tensor)>,
-114}
-115
-116impl Attention {
-117    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-118        let hidden_sz = cfg.hidden_size;
-119        let num_heads = cfg.num_attention_heads;
-120        let num_kv_heads = cfg.num_key_value_heads;
-121        let num_kv_groups = num_heads / num_kv_heads;
-122        let head_dim = hidden_sz / num_heads;
-123        let q_proj = linear_no_bias(hidden_sz, num_heads * head_dim, vb.pp("q_proj"))?;
-124        let k_proj = linear_no_bias(hidden_sz, num_kv_heads * head_dim, vb.pp("k_proj"))?;
-125        let v_proj = linear_no_bias(hidden_sz, num_kv_heads * head_dim, vb.pp("v_proj"))?;
-126        let o_proj = linear_no_bias(num_heads * head_dim, hidden_sz, vb.pp("o_proj"))?;
-127        Ok(Self {
-128            q_proj,
-129            k_proj,
-130            v_proj,
-131            o_proj,
-132            num_heads,
-133            num_kv_heads,
-134            num_kv_groups,
-135            head_dim,
-136            hidden_size: hidden_sz,
-137            rotary_emb,
-138            kv_cache: None,
-139        })
-140    }
-141
-142    fn forward(
-143        &mut self,
-144        xs: &Tensor,
-145        attention_mask: Option<&Tensor>,
-146        seqlen_offset: usize,
-147    ) -> Result<Tensor> {
-148        let (b_sz, q_len, _) = xs.dims3()?;
-149
-150        let query_states = self.q_proj.forward(xs)?;
-151        let key_states = self.k_proj.forward(xs)?;
-152        let value_states = self.v_proj.forward(xs)?;
-153
-154        let query_states = query_states
-155            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-156            .transpose(1, 2)?
-157            .contiguous()?;
-158        let key_states = key_states
-159            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-160            .transpose(1, 2)?
-161            .contiguous()?;
-162        let value_states = value_states
-163            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-164            .transpose(1, 2)?;
-165
-166        let (query_states, key_states) =
-167            self.rotary_emb
-168                .apply_rotary_emb_qkv(&query_states, &key_states, seqlen_offset)?;
-169
-170        let (key_states, value_states) = match &self.kv_cache {
-171            None => (key_states, value_states),
-172            Some((prev_k, prev_v)) => {
-173                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-174                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-175                (key_states, value_states)
-176            }
-177        };
-178        self.kv_cache = Some((key_states.clone(), value_states.clone()));
-179
-180        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?;
-181        let value_states = crate::utils::repeat_kv(value_states, self.num_kv_groups)?;
-182
-183        let attn_output = {
-184            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-185            let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-186
-187            let attn_weights = match attention_mask {
-188                None => attn_weights,
-189                Some(mask) => attn_weights.broadcast_add(mask)?,
-190            };
-191            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-192            attn_weights.matmul(&value_states)?
-193        };
-194        attn_output
-195            .transpose(1, 2)?
-196            .reshape((b_sz, q_len, self.hidden_size))?
-197            .apply(&self.o_proj)
-198    }
-199
-200    fn clear_kv_cache(&mut self) {
-201        self.kv_cache = None
-202    }
-203}
-204
-205#[derive(Debug, Clone)]
-206struct DecoderLayer {
-207    self_attn: Attention,
-208    mlp: MLP,
-209    input_layernorm: RmsNorm,
-210    post_attention_layernorm: RmsNorm,
-211}
-212
-213impl DecoderLayer {
-214    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-215        let self_attn = Attention::new(rotary_emb, cfg, vb.pp("self_attn"))?;
-216        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-217        let input_layernorm =
-218            RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("input_layernorm"))?;
-219        let post_attention_layernorm = RmsNorm::new(
-220            cfg.hidden_size,
-221            cfg.rms_norm_eps,
-222            vb.pp("post_attention_layernorm"),
-223        )?;
-224        Ok(Self {
-225            self_attn,
-226            mlp,
-227            input_layernorm,
-228            post_attention_layernorm,
-229        })
-230    }
-231
-232    fn forward(
-233        &mut self,
-234        xs: &Tensor,
-235        attention_mask: Option<&Tensor>,
-236        seqlen_offset: usize,
-237    ) -> Result<Tensor> {
-238        let residual = xs;
-239        let xs = self.input_layernorm.forward(xs)?;
-240        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-241        let xs = (xs + residual)?;
-242        let residual = &xs;
-243        let xs = xs.apply(&self.post_attention_layernorm)?.apply(&self.mlp)?;
-244        residual + xs
-245    }
-246
-247    fn clear_kv_cache(&mut self) {
-248        self.self_attn.clear_kv_cache()
-249    }
-250}
-251
-252#[derive(Debug, Clone)]
-253pub struct Model {
-254    embed_tokens: Embedding,
-255    layers: Vec<DecoderLayer>,
-256    norm: RmsNorm,
-257    lm_head: Linear,
-258    sliding_window: Option<usize>,
-259    device: Device,
-260}
-261
-262impl Model {
-263    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-264        let vb_m = vb.pp("model");
-265        let embed_tokens =
-266            Embedding::new(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-267        let rotary_emb = Arc::new(RotaryEmbedding::new(cfg, vb_m.device())?);
-268        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-269        let vb_l = vb_m.pp("layers");
-270        for layer_idx in 0..cfg.num_hidden_layers {
-271            let layer = DecoderLayer::new(rotary_emb.clone(), cfg, vb_l.pp(layer_idx))?;
-272            layers.push(layer)
-273        }
-274        let norm = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb_m.pp("norm"))?;
-275        let lm_head = linear_no_bias(cfg.hidden_size, cfg.vocab_size, vb.pp("lm_head"))?;
-276        Ok(Self {
-277            embed_tokens,
-278            layers,
-279            norm,
-280            lm_head,
-281            sliding_window: cfg.sliding_window,
-282            device: vb.device().clone(),
-283        })
-284    }
-285
-286    fn prepare_decoder_attention_mask(
-287        &self,
-288        tgt_len: usize,
-289        seqlen_offset: usize,
-290    ) -> Result<Tensor> {
-291        let sliding_window = self.sliding_window.unwrap_or(tgt_len + 1);
-292        let mask: Vec<_> = (0..tgt_len)
-293            .flat_map(|i| {
-294                (0..tgt_len).map(move |j| {
-295                    if i < j || j + sliding_window < i {
-296                        f32::NEG_INFINITY
-297                    } else {
-298                        0.
-299                    }
-300                })
-301            })
-302            .collect();
-303        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-304        let mask = if seqlen_offset > 0 {
-305            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-306            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-307        } else {
-308            mask
-309        };
-310        mask.expand((1, 1, tgt_len, tgt_len + seqlen_offset))?
-311            .to_dtype(DType::F32)
-312    }
-313
-314    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-315        let (_b_size, seq_len) = input_ids.dims2()?;
-316        let attention_mask = if seq_len <= 1 {
-317            None
-318        } else {
-319            let mask = self.prepare_decoder_attention_mask(seq_len, seqlen_offset)?;
-320            Some(mask)
-321        };
-322        let mut xs = self.embed_tokens.forward(input_ids)?;
-323        for layer in self.layers.iter_mut() {
-324            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-325        }
-326        xs.narrow(1, seq_len - 1, 1)?
-327            .contiguous()?
-328            .apply(&self.norm)?
-329            .apply(&self.lm_head)
-330    }
-331
-332    pub fn clear_kv_cache(&mut self) {
-333        for layer in self.layers.iter_mut() {
-334            layer.clear_kv_cache()
-335        }
-336    }
-337}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_mixformer.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_mixformer.rs.html deleted file mode 100644 index f25ecf0..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_mixformer.rs.html +++ /dev/null @@ -1,381 +0,0 @@ -quantized_mixformer.rs - source

candle_transformers/models/
quantized_mixformer.rs

1//! Module containing quantized MixFormer model implementation.
-2//!
-3//! MixFormer is an efficient transformer variant for text generation that uses
-4//! mixture-of-experts and parallel attention/feed-forward blocks.
-5//! This implementation provides quantization for reduced memory usage.
-6//!
-7//! Key features:
-8//! - Parallel attention and feed-forward computation
-9//! - Rotary positional embeddings
-10//! - Optional key-value caching
-11//! - Support for 8-bit quantization
-12//!
-13
-14use crate::quantized_nn::{layer_norm, linear, Linear};
-15pub use crate::quantized_var_builder::VarBuilder;
-16use candle::{DType, Device, IndexOp, Module, Result, Tensor, D};
-17use candle_nn::Activation;
-18
-19pub use crate::models::mixformer::Config;
-20
-21const MAX_SEQ_LEN: usize = 4096;
-22
-23#[derive(Debug, Clone)]
-24struct Embedding {
-25    wte: crate::quantized_nn::Embedding,
-26}
-27
-28impl Embedding {
-29    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-30        let wte = crate::quantized_nn::Embedding::new(cfg.vocab_size, cfg.n_embd, vb.pp("wte"))?;
-31        Ok(Self { wte })
-32    }
-33}
-34
-35impl Module for Embedding {
-36    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-37        self.wte.forward(xs)
-38    }
-39}
-40
-41fn get_mask(size: usize, device: &Device) -> Result<Tensor> {
-42    let mask: Vec<_> = (0..size)
-43        .flat_map(|i| (0..size).map(move |j| u8::from(j > i)))
-44        .collect();
-45    Tensor::from_slice(&mask, (size, size), device)
-46}
-47
-48fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: f32) -> Result<Tensor> {
-49    let shape = mask.shape();
-50    let on_true = Tensor::new(on_true, on_false.device())?.broadcast_as(shape.dims())?;
-51    let m = mask.where_cond(&on_true, on_false)?;
-52    Ok(m)
-53}
-54
-55#[derive(Debug, Clone)]
-56struct RotaryEmbedding {
-57    sin: Tensor,
-58    cos: Tensor,
-59}
-60
-61impl RotaryEmbedding {
-62    fn new(dim: usize, max_seq_len: usize, dev: &Device) -> Result<Self> {
-63        let inv_freq: Vec<_> = (0..dim)
-64            .step_by(2)
-65            .map(|i| 1f32 / 10000f32.powf(i as f32 / dim as f32))
-66            .collect();
-67        let inv_freq_len = inv_freq.len();
-68        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?;
-69        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-70            .to_dtype(DType::F32)?
-71            .reshape((max_seq_len, 1))?;
-72        let freqs = t.matmul(&inv_freq)?;
-73        Ok(Self {
-74            sin: freqs.sin()?,
-75            cos: freqs.cos()?,
-76        })
-77    }
-78
-79    fn apply_rotary_emb_qkv(
-80        &self,
-81        qkv: &Tensor,
-82        seqlen_offset: usize,
-83    ) -> Result<(Tensor, Tensor, Tensor)> {
-84        let (_b_size, seqlen, three, _, _headdim) = qkv.dims5()?;
-85        if three != 3 {
-86            candle::bail!("unexpected shape for qkv {:?}", qkv.shape())
-87        }
-88        let (_rotary_seqlen, rotary_dim) = self.cos.dims2()?;
-89        let rotary_dim = rotary_dim * 2;
-90        let q_rot = qkv.i((.., .., 0, .., ..rotary_dim))?;
-91        let q_pass = qkv.i((.., .., 0, .., rotary_dim..))?;
-92        let k_rot = qkv.i((.., .., 1, .., ..rotary_dim))?;
-93        let k_pass = qkv.i((.., .., 1, .., rotary_dim..))?;
-94        let q12 = q_rot.chunk(2, D::Minus1)?;
-95        let k12 = k_rot.chunk(2, D::Minus1)?;
-96        let (q1, q2) = (&q12[0], &q12[1]);
-97        let (k1, k2) = (&k12[0], &k12[1]);
-98        let c = self.cos.narrow(0, seqlen_offset, seqlen)?.unsqueeze(1)?;
-99        let s = self.sin.narrow(0, seqlen_offset, seqlen)?.unsqueeze(1)?;
-100        let q_rot = Tensor::cat(
-101            &[
-102                (q1.broadcast_mul(&c)? - q2.broadcast_mul(&s)?)?,
-103                (q1.broadcast_mul(&s)? + q2.broadcast_mul(&c)?)?,
-104            ],
-105            D::Minus1,
-106        )?;
-107        let k_rot = Tensor::cat(
-108            &[
-109                (k1.broadcast_mul(&c)? - k2.broadcast_mul(&s)?)?,
-110                (k1.broadcast_mul(&s)? + k2.broadcast_mul(&c)?)?,
-111            ],
-112            D::Minus1,
-113        )?;
-114        let q = Tensor::cat(&[&q_rot, &q_pass], D::Minus1)?;
-115        let k = Tensor::cat(&[&k_rot, &k_pass], D::Minus1)?;
-116        let v = qkv.i((.., .., 2))?;
-117        Ok((q, k, v))
-118    }
-119}
-120
-121#[derive(Debug, Clone)]
-122#[allow(clippy::upper_case_acronyms)]
-123struct MLP {
-124    fc1: Linear,
-125    fc2: Linear,
-126    act: Activation,
-127}
-128
-129impl MLP {
-130    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-131        let n_inner = cfg.n_inner.unwrap_or(4 * cfg.n_embd);
-132        let fc1 = linear(cfg.n_embd, n_inner, vb.pp("fc1"))?;
-133        let fc2 = linear(n_inner, cfg.n_embd, vb.pp("fc2"))?;
-134        Ok(Self {
-135            fc1,
-136            fc2,
-137            act: cfg.activation_function,
-138        })
-139    }
-140}
-141
-142impl Module for MLP {
-143    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-144        xs.apply(&self.fc1)?.apply(&self.act)?.apply(&self.fc2)
-145    }
-146}
-147
-148#[derive(Debug, Clone)]
-149struct CausalLMHead {
-150    ln: candle_nn::LayerNorm,
-151    linear: Linear,
-152}
-153
-154impl CausalLMHead {
-155    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-156        let ln = layer_norm(cfg.n_embd, cfg.layer_norm_epsilon, vb.pp("ln"))?;
-157        let linear = linear(cfg.n_embd, cfg.vocab_size, vb.pp("linear"))?;
-158        Ok(Self { ln, linear })
-159    }
-160}
-161
-162impl Module for CausalLMHead {
-163    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-164        xs.apply(&self.ln)?
-165            .apply(&self.linear)?
-166            .to_dtype(DType::F32)
-167    }
-168}
-169
-170#[derive(Debug, Clone)]
-171#[allow(clippy::upper_case_acronyms)]
-172struct MHA {
-173    wqkv: Linear,
-174    out_proj: Linear,
-175    rotary_emb: RotaryEmbedding,
-176    kv_cache: Option<(Tensor, Tensor)>,
-177    head_dim: usize,
-178    n_head: usize,
-179    softmax_scale: f64,
-180    span: tracing::Span,
-181}
-182
-183impl MHA {
-184    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-185        let head_dim = cfg.n_embd / cfg.n_head;
-186        let op_size = cfg.n_embd;
-187        let wqkv = linear(cfg.n_embd, 3 * op_size, vb.pp("Wqkv"))?;
-188        let out_proj = linear(op_size, cfg.n_embd, vb.pp("out_proj"))?;
-189        let rotary_emb = RotaryEmbedding::new(cfg.rotary_dim, MAX_SEQ_LEN, vb.device())?;
-190        let softmax_scale = 1f64 / (head_dim as f64).sqrt();
-191        Ok(Self {
-192            wqkv,
-193            out_proj,
-194            head_dim,
-195            n_head: cfg.n_head,
-196            kv_cache: None,
-197            rotary_emb,
-198            softmax_scale,
-199            span: tracing::span!(tracing::Level::TRACE, "mha"),
-200        })
-201    }
-202
-203    fn forward(&mut self, xs: &Tensor, mask: Option<&Tensor>) -> Result<Tensor> {
-204        let _enter = self.span.enter();
-205        let (b_size, seq_len, _n_embd) = xs.dims3()?;
-206        let qkv = self
-207            .wqkv
-208            .forward(xs)?
-209            .reshape((b_size, seq_len, 3, (), self.head_dim))?;
-210        let seqlen_offset = match &self.kv_cache {
-211            None => 0,
-212            Some((prev_k, _)) => prev_k.dim(1)?,
-213        };
-214        // In the python implementation, a single tensor is returned with the third axis of size 3.
-215        let (q, k, v) = self.rotary_emb.apply_rotary_emb_qkv(&qkv, seqlen_offset)?;
-216        let (k, v) = match &self.kv_cache {
-217            None => (k, v),
-218            Some((prev_k, prev_v)) => {
-219                let k = Tensor::cat(&[prev_k, &k], 1)?;
-220                let v = Tensor::cat(&[prev_v, &v], 1)?;
-221                (k, v)
-222            }
-223        };
-224        self.kv_cache = Some((k.clone(), v.clone()));
-225        // scores = torch.einsum('bthd,bshd->bhts', q, k * softmax_scale)
-226        let q = q.transpose(1, 2)?.flatten_to(1)?; // b*h, t, d
-227        let k = k.transpose(1, 2)?.flatten_to(1)?; // b*h, s, d
-228        let v = v.transpose(1, 2)?.flatten_to(1)?; // b*h, s, d
-229        let attn_weights = (q.matmul(&k.t()?)? * self.softmax_scale)?; // b*h, t, s
-230
-231        // causal_mask = torch.triu(torch.full((seqlen_q, seqlen_k), -10000.0, device=scores.device), 1)
-232        // scores = scores + causal_mask.to(dtype=scores.dtype)
-233        let attn_weights = match mask {
-234            None => attn_weights,
-235            Some(mask) => masked_fill(
-236                &attn_weights,
-237                &mask.broadcast_left(b_size * self.n_head)?,
-238                f32::NEG_INFINITY,
-239            )?,
-240        };
-241        let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-242
-243        // output = torch.einsum('bhts,bshd->bthd', attention_drop, v)
-244        // attn_weights: b*h,t,s, v: b*h,s,d
-245        let attn_output = attn_weights.matmul(&v)?;
-246        // b*h,t,d
-247        let attn_output = attn_output
-248            .reshape((b_size, (), seq_len, self.head_dim))?
-249            .transpose(1, 2)?
-250            .flatten_from(D::Minus2)?;
-251        attn_output.apply(&self.out_proj)
-252    }
-253
-254    fn clear_kv_cache(&mut self) {
-255        self.kv_cache = None
-256    }
-257}
-258
-259#[derive(Debug, Clone)]
-260struct ParallelBlock {
-261    ln: candle_nn::LayerNorm,
-262    mixer: MHA,
-263    mlp: MLP,
-264    span: tracing::Span,
-265}
-266
-267impl ParallelBlock {
-268    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-269        let ln = layer_norm(cfg.n_embd, cfg.layer_norm_epsilon, vb.pp("ln"))?;
-270        let mixer = MHA::new(cfg, vb.pp("mixer"))?;
-271        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-272        Ok(Self {
-273            ln,
-274            mixer,
-275            mlp,
-276            span: tracing::span!(tracing::Level::TRACE, "block"),
-277        })
-278    }
-279
-280    fn forward(&mut self, xs: &Tensor, mask: Option<&Tensor>) -> Result<Tensor> {
-281        let _enter = self.span.enter();
-282        let residual = xs;
-283        let xs = xs.apply(&self.ln)?;
-284        let attn_outputs = self.mixer.forward(&xs, mask)?;
-285        let feed_forward_hidden_states = self.mlp.forward(&xs)?;
-286        attn_outputs + feed_forward_hidden_states + residual
-287    }
-288
-289    fn clear_kv_cache(&mut self) {
-290        self.mixer.clear_kv_cache()
-291    }
-292}
-293
-294#[derive(Debug, Clone)]
-295pub struct MixFormerSequentialForCausalLM {
-296    embedding: Embedding,
-297    blocks: Vec<ParallelBlock>,
-298    head: CausalLMHead,
-299    span: tracing::Span,
-300}
-301
-302impl MixFormerSequentialForCausalLM {
-303    pub fn new_v2(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-304        let vb_head = vb.pp("lm_head");
-305        let vb = vb.pp("transformer");
-306        let embedding = Embedding::new(cfg, vb.pp("embd"))?;
-307        let mut blocks = Vec::new();
-308        for i in 0..cfg.n_layer {
-309            let block = ParallelBlock::new(cfg, vb.pp("h").pp(i))?;
-310            blocks.push(block)
-311        }
-312        let head = CausalLMHead::new(cfg, vb_head)?;
-313        Ok(Self {
-314            embedding,
-315            blocks,
-316            head,
-317            span: tracing::span!(tracing::Level::TRACE, "mixformer"),
-318        })
-319    }
-320
-321    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-322        let vb = vb.pp("layers");
-323        let embedding = Embedding::new(cfg, vb.pp(0))?;
-324        let mut blocks = Vec::new();
-325        for i in 0..cfg.n_layer {
-326            let block = ParallelBlock::new(cfg, vb.pp(i + 1))?;
-327            blocks.push(block);
-328        }
-329        let head = CausalLMHead::new(cfg, vb.pp(cfg.n_layer + 1))?;
-330        Ok(Self {
-331            embedding,
-332            blocks,
-333            head,
-334            span: tracing::span!(tracing::Level::TRACE, "mixformer"),
-335        })
-336    }
-337
-338    pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor> {
-339        let _enter = self.span.enter();
-340        let (_b_size, seq_len) = xs.dims2()?;
-341        let mut xs = xs.apply(&self.embedding)?;
-342        let mask = if seq_len <= 1 {
-343            None
-344        } else {
-345            Some(get_mask(seq_len, xs.device())?)
-346        };
-347        for block in self.blocks.iter_mut() {
-348            xs = block.forward(&xs, mask.as_ref())?;
-349        }
-350        xs.narrow(1, seq_len - 1, 1)?.apply(&self.head)?.squeeze(1)
-351    }
-352
-353    pub fn forward_with_img(
-354        &mut self,
-355        bos_token: &Tensor,
-356        xs: &Tensor,
-357        img_embeds: &Tensor,
-358    ) -> Result<Tensor> {
-359        let _enter = self.span.enter();
-360        let xs = xs.apply(&self.embedding)?;
-361        let bos_token = bos_token.apply(&self.embedding)?;
-362        // Python implementation sequence order is <bos token embedding><img embedding><rest of text embedding>
-363        // https://github.com/vikhyat/moondream/blob/a9d788a20d1543fb1479edc54106e88cff7759d3/moondream/moondream.py#L43-L56
-364        let mut xs = Tensor::cat(&[bos_token, img_embeds.clone(), xs], 1)?;
-365        let (_b_size, seq_len, _embds) = xs.dims3()?;
-366        let mask = Some(get_mask(seq_len, xs.device())?);
-367        for block in self.blocks.iter_mut() {
-368            xs = block.forward(&xs, mask.as_ref())?
-369        }
-370        let xs = xs
-371            .narrow(1, seq_len - 1, 1)?
-372            .apply(&self.head)?
-373            .squeeze(1)?;
-374        Ok(xs)
-375    }
-376
-377    pub fn clear_kv_cache(&mut self) {
-378        self.blocks.iter_mut().for_each(|b| b.clear_kv_cache())
-379    }
-380}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_moondream.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_moondream.rs.html deleted file mode 100644 index 6e0ad9d..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_moondream.rs.html +++ /dev/null @@ -1,287 +0,0 @@ -quantized_moondream.rs - source

candle_transformers/models/
quantized_moondream.rs

1//! Implementation of a quantized Moondream vision language model.
-2//!
-3//! Moondream is a lightweight vision-language model for image understanding and generation.
-4//! This module provides a quantized version for reduced memory usage and faster inference.
-5//!
-6//! Key features:
-7//! - ViT-based vision encoder
-8//! - Phi-2 text decoder model
-9//! - Memory efficient 8-bit quantization
-10//! - Optimized for efficient deployment
-11//!
-12//! References:
-13//! - [Moondream Model](https://github.com/vikhyat/moondream)
-14//!
-15
-16use crate::models::moondream::{Config, VisionConfig};
-17use crate::models::quantized_mixformer::MixFormerSequentialForCausalLM as PhiModel;
-18use crate::quantized_nn::{layer_norm, linear_b, Linear};
-19use crate::quantized_var_builder::VarBuilder;
-20use candle::{IndexOp, Module, Result, Tensor, D};
-21
-22fn scaled_dot_product_attention(q: &Tensor, k: &Tensor, v: &Tensor) -> Result<Tensor> {
-23    let dim = q.dim(D::Minus1)?;
-24    let scale_factor = 1.0 / (dim as f64).sqrt();
-25    let attn_weights = (q.matmul(&k.t()?)? * scale_factor)?;
-26    candle_nn::ops::softmax_last_dim(&attn_weights)?.matmul(v)
-27}
-28
-29#[derive(Debug, Clone)]
-30struct LinearPatchEmbedding {
-31    linear: Linear,
-32}
-33
-34impl LinearPatchEmbedding {
-35    fn new(vb: VarBuilder) -> Result<Self> {
-36        let linear = linear_b(588, 1152, true, vb.pp("linear"))?;
-37        Ok(Self { linear })
-38    }
-39}
-40
-41impl Module for LinearPatchEmbedding {
-42    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-43        xs.apply(&self.linear)
-44    }
-45}
-46
-47#[derive(Debug, Clone)]
-48struct Attention {
-49    num_heads: usize,
-50    head_dim: usize,
-51    qkv: Linear,
-52    proj: Linear,
-53}
-54
-55impl Attention {
-56    pub fn new(vb: VarBuilder, dim: usize, num_heads: usize) -> Result<Self> {
-57        let qkv = linear_b(dim, dim * 3, true, vb.pp("qkv"))?;
-58        let proj = linear_b(dim, dim, true, vb.pp("proj"))?;
-59        Ok(Self {
-60            num_heads,
-61            head_dim: dim / num_heads,
-62            qkv,
-63            proj,
-64        })
-65    }
-66}
-67
-68impl Module for Attention {
-69    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-70        let (b, n, c) = xs.dims3()?;
-71        let qkv = xs
-72            .apply(&self.qkv)?
-73            .reshape((b, n, 3, self.num_heads, self.head_dim))?
-74            .permute((2, 0, 3, 1, 4))?;
-75        let (q, k, v) = (
-76            qkv.i(0)?.contiguous()?,
-77            qkv.i(1)?.contiguous()?,
-78            qkv.i(2)?.contiguous()?,
-79        );
-80        scaled_dot_product_attention(&q, &k, &v)?
-81            .transpose(1, 2)?
-82            .reshape((b, n, c))?
-83            .apply(&self.proj)
-84    }
-85}
-86
-87#[derive(Debug, Clone)]
-88struct VitBlock {
-89    attn: Attention,
-90    mlp: Mlp,
-91    norm1: candle_nn::LayerNorm,
-92    norm2: candle_nn::LayerNorm,
-93}
-94
-95impl VitBlock {
-96    fn new(vb: VarBuilder, dim: usize, num_heads: usize, cfg: &VisionConfig) -> Result<Self> {
-97        let attn = Attention::new(vb.pp("attn"), dim, num_heads)?;
-98        let mlp = Mlp::new(vb.pp("mlp"), dim, cfg.hidden_features, dim, cfg.act)?;
-99        let norm1 = layer_norm(dim, 1e-5, vb.pp("norm1"))?;
-100        let norm2 = layer_norm(dim, 1e-5, vb.pp("norm2"))?;
-101        Ok(Self {
-102            attn,
-103            mlp,
-104            norm1,
-105            norm2,
-106        })
-107    }
-108}
-109
-110impl Module for VitBlock {
-111    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-112        let ys = xs.apply(&self.norm1)?.apply(&self.attn)?;
-113        let xs = (xs + &ys)?;
-114        let ys = xs.apply(&self.norm2)?.apply(&self.mlp)?;
-115        let xs = (&xs + &ys)?;
-116        Ok(xs)
-117    }
-118}
-119
-120#[derive(Debug, Clone)]
-121struct VisionTransformer {
-122    patch_embed: LinearPatchEmbedding,
-123    pos_embed: Tensor,
-124    blocks: Vec<VitBlock>,
-125    norm: candle_nn::LayerNorm,
-126}
-127
-128impl VisionTransformer {
-129    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-130        let patch_embed = LinearPatchEmbedding::new(vb.pp("patch_embed"))?;
-131        let pos_embed = vb
-132            .get((1, cfg.embed_len, cfg.embed_dim), "pos_embed")?
-133            .dequantize(vb.device())?;
-134        let blocks = (0..cfg.num_blocks)
-135            .map(|i| {
-136                VitBlock::new(
-137                    vb.pp(format!("blocks.{}", i)),
-138                    cfg.embed_dim,
-139                    cfg.num_heads,
-140                    cfg,
-141                )
-142            })
-143            .collect::<Result<_>>()?;
-144        let norm = layer_norm(cfg.embed_dim, 1e-5, vb.pp("norm"))?;
-145        Ok(Self {
-146            patch_embed,
-147            pos_embed,
-148            blocks,
-149            norm,
-150        })
-151    }
-152}
-153
-154impl Module for VisionTransformer {
-155    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-156        let mut xs = (&xs.apply(&self.patch_embed)? + &self.pos_embed)?;
-157        for block in self.blocks.iter() {
-158            xs = xs.apply(block)?;
-159        }
-160        xs.apply(&self.norm)
-161    }
-162}
-163
-164#[derive(Debug, Clone)]
-165pub struct Encoder {
-166    model: VisionTransformer,
-167}
-168
-169impl Encoder {
-170    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-171        let model = VisionTransformer::new(cfg, vb.pp("model.visual"))?;
-172        Ok(Self { model })
-173    }
-174}
-175
-176impl Module for Encoder {
-177    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-178        xs.apply(&self.model)
-179    }
-180}
-181
-182#[derive(Debug, Clone)]
-183struct Mlp {
-184    fc1: Linear,
-185    act: candle_nn::Activation,
-186    fc2: Linear,
-187}
-188
-189impl Mlp {
-190    fn new(
-191        vb: VarBuilder,
-192        in_features: usize,
-193        hidden_features: usize,
-194        out_features: usize,
-195        act: candle_nn::Activation,
-196    ) -> Result<Self> {
-197        let fc1 = linear_b(in_features, hidden_features, true, vb.pp("fc1"))?;
-198        let fc2 = linear_b(hidden_features, out_features, true, vb.pp("fc2"))?;
-199        Ok(Self { fc1, act, fc2 })
-200    }
-201}
-202
-203impl Module for Mlp {
-204    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-205        xs.apply(&self.fc1)?.apply(&self.act)?.apply(&self.fc2)
-206    }
-207}
-208
-209#[derive(Debug, Clone)]
-210struct VisionProjection {
-211    mlp: Mlp,
-212}
-213
-214impl VisionProjection {
-215    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-216        let mlp = Mlp::new(
-217            vb.pp("mlp"),
-218            cfg.image_embedding_dim,
-219            cfg.hidden_dim,
-220            cfg.model_dim,
-221            cfg.act,
-222        )?;
-223        Ok(Self { mlp })
-224    }
-225}
-226
-227impl Module for VisionProjection {
-228    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-229        xs.apply(&self.mlp)
-230    }
-231}
-232
-233#[derive(Debug, Clone)]
-234pub struct VisionEncoder {
-235    encoder: Encoder,
-236    projection: VisionProjection,
-237}
-238
-239impl VisionEncoder {
-240    pub fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-241        let encoder = Encoder::new(cfg, vb.pp("encoder"))?;
-242        let projection = VisionProjection::new(cfg, vb.pp("projection"))?;
-243        Ok(Self {
-244            encoder,
-245            projection,
-246        })
-247    }
-248}
-249
-250impl Module for VisionEncoder {
-251    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-252        let (b, c, hp1, wp2) = xs.dims4()?;
-253        let (p1, p2) = (14, 14);
-254        let h = hp1 / p1;
-255        let w = wp2 / p2;
-256        xs.reshape((b, c, h, p1, h, p2))?
-257            .permute((0, 2, 4, 1, 3, 5))?
-258            .reshape((b, h * w, c * p1 * p2))?
-259            .apply(&self.encoder)?
-260            .apply(&self.projection)
-261    }
-262}
-263
-264pub struct Model {
-265    pub text_model: PhiModel,
-266    pub vision_encoder: VisionEncoder,
-267}
-268
-269impl Model {
-270    pub fn new(config: &Config, vb: VarBuilder) -> Result<Self> {
-271        let text_model = PhiModel::new_v2(&config.phi_config, vb.pp("text_model"))?;
-272        let vision_encoder = VisionEncoder::new(&config.vision_config, vb.pp("vision_encoder"))?;
-273        Ok(Self {
-274            text_model,
-275            vision_encoder,
-276        })
-277    }
-278
-279    pub fn vision_encoder(&self) -> &VisionEncoder {
-280        &self.vision_encoder
-281    }
-282
-283    pub fn text_model(&mut self) -> &mut PhiModel {
-284        &mut self.text_model
-285    }
-286}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_mpt.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_mpt.rs.html deleted file mode 100644 index f3b42d7..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_mpt.rs.html +++ /dev/null @@ -1,220 +0,0 @@ -quantized_mpt.rs - source

candle_transformers/models/
quantized_mpt.rs

1//! Quantized MPT model implementation.
-2//!
-3//! MPT (MPT-7B) is a causal transformer model series optimized for code generation.
-4//! This implementation provides quantization for reduced memory and compute.
-5//!
-6//! Key characteristics:
-7//! - Multi-Query Grouped Attention (MQA)
-8//! - Support for KV-caching
-9//! - Pre-computed ALiBi attention biases
-10//! - Support for 8-bit quantization
-11//!
-12//! References:
-13//! - [Replit Code Models](https://huggingface.co/replit/replit-code-v1_5-3b)
-14//! - [MPT-7B Implementation](https://github.com/mosaicml/llm-foundry)
-15//!
-16/// MPT model used by replit-code-v1_5-3b
-17/// https://huggingface.co/replit/replit-code-v1_5-3b/blob/main/modeling_mpt.py
-18///
-19use crate::quantized_nn::{layer_norm_no_bias, linear_no_bias, Embedding, Linear};
-20pub use crate::quantized_var_builder::VarBuilder;
-21/// MPT model used by replit-code-v1_5-3b
-22/// https://huggingface.co/replit/replit-code-v1_5-3b/blob/main/modeling_mpt.py
-23use candle::{IndexOp, Module, Result, Tensor, D};
-24use candle_nn::LayerNorm;
-25
-26pub use super::mpt::Config;
-27
-28#[derive(Debug, Clone)]
-29struct GroupedQueryAttention {
-30    wqkv: Linear,
-31    out_proj: Linear,
-32    kv_cache: Option<(Tensor, Tensor)>,
-33    softmax_scale: f64,
-34    head_dim: usize,
-35    d_model: usize,
-36    n_heads: usize,
-37    kv_n_heads: usize,
-38    attn_bias: Tensor,
-39    span: tracing::Span,
-40}
-41
-42impl GroupedQueryAttention {
-43    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-44        let head_dim = cfg.d_model / cfg.n_heads;
-45        let wqkv_size = cfg.d_model + 2 * cfg.kv_n_heads * head_dim;
-46        let wqkv = linear_no_bias(cfg.d_model, wqkv_size, vb.pp("Wqkv"))?;
-47        let softmax_scale = 1f64 / (head_dim as f64).sqrt();
-48        let out_proj = linear_no_bias(cfg.d_model, cfg.d_model, vb.pp("out_proj"))?;
-49        let attn_bias = super::mpt::build_alibi_bias(cfg)?.to_device(vb.device())?;
-50        Ok(Self {
-51            wqkv,
-52            out_proj,
-53            kv_cache: None,
-54            softmax_scale,
-55            head_dim,
-56            d_model: cfg.d_model,
-57            n_heads: cfg.n_heads,
-58            kv_n_heads: cfg.kv_n_heads,
-59            attn_bias,
-60            span: tracing::span!(tracing::Level::TRACE, "gqa"),
-61        })
-62    }
-63
-64    fn forward(&mut self, xs: &Tensor, mask: Option<&Tensor>) -> Result<Tensor> {
-65        let _enter = self.span.enter();
-66        let (b_size, seq_len, _n_embd) = xs.dims3()?;
-67        let qkv = self.wqkv.forward(xs)?;
-68        let query = qkv.narrow(2, 0, self.d_model)?;
-69        let kv_size = self.kv_n_heads * self.head_dim;
-70        let key = qkv.narrow(2, self.d_model, kv_size)?;
-71        let value = qkv.narrow(2, self.d_model + kv_size, kv_size)?;
-72        // scaled_multihead_dot_product_attention
-73        let query = query
-74            .reshape((b_size, seq_len, self.n_heads, ()))?
-75            .transpose(1, 2)?; // b,h,s,d
-76        let key = key
-77            .reshape((b_size, seq_len, self.kv_n_heads, ()))?
-78            .permute((0, 2, 3, 1))?; // b,h,d,s
-79        let value = value
-80            .reshape((b_size, seq_len, self.kv_n_heads, ()))?
-81            .transpose(1, 2)?; // b,h,s,d
-82        let (key, value) = match &self.kv_cache {
-83            None => (key, value),
-84            Some((prev_k, prev_v)) => {
-85                let k = Tensor::cat(&[prev_k, &key], 3)?;
-86                let v = Tensor::cat(&[prev_v, &value], 2)?;
-87                (k, v)
-88            }
-89        };
-90        self.kv_cache = Some((key.clone(), value.clone()));
-91        let query = query.contiguous()?;
-92        let key = crate::utils::repeat_kv(key, self.n_heads / self.kv_n_heads)?.contiguous()?;
-93        let value = crate::utils::repeat_kv(value, self.n_heads / self.kv_n_heads)?.contiguous()?;
-94        let attn_weights = (query.matmul(&key)? * self.softmax_scale)?;
-95        let attn_bias = {
-96            let s_q = query.dim(D::Minus2)?;
-97            let s_k = key.dim(D::Minus1)?;
-98            let (_, _, a_q, a_k) = self.attn_bias.dims4()?;
-99            let start_q = a_q.saturating_sub(s_q);
-100            let start_k = a_k.saturating_sub(s_k);
-101            self.attn_bias.i((.., .., start_q.., start_k..))?
-102        };
-103        let attn_weights = attn_weights.broadcast_add(&attn_bias)?;
-104        let attn_weights = match mask {
-105            None => attn_weights,
-106            Some(mask) => super::mpt::masked_fill(
-107                &attn_weights,
-108                &mask.broadcast_as(attn_weights.shape())?,
-109                f32::NEG_INFINITY,
-110            )?,
-111        };
-112        let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-113        let attn_output = attn_weights
-114            .matmul(&value)?
-115            .transpose(1, 2)?
-116            .flatten_from(D::Minus2)?;
-117        let out = attn_output.apply(&self.out_proj)?;
-118        Ok(out)
-119    }
-120}
-121
-122#[derive(Debug, Clone)]
-123struct Ffn {
-124    up_proj: Linear,
-125    down_proj: Linear,
-126}
-127
-128impl Ffn {
-129    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-130        let hidden = cfg.d_model * cfg.expansion_ratio;
-131        let up_proj = linear_no_bias(cfg.d_model, hidden, vb.pp("up_proj"))?;
-132        let down_proj = linear_no_bias(hidden, cfg.d_model, vb.pp("down_proj"))?;
-133        Ok(Self { up_proj, down_proj })
-134    }
-135}
-136
-137impl Module for Ffn {
-138    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-139        xs.apply(&self.up_proj)?.gelu_erf()?.apply(&self.down_proj)
-140    }
-141}
-142
-143#[derive(Debug, Clone)]
-144struct MPTBlock {
-145    norm1: LayerNorm, // Do we need the low-precision variant?
-146    attn: GroupedQueryAttention,
-147    norm2: LayerNorm,
-148    ffn: Ffn,
-149}
-150
-151impl MPTBlock {
-152    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-153        let norm1 = layer_norm_no_bias(cfg.d_model, 1e-5, vb.pp("norm_1"))?;
-154        let norm2 = layer_norm_no_bias(cfg.d_model, 1e-5, vb.pp("norm_2"))?;
-155        let attn = GroupedQueryAttention::new(cfg, vb.pp("attn"))?;
-156        let ffn = Ffn::new(cfg, vb.pp("ffn"))?;
-157        Ok(Self {
-158            norm1,
-159            attn,
-160            norm2,
-161            ffn,
-162        })
-163    }
-164
-165    fn forward(&mut self, xs: &Tensor, mask: Option<&Tensor>) -> Result<Tensor> {
-166        let residual = xs;
-167        let xs = xs.apply(&self.norm1)?;
-168        let xs = self.attn.forward(&xs, mask)?;
-169        let xs = (xs + residual)?;
-170        let residual = &xs;
-171        let xs = xs.apply(&self.norm2)?.apply(&self.ffn)?;
-172        xs + residual
-173    }
-174}
-175
-176#[derive(Debug, Clone)]
-177pub struct Model {
-178    wte: Embedding,
-179    blocks: Vec<MPTBlock>,
-180    norm_f: LayerNorm,
-181}
-182
-183impl Model {
-184    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-185        let wte = Embedding::new(cfg.vocab_size, cfg.d_model, vb.pp("wte"))?;
-186        let vb_b = vb.pp("blocks");
-187        let mut blocks = Vec::with_capacity(cfg.n_layers);
-188        for i in 0..cfg.n_layers {
-189            let block = MPTBlock::new(cfg, vb_b.pp(i))?;
-190            blocks.push(block)
-191        }
-192        let norm_f = layer_norm_no_bias(cfg.d_model, 1e-5, vb.pp("norm_f"))?;
-193        Ok(Self {
-194            wte,
-195            blocks,
-196            norm_f,
-197        })
-198    }
-199
-200    pub fn forward(&mut self, xs: &Tensor) -> Result<Tensor> {
-201        let (_b_size, seq_len) = xs.dims2()?;
-202        let mut xs = xs.apply(&self.wte)?;
-203        let mask = if seq_len <= 1 {
-204            None
-205        } else {
-206            Some(super::mpt::get_mask(seq_len, xs.device())?)
-207        };
-208        for block in self.blocks.iter_mut() {
-209            xs = block.forward(&xs, mask.as_ref())?;
-210        }
-211        let xs = xs.apply(&self.norm_f)?;
-212        let logits = xs
-213            .narrow(1, seq_len - 1, 1)?
-214            .squeeze(1)?
-215            .matmul(&self.wte.embeddings().t()?)?
-216            .squeeze(1)?;
-217        Ok(logits)
-218    }
-219}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_phi.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_phi.rs.html deleted file mode 100644 index d581dc3..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_phi.rs.html +++ /dev/null @@ -1,306 +0,0 @@ -quantized_phi.rs - source

candle_transformers/models/
quantized_phi.rs

1//! Phi2 model implementation with quantization support.
-2//!
-3//! Phi2 is a 2.7B parameter language model using scaled-up Transformer decoder architecture.
-4//! This implementation provides quantization for reduced memory and compute usage.
-5//!
-6//! Key characteristics:
-7//! - Partial attention with learned mixing to reduce quadratic costs
-8//! - Layer reuse for improved inference efficiency
-9//! - Linear transformations with scalar mixing
-10//! - Rotary positional embeddings (RoPE)
-11//! - Support for 8-bit quantization
-12//!
-13//! References:
-14//! - [Phi2 Paper](https://arxiv.org/abs/2309.05463)
-15//! - [Model Card](https://huggingface.co/microsoft/phi-2)
-16//!
-17
-18use std::collections::HashMap;
-19
-20use candle::quantized::gguf_file;
-21use candle::quantized::QTensor;
-22use candle::{DType, Device, IndexOp, Module, Result, Tensor, D};
-23use candle_nn::{Embedding, LayerNorm};
-24
-25pub const MAX_SEQ_LEN: usize = 4096;
-26
-27#[derive(Debug, Clone)]
-28struct QLinear {
-29    inner: candle::quantized::QMatMul,
-30    bias: Tensor,
-31    span: tracing::Span,
-32}
-33
-34impl QLinear {
-35    fn new<R: std::io::Read + std::io::Seek>(
-36        ct: &gguf_file::Content,
-37        r: &mut R,
-38        name: &str,
-39        device: &Device,
-40    ) -> Result<Self> {
-41        let span = tracing::span!(tracing::Level::TRACE, "qmatmul");
-42        let w = ct.tensor(r, &format!("{name}.weight"), device)?;
-43        let b = ct.tensor(r, &format!("{name}.bias"), device)?;
-44        let inner = candle::quantized::QMatMul::from_qtensor(w)?;
-45        let bias = b.dequantize(device)?;
-46        Ok(Self { inner, bias, span })
-47    }
-48}
-49
-50impl Module for QLinear {
-51    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-52        let _enter = self.span.enter();
-53        self.inner.forward(xs)?.broadcast_add(&self.bias)
-54    }
-55}
-56
-57#[derive(Debug, Clone)]
-58struct Mlp {
-59    ffn_up: QLinear,
-60    ffn_down: QLinear,
-61}
-62
-63impl Module for Mlp {
-64    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-65        xs.apply(&self.ffn_up)?.gelu()?.apply(&self.ffn_down)
-66    }
-67}
-68
-69#[derive(Debug, Clone)]
-70struct LayerWeights {
-71    attn_qkv: QLinear,
-72    attn_output: QLinear,
-73    attn_norm: LayerNorm,
-74    mlp: Mlp,
-75    n_head: usize,
-76    n_kv_head: usize,
-77    head_dim: usize,
-78    cos: Tensor,
-79    sin: Tensor,
-80    rope_dim: usize,
-81    neg_inf: Tensor,
-82    kv_cache: Option<(Tensor, Tensor)>,
-83    span_attn: tracing::Span,
-84    span_rot: tracing::Span,
-85}
-86
-87fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: &Tensor) -> Result<Tensor> {
-88    let shape = mask.shape();
-89    let m = mask.where_cond(&on_true.broadcast_as(shape.dims())?, on_false)?;
-90    Ok(m)
-91}
-92
-93impl LayerWeights {
-94    fn apply_rotary_emb(&self, xs: &Tensor, index_pos: usize) -> Result<Tensor> {
-95        let _enter = self.span_rot.enter();
-96        let (_b_sz, _n_head, seq_len, _n_embd) = xs.dims4()?;
-97        let xs_rot = xs.i((.., .., .., ..self.rope_dim))?;
-98        let xs_pass = xs.i((.., .., .., self.rope_dim..))?;
-99        let cos = self.cos.narrow(0, index_pos, seq_len)?;
-100        let sin = self.sin.narrow(0, index_pos, seq_len)?;
-101        let xs_rot = candle_nn::rotary_emb::rope(&xs_rot.contiguous()?, &cos, &sin)?;
-102        Tensor::cat(&[&xs_rot, &xs_pass], D::Minus1)
-103    }
-104
-105    fn forward_attn(
-106        &mut self,
-107        x: &Tensor,
-108        mask: Option<&Tensor>,
-109        index_pos: usize,
-110    ) -> Result<Tensor> {
-111        let _enter = self.span_attn.enter();
-112        let (b_sz, seq_len, n_embd) = x.dims3()?;
-113        let qkv =
-114            self.attn_qkv
-115                .forward(x)?
-116                .reshape((b_sz, seq_len, 3, self.n_head, self.head_dim))?;
-117
-118        let q = qkv.i((.., .., 0))?.transpose(1, 2)?;
-119        let k = qkv.i((.., .., 1))?.transpose(1, 2)?;
-120        let v = qkv.i((.., .., 2))?.transpose(1, 2)?;
-121        // This call to contiguous ensures that the fast kernel can be called below. It's
-122        // actually a no-op except when processing the initial prompt so has no significant
-123        // impact on performance.
-124        let v = v.contiguous()?;
-125
-126        let q = self.apply_rotary_emb(&q, index_pos)?.contiguous()?;
-127        let k = self.apply_rotary_emb(&k, index_pos)?;
-128
-129        let (k, v) = match &self.kv_cache {
-130            None => (k.contiguous()?, v.contiguous()?),
-131            Some((k_cache, v_cache)) => {
-132                if index_pos == 0 {
-133                    (k.contiguous()?, v.contiguous()?)
-134                } else {
-135                    let k = Tensor::cat(&[k_cache, &k], 2)?;
-136                    let v = Tensor::cat(&[v_cache, &v], 2)?;
-137                    (k.contiguous()?, v.contiguous()?)
-138                }
-139            }
-140        };
-141        self.kv_cache = Some((k.clone(), v.clone()));
-142
-143        let k = crate::utils::repeat_kv(k, self.n_head / self.n_kv_head)?;
-144        let v = crate::utils::repeat_kv(v, self.n_head / self.n_kv_head)?;
-145
-146        let att = (q.matmul(&k.t()?)? / (self.head_dim as f64).sqrt())?;
-147        let att = match mask {
-148            None => att,
-149            Some(mask) => {
-150                let mask = mask.broadcast_as(att.shape())?;
-151                masked_fill(&att, &mask, &self.neg_inf)?
-152            }
-153        };
-154        let att = candle_nn::ops::softmax_last_dim(&att)?;
-155        // Convert to contiguous as matmul doesn't support strided vs for now.
-156        let y = att.matmul(&v.contiguous()?)?;
-157        let y = y.transpose(1, 2)?.reshape(&[b_sz, seq_len, n_embd])?;
-158        let y = self.attn_output.forward(&y)?;
-159        Ok(y)
-160    }
-161}
-162
-163#[derive(Debug, Clone)]
-164pub struct ModelWeights {
-165    tok_embeddings: Embedding,
-166    layers: Vec<LayerWeights>,
-167    output_norm: LayerNorm,
-168    output: QLinear,
-169    masks: HashMap<usize, Tensor>,
-170    span: tracing::Span,
-171    span_output: tracing::Span,
-172}
-173
-174fn precomput_freqs_cis(
-175    head_dim: usize,
-176    freq_base: f32,
-177    device: &Device,
-178) -> Result<(Tensor, Tensor)> {
-179    let theta: Vec<_> = (0..head_dim)
-180        .step_by(2)
-181        .map(|i| 1f32 / freq_base.powf(i as f32 / head_dim as f32))
-182        .collect();
-183    let theta = Tensor::new(theta.as_slice(), device)?;
-184    let idx_theta = Tensor::arange(0, MAX_SEQ_LEN as u32, device)?
-185        .to_dtype(DType::F32)?
-186        .reshape((MAX_SEQ_LEN, 1))?
-187        .matmul(&theta.reshape((1, theta.elem_count()))?)?;
-188    let cos = idx_theta.cos()?;
-189    let sin = idx_theta.sin()?;
-190    Ok((cos, sin))
-191}
-192
-193fn layer_norm(w: QTensor, b: QTensor, eps: f64) -> Result<LayerNorm> {
-194    let w = w.dequantize(&w.device())?;
-195    let b = b.dequantize(&b.device())?;
-196    let ln = LayerNorm::new(w, b, eps);
-197    Ok(ln)
-198}
-199
-200impl ModelWeights {
-201    pub fn from_gguf<R: std::io::Seek + std::io::Read>(
-202        ct: gguf_file::Content,
-203        reader: &mut R,
-204        device: &Device,
-205    ) -> Result<Self> {
-206        let md_get = |s: &str| match ct.metadata.get(s) {
-207            None => candle::bail!("cannot find {s} in metadata"),
-208            Some(v) => Ok(v),
-209        };
-210
-211        // Parameter extraction from metadata.
-212        let head_count = md_get("phi2.attention.head_count")?.to_u32()? as usize;
-213        let head_count_kv = md_get("phi2.attention.head_count_kv")?.to_u32()? as usize;
-214        let block_count = md_get("phi2.block_count")?.to_u32()? as usize;
-215        let embedding_length = md_get("phi2.embedding_length")?.to_u32()? as usize;
-216        let rope_dim = md_get("phi2.rope.dimension_count")?.to_u32()? as usize;
-217        let ln_eps = md_get("phi2.attention.layer_norm_epsilon")?.to_f32()? as f64;
-218        let (cos, sin) = precomput_freqs_cis(rope_dim, 10_000., device)?;
-219        let neg_inf = Tensor::new(f32::NEG_INFINITY, device)?;
-220
-221        let tok_embeddings = ct.tensor(reader, "token_embd.weight", device)?;
-222        let tok_embeddings = tok_embeddings.dequantize(device)?;
-223        let output_norm = layer_norm(
-224            ct.tensor(reader, "output_norm.weight", device)?,
-225            ct.tensor(reader, "output_norm.bias", device)?,
-226            ln_eps,
-227        )?;
-228        let output = QLinear::new(&ct, reader, "output", device)?;
-229        let mut layers = Vec::with_capacity(block_count);
-230        for layer_idx in 0..block_count {
-231            let prefix = format!("blk.{layer_idx}");
-232            let ffn_up = QLinear::new(&ct, reader, &format!("{prefix}.ffn_up"), device)?;
-233            let ffn_down = QLinear::new(&ct, reader, &format!("{prefix}.ffn_down"), device)?;
-234            let mlp = Mlp { ffn_up, ffn_down };
-235            let attn_norm = layer_norm(
-236                ct.tensor(reader, &format!("{prefix}.attn_norm.weight"), device)?,
-237                ct.tensor(reader, &format!("{prefix}.attn_norm.bias"), device)?,
-238                ln_eps,
-239            )?;
-240            let span_attn = tracing::span!(tracing::Level::TRACE, "attn");
-241            let span_rot = tracing::span!(tracing::Level::TRACE, "attn-rot");
-242            layers.push(LayerWeights {
-243                attn_qkv: QLinear::new(&ct, reader, &format!("{prefix}.attn_qkv"), device)?,
-244                attn_output: QLinear::new(&ct, reader, &format!("{prefix}.attn_output"), device)?,
-245                attn_norm,
-246                mlp,
-247                n_head: head_count,
-248                n_kv_head: head_count_kv,
-249                head_dim: embedding_length / head_count,
-250                cos: cos.clone(),
-251                sin: sin.clone(),
-252                rope_dim,
-253                neg_inf: neg_inf.clone(),
-254                kv_cache: None,
-255                span_attn,
-256                span_rot,
-257            })
-258        }
-259        let span = tracing::span!(tracing::Level::TRACE, "model");
-260        let span_output = tracing::span!(tracing::Level::TRACE, "output");
-261        Ok(Self {
-262            tok_embeddings: Embedding::new(tok_embeddings, embedding_length),
-263            layers,
-264            output_norm,
-265            output,
-266            masks: HashMap::new(),
-267            span,
-268            span_output,
-269        })
-270    }
-271
-272    fn mask(&mut self, t: usize, device: &Device) -> Result<Tensor> {
-273        if let Some(mask) = self.masks.get(&t) {
-274            Ok(mask.clone())
-275        } else {
-276            let mask: Vec<_> = (0..t)
-277                .flat_map(|i| (0..t).map(move |j| u8::from(j > i)))
-278                .collect();
-279            let mask = Tensor::from_slice(&mask, (t, t), device)?;
-280            self.masks.insert(t, mask.clone());
-281            Ok(mask)
-282        }
-283    }
-284
-285    pub fn forward(&mut self, xs: &Tensor, index_pos: usize) -> Result<Tensor> {
-286        let (_b_sz, seq_len) = xs.dims2()?;
-287        let mask = if seq_len == 1 {
-288            None
-289        } else {
-290            Some(self.mask(seq_len, xs.device())?)
-291        };
-292        let _enter = self.span.enter();
-293        let mut xs = self.tok_embeddings.forward(xs)?;
-294        for layer in self.layers.iter_mut() {
-295            let residual = &xs;
-296            let xs_norm = xs.apply(&layer.attn_norm)?;
-297            let attn_outputs = layer.forward_attn(&xs_norm, mask.as_ref(), index_pos)?;
-298            let feed_forward_hidden_states = layer.mlp.forward(&xs_norm)?;
-299            xs = (attn_outputs + feed_forward_hidden_states + residual)?
-300        }
-301        let xs = xs.apply(&self.output_norm)?.i((.., seq_len - 1, ..))?;
-302        let _enter = self.span_output.enter();
-303        self.output.forward(&xs)
-304    }
-305}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_phi3.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_phi3.rs.html deleted file mode 100644 index 8f2a51d..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_phi3.rs.html +++ /dev/null @@ -1,338 +0,0 @@ -quantized_phi3.rs - source

candle_transformers/models/
quantized_phi3.rs

1//! Phi3 model implementation with quantization support.
-2//!
-3//! Phi3 is a language model intended for research purposes.
-4//! This implementation provides quantization for reduced memory usage.
-5//!
-6//! Key characteristics:
-7//! - Multi-head attention
-8//! - RMSNorm for layer normalization
-9//! - Rotary positional embeddings (RoPE)
-10//! - Support for quantization
-11//!
-12//! References:
-13//! - [Model Card](https://huggingface.co/microsoft/phi-3)
-14//!
-15
-16use std::collections::HashMap;
-17
-18use candle::quantized::gguf_file;
-19use candle::quantized::QTensor;
-20use candle::{DType, Device, IndexOp, Module, Result, Tensor, D};
-21use candle_nn::{kv_cache::KvCache, Embedding, RmsNorm};
-22
-23#[derive(Debug, Clone)]
-24struct QLinear {
-25    inner: candle::quantized::QMatMul,
-26    span: tracing::Span,
-27}
-28
-29impl QLinear {
-30    fn new<R: std::io::Read + std::io::Seek>(
-31        ct: &gguf_file::Content,
-32        r: &mut R,
-33        name: &str,
-34        device: &Device,
-35    ) -> Result<Self> {
-36        let span = tracing::span!(tracing::Level::TRACE, "qmatmul");
-37        let w = ct.tensor(r, &format!("{name}.weight"), device)?;
-38        let inner = candle::quantized::QMatMul::from_qtensor(w)?;
-39        Ok(Self { inner, span })
-40    }
-41}
-42
-43impl Module for QLinear {
-44    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-45        let _enter = self.span.enter();
-46        self.inner.forward(xs)
-47    }
-48}
-49
-50#[derive(Debug, Clone)]
-51struct Mlp {
-52    ffn_up: QLinear,
-53    ffn_down: QLinear,
-54    i_size: usize,
-55}
-56
-57impl Module for Mlp {
-58    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-59        let up_states = xs.apply(&self.ffn_up)?;
-60        let gate = up_states.narrow(D::Minus1, 0, self.i_size)?;
-61        let up_states = up_states.narrow(D::Minus1, self.i_size, self.i_size)?;
-62        let up_states = (up_states * gate.silu()?)?;
-63        up_states.apply(&self.ffn_down)
-64    }
-65}
-66
-67fn rms_norm(w: QTensor, eps: f64) -> Result<RmsNorm> {
-68    let w = w.dequantize(&w.device())?;
-69    let rms = RmsNorm::new(w, eps);
-70    Ok(rms)
-71}
-72
-73#[derive(Debug, Clone)]
-74struct LayerWeights {
-75    attn_qkv: QLinear,
-76    attn_output: QLinear,
-77    attn_norm: RmsNorm,
-78    ffn_norm: RmsNorm,
-79    mlp: Mlp,
-80    n_head: usize,
-81    n_kv_head: usize,
-82    head_dim: usize,
-83    cos: Tensor,
-84    sin: Tensor,
-85    neg_inf: Tensor,
-86    kv_cache: KvCache,
-87    use_flash_attn: bool,
-88    span_attn: tracing::Span,
-89    span_rot: tracing::Span,
-90}
-91
-92fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: &Tensor) -> Result<Tensor> {
-93    let shape = mask.shape();
-94    let m = mask.where_cond(&on_true.broadcast_as(shape.dims())?, on_false)?;
-95    Ok(m)
-96}
-97
-98impl LayerWeights {
-99    fn apply_rotary_emb(&self, xs: &Tensor, index_pos: usize) -> Result<Tensor> {
-100        let _enter = self.span_rot.enter();
-101        let (_b_sz, _h, seq_len, _n_embd) = xs.dims4()?;
-102        let cos = self.cos.narrow(0, index_pos, seq_len)?;
-103        let sin = self.sin.narrow(0, index_pos, seq_len)?;
-104        candle_nn::rotary_emb::rope(&xs.contiguous()?, &cos, &sin)
-105    }
-106
-107    fn forward_attn(
-108        &mut self,
-109        x: &Tensor,
-110        mask: Option<&Tensor>,
-111        index_pos: usize,
-112    ) -> Result<Tensor> {
-113        let _enter = self.span_attn.enter();
-114        let (b_sz, seq_len, n_embd) = x.dims3()?;
-115        let qkv = self.attn_qkv.forward(x)?;
-116
-117        let query_pos = self.n_head * self.head_dim;
-118        let q = qkv.narrow(D::Minus1, 0, query_pos)?;
-119        let k = qkv.narrow(D::Minus1, query_pos, self.n_kv_head * self.head_dim)?;
-120        let v = qkv.narrow(
-121            D::Minus1,
-122            query_pos + self.n_kv_head * self.head_dim,
-123            self.n_kv_head * self.head_dim,
-124        )?;
-125
-126        let q = q
-127            .reshape((b_sz, seq_len, self.n_head, self.head_dim))?
-128            .transpose(1, 2)?;
-129        let k = k
-130            .reshape((b_sz, seq_len, self.n_kv_head, self.head_dim))?
-131            .transpose(1, 2)?;
-132        let v = v
-133            .reshape((b_sz, seq_len, self.n_kv_head, self.head_dim))?
-134            .transpose(1, 2)?;
-135
-136        let q = self.apply_rotary_emb(&q, index_pos)?.contiguous()?;
-137        let k = self.apply_rotary_emb(&k, index_pos)?;
-138
-139        let (k, v) = self.kv_cache.append(&k.contiguous()?, &v.contiguous()?)?;
-140
-141        let k = crate::utils::repeat_kv(k, self.n_head / self.n_kv_head)?;
-142        let v = crate::utils::repeat_kv(v, self.n_head / self.n_kv_head)?;
-143
-144        let y = if self.use_flash_attn {
-145            // flash-attn expects (b_sz, seq_len, nheads, head_dim)
-146            let q = q.to_dtype(DType::BF16)?.transpose(1, 2)?;
-147            let k = k.to_dtype(DType::BF16)?.transpose(1, 2)?;
-148            let v = v.to_dtype(DType::BF16)?.transpose(1, 2)?;
-149            let softmax_scale = 1f32 / (self.head_dim as f32).sqrt();
-150            flash_attn(&q, &k, &v, softmax_scale, seq_len > 1)?
-151                .to_dtype(DType::F32)?
-152                .transpose(1, 2)?
-153        } else {
-154            let att = (q.matmul(&k.t()?)? / (self.head_dim as f64).sqrt())?;
-155            let att = match mask {
-156                None => att,
-157                Some(mask) => {
-158                    let mask = mask.broadcast_as(att.shape())?;
-159                    masked_fill(&att, &mask, &self.neg_inf)?
-160                }
-161            };
-162            let att = candle_nn::ops::softmax_last_dim(&att)?;
-163            // Convert to contiguous as matmul doesn't support strided vs for now.
-164            att.matmul(&v)?
-165        };
-166        let y = y.transpose(1, 2)?.reshape(&[b_sz, seq_len, n_embd])?;
-167        let y = self.attn_output.forward(&y)?;
-168        Ok(y)
-169    }
-170}
-171
-172#[cfg(feature = "flash-attn")]
-173fn flash_attn(
-174    q: &Tensor,
-175    k: &Tensor,
-176    v: &Tensor,
-177    softmax_scale: f32,
-178    causal: bool,
-179) -> Result<Tensor> {
-180    candle_flash_attn::flash_attn(q, k, v, softmax_scale, causal)
-181}
-182
-183#[cfg(not(feature = "flash-attn"))]
-184fn flash_attn(_: &Tensor, _: &Tensor, _: &Tensor, _: f32, _: bool) -> Result<Tensor> {
-185    unimplemented!("compile with '--features flash-attn'")
-186}
-187
-188#[derive(Debug, Clone)]
-189pub struct ModelWeights {
-190    tok_embeddings: Embedding,
-191    layers: Vec<LayerWeights>,
-192    output_norm: RmsNorm,
-193    output: QLinear,
-194    masks: HashMap<usize, Tensor>,
-195    span: tracing::Span,
-196    span_output: tracing::Span,
-197}
-198
-199fn precomput_freqs_cis(
-200    head_dim: usize,
-201    max_seq_len: usize,
-202    freq_base: f32,
-203    device: &Device,
-204) -> Result<(Tensor, Tensor)> {
-205    let theta: Vec<_> = (0..head_dim)
-206        .step_by(2)
-207        .map(|i| 1f32 / freq_base.powf(i as f32 / head_dim as f32))
-208        .collect();
-209    let theta = Tensor::new(theta.as_slice(), device)?;
-210    let idx_theta = Tensor::arange(0, max_seq_len as u32, device)?
-211        .to_dtype(DType::F32)?
-212        .reshape((max_seq_len, 1))?
-213        .matmul(&theta.reshape((1, theta.elem_count()))?)?;
-214    let cos = idx_theta.cos()?;
-215    let sin = idx_theta.sin()?;
-216    Ok((cos, sin))
-217}
-218
-219impl ModelWeights {
-220    pub fn from_gguf<R: std::io::Seek + std::io::Read>(
-221        use_flash_attn: bool,
-222        ct: gguf_file::Content,
-223        reader: &mut R,
-224        device: &Device,
-225    ) -> Result<Self> {
-226        let md_get = |s: &str| match ct.metadata.get(s) {
-227            None => candle::bail!("cannot find {s} in metadata"),
-228            Some(v) => Ok(v),
-229        };
-230
-231        // Parameter extraction from metadata.
-232        let head_count = md_get("phi3.attention.head_count")?.to_u32()? as usize;
-233        let head_count_kv = md_get("phi3.attention.head_count_kv")?.to_u32()? as usize;
-234        let block_count = md_get("phi3.block_count")?.to_u32()? as usize;
-235        let embedding_length = md_get("phi3.embedding_length")?.to_u32()? as usize;
-236        let max_seq_len = md_get("phi3.context_length")?.to_u32()? as usize;
-237        let head_dim = embedding_length / head_count;
-238        let i_size = md_get("phi3.feed_forward_length")?.to_u32()? as usize;
-239        let rope_dim = md_get("phi3.rope.dimension_count")?.to_u32()? as usize;
-240        let rms_eps = md_get("phi3.attention.layer_norm_rms_epsilon")?.to_f32()? as f64;
-241        let (cos, sin) = precomput_freqs_cis(rope_dim, max_seq_len, 10_000., device)?;
-242        let neg_inf = Tensor::new(f32::NEG_INFINITY, device)?;
-243
-244        let tok_embeddings = ct.tensor(reader, "token_embd.weight", device)?;
-245        let tok_embeddings = tok_embeddings.dequantize(device)?;
-246        let output_norm = rms_norm(ct.tensor(reader, "output_norm.weight", device)?, rms_eps)?;
-247        let output = QLinear::new(&ct, reader, "output", device)?;
-248
-249        let mut layers = Vec::with_capacity(block_count);
-250        for layer_idx in 0..block_count {
-251            let prefix = format!("blk.{layer_idx}");
-252            let ffn_up = QLinear::new(&ct, reader, &format!("{prefix}.ffn_up"), device)?;
-253            let ffn_down = QLinear::new(&ct, reader, &format!("{prefix}.ffn_down"), device)?;
-254            let mlp = Mlp {
-255                ffn_up,
-256                ffn_down,
-257                i_size,
-258            };
-259            let attn_norm = rms_norm(
-260                ct.tensor(reader, &format!("{prefix}.attn_norm.weight"), device)?,
-261                rms_eps,
-262            )?;
-263            let ffn_norm = rms_norm(
-264                ct.tensor(reader, &format!("{prefix}.ffn_norm.weight"), device)?,
-265                rms_eps,
-266            )?;
-267            let span_attn = tracing::span!(tracing::Level::TRACE, "attn");
-268            let span_rot = tracing::span!(tracing::Level::TRACE, "attn-rot");
-269            let kv_cache = KvCache::new(2, max_seq_len);
-270            layers.push(LayerWeights {
-271                attn_qkv: QLinear::new(&ct, reader, &format!("{prefix}.attn_qkv"), device)?,
-272                attn_output: QLinear::new(&ct, reader, &format!("{prefix}.attn_output"), device)?,
-273                attn_norm,
-274                ffn_norm,
-275                mlp,
-276                n_head: head_count,
-277                n_kv_head: head_count_kv,
-278                head_dim,
-279                cos: cos.clone(),
-280                sin: sin.clone(),
-281                neg_inf: neg_inf.clone(),
-282                kv_cache,
-283                use_flash_attn,
-284                span_attn,
-285                span_rot,
-286            })
-287        }
-288        let span = tracing::span!(tracing::Level::TRACE, "model");
-289        let span_output = tracing::span!(tracing::Level::TRACE, "output");
-290        Ok(Self {
-291            tok_embeddings: Embedding::new(tok_embeddings, embedding_length),
-292            layers,
-293            output_norm,
-294            output,
-295            masks: HashMap::new(),
-296            span,
-297            span_output,
-298        })
-299    }
-300
-301    fn mask(&mut self, t: usize, device: &Device) -> Result<Tensor> {
-302        if let Some(mask) = self.masks.get(&t) {
-303            Ok(mask.clone())
-304        } else {
-305            let mask: Vec<_> = (0..t)
-306                .flat_map(|i| (0..t).map(move |j| u8::from(j > i)))
-307                .collect();
-308            let mask = Tensor::from_slice(&mask, (t, t), device)?;
-309            self.masks.insert(t, mask.clone());
-310            Ok(mask)
-311        }
-312    }
-313
-314    pub fn forward(&mut self, xs: &Tensor, index_pos: usize) -> Result<Tensor> {
-315        let (_b_sz, seq_len) = xs.dims2()?;
-316        let mask = if seq_len == 1 {
-317            None
-318        } else {
-319            Some(self.mask(seq_len, xs.device())?)
-320        };
-321        let _enter = self.span.enter();
-322        let mut xs = self.tok_embeddings.forward(xs)?;
-323        for layer in self.layers.iter_mut() {
-324            let residual = &xs;
-325            let ys = xs.apply(&layer.attn_norm)?;
-326            let ys = layer.forward_attn(&ys, mask.as_ref(), index_pos)?;
-327            let ys = (ys + residual)?;
-328            let residual = &ys;
-329            let ys = ys.apply(&layer.ffn_norm)?;
-330            let ys = layer.mlp.forward(&ys)?;
-331            xs = (ys + residual)?
-332        }
-333        let xs = xs.apply(&self.output_norm)?.i((.., seq_len - 1, ..))?;
-334        let _enter = self.span_output.enter();
-335        self.output.forward(&xs)
-336    }
-337}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_qwen2.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_qwen2.rs.html deleted file mode 100644 index 65996ec..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_qwen2.rs.html +++ /dev/null @@ -1,339 +0,0 @@ -quantized_qwen2.rs - source

candle_transformers/models/
quantized_qwen2.rs

1//! Qwen2 model implementation with quantization support.
-2//!
-3//! Qwen2 is a chat-optimized language model that supports 8-bit quantization
-4//! for reduced memory usage and faster inference.
-5//!
-6//! Key characteristics:
-7//! - Group Query Attention (GQA)
-8//! - RMSNorm for layer normalization
-9//! - Rotary positional embeddings (RoPE)
-10//! - Support for 8-bit quantization
-11//!
-12//! References:
-13//! - [Model Card](https://huggingface.co/Qwen/Qwen2)
-14//!
-15
-16use crate::{quantized_nn::RmsNorm, utils::repeat_kv};
-17use candle::{
-18    quantized::{gguf_file, QMatMul},
-19    DType, Device, IndexOp, Result, Tensor,
-20};
-21use candle_nn::{Embedding, Module};
-22use std::collections::HashMap;
-23
-24#[derive(Debug, Clone)]
-25struct Mlp {
-26    feed_forward_w1: QMatMul,
-27    feed_forward_w2: QMatMul,
-28    feed_forward_w3: QMatMul,
-29}
-30
-31impl Module for Mlp {
-32    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-33        let w1 = self.feed_forward_w1.forward(xs)?;
-34        let w3 = self.feed_forward_w3.forward(xs)?;
-35        self.feed_forward_w2
-36            .forward(&(candle_nn::ops::silu(&w1)? * w3)?)
-37    }
-38}
-39
-40#[derive(Debug, Clone)]
-41struct LayerWeights {
-42    attention_wq: QMatMul,
-43    attention_wk: QMatMul,
-44    attention_wv: QMatMul,
-45    attention_bq: Tensor,
-46    attention_bk: Tensor,
-47    attention_bv: Tensor,
-48    attention_wo: QMatMul,
-49    attention_norm: RmsNorm,
-50    mlp: Mlp,
-51    ffn_norm: RmsNorm,
-52    n_head: usize,
-53    n_kv_head: usize,
-54    head_dim: usize,
-55    cos: Tensor,
-56    sin: Tensor,
-57    neg_inf: Tensor,
-58    kv_cache: Option<(Tensor, Tensor)>,
-59    span_attn: tracing::Span,
-60    span_rot: tracing::Span,
-61    span_mlp: tracing::Span,
-62}
-63
-64fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: &Tensor) -> Result<Tensor> {
-65    let shape = mask.shape();
-66    let m = mask.where_cond(&on_true.broadcast_as(shape.dims())?, on_false)?;
-67    Ok(m)
-68}
-69
-70impl LayerWeights {
-71    fn apply_rotary_emb(&self, x: &Tensor, index_pos: usize) -> Result<Tensor> {
-72        let _enter = self.span_rot.enter();
-73        let (_b_sz, _n_head, seq_len, _n_embd) = x.dims4()?;
-74        let cos = self.cos.narrow(0, index_pos, seq_len)?;
-75        let sin = self.sin.narrow(0, index_pos, seq_len)?;
-76        candle_nn::rotary_emb::rope(&x.contiguous()?, &cos, &sin)
-77    }
-78
-79    fn forward_attn(
-80        &mut self,
-81        x: &Tensor,
-82        mask: Option<&Tensor>,
-83        index_pos: usize,
-84    ) -> Result<Tensor> {
-85        let _enter = self.span_attn.enter();
-86        let (b_sz, seq_len, n_embd) = x.dims3()?;
-87
-88        let q = self.attention_wq.forward(x)?;
-89        let k = self.attention_wk.forward(x)?;
-90        let v = self.attention_wv.forward(x)?;
-91
-92        let q = q.broadcast_add(&self.attention_bq)?;
-93        let k = k.broadcast_add(&self.attention_bk)?;
-94        let v = v.broadcast_add(&self.attention_bv)?;
-95
-96        let q = q
-97            .reshape((b_sz, seq_len, self.n_head, self.head_dim))?
-98            .transpose(1, 2)?
-99            .contiguous()?;
-100        let k = k
-101            .reshape((b_sz, seq_len, self.n_kv_head, self.head_dim))?
-102            .transpose(1, 2)?
-103            .contiguous()?;
-104        let v = v
-105            .reshape((b_sz, seq_len, self.n_kv_head, self.head_dim))?
-106            .transpose(1, 2)?
-107            .contiguous()?;
-108
-109        // let (q, k) = self
-110        //     .rotary_embedding
-111        //     .apply_rotary_emb_qkv(&q, &k, index_pos)?;
-112        let q = self.apply_rotary_emb(&q, index_pos)?;
-113        let k = self.apply_rotary_emb(&k, index_pos)?;
-114
-115        let (k, v) = match &self.kv_cache {
-116            None => (k, v),
-117            Some((k_cache, v_cache)) => {
-118                if index_pos == 0 {
-119                    (k, v)
-120                } else {
-121                    let k = Tensor::cat(&[k_cache, &k], 2)?;
-122                    let v = Tensor::cat(&[v_cache, &v], 2)?;
-123                    (k, v)
-124                }
-125            }
-126        };
-127        self.kv_cache = Some((k.clone(), v.clone()));
-128
-129        // Support for MQA, useful for 70B models and mistral.
-130        let k = repeat_kv(k, self.n_head / self.n_kv_head)?;
-131        let v = repeat_kv(v, self.n_head / self.n_kv_head)?;
-132
-133        let att = (q.matmul(&k.t()?)? / (self.head_dim as f64).sqrt())?;
-134        let att = match mask {
-135            None => att,
-136            Some(mask) => {
-137                let mask = mask.broadcast_as(att.shape())?;
-138                masked_fill(&att, &mask, &self.neg_inf)?
-139            }
-140        };
-141        let att = candle_nn::ops::softmax_last_dim(&att)?;
-142        // Convert to contiguous as matmul doesn't support strided vs for now.
-143        let y = att.matmul(&v.contiguous()?)?;
-144        let y = y.transpose(1, 2)?.reshape(&[b_sz, seq_len, n_embd])?;
-145        let y = self.attention_wo.forward(&y)?;
-146        Ok(y)
-147    }
-148}
-149
-150pub struct ModelWeights {
-151    tok_embeddings: Embedding,
-152    layers: Vec<LayerWeights>,
-153    norm: RmsNorm,
-154    output: QMatMul,
-155    masks: HashMap<usize, Tensor>,
-156    span: tracing::Span,
-157    span_output: tracing::Span,
-158}
-159
-160fn precomput_freqs_cis(
-161    head_dim: usize,
-162    freq_base: f32,
-163    context_length: usize,
-164    device: &Device,
-165) -> Result<(Tensor, Tensor)> {
-166    let theta: Vec<_> = (0..head_dim)
-167        .step_by(2)
-168        .map(|i| 1f32 / freq_base.powf(i as f32 / head_dim as f32))
-169        .collect();
-170    let theta = Tensor::new(theta.as_slice(), device)?;
-171    let idx_theta = Tensor::arange(0, context_length as u32, device)?
-172        .to_dtype(DType::F32)?
-173        .reshape((context_length, 1))?
-174        .matmul(&theta.reshape((1, theta.elem_count()))?)?;
-175    let cos = idx_theta.cos()?;
-176    let sin = idx_theta.sin()?;
-177    Ok((cos, sin))
-178}
-179
-180impl ModelWeights {
-181    pub fn from_gguf<R: std::io::Seek + std::io::Read>(
-182        ct: gguf_file::Content,
-183        reader: &mut R,
-184        device: &Device,
-185    ) -> Result<Self> {
-186        let md_get = |s: &str| match ct.metadata.get(s) {
-187            None => candle::bail!("cannot find {s} in metadata"),
-188            Some(v) => Ok(v),
-189        };
-190
-191        let head_count = md_get("qwen2.attention.head_count")?.to_u32()? as usize;
-192        let head_count_kv = md_get("qwen2.attention.head_count_kv")?.to_u32()? as usize;
-193        let embedding_length = md_get("qwen2.embedding_length")?.to_u32()? as usize;
-194        let context_length = md_get("qwen2.context_length")?.to_u32()? as usize;
-195        let block_count = md_get("qwen2.block_count")?.to_u32()? as usize;
-196        let rms_norm_eps = md_get("qwen2.attention.layer_norm_rms_epsilon")?.to_f32()? as f64;
-197        let rope_freq_base = md_get("qwen2.rope.freq_base")
-198            .and_then(|m| m.to_f32())
-199            .unwrap_or(10000f32);
-200
-201        let head_dim = embedding_length / head_count;
-202
-203        let neg_inf = Tensor::new(f32::NEG_INFINITY, device)?;
-204
-205        let tok_embeddings = ct.tensor(reader, "token_embd.weight", device)?;
-206        let tok_embeddings = tok_embeddings.dequantize(device)?;
-207        let norm = RmsNorm::from_qtensor(
-208            ct.tensor(reader, "output_norm.weight", device)?,
-209            rms_norm_eps,
-210        )?;
-211        let output = match ct.tensor(reader, "output.weight", device) {
-212            Ok(v) => QMatMul::from_qtensor(v)?,
-213            _ => {
-214                // use tie_word_embeddings
-215                QMatMul::from_qtensor(ct.tensor(reader, "token_embd.weight", device)?)?
-216            }
-217        };
-218
-219        let (cos, sin) = precomput_freqs_cis(head_dim, rope_freq_base, context_length, device)?;
-220
-221        let mut layers = Vec::with_capacity(block_count);
-222
-223        for layer_idx in 0..block_count {
-224            let prefix = format!("blk.{layer_idx}");
-225            let attention_wq = ct.tensor(reader, &format!("{prefix}.attn_q.weight"), device)?;
-226            let attention_wk = ct.tensor(reader, &format!("{prefix}.attn_k.weight"), device)?;
-227            let attention_wv = ct.tensor(reader, &format!("{prefix}.attn_v.weight"), device)?;
-228
-229            let attention_bq = ct.tensor(reader, &format!("{prefix}.attn_q.bias"), device)?;
-230            let attention_bk = ct.tensor(reader, &format!("{prefix}.attn_k.bias"), device)?;
-231            let attention_bv = ct.tensor(reader, &format!("{prefix}.attn_v.bias"), device)?;
-232
-233            let attention_wo =
-234                ct.tensor(reader, &format!("{prefix}.attn_output.weight"), device)?;
-235
-236            let mlp = {
-237                let feed_forward_w1 =
-238                    ct.tensor(reader, &format!("{prefix}.ffn_gate.weight"), device)?;
-239                let feed_forward_w2 =
-240                    ct.tensor(reader, &format!("{prefix}.ffn_down.weight"), device)?;
-241                let feed_forward_w3 =
-242                    ct.tensor(reader, &format!("{prefix}.ffn_up.weight"), device)?;
-243                Mlp {
-244                    feed_forward_w1: QMatMul::from_qtensor(feed_forward_w1)?,
-245                    feed_forward_w2: QMatMul::from_qtensor(feed_forward_w2)?,
-246                    feed_forward_w3: QMatMul::from_qtensor(feed_forward_w3)?,
-247                }
-248            };
-249
-250            let attention_norm =
-251                ct.tensor(reader, &format!("{prefix}.attn_norm.weight"), device)?;
-252            let ffn_norm = ct.tensor(reader, &format!("{prefix}.ffn_norm.weight"), device)?;
-253
-254            let span_attn = tracing::span!(tracing::Level::TRACE, "attn");
-255            let span_rot = tracing::span!(tracing::Level::TRACE, "attn-rot");
-256            let span_mlp = tracing::span!(tracing::Level::TRACE, "attn-mlp");
-257
-258            layers.push(LayerWeights {
-259                attention_wq: QMatMul::from_qtensor(attention_wq)?,
-260                attention_wk: QMatMul::from_qtensor(attention_wk)?,
-261                attention_wv: QMatMul::from_qtensor(attention_wv)?,
-262                attention_bq: attention_bq.dequantize(device)?,
-263                attention_bk: attention_bk.dequantize(device)?,
-264                attention_bv: attention_bv.dequantize(device)?,
-265                attention_wo: QMatMul::from_qtensor(attention_wo)?,
-266                attention_norm: RmsNorm::from_qtensor(attention_norm, rms_norm_eps)?,
-267                cos: cos.clone(),
-268                sin: sin.clone(),
-269                mlp,
-270                ffn_norm: RmsNorm::from_qtensor(ffn_norm, rms_norm_eps)?,
-271                n_head: head_count,
-272                n_kv_head: head_count_kv,
-273                head_dim,
-274                neg_inf: neg_inf.clone(),
-275                kv_cache: None,
-276                span_attn,
-277                span_rot,
-278                span_mlp,
-279            });
-280        }
-281
-282        let span = tracing::span!(tracing::Level::TRACE, "model");
-283        let span_output = tracing::span!(tracing::Level::TRACE, "output");
-284
-285        Ok(Self {
-286            tok_embeddings: Embedding::new(tok_embeddings, embedding_length),
-287            layers,
-288            norm,
-289            output,
-290            masks: HashMap::new(),
-291            span,
-292            span_output,
-293        })
-294    }
-295
-296    fn mask(&mut self, t: usize, device: &Device) -> Result<Tensor> {
-297        if let Some(mask) = self.masks.get(&t) {
-298            Ok(mask.clone())
-299        } else {
-300            let mask: Vec<_> = (0..t)
-301                .flat_map(|i| (0..t).map(move |j| u8::from(j > i)))
-302                .collect();
-303            let mask = Tensor::from_slice(&mask, (t, t), device)?;
-304            self.masks.insert(t, mask.clone());
-305            Ok(mask)
-306        }
-307    }
-308
-309    pub fn forward(&mut self, x: &Tensor, index_pos: usize) -> Result<Tensor> {
-310        let (_b_sz, seq_len) = x.dims2()?;
-311        let mask = if seq_len == 1 {
-312            None
-313        } else {
-314            Some(self.mask(seq_len, x.device())?)
-315        };
-316        let _enter = self.span.enter();
-317        let mut layer_in = self.tok_embeddings.forward(x)?;
-318        for layer in self.layers.iter_mut() {
-319            let x = layer_in;
-320            let residual = &x;
-321            let x = layer.attention_norm.forward(&x)?;
-322            let attn = layer.forward_attn(&x, mask.as_ref(), index_pos)?;
-323            let x = (attn + residual)?;
-324
-325            // MLP
-326            let _enter = layer.span_mlp.enter();
-327            let residual = &x;
-328            let x = layer.ffn_norm.forward(&x)?;
-329            let x = layer.mlp.forward(&x)?;
-330            let x = (x + residual)?;
-331            layer_in = x
-332        }
-333        let x = self.norm.forward(&layer_in)?;
-334        let x = x.i((.., seq_len - 1, ..))?;
-335        let _enter = self.span_output.enter();
-336        self.output.forward(&x)
-337    }
-338}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_recurrent_gemma.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_recurrent_gemma.rs.html deleted file mode 100644 index 74300ba..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_recurrent_gemma.rs.html +++ /dev/null @@ -1,430 +0,0 @@ -quantized_recurrent_gemma.rs - source

candle_transformers/models/
quantized_recurrent_gemma.rs

1//! Recurrent Gemma model implementation with quantization support.
-2//!
-3//! Gemma is a large language model optimized for efficiency.
-4//! This implementation provides quantization for reduced memory and compute.
-5//!
-6//! Key characteristics:
-7//! - Recurrent blocks with gated recurrent units
-8//! - Convolution and attention blocks
-9//! - RMSNorm for layer normalization
-10//! - Rotary positional embeddings (RoPE)
-11//! - Support for 8-bit quantization
-12//!
-13//! References:
-14//! - [Gemma Paper](https://arxiv.org/abs/2401.06751)
-15//! - [Model Card](https://ai.google.dev/gemma)
-16//!
-17
-18use crate::quantized_nn::{linear_b as linear, Embedding, Linear};
-19pub use crate::quantized_var_builder::VarBuilder;
-20use candle::{DType, Device, IndexOp, Module, Result, Tensor, D};
-21use std::sync::Arc;
-22
-23use crate::models::recurrent_gemma::{Config, Rglru, RmsNorm, RotaryEmbedding, TemporalBlockType};
-24
-25fn rms_norm(size: usize, eps: f64, vb: VarBuilder) -> Result<RmsNorm> {
-26    let weight = vb.get(size, "weight")?.dequantize(vb.device())?;
-27    Ok(RmsNorm::from_weight(weight, eps))
-28}
-29
-30#[derive(Debug, Clone)]
-31struct Mlp {
-32    gate_proj: Linear,
-33    up_proj: Linear,
-34    down_proj: Linear,
-35    act_fn: candle_nn::Activation,
-36}
-37
-38impl Mlp {
-39    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-40        let h = cfg.hidden_size;
-41        let intermediate_size = cfg.intermediate_size / 2;
-42        let gate_proj = linear(h, intermediate_size, true, vb.pp("gate_proj"))?;
-43        let up_proj = linear(h, intermediate_size, true, vb.pp("up_proj"))?;
-44        let down_proj = linear(intermediate_size, h, true, vb.pp("down_proj"))?;
-45        Ok(Self {
-46            gate_proj,
-47            up_proj,
-48            down_proj,
-49            act_fn: cfg.hidden_activation,
-50        })
-51    }
-52}
-53
-54impl Module for Mlp {
-55    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-56        let gate = xs.apply(&self.gate_proj)?.apply(&self.act_fn)?;
-57        (gate * xs.apply(&self.up_proj))?.apply(&self.down_proj)
-58    }
-59}
-60
-61fn rglru(cfg: &Config, vb: VarBuilder) -> Result<Rglru> {
-62    let h = cfg.hidden_size;
-63    let lru_width = cfg.lru_width.unwrap_or(h);
-64    let n_heads = cfg.num_attention_heads;
-65    let block_width = lru_width / n_heads;
-66    let recurrent_param = vb.get((lru_width,), "recurrent_param")?;
-67    let input_gate_weight = vb.get((n_heads, block_width, block_width), "input_gate_weight")?;
-68    let input_gate_bias = vb.get((n_heads, block_width), "input_gate_bias")?;
-69    let recurrent_gate_weight =
-70        vb.get((n_heads, block_width, block_width), "recurrent_gate_weight")?;
-71    let recurrent_gate_bias = vb.get((n_heads, block_width), "recurrent_gate_bias")?;
-72    Ok(Rglru {
-73        recurrent_param: recurrent_param.dequantize(vb.device())?,
-74        input_gate_bias: input_gate_bias.dequantize(vb.device())?,
-75        input_gate_weight: input_gate_weight.dequantize(vb.device())?,
-76        recurrent_gate_bias: recurrent_gate_bias.dequantize(vb.device())?,
-77        recurrent_gate_weight: recurrent_gate_weight.dequantize(vb.device())?,
-78        block_width,
-79        n_heads,
-80        recurrent_states: None,
-81    })
-82}
-83
-84#[derive(Debug, Clone)]
-85struct RecurrentBlock {
-86    linear_y: Linear,
-87    linear_x: Linear,
-88    linear_out: Linear,
-89    conv_1d: candle_nn::Conv1d,
-90    conv1d_state: Option<Tensor>,
-91    conv1d_width: usize,
-92    rg_lru: Rglru,
-93    act_fn: candle_nn::Activation,
-94}
-95
-96impl RecurrentBlock {
-97    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-98        let h = cfg.hidden_size;
-99        let lru_width = cfg.lru_width.unwrap_or(h);
-100        let linear_y = linear(h, lru_width, true, vb.pp("linear_y"))?;
-101        let linear_x = linear(h, lru_width, true, vb.pp("linear_x"))?;
-102        let linear_out = linear(lru_width, h, true, vb.pp("linear_out"))?;
-103
-104        let conv_1d = {
-105            let ws = vb
-106                .get((lru_width, 1, cfg.conv1d_width), "conv_1d.weight")?
-107                .dequantize(vb.device())?;
-108            let bs = vb.get(lru_width, "conv_1d.bias")?.dequantize(vb.device())?;
-109            let config = candle_nn::Conv1dConfig {
-110                groups: lru_width,
-111                padding: cfg.conv1d_width - 1,
-112                ..Default::default()
-113            };
-114            candle_nn::Conv1d::new(ws, Some(bs), config)
-115        };
-116        let rg_lru = rglru(cfg, vb.pp("rg_lru"))?;
-117        Ok(Self {
-118            linear_y,
-119            linear_x,
-120            linear_out,
-121            conv_1d,
-122            conv1d_state: None,
-123            conv1d_width: cfg.conv1d_width,
-124            rg_lru,
-125            act_fn: cfg.hidden_activation,
-126        })
-127    }
-128
-129    pub fn forward(&mut self, xs: &Tensor, pos: usize) -> Result<Tensor> {
-130        let (_b_sz, seq_len, _) = xs.dims3()?;
-131
-132        let y_branch = xs.apply(&self.linear_y)?.apply(&self.act_fn)?;
-133        let x_branch = xs.apply(&self.linear_x)?.transpose(1, 2)?;
-134        let x_branch = if pos == 0 {
-135            let x_len = x_branch.dim(D::Minus1)?;
-136            let pad = self.conv1d_width as i64 - x_len as i64 - 1;
-137            let padded = match pad.cmp(&0) {
-138                std::cmp::Ordering::Equal => x_branch.clone(),
-139                std::cmp::Ordering::Less => {
-140                    let rev_pad = (-pad) as usize;
-141                    x_branch.narrow(D::Minus1, rev_pad, x_len - rev_pad)?
-142                }
-143                std::cmp::Ordering::Greater => {
-144                    x_branch.pad_with_zeros(D::Minus1, pad as usize, 0)?
-145                }
-146            };
-147            self.conv1d_state = Some(padded);
-148            x_branch
-149                .apply(&self.conv_1d)?
-150                .narrow(D::Minus1, 0, seq_len)?
-151        } else {
-152            let conv_state = match self.conv1d_state.as_ref() {
-153                None => candle::bail!("empty cache despite pos > 0"),
-154                Some(s) => Tensor::cat(&[s, &x_branch], D::Minus1)?,
-155            };
-156            let w = self.conv_1d.weight().i((.., 0, ..))?;
-157            let x_branch = conv_state.broadcast_mul(&w)?.sum(D::Minus1)?;
-158            let x_branch = match self.conv_1d.bias() {
-159                None => x_branch,
-160                Some(b) => x_branch.broadcast_add(b)?,
-161            };
-162            let x_branch = x_branch.unsqueeze(D::Minus1)?;
-163            self.conv1d_state = Some(conv_state.i((.., .., 1..))?);
-164            x_branch
-165        };
-166        let x_branch = x_branch.transpose(1, 2)?;
-167        let x_branch = self.rg_lru.forward(&x_branch, pos)?;
-168        (x_branch * y_branch)?.apply(&self.linear_out)
-169    }
-170}
-171
-172#[derive(Debug, Clone)]
-173struct SdpaAttention {
-174    q_proj: Linear,
-175    k_proj: Linear,
-176    v_proj: Linear,
-177    o_proj: Linear,
-178    n_heads: usize,
-179    n_kv_heads: usize,
-180    head_dim: usize,
-181    hidden_size: usize,
-182    kv_cache: Option<(Tensor, Tensor)>,
-183    rotary_emb: Arc<RotaryEmbedding>,
-184}
-185
-186impl SdpaAttention {
-187    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-188        let h = cfg.hidden_size;
-189        let n_heads = cfg.num_attention_heads;
-190        let n_kv_heads = cfg.num_key_value_heads;
-191        let hd = cfg.head_dim;
-192        let q_proj = linear(h, n_heads * hd, cfg.attention_bias, vb.pp("q_proj"))?;
-193        let k_proj = linear(h, n_kv_heads * hd, cfg.attention_bias, vb.pp("k_proj"))?;
-194        let v_proj = linear(h, n_kv_heads * hd, cfg.attention_bias, vb.pp("v_proj"))?;
-195        let o_proj = linear(n_heads * hd, h, true, vb.pp("o_proj"))?;
-196        Ok(Self {
-197            q_proj,
-198            k_proj,
-199            v_proj,
-200            o_proj,
-201            n_heads,
-202            n_kv_heads,
-203            head_dim: hd,
-204            hidden_size: h,
-205            kv_cache: None,
-206            rotary_emb,
-207        })
-208    }
-209
-210    fn repeat_kv(&self, x: Tensor) -> Result<Tensor> {
-211        let n_rep = self.n_heads / self.n_kv_heads;
-212        crate::utils::repeat_kv(x, n_rep)
-213    }
-214
-215    fn forward(
-216        &mut self,
-217        xs: &Tensor,
-218        attention_mask: Option<&Tensor>,
-219        pos: usize,
-220    ) -> Result<Tensor> {
-221        let (bsz, q_len, _) = xs.dims3()?;
-222
-223        let query_states = xs.apply(&self.q_proj)?;
-224        let key_states = xs.apply(&self.k_proj)?;
-225        let value_states = xs.apply(&self.v_proj)?;
-226
-227        let query_states = query_states
-228            .reshape((bsz, q_len, self.n_heads, self.head_dim))?
-229            .transpose(1, 2)?;
-230        let key_states = key_states
-231            .reshape((bsz, q_len, self.n_kv_heads, self.head_dim))?
-232            .transpose(1, 2)?;
-233        let value_states = value_states
-234            .reshape((bsz, q_len, self.n_kv_heads, self.head_dim))?
-235            .transpose(1, 2)?;
-236        let query_states = query_states.chunk(2, D::Minus1)?;
-237        let key_states = key_states.chunk(2, D::Minus1)?;
-238        let (query_rot, key_rot) =
-239            self.rotary_emb
-240                .apply_rotary_emb_qkv(&query_states[0], &key_states[0], pos)?;
-241        let query_states = Tensor::cat(&[&query_rot, &query_states[1]], D::Minus1)?.contiguous()?;
-242        let key_states = Tensor::cat(&[&key_rot, &key_states[1]], D::Minus1)?.contiguous()?;
-243
-244        let (key_states, value_states) = match &self.kv_cache {
-245            None => (key_states, value_states),
-246            Some((prev_k, prev_v)) => {
-247                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-248                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-249                (key_states, value_states)
-250            }
-251        };
-252        self.kv_cache = Some((key_states.clone(), value_states.clone()));
-253
-254        let key_states = self.repeat_kv(key_states)?;
-255        let value_states = self.repeat_kv(value_states)?;
-256        let xs = {
-257            let att = (query_states.matmul(&key_states.t()?)? / (self.head_dim as f64).sqrt())?;
-258            let att = if q_len == 1 {
-259                att
-260            } else {
-261                match attention_mask {
-262                    None => att,
-263                    Some(mask) => att.broadcast_add(mask)?,
-264                }
-265            };
-266            let att = candle_nn::ops::softmax_last_dim(&att)?;
-267            att.matmul(&value_states.contiguous()?)?
-268        };
-269
-270        let xs = xs
-271            .transpose(1, 2)?
-272            .reshape((bsz, q_len, self.hidden_size))?;
-273        self.o_proj.forward(&xs)
-274    }
-275}
-276
-277#[derive(Debug, Clone)]
-278enum TemporalBlock {
-279    Recurrent(RecurrentBlock),
-280    Attention(SdpaAttention),
-281}
-282
-283impl TemporalBlock {
-284    fn forward(
-285        &mut self,
-286        xs: &Tensor,
-287        attention_mask: Option<&Tensor>,
-288        pos: usize,
-289    ) -> Result<Tensor> {
-290        match self {
-291            Self::Recurrent(b) => b.forward(xs, pos),
-292            Self::Attention(b) => b.forward(xs, attention_mask, pos),
-293        }
-294    }
-295}
-296
-297#[derive(Debug, Clone)]
-298struct DecoderLayer {
-299    temporal_pre_norm: RmsNorm,
-300    channel_pre_norm: RmsNorm,
-301    temporal_block: TemporalBlock,
-302    mlp_block: Mlp,
-303}
-304
-305impl DecoderLayer {
-306    fn new(
-307        block_idx: usize,
-308        rotary_emb: Arc<RotaryEmbedding>,
-309        cfg: &Config,
-310        vb: VarBuilder,
-311    ) -> Result<Self> {
-312        let h = cfg.hidden_size;
-313        let temporal_pre_norm = rms_norm(h, cfg.rms_norm_eps, vb.pp("temporal_pre_norm"))?;
-314        let channel_pre_norm = rms_norm(h, cfg.rms_norm_eps, vb.pp("channel_pre_norm"))?;
-315        let temporal_block = match cfg.block_types[block_idx % cfg.block_types.len()] {
-316            TemporalBlockType::Recurrent => {
-317                let block = RecurrentBlock::new(cfg, vb.pp("temporal_block"))?;
-318                TemporalBlock::Recurrent(block)
-319            }
-320            TemporalBlockType::Attention => {
-321                let block = SdpaAttention::new(rotary_emb, cfg, vb.pp("temporal_block"))?;
-322                TemporalBlock::Attention(block)
-323            }
-324        };
-325        let mlp_block = Mlp::new(cfg, vb.pp("mlp_block"))?;
-326        Ok(Self {
-327            temporal_pre_norm,
-328            channel_pre_norm,
-329            temporal_block,
-330            mlp_block,
-331        })
-332    }
-333
-334    fn forward(
-335        &mut self,
-336        xs: &Tensor,
-337        attention_mask: Option<&Tensor>,
-338        pos: usize,
-339    ) -> Result<Tensor> {
-340        let residual = xs;
-341        let xs = xs.apply(&self.temporal_pre_norm)?;
-342        let xs = self.temporal_block.forward(&xs, attention_mask, pos)?;
-343        let xs = (xs + residual)?;
-344        let residual = &xs;
-345        let xs = xs.apply(&self.channel_pre_norm)?.apply(&self.mlp_block)?;
-346        xs + residual
-347    }
-348}
-349
-350#[derive(Debug, Clone)]
-351pub struct Model {
-352    embed_tokens: Embedding,
-353    layers: Vec<DecoderLayer>,
-354    final_norm: RmsNorm,
-355    lm_head: Linear,
-356    hidden_size: usize,
-357    logits_soft_cap: f64,
-358    device: Device,
-359}
-360
-361impl Model {
-362    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-363        let embed_tokens = Embedding::new(cfg.vocab_size, cfg.hidden_size, vb.pp("embed_tokens"))?;
-364        let rotary_emb = Arc::new(RotaryEmbedding::new(DType::F32, cfg, vb.device())?);
-365        let vb_b = vb.pp("layers");
-366        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-367        for idx in 0..cfg.num_hidden_layers {
-368            let layer = DecoderLayer::new(idx, rotary_emb.clone(), cfg, vb_b.pp(idx))?;
-369            layers.push(layer)
-370        }
-371        let final_norm = rms_norm(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("final_norm"))?;
-372        let lm_head = linear(
-373            cfg.hidden_size,
-374            cfg.vocab_size,
-375            false,
-376            vb.pp("embed_tokens"),
-377        )?;
-378        Ok(Self {
-379            embed_tokens,
-380            layers,
-381            final_norm,
-382            lm_head,
-383            hidden_size: cfg.hidden_size,
-384            logits_soft_cap: cfg.logits_soft_cap,
-385            device: vb.device().clone(),
-386        })
-387    }
-388
-389    fn prepare_decoder_attention_mask(
-390        &self,
-391        b_size: usize,
-392        tgt_len: usize,
-393        seqlen_offset: usize,
-394    ) -> Result<Tensor> {
-395        let mask: Vec<_> = (0..tgt_len)
-396            .flat_map(|i| (0..tgt_len).map(move |j| if i < j { f32::NEG_INFINITY } else { 0. }))
-397            .collect();
-398        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-399        let mask = if seqlen_offset > 0 {
-400            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-401            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-402        } else {
-403            mask
-404        };
-405        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-406            .to_dtype(DType::F32)
-407    }
-408
-409    pub fn forward(&mut self, xs: &Tensor, pos: usize) -> Result<Tensor> {
-410        let (b_size, seq_len) = xs.dims2()?;
-411        let attention_mask = if seq_len <= 1 {
-412            None
-413        } else {
-414            let mask = self.prepare_decoder_attention_mask(b_size, seq_len, pos)?;
-415            Some(mask)
-416        };
-417        let xs = xs.apply(&self.embed_tokens)?;
-418        let mut xs = (xs * (self.hidden_size as f64).sqrt())?;
-419        for layer in self.layers.iter_mut() {
-420            xs = layer.forward(&xs, attention_mask.as_ref(), pos)?;
-421        }
-422        let logits = xs
-423            .narrow(1, seq_len - 1, 1)?
-424            .apply(&self.final_norm)?
-425            .apply(&self.lm_head)?;
-426        let logits = ((logits / self.logits_soft_cap)?.tanh()? * self.logits_soft_cap)?;
-427        Ok(logits)
-428    }
-429}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_rwkv_v5.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_rwkv_v5.rs.html deleted file mode 100644 index 4a7a82a..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_rwkv_v5.rs.html +++ /dev/null @@ -1,304 +0,0 @@ -quantized_rwkv_v5.rs - source

candle_transformers/models/
quantized_rwkv_v5.rs

1//! RWKV v5 model implementation with quantization support.
-2//!
-3//! RWKV v5 is an attention-free language model optimized for efficiency.
-4//! This implementation provides quantization for reduced memory and compute.
-5//!
-6//! Key characteristics:
-7//! - Linear attention mechanism
-8//! - GroupNorm layer normalization
-9//! - Time-mixing layers
-10//! - State-based sequential processing
-11//! - Support for 8-bit quantization
-12//!
-13//! References:
-14//! - [RWKV Model](https://github.com/BlinkDL/RWKV-LM)
-15//! - [RWKV v5 Architecture](https://www.rwkv.com/v5)
-16//!
-17
-18use crate::{
-19    quantized_nn::{layer_norm, linear_no_bias as linear, Embedding, Linear},
-20    quantized_var_builder::VarBuilder,
-21};
-22use candle::{IndexOp, Result, Tensor};
-23use candle_nn::{GroupNorm, LayerNorm, Module};
-24
-25pub use crate::models::rwkv_v5::{Config, State, Tokenizer};
-26
-27#[derive(Debug, Clone)]
-28struct SelfAttention {
-29    key: Linear,
-30    receptance: Linear,
-31    value: Linear,
-32    gate: Linear,
-33    output: Linear,
-34    ln_x: candle_nn::GroupNorm,
-35    time_mix_key: Tensor,
-36    time_mix_value: Tensor,
-37    time_mix_receptance: Tensor,
-38    time_decay: Tensor,
-39    time_faaaa: Tensor,
-40    time_mix_gate: Tensor,
-41    layer_id: usize,
-42    n_attn_heads: usize,
-43}
-44
-45impl SelfAttention {
-46    fn new(layer_id: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-47        let hidden_size = cfg.hidden_size;
-48        let attn_hidden_size = cfg.attention_hidden_size;
-49        let key = linear(hidden_size, attn_hidden_size, vb.pp("key"))?;
-50        let receptance = linear(hidden_size, attn_hidden_size, vb.pp("receptance"))?;
-51        let value = linear(hidden_size, attn_hidden_size, vb.pp("value"))?;
-52        let gate = linear(hidden_size, attn_hidden_size, vb.pp("gate"))?;
-53        let output = linear(attn_hidden_size, hidden_size, vb.pp("output"))?;
-54
-55        let vb_x = vb.pp("ln_x");
-56        let ln_x_weight = vb_x.get(hidden_size, "weight")?.dequantize(vb.device())?;
-57        let ln_x_bias = vb_x.get(hidden_size, "bias")?.dequantize(vb.device())?;
-58
-59        let ln_x = GroupNorm::new(
-60            ln_x_weight,
-61            ln_x_bias,
-62            hidden_size,
-63            hidden_size / cfg.head_size,
-64            1e-5,
-65        )?;
-66
-67        let time_mix_key = vb
-68            .get((1, 1, cfg.hidden_size), "time_mix_key")?
-69            .dequantize(vb.device())?;
-70        let time_mix_value = vb
-71            .get((1, 1, cfg.hidden_size), "time_mix_value")?
-72            .dequantize(vb.device())?;
-73        let time_mix_receptance = vb
-74            .get((1, 1, cfg.hidden_size), "time_mix_receptance")?
-75            .dequantize(vb.device())?;
-76        let n_attn_heads = cfg.hidden_size / cfg.head_size;
-77        let time_decay = vb
-78            .get((n_attn_heads, cfg.head_size), "time_decay")?
-79            .dequantize(vb.device())?;
-80        let time_faaaa = vb
-81            .get((n_attn_heads, cfg.head_size), "time_faaaa")?
-82            .dequantize(vb.device())?;
-83        let time_mix_gate = vb
-84            .get((1, 1, cfg.hidden_size), "time_mix_gate")?
-85            .dequantize(vb.device())?;
-86        Ok(Self {
-87            key,
-88            value,
-89            receptance,
-90            gate,
-91            output,
-92            ln_x,
-93            time_mix_key,
-94            time_mix_value,
-95            time_mix_receptance,
-96            time_decay,
-97            time_faaaa,
-98            time_mix_gate,
-99            layer_id,
-100            n_attn_heads,
-101        })
-102    }
-103
-104    pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-105        let h = self.time_decay.dim(0)?;
-106        let (b, t, s) = xs.dims3()?;
-107        let s = s / h;
-108        let (receptance, key, value, gate) = {
-109            // extract key-value
-110            let shifted = state.per_layer[self.layer_id].extract_key_value.clone();
-111            let shifted = if shifted.rank() == 2 {
-112                shifted.unsqueeze(1)?
-113            } else {
-114                shifted
-115            };
-116            let key = ((xs * &self.time_mix_key)? + &shifted * (1.0 - &self.time_mix_key)?)?;
-117            let value = ((xs * &self.time_mix_value)? + &shifted * (1.0 - &self.time_mix_value)?)?;
-118            let receptance = ((xs * &self.time_mix_receptance)?
-119                + &shifted * (1.0 - &self.time_mix_receptance)?)?;
-120            let gate = ((xs * &self.time_mix_gate)? + &shifted * (1.0 - &self.time_mix_gate)?)?;
-121
-122            let key = self.key.forward(&key)?;
-123            let value = self.value.forward(&value)?;
-124            let receptance = self.receptance.forward(&receptance)?;
-125            let gate = candle_nn::ops::silu(&self.gate.forward(&gate)?)?;
-126            state.per_layer[self.layer_id].extract_key_value = xs.i((.., t - 1))?;
-127            (receptance, key, value, gate)
-128        };
-129        // linear attention
-130        let mut state_ = state.per_layer[self.layer_id].linear_attention.clone();
-131        let key = key.reshape((b, t, h, s))?.permute((0, 2, 3, 1))?;
-132        let value = value.reshape((b, t, h, s))?.transpose(1, 2)?;
-133        let receptance = receptance.reshape((b, t, h, s))?.transpose(1, 2)?;
-134
-135        let time_decay = self
-136            .time_decay
-137            .exp()?
-138            .neg()?
-139            .exp()?
-140            .reshape(((), 1, 1))?
-141            .reshape((self.n_attn_heads, (), 1))?;
-142        let time_faaaa =
-143            self.time_faaaa
-144                .reshape(((), 1, 1))?
-145                .reshape((self.n_attn_heads, (), 1))?;
-146
-147        let mut out: Vec<Tensor> = Vec::with_capacity(t);
-148        for t_ in 0..t {
-149            let rt = receptance.i((.., .., t_..t_ + 1))?.contiguous()?;
-150            let kt = key.i((.., .., .., t_..t_ + 1))?.contiguous()?;
-151            let vt = value.i((.., .., t_..t_ + 1))?.contiguous()?;
-152            let at = kt.matmul(&vt)?;
-153            let rhs = (time_faaaa.broadcast_mul(&at)? + &state_)?;
-154            let out_ = rt.matmul(&rhs)?.squeeze(2)?;
-155            state_ = (&at + time_decay.broadcast_mul(&state_))?;
-156            out.push(out_)
-157        }
-158        let out = Tensor::cat(&out, 1)?.reshape((b * t, h * s, 1))?;
-159        let out = out.apply(&self.ln_x)?.reshape((b, t, h * s))?;
-160        let out = (out * gate)?.apply(&self.output)?;
-161        state.per_layer[self.layer_id].linear_attention = state_;
-162        Ok(out)
-163    }
-164}
-165
-166#[derive(Debug, Clone)]
-167struct FeedForward {
-168    time_mix_key: Tensor,
-169    time_mix_receptance: Tensor,
-170    key: Linear,
-171    receptance: Linear,
-172    value: Linear,
-173    layer_id: usize,
-174}
-175
-176impl FeedForward {
-177    fn new(layer_id: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-178        let int_size = cfg
-179            .intermediate_size
-180            .unwrap_or(((cfg.hidden_size as f64 * 3.5) as usize) / 32 * 32);
-181        let key = linear(cfg.hidden_size, int_size, vb.pp("key"))?;
-182        let receptance = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("receptance"))?;
-183        let value = linear(int_size, cfg.hidden_size, vb.pp("value"))?;
-184        let time_mix_key = vb
-185            .get((1, 1, cfg.hidden_size), "time_mix_key")?
-186            .dequantize(vb.device())?;
-187        let time_mix_receptance = vb
-188            .get((1, 1, cfg.hidden_size), "time_mix_receptance")?
-189            .dequantize(vb.device())?;
-190        Ok(Self {
-191            key,
-192            receptance,
-193            value,
-194            time_mix_key,
-195            time_mix_receptance,
-196            layer_id,
-197        })
-198    }
-199
-200    fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-201        let shifted = &state.per_layer[self.layer_id].feed_forward;
-202        let key = (xs.broadcast_mul(&self.time_mix_key)?
-203            + shifted.broadcast_mul(&(1.0 - &self.time_mix_key)?)?)?;
-204        let receptance = (xs.broadcast_mul(&self.time_mix_receptance)?
-205            + shifted.broadcast_mul(&(1.0 - &self.time_mix_receptance)?)?)?;
-206        let key = key.apply(&self.key)?.relu()?.sqr()?;
-207        let value = key.apply(&self.value)?;
-208        let receptance = candle_nn::ops::sigmoid(&receptance.apply(&self.receptance)?)?;
-209        state.per_layer[self.layer_id].feed_forward = xs.i((.., xs.dim(1)? - 1))?;
-210        let xs = (receptance * value)?;
-211        Ok(xs)
-212    }
-213}
-214
-215#[derive(Debug, Clone)]
-216struct Block {
-217    pre_ln: Option<LayerNorm>,
-218    ln1: LayerNorm,
-219    ln2: LayerNorm,
-220    attention: SelfAttention,
-221    feed_forward: FeedForward,
-222}
-223
-224impl Block {
-225    fn new(layer_id: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-226        let ln1 = layer_norm(cfg.hidden_size, cfg.layer_norm_epsilon, vb.pp("ln1"))?;
-227        let ln2 = layer_norm(cfg.hidden_size, cfg.layer_norm_epsilon, vb.pp("ln2"))?;
-228        let pre_ln = if layer_id == 0 {
-229            let ln = layer_norm(cfg.hidden_size, cfg.layer_norm_epsilon, vb.pp("pre_ln"))?;
-230            Some(ln)
-231        } else {
-232            None
-233        };
-234        let attention = SelfAttention::new(layer_id, cfg, vb.pp("attention"))?;
-235        let feed_forward = FeedForward::new(layer_id, cfg, vb.pp("feed_forward"))?;
-236        Ok(Self {
-237            pre_ln,
-238            ln1,
-239            ln2,
-240            attention,
-241            feed_forward,
-242        })
-243    }
-244
-245    fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-246        let xs = match self.pre_ln.as_ref() {
-247            None => xs.clone(),
-248            Some(pre_ln) => xs.apply(pre_ln)?,
-249        };
-250        let attention = self.attention.forward(&xs.apply(&self.ln1)?, state)?;
-251        let xs = (xs + attention)?;
-252        let feed_forward = self.feed_forward.forward(&xs.apply(&self.ln2)?, state)?;
-253        let xs = (xs + feed_forward)?;
-254        Ok(xs)
-255    }
-256}
-257
-258#[derive(Debug, Clone)]
-259pub struct Model {
-260    embeddings: Embedding,
-261    blocks: Vec<Block>,
-262    ln_out: LayerNorm,
-263    head: Linear,
-264    rescale_every: usize,
-265    layers_are_rescaled: bool,
-266}
-267
-268impl Model {
-269    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-270        let vb_m = vb.pp("rwkv");
-271        let embeddings = Embedding::new(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embeddings"))?;
-272        let mut blocks = Vec::with_capacity(cfg.num_hidden_layers);
-273        let vb_b = vb_m.pp("blocks");
-274        for block_index in 0..cfg.num_hidden_layers {
-275            let block = Block::new(block_index, cfg, vb_b.pp(block_index))?;
-276            blocks.push(block)
-277        }
-278        let ln_out = layer_norm(cfg.hidden_size, 1e-5, vb_m.pp("ln_out"))?;
-279        let head = linear(cfg.hidden_size, cfg.vocab_size, vb.pp("head"))?;
-280        Ok(Self {
-281            embeddings,
-282            blocks,
-283            ln_out,
-284            head,
-285            rescale_every: cfg.rescale_every,
-286            layers_are_rescaled: false, // This seem to only happen for the f16/bf16 dtypes.
-287        })
-288    }
-289
-290    pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-291        let (_b_size, _seq_len) = xs.dims2()?;
-292        let mut xs = xs.apply(&self.embeddings)?;
-293        for (block_idx, block) in self.blocks.iter().enumerate() {
-294            xs = block.forward(&xs, state)?;
-295            if self.layers_are_rescaled && (block_idx + 1) % self.rescale_every == 0 {
-296                xs = (xs / 2.)?
-297            }
-298        }
-299        let xs = xs.apply(&self.ln_out)?.apply(&self.head)?;
-300        state.pos += 1;
-301        Ok(xs)
-302    }
-303}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_rwkv_v6.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_rwkv_v6.rs.html deleted file mode 100644 index 6d8829f..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_rwkv_v6.rs.html +++ /dev/null @@ -1,351 +0,0 @@ -quantized_rwkv_v6.rs - source

candle_transformers/models/
quantized_rwkv_v6.rs

1//! RWKV v6 model implementation with quantization support.
-2//!
-3//! RWKV is a linear attention model that combines the efficiency of RNNs
-4//! with the parallelizable training of Transformers. Version 6 builds on previous
-5//! versions with further optimizations.
-6//!
-7//! Key characteristics:
-8//! - Linear attention mechanism
-9//! - Time mixing layers
-10//! - Channel mixing layers
-11//! - RMSNorm for normalization
-12//! - Support for 8-bit quantization
-13//!
-14//! References:
-15//! - [RWKV Architecture](https://github.com/BlinkDL/RWKV-LM)
-16//! - [RWKV v6 Release](https://huggingface.co/BlinkDL/rwkv-6)
-17//!
-18
-19use crate::{
-20    quantized_nn::{layer_norm, linear_no_bias as linear, Embedding, Linear},
-21    quantized_var_builder::VarBuilder,
-22};
-23use candle::{IndexOp, Result, Tensor};
-24use candle_nn::{GroupNorm, LayerNorm, Module};
-25
-26pub use crate::models::rwkv_v5::{Config, State, Tokenizer};
-27
-28#[derive(Debug, Clone)]
-29struct SelfAttention {
-30    key: Linear,
-31    receptance: Linear,
-32    value: Linear,
-33    gate: Linear,
-34    output: Linear,
-35    ln_x: candle_nn::GroupNorm,
-36    time_mix_x: Tensor,
-37    time_mix_w: Tensor,
-38    time_mix_key: Tensor,
-39    time_mix_value: Tensor,
-40    time_mix_receptance: Tensor,
-41    time_decay: Tensor,
-42    time_faaaa: Tensor,
-43    time_mix_gate: Tensor,
-44    time_decay_w1: Tensor,
-45    time_decay_w2: Tensor,
-46    time_mix_w1: Tensor,
-47    time_mix_w2: Tensor,
-48    layer_id: usize,
-49    n_attn_heads: usize,
-50}
-51
-52impl SelfAttention {
-53    fn new(layer_id: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-54        let hidden_size = cfg.hidden_size;
-55        let attn_hidden_size = cfg.attention_hidden_size;
-56        let key = linear(hidden_size, attn_hidden_size, vb.pp("key"))?;
-57        let receptance = linear(hidden_size, attn_hidden_size, vb.pp("receptance"))?;
-58        let value = linear(hidden_size, attn_hidden_size, vb.pp("value"))?;
-59        let gate = linear(hidden_size, attn_hidden_size, vb.pp("gate"))?;
-60        let output = linear(attn_hidden_size, hidden_size, vb.pp("output"))?;
-61
-62        let vb_x = vb.pp("ln_x");
-63        let ln_x_weight = vb_x.get(hidden_size, "weight")?.dequantize(vb.device())?;
-64        let ln_x_bias = vb_x.get(hidden_size, "bias")?.dequantize(vb.device())?;
-65
-66        let ln_x = GroupNorm::new(
-67            ln_x_weight,
-68            ln_x_bias,
-69            hidden_size,
-70            hidden_size / cfg.head_size,
-71            1e-5,
-72        )?;
-73
-74        let time_mix_x = vb
-75            .get((1, 1, cfg.hidden_size), "time_mix_x")?
-76            .dequantize(vb.device())?;
-77        let time_mix_w = vb
-78            .get((1, 1, cfg.hidden_size), "time_mix_w")?
-79            .dequantize(vb.device())?;
-80        let time_mix_key = vb
-81            .get((1, 1, cfg.hidden_size), "time_mix_key")?
-82            .dequantize(vb.device())?;
-83        let time_mix_value = vb
-84            .get((1, 1, cfg.hidden_size), "time_mix_value")?
-85            .dequantize(vb.device())?;
-86        let time_mix_receptance = vb
-87            .get((1, 1, cfg.hidden_size), "time_mix_receptance")?
-88            .dequantize(vb.device())?;
-89        let n_attn_heads = cfg.hidden_size / cfg.head_size;
-90        let time_decay = vb
-91            .get((1, 1, cfg.hidden_size), "time_decay")?
-92            .dequantize(vb.device())?;
-93        let time_faaaa = vb
-94            .get((n_attn_heads, cfg.head_size), "time_faaaa")?
-95            .dequantize(vb.device())?;
-96        let time_mix_gate = vb
-97            .get((1, 1, cfg.hidden_size), "time_mix_gate")?
-98            .dequantize(vb.device())?;
-99        let time_decay_w1 = vb
-100            .get((cfg.hidden_size, n_attn_heads * 2), "time_decay_w1")?
-101            .dequantize(vb.device())?;
-102        let time_decay_w2 = vb
-103            .get((n_attn_heads * 2, cfg.hidden_size), "time_decay_w2")?
-104            .dequantize(vb.device())?;
-105        let time_mix_w1 = vb
-106            .get((cfg.hidden_size, n_attn_heads * 5), "time_mix_w1")?
-107            .dequantize(vb.device())?;
-108        let time_mix_w2 = vb
-109            .get((5, n_attn_heads, cfg.hidden_size), "time_mix_w2")?
-110            .dequantize(vb.device())?;
-111        Ok(Self {
-112            key,
-113            value,
-114            receptance,
-115            gate,
-116            output,
-117            ln_x,
-118            time_mix_x,
-119            time_mix_w,
-120            time_mix_key,
-121            time_mix_value,
-122            time_mix_receptance,
-123            time_decay,
-124            time_faaaa,
-125            time_mix_gate,
-126            time_decay_w1,
-127            time_decay_w2,
-128            time_mix_w1,
-129            time_mix_w2,
-130            layer_id,
-131            n_attn_heads,
-132        })
-133    }
-134
-135    pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-136        let h = self.n_attn_heads;
-137        let (b, t, s) = xs.dims3()?;
-138        let s = s / h;
-139        let (receptance, key, value, gate, w) = {
-140            // extract key-value
-141            let shifted = state.per_layer[self.layer_id].extract_key_value.clone();
-142            let shifted = if shifted.rank() == 2 {
-143                shifted.unsqueeze(1)?
-144            } else {
-145                shifted
-146            };
-147
-148            let sx = (&shifted - xs)?;
-149            let xxx = (xs + &sx * &self.time_mix_x)?;
-150            let xxx = xxx
-151                .broadcast_matmul(&self.time_mix_w1)?
-152                .tanh()?
-153                .reshape((b * t, 5, ()))?
-154                .transpose(0, 1)?;
-155
-156            let xxx = xxx.matmul(&self.time_mix_w2)?.reshape((5, b, t, ()))?;
-157
-158            let (mw, mk, mv, mr, mg) = (xxx.i(0)?, xxx.i(1)?, xxx.i(2)?, xxx.i(3)?, xxx.i(4)?);
-159
-160            let xw = (xs + &sx * (&self.time_mix_w + &mw)?)?;
-161            let xk = (xs + &sx * (&self.time_mix_key + &mk)?)?;
-162            let xv = (xs + &sx * (&self.time_mix_value + &mv)?)?;
-163            let xr = (xs + &sx * (&self.time_mix_receptance + &mr)?)?;
-164            let xg = (xs + &sx * (&self.time_mix_gate + &mg)?)?;
-165
-166            let w = (&self.time_decay
-167                + xw.broadcast_matmul(&self.time_decay_w1)?
-168                    .tanh()?
-169                    .broadcast_matmul(&self.time_decay_w2)?)?
-170            .reshape(((), 1, 1))?
-171            .reshape((self.n_attn_heads, (), 1))?;
-172
-173            let key = self.key.forward(&xk)?;
-174            let value = self.value.forward(&xv)?;
-175            let receptance = self.receptance.forward(&xr)?;
-176            let gate = candle_nn::ops::silu(&self.gate.forward(&xg)?)?;
-177            state.per_layer[self.layer_id].extract_key_value = xs.i((.., t - 1))?;
-178            (receptance, key, value, gate, w)
-179        };
-180
-181        // linear attention
-182        let mut state_ = state.per_layer[self.layer_id].linear_attention.clone();
-183        let key = key.reshape((b, t, h, s))?.permute((0, 2, 3, 1))?;
-184        let value = value.reshape((b, t, h, s))?.transpose(1, 2)?;
-185        let receptance = receptance.reshape((b, t, h, s))?.transpose(1, 2)?;
-186
-187        let w = w.exp()?.neg()?.exp()?;
-188
-189        let time_faaaa =
-190            self.time_faaaa
-191                .reshape(((), 1, 1))?
-192                .reshape((self.n_attn_heads, (), 1))?;
-193
-194        let mut out: Vec<Tensor> = Vec::with_capacity(t);
-195        for t_ in 0..t {
-196            let rt = receptance.i((.., .., t_..t_ + 1))?.contiguous()?;
-197            let kt = key.i((.., .., .., t_..t_ + 1))?.contiguous()?;
-198            let vt = value.i((.., .., t_..t_ + 1))?.contiguous()?;
-199            let at = kt.matmul(&vt)?;
-200            let rhs = (time_faaaa.broadcast_mul(&at)? + &state_)?;
-201            let out_ = rt.matmul(&rhs)?.squeeze(2)?;
-202            state_ = (&at + w.broadcast_mul(&state_))?;
-203            out.push(out_)
-204        }
-205        let out = Tensor::cat(&out, 1)?.reshape((b * t, h * s, 1))?;
-206        let out = out.apply(&self.ln_x)?.reshape((b, t, h * s))?;
-207        let out = (out * gate)?.apply(&self.output)?;
-208        state.per_layer[self.layer_id].linear_attention = state_;
-209        Ok(out)
-210    }
-211}
-212
-213#[derive(Debug, Clone)]
-214struct FeedForward {
-215    time_mix_key: Tensor,
-216    time_mix_receptance: Tensor,
-217    key: Linear,
-218    receptance: Linear,
-219    value: Linear,
-220    layer_id: usize,
-221}
-222
-223impl FeedForward {
-224    fn new(layer_id: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-225        let int_size = cfg
-226            .intermediate_size
-227            .unwrap_or(((cfg.hidden_size as f64 * 3.5) as usize) / 32 * 32);
-228        let key = linear(cfg.hidden_size, int_size, vb.pp("key"))?;
-229        let receptance = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("receptance"))?;
-230        let value = linear(int_size, cfg.hidden_size, vb.pp("value"))?;
-231        let time_mix_key = vb
-232            .get((1, 1, cfg.hidden_size), "time_mix_key")?
-233            .dequantize(vb.device())?;
-234        let time_mix_receptance = vb
-235            .get((1, 1, cfg.hidden_size), "time_mix_receptance")?
-236            .dequantize(vb.device())?;
-237        Ok(Self {
-238            key,
-239            receptance,
-240            value,
-241            time_mix_key,
-242            time_mix_receptance,
-243            layer_id,
-244        })
-245    }
-246
-247    fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-248        let shifted = state.per_layer[self.layer_id]
-249            .feed_forward
-250            .broadcast_sub(xs)?;
-251        let key = (xs + shifted.broadcast_mul(&self.time_mix_key)?)?;
-252        let receptance = (xs + shifted.broadcast_mul(&self.time_mix_receptance)?)?;
-253        let key = key.apply(&self.key)?.relu()?.sqr()?;
-254        let value = key.apply(&self.value)?;
-255        let receptance = candle_nn::ops::sigmoid(&receptance.apply(&self.receptance)?)?;
-256        state.per_layer[self.layer_id].feed_forward = xs.i((.., xs.dim(1)? - 1))?;
-257        let xs = (receptance * value)?;
-258        Ok(xs)
-259    }
-260}
-261
-262#[derive(Debug, Clone)]
-263struct Block {
-264    pre_ln: Option<LayerNorm>,
-265    ln1: LayerNorm,
-266    ln2: LayerNorm,
-267    attention: SelfAttention,
-268    feed_forward: FeedForward,
-269}
-270
-271impl Block {
-272    fn new(layer_id: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-273        let ln1 = layer_norm(cfg.hidden_size, cfg.layer_norm_epsilon, vb.pp("ln1"))?;
-274        let ln2 = layer_norm(cfg.hidden_size, cfg.layer_norm_epsilon, vb.pp("ln2"))?;
-275        let pre_ln = if layer_id == 0 {
-276            let ln = layer_norm(cfg.hidden_size, cfg.layer_norm_epsilon, vb.pp("pre_ln"))?;
-277            Some(ln)
-278        } else {
-279            None
-280        };
-281        let attention = SelfAttention::new(layer_id, cfg, vb.pp("attention"))?;
-282        let feed_forward = FeedForward::new(layer_id, cfg, vb.pp("feed_forward"))?;
-283        Ok(Self {
-284            pre_ln,
-285            ln1,
-286            ln2,
-287            attention,
-288            feed_forward,
-289        })
-290    }
-291
-292    fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-293        let xs = match self.pre_ln.as_ref() {
-294            None => xs.clone(),
-295            Some(pre_ln) => xs.apply(pre_ln)?,
-296        };
-297        let attention = self.attention.forward(&xs.apply(&self.ln1)?, state)?;
-298        let xs = (xs + attention)?;
-299        let feed_forward = self.feed_forward.forward(&xs.apply(&self.ln2)?, state)?;
-300        let xs = (xs + feed_forward)?;
-301        Ok(xs)
-302    }
-303}
-304
-305#[derive(Debug, Clone)]
-306pub struct Model {
-307    embeddings: Embedding,
-308    blocks: Vec<Block>,
-309    ln_out: LayerNorm,
-310    head: Linear,
-311    rescale_every: usize,
-312    layers_are_rescaled: bool,
-313}
-314
-315impl Model {
-316    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-317        let vb_m = vb.pp("rwkv");
-318        let embeddings = Embedding::new(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embeddings"))?;
-319        let mut blocks = Vec::with_capacity(cfg.num_hidden_layers);
-320        let vb_b = vb_m.pp("blocks");
-321        for block_index in 0..cfg.num_hidden_layers {
-322            let block = Block::new(block_index, cfg, vb_b.pp(block_index))?;
-323            blocks.push(block)
-324        }
-325        let ln_out = layer_norm(cfg.hidden_size, 1e-5, vb_m.pp("ln_out"))?;
-326        let head = linear(cfg.hidden_size, cfg.vocab_size, vb.pp("head"))?;
-327        Ok(Self {
-328            embeddings,
-329            blocks,
-330            ln_out,
-331            head,
-332            rescale_every: cfg.rescale_every,
-333            layers_are_rescaled: false, // This seem to only happen for the f16/bf16 dtypes.
-334        })
-335    }
-336
-337    pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-338        let (_b_size, _seq_len) = xs.dims2()?;
-339        let mut xs = xs.apply(&self.embeddings)?;
-340        for (block_idx, block) in self.blocks.iter().enumerate() {
-341            xs = block.forward(&xs, state)?;
-342            if self.layers_are_rescaled && (block_idx + 1) % self.rescale_every == 0 {
-343                xs = (xs / 2.)?
-344            }
-345        }
-346        let xs = xs.apply(&self.ln_out)?.apply(&self.head)?;
-347        state.pos += 1;
-348        Ok(xs)
-349    }
-350}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_stable_lm.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_stable_lm.rs.html deleted file mode 100644 index 857d050..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_stable_lm.rs.html +++ /dev/null @@ -1,302 +0,0 @@ -quantized_stable_lm.rs - source

candle_transformers/models/
quantized_stable_lm.rs

1//! Module for quantized StableLM implementation.
-2//!
-3//! StableLM is a series of open-source large language models
-4//! optimized for performance and stability. This implementation
-5//! provides quantization support for efficient model deployment.
-6//!
-7//! Key characteristics:
-8//! - RMSNorm for layer normalization
-9//! - Rotary positional embeddings (RoPE)
-10//! - Support for 8-bit quantization
-11//!
-12//! References:
-13//! - [StableLM](https://github.com/Stability-AI/StableLM)
-14//!
-15
-16use crate::quantized_nn::{layer_norm, linear, linear_no_bias, Embedding, Linear};
-17pub use crate::quantized_var_builder::VarBuilder;
-18use candle::{DType, Device, Module, Result, Tensor, D};
-19use candle_nn::{Activation, LayerNorm};
-20use std::sync::Arc;
-21
-22pub use crate::models::stable_lm::Config;
-23use crate::models::stable_lm::RotaryEmbedding;
-24
-25#[derive(Debug, Clone)]
-26#[allow(clippy::upper_case_acronyms)]
-27struct MLP {
-28    gate_proj: Linear,
-29    up_proj: Linear,
-30    down_proj: Linear,
-31    act_fn: Activation,
-32    span: tracing::Span,
-33}
-34
-35impl MLP {
-36    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-37        let hidden_sz = cfg.hidden_size;
-38        let intermediate_sz = cfg.intermediate_size;
-39        let gate_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("gate_proj"))?;
-40        let up_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("up_proj"))?;
-41        let down_proj = linear_no_bias(intermediate_sz, hidden_sz, vb.pp("down_proj"))?;
-42        Ok(Self {
-43            gate_proj,
-44            up_proj,
-45            down_proj,
-46            act_fn: cfg.hidden_act,
-47            span: tracing::span!(tracing::Level::TRACE, "mlp"),
-48        })
-49    }
-50}
-51
-52impl Module for MLP {
-53    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-54        let _enter = self.span.enter();
-55        let lhs = xs.apply(&self.gate_proj)?.apply(&self.act_fn)?;
-56        let rhs = xs.apply(&self.up_proj)?;
-57        (lhs * rhs)?.apply(&self.down_proj)
-58    }
-59}
-60
-61#[derive(Debug, Clone)]
-62struct Attention {
-63    q_proj: Linear,
-64    k_proj: Linear,
-65    v_proj: Linear,
-66    o_proj: Linear,
-67    num_heads: usize,
-68    num_kv_heads: usize,
-69    num_kv_groups: usize,
-70    head_dim: usize,
-71    hidden_size: usize,
-72    rotary_emb: Arc<RotaryEmbedding>,
-73    kv_cache: Option<(Tensor, Tensor)>,
-74    use_cache: bool,
-75    rotary_ndims: usize,
-76    span: tracing::Span,
-77}
-78
-79impl Attention {
-80    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-81        let hidden_sz = cfg.hidden_size;
-82        let head_dim = cfg.head_dim();
-83        let num_heads = cfg.num_attention_heads;
-84        let num_kv_heads = cfg.num_key_value_heads;
-85        let linear_layer = if cfg.use_qkv_bias {
-86            linear
-87        } else {
-88            linear_no_bias
-89        };
-90        let q_proj = linear_layer(hidden_sz, num_heads * head_dim, vb.pp("q_proj"))?;
-91        let k_proj = linear_layer(hidden_sz, num_kv_heads * head_dim, vb.pp("k_proj"))?;
-92        let v_proj = linear_layer(hidden_sz, num_kv_heads * head_dim, vb.pp("v_proj"))?;
-93        let o_proj = linear_no_bias(num_heads * head_dim, hidden_sz, vb.pp("o_proj"))?;
-94        Ok(Self {
-95            q_proj,
-96            k_proj,
-97            v_proj,
-98            o_proj,
-99            num_heads,
-100            num_kv_heads,
-101            num_kv_groups: cfg.num_kv_groups(),
-102            head_dim,
-103            hidden_size: hidden_sz,
-104            rotary_emb,
-105            kv_cache: None,
-106            use_cache: cfg.use_cache,
-107            rotary_ndims: cfg.rotary_ndims(),
-108            span: tracing::span!(tracing::Level::TRACE, "attn"),
-109        })
-110    }
-111
-112    fn forward(
-113        &mut self,
-114        xs: &Tensor,
-115        attention_mask: Option<&Tensor>,
-116        seqlen_offset: usize,
-117    ) -> Result<Tensor> {
-118        let _enter = self.span.enter();
-119        let (b_sz, q_len, _) = xs.dims3()?;
-120
-121        let query_states = self.q_proj.forward(xs)?;
-122        let key_states = self.k_proj.forward(xs)?;
-123        let value_states = self.v_proj.forward(xs)?;
-124
-125        let query_states = query_states
-126            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-127            .transpose(1, 2)?;
-128        let key_states = key_states
-129            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-130            .transpose(1, 2)?;
-131        let value_states = value_states
-132            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-133            .transpose(1, 2)?;
-134
-135        let (rot_ndims, pass_ndims) = (self.rotary_ndims, self.head_dim - self.rotary_ndims);
-136        let query_rot = query_states.narrow(D::Minus1, 0, rot_ndims)?;
-137        let query_pass = query_states.narrow(D::Minus1, rot_ndims, pass_ndims)?;
-138        let key_rot = key_states.narrow(D::Minus1, 0, rot_ndims)?;
-139        let key_pass = key_states.narrow(D::Minus1, rot_ndims, pass_ndims)?;
-140        let (query_rot, key_rot) =
-141            self.rotary_emb
-142                .apply_rotary_emb_qkv(&query_rot, &key_rot, seqlen_offset)?;
-143        let query_states = Tensor::cat(&[query_rot, query_pass], D::Minus1)?.contiguous()?;
-144        let key_states = Tensor::cat(&[key_rot, key_pass], D::Minus1)?.contiguous()?;
-145
-146        let (key_states, value_states) = match &self.kv_cache {
-147            None => (key_states, value_states),
-148            Some((prev_k, prev_v)) => {
-149                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-150                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-151                (key_states, value_states)
-152            }
-153        };
-154        if self.use_cache {
-155            self.kv_cache = Some((key_states.clone(), value_states.clone()));
-156        }
-157
-158        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?.contiguous()?;
-159        let value_states =
-160            crate::utils::repeat_kv(value_states, self.num_kv_groups)?.contiguous()?;
-161
-162        let attn_output = {
-163            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-164            let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-165
-166            let attn_weights = match attention_mask {
-167                None => attn_weights,
-168                Some(mask) => attn_weights.broadcast_add(mask)?,
-169            };
-170            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-171            attn_weights.matmul(&value_states)?
-172        };
-173        attn_output
-174            .transpose(1, 2)?
-175            .reshape((b_sz, q_len, self.hidden_size))?
-176            .apply(&self.o_proj)
-177    }
-178}
-179
-180#[derive(Debug, Clone)]
-181struct DecoderLayer {
-182    self_attn: Attention,
-183    mlp: MLP,
-184    input_layernorm: LayerNorm,
-185    post_attention_layernorm: LayerNorm,
-186    span: tracing::Span,
-187}
-188
-189impl DecoderLayer {
-190    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-191        let self_attn = Attention::new(rotary_emb, cfg, vb.pp("self_attn"))?;
-192        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-193        let input_layernorm = layer_norm(
-194            cfg.hidden_size,
-195            cfg.layer_norm_eps,
-196            vb.pp("input_layernorm"),
-197        )?;
-198        let post_attention_layernorm = layer_norm(
-199            cfg.hidden_size,
-200            cfg.layer_norm_eps,
-201            vb.pp("post_attention_layernorm"),
-202        )?;
-203        Ok(Self {
-204            self_attn,
-205            mlp,
-206            input_layernorm,
-207            post_attention_layernorm,
-208            span: tracing::span!(tracing::Level::TRACE, "layer"),
-209        })
-210    }
-211
-212    fn forward(
-213        &mut self,
-214        xs: &Tensor,
-215        attention_mask: Option<&Tensor>,
-216        seqlen_offset: usize,
-217    ) -> Result<Tensor> {
-218        let _enter = self.span.enter();
-219        let residual = xs;
-220        let xs = self.input_layernorm.forward(xs)?;
-221        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-222        let xs = (xs + residual)?;
-223        let residual = &xs;
-224        let xs = xs.apply(&self.post_attention_layernorm)?.apply(&self.mlp)?;
-225        residual + xs
-226    }
-227}
-228
-229#[derive(Debug, Clone)]
-230pub struct Model {
-231    embed_tokens: Embedding,
-232    layers: Vec<DecoderLayer>,
-233    norm: LayerNorm,
-234    lm_head: Linear,
-235    device: Device,
-236    span: tracing::Span,
-237}
-238
-239impl Model {
-240    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-241        let vb_m = vb.pp("model");
-242        let embed_tokens =
-243            Embedding::new(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-244        let rotary_emb = Arc::new(RotaryEmbedding::new(DType::F32, cfg, vb_m.device())?);
-245        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-246        let vb_l = vb_m.pp("layers");
-247        for layer_idx in 0..cfg.num_hidden_layers {
-248            let layer = DecoderLayer::new(rotary_emb.clone(), cfg, vb_l.pp(layer_idx))?;
-249            layers.push(layer)
-250        }
-251        let norm = layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb_m.pp("norm"))?;
-252        let lm_head = linear_no_bias(cfg.hidden_size, cfg.vocab_size, vb.pp("lm_head"))?;
-253        Ok(Self {
-254            embed_tokens,
-255            layers,
-256            norm,
-257            lm_head,
-258            device: vb.device().clone(),
-259            span: tracing::span!(tracing::Level::TRACE, "model"),
-260        })
-261    }
-262
-263    fn prepare_decoder_attention_mask(
-264        &self,
-265        b_size: usize,
-266        tgt_len: usize,
-267        seqlen_offset: usize,
-268    ) -> Result<Tensor> {
-269        // Sliding window mask?
-270        let mask: Vec<_> = (0..tgt_len)
-271            .flat_map(|i| (0..tgt_len).map(move |j| if i < j { f32::NEG_INFINITY } else { 0. }))
-272            .collect();
-273        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-274        let mask = if seqlen_offset > 0 {
-275            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-276            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-277        } else {
-278            mask
-279        };
-280        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-281            .to_dtype(DType::F32)
-282    }
-283
-284    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-285        let _enter = self.span.enter();
-286        let (b_size, seq_len) = input_ids.dims2()?;
-287        let attention_mask = if seq_len <= 1 {
-288            None
-289        } else {
-290            let mask = self.prepare_decoder_attention_mask(b_size, seq_len, seqlen_offset)?;
-291            Some(mask)
-292        };
-293        let mut xs = self.embed_tokens.forward(input_ids)?;
-294        for layer in self.layers.iter_mut() {
-295            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-296        }
-297        xs.narrow(1, seq_len - 1, 1)?
-298            .apply(&self.norm)?
-299            .apply(&self.lm_head)
-300    }
-301}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/quantized_t5.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/quantized_t5.rs.html deleted file mode 100644 index 3090e32..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/quantized_t5.rs.html +++ /dev/null @@ -1,800 +0,0 @@ -quantized_t5.rs - source

candle_transformers/models/
quantized_t5.rs

1//! T5 model implementation with quantization support.
-2//!
-3//! T5 is an encoder-decoder model pre-trained on a multi-task mixture of supervised
-4//! and unsupervised tasks. This implementation provides quantization for reduced
-5//! memory and compute requirements.
-6//!
-7//! Key characteristics:
-8//! - Encoder-decoder architecture
-9//! - Layer normalization
-10//! - Relative positional encodings
-11//! - Support for 8-bit quantization
-12//!
-13//! References:
-14//! - 📝 [T5 Paper](https://arxiv.org/abs/1910.10683)
-15//! - 🤗 [Model Card](https://huggingface.co/t5-base)
-16//! - 🤗 Original model from [T5](https://github.com/huggingface/transformers/blob/main/src/transformers/models/t5/modeling_t5.py)
-17
-18use crate::models::t5::{deserialize_feed_forward_proj_activation, ActivationWithOptionalGating};
-19use crate::models::with_tracing::QMatMul;
-20use crate::quantized_nn::Embedding;
-21pub use crate::quantized_var_builder::VarBuilder;
-22use candle::{DType, Device, Module, Result, Tensor, D};
-23use candle_nn::Activation;
-24use serde::Deserialize;
-25use std::sync::Arc;
-26
-27fn default_relative_attention_max_distance() -> usize {
-28    128
-29}
-30
-31fn default_is_decoder() -> bool {
-32    false
-33}
-34
-35fn default_use_cache() -> bool {
-36    true
-37}
-38
-39fn default_tie_word_embeddings() -> bool {
-40    true
-41}
-42
-43fn get_mask(size: usize, device: &Device) -> Result<Tensor> {
-44    let mask: Vec<_> = (0..size)
-45        .flat_map(|i| (0..size).map(move |j| u8::from(j > i)))
-46        .collect();
-47    Tensor::from_slice(&mask, (size, size), device)
-48}
-49
-50fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: f32) -> Result<Tensor> {
-51    let shape = mask.shape();
-52    let on_true = Tensor::new(on_true, on_false.device())?.broadcast_as(shape.dims())?;
-53    let m = mask.where_cond(&on_true, on_false)?;
-54    Ok(m)
-55}
-56
-57#[derive(Debug, Clone, PartialEq, Deserialize)]
-58pub struct Config {
-59    vocab_size: usize,
-60    d_model: usize,
-61    d_kv: usize,
-62    d_ff: usize,
-63    num_layers: usize,
-64    num_decoder_layers: Option<usize>,
-65    num_heads: usize,
-66    relative_attention_num_buckets: usize,
-67    #[serde(default = "default_relative_attention_max_distance")]
-68    relative_attention_max_distance: usize,
-69    dropout_rate: f64,
-70    layer_norm_epsilon: f64,
-71    initializer_factor: f64,
-72    #[serde(default, deserialize_with = "deserialize_feed_forward_proj_activation")]
-73    pub feed_forward_proj: ActivationWithOptionalGating,
-74    #[serde(default = "default_tie_word_embeddings")]
-75    tie_word_embeddings: bool,
-76    #[serde(default = "default_is_decoder")]
-77    is_decoder: bool,
-78    is_encoder_decoder: bool,
-79    #[serde(default = "default_use_cache")]
-80    pub use_cache: bool,
-81    pub pad_token_id: usize,
-82    pub eos_token_id: usize,
-83    pub decoder_start_token_id: Option<usize>,
-84}
-85
-86impl Default for Config {
-87    fn default() -> Self {
-88        Self {
-89            vocab_size: 32128,
-90            d_model: 512,
-91            d_kv: 64,
-92            d_ff: 2048,
-93            num_layers: 6,
-94            num_decoder_layers: None,
-95            num_heads: 8,
-96            relative_attention_num_buckets: 32,
-97            relative_attention_max_distance: 128,
-98            dropout_rate: 0.1,
-99            layer_norm_epsilon: 1e-6,
-100            initializer_factor: 1.0,
-101            feed_forward_proj: ActivationWithOptionalGating {
-102                gated: false,
-103                activation: Activation::Relu,
-104            },
-105            tie_word_embeddings: true,
-106            is_decoder: false,
-107            is_encoder_decoder: true,
-108            use_cache: true,
-109            pad_token_id: 0,
-110            eos_token_id: 1,
-111            decoder_start_token_id: Some(0),
-112        }
-113    }
-114}
-115
-116#[derive(Debug, Clone)]
-117struct T5LayerNorm {
-118    weight: Tensor,
-119    variance_epsilon: f64,
-120    span: tracing::Span,
-121}
-122
-123impl T5LayerNorm {
-124    fn load(h: usize, eps: f64, vb: VarBuilder) -> Result<Self> {
-125        let weight = vb.get(h, "weight")?.dequantize(vb.device())?;
-126        Ok(Self {
-127            weight,
-128            variance_epsilon: eps,
-129            span: tracing::span!(tracing::Level::TRACE, "layer-norm"),
-130        })
-131    }
-132}
-133
-134impl Module for T5LayerNorm {
-135    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-136        let _enter = self.span.enter();
-137        let dtype = xs.dtype();
-138        let xs_f32 = xs.to_dtype(DType::F32)?;
-139        // variance = hidden_states.to(torch.float32).pow(2).mean(-1, keepdim=True)
-140        let variance = xs_f32.sqr()?.mean_keepdim(D::Minus1)?;
-141        let xs = xs.broadcast_div(&(variance + self.variance_epsilon)?.sqrt()?)?;
-142        let xs = xs.to_dtype(dtype)?;
-143        let xs = xs.broadcast_mul(&self.weight)?;
-144        Ok(xs)
-145    }
-146}
-147
-148#[derive(Debug, Clone)]
-149struct T5DenseActDense {
-150    wi: QMatMul,
-151    wo: QMatMul,
-152    act: Activation,
-153    span: tracing::Span,
-154}
-155
-156impl T5DenseActDense {
-157    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-158        let wi = QMatMul::new(cfg.d_model, cfg.d_ff, vb.pp("wi"))?;
-159        let wo = QMatMul::new(cfg.d_ff, cfg.d_model, vb.pp("wo"))?;
-160        Ok(Self {
-161            wi,
-162            wo,
-163            act: Activation::Relu,
-164            span: tracing::span!(tracing::Level::TRACE, "dense-act-dense"),
-165        })
-166    }
-167}
-168
-169impl Module for T5DenseActDense {
-170    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-171        let _enter = self.span.enter();
-172        let xs = self.wi.forward(xs)?;
-173        let xs = self.act.forward(&xs)?;
-174        let xs = self.wo.forward(&xs)?;
-175        Ok(xs)
-176    }
-177}
-178
-179#[derive(Debug, Clone)]
-180struct T5DenseGatedActDense {
-181    wi_0: QMatMul,
-182    wi_1: QMatMul,
-183    wo: QMatMul,
-184    act: Activation,
-185    span: tracing::Span,
-186}
-187
-188impl T5DenseGatedActDense {
-189    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-190        let wi_0 = QMatMul::new(cfg.d_model, cfg.d_ff, vb.pp("wi_0"))?;
-191        let wi_1 = QMatMul::new(cfg.d_model, cfg.d_ff, vb.pp("wi_1"))?;
-192        let wo = QMatMul::new(cfg.d_ff, cfg.d_model, vb.pp("wo"))?;
-193        Ok(Self {
-194            wi_0,
-195            wi_1,
-196            wo,
-197            act: cfg.feed_forward_proj.activation,
-198            span: tracing::span!(tracing::Level::TRACE, "dense-gated-act-dense"),
-199        })
-200    }
-201}
-202
-203impl Module for T5DenseGatedActDense {
-204    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-205        let _enter = self.span.enter();
-206        let hidden_gelu = self.act.forward(&self.wi_0.forward(xs)?)?;
-207        let hidden_linear = self.wi_1.forward(xs)?;
-208        let xs = hidden_gelu.broadcast_mul(&hidden_linear)?;
-209        let xs = self.wo.forward(&xs)?;
-210        Ok(xs)
-211    }
-212}
-213
-214#[derive(Debug, Clone)]
-215struct T5LayerFF {
-216    dense_act: Option<T5DenseActDense>,
-217    gated_dense_act: Option<T5DenseGatedActDense>,
-218    layer_norm: T5LayerNorm,
-219    span: tracing::Span,
-220}
-221
-222impl T5LayerFF {
-223    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-224        let layer_norm =
-225            T5LayerNorm::load(cfg.d_model, cfg.layer_norm_epsilon, vb.pp("layer_norm"))?;
-226        let (dense_act, gated_dense_act) = if cfg.feed_forward_proj.gated {
-227            (
-228                None,
-229                Some(T5DenseGatedActDense::load(vb.pp("DenseReluDense"), cfg)?),
-230            )
-231        } else {
-232            (
-233                Some(T5DenseActDense::load(vb.pp("DenseReluDense"), cfg)?),
-234                None,
-235            )
-236        };
-237        Ok(Self {
-238            dense_act,
-239            gated_dense_act,
-240            layer_norm,
-241            span: tracing::span!(tracing::Level::TRACE, "layer-ff"),
-242        })
-243    }
-244}
-245
-246impl Module for T5LayerFF {
-247    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-248        let _enter = self.span.enter();
-249        let ys = self.layer_norm.forward(xs)?;
-250        let ys = match &self.dense_act {
-251            Some(dense_act) => dense_act.forward(&ys)?,
-252            None => self.gated_dense_act.as_ref().unwrap().forward(&ys)?,
-253        };
-254        let xs = (xs + ys)?;
-255        Ok(xs)
-256    }
-257}
-258
-259#[derive(Debug, Clone)]
-260struct T5Attention {
-261    q: QMatMul,
-262    k: QMatMul,
-263    v: QMatMul,
-264    o: QMatMul,
-265    n_heads: usize,
-266    d_kv: usize,
-267    relative_attention_bias: Option<Embedding>,
-268    relative_attention_num_buckets: usize,
-269    relative_attention_max_distance: usize,
-270    inner_dim: usize,
-271    use_cache: bool,
-272    kv_cache: Option<(Tensor, Tensor)>,
-273    span: tracing::Span,
-274    span_cache: tracing::Span,
-275    span_mm: tracing::Span,
-276    span_sm: tracing::Span,
-277}
-278
-279impl T5Attention {
-280    fn load(
-281        has_relative_attention_bias: bool,
-282        decoder: bool,
-283        vb: VarBuilder,
-284        cfg: &Config,
-285    ) -> Result<Self> {
-286        let inner_dim = cfg.num_heads * cfg.d_kv;
-287        let q = QMatMul::new(cfg.d_model, inner_dim, vb.pp("q"))?;
-288        let k = QMatMul::new(cfg.d_model, inner_dim, vb.pp("k"))?;
-289        let v = QMatMul::new(cfg.d_model, inner_dim, vb.pp("v"))?;
-290        let o = QMatMul::new(inner_dim, cfg.d_model, vb.pp("o"))?;
-291        let relative_attention_bias = if has_relative_attention_bias {
-292            let emb = Embedding::new(
-293                cfg.relative_attention_num_buckets,
-294                cfg.num_heads,
-295                vb.pp("relative_attention_bias"),
-296            )?;
-297            Some(emb)
-298        } else {
-299            None
-300        };
-301        Ok(Self {
-302            q,
-303            k,
-304            v,
-305            o,
-306            n_heads: cfg.num_heads,
-307            d_kv: cfg.d_kv,
-308            relative_attention_bias,
-309            relative_attention_num_buckets: cfg.relative_attention_num_buckets,
-310            relative_attention_max_distance: cfg.relative_attention_max_distance,
-311            inner_dim,
-312            use_cache: cfg.use_cache && decoder,
-313            kv_cache: None,
-314            span: tracing::span!(tracing::Level::TRACE, "attention"),
-315            span_cache: tracing::span!(tracing::Level::TRACE, "attention-cache"),
-316            span_mm: tracing::span!(tracing::Level::TRACE, "attention-mm"),
-317            span_sm: tracing::span!(tracing::Level::TRACE, "attention-sm"),
-318        })
-319    }
-320
-321    fn forward(
-322        &mut self,
-323        xs: &Tensor,
-324        position_bias: Option<&Tensor>,
-325        key_value_states: Option<&Tensor>,
-326        mask: Option<&Tensor>,
-327    ) -> Result<(Tensor, Option<Tensor>)> {
-328        // Performs Self-attention (if key_value_states is None) or attention
-329        // over source sentence (provided by key_value_states).
-330        let _enter = self.span.enter();
-331        let kv_input = match key_value_states {
-332            None => xs,
-333            Some(key_value_states) => key_value_states,
-334        };
-335        let (b_sz, q_len) = (xs.dim(0)?, xs.dim(1)?);
-336        let kv_len = kv_input.dim(1)?;
-337        let q = self.q.forward(xs)?;
-338        let k = self.k.forward(kv_input)?;
-339        let v = self.v.forward(kv_input)?;
-340        let q = q
-341            .reshape((b_sz, q_len, self.n_heads, self.d_kv))?
-342            .transpose(1, 2)?
-343            .contiguous()?;
-344        let mut k = k
-345            .reshape((b_sz, kv_len, self.n_heads, self.d_kv))?
-346            .transpose(1, 2)?;
-347        let mut v = v
-348            .reshape((b_sz, kv_len, self.n_heads, self.d_kv))?
-349            .transpose(1, 2)?;
-350
-351        if self.use_cache && key_value_states.is_none() {
-352            let _enter = self.span_cache.enter();
-353            if let Some((kv_cache_k, kv_cache_v)) = &self.kv_cache {
-354                k = Tensor::cat(&[kv_cache_k, &k], 2)?;
-355                v = Tensor::cat(&[kv_cache_v, &v], 2)?;
-356            };
-357            self.kv_cache = Some((k.clone(), v.clone()));
-358        };
-359        let k = k.contiguous()?;
-360        let v = v.contiguous()?;
-361        // TODO: Use flash_attn.
-362        let scores = {
-363            let _enter = self.span_mm.enter();
-364            q.matmul(&k.t()?)?
-365        };
-366        let scores = match mask {
-367            None => scores,
-368            Some(mask) => masked_fill(
-369                &scores,
-370                &mask
-371                    .unsqueeze(0)?
-372                    .unsqueeze(0)?
-373                    .repeat((b_sz, self.n_heads))?,
-374                f32::NEG_INFINITY,
-375            )?,
-376        };
-377
-378        let (scores, position_bias) = match position_bias {
-379            Some(position_bias) => (
-380                scores.broadcast_add(position_bias)?,
-381                Some(position_bias.clone()),
-382            ),
-383            None => match &self.relative_attention_bias {
-384                None => (scores, None),
-385                Some(relative_attention_bias) => {
-386                    // This only handles the bidirectional case.
-387                    let kv_len = k.dim(2)?;
-388                    let (q_start, q_end) = match self.use_cache {
-389                        true => ((kv_len - q_len) as u32, kv_len as u32),
-390                        false => (0_u32, kv_len as u32),
-391                    };
-392                    let num_buckets = self.relative_attention_num_buckets as u32 / 2;
-393                    let max_exact = num_buckets / 2;
-394                    let relative_position = (q_start..q_end)
-395                        .map(|i| {
-396                            (0..kv_len as u32)
-397                                .map(|j| {
-398                                    if i < j {
-399                                        if j - i < max_exact {
-400                                            j - i + num_buckets
-401                                        } else {
-402                                            let b = f32::log(
-403                                                (j - i) as f32 / max_exact as f32,
-404                                                self.relative_attention_max_distance as f32
-405                                                    / max_exact as f32,
-406                                            ) * (num_buckets - max_exact) as f32;
-407                                            u32::min(
-408                                                max_exact + num_buckets + b as u32,
-409                                                self.relative_attention_num_buckets as u32 - 1,
-410                                            )
-411                                        }
-412                                    } else if i - j < max_exact {
-413                                        i - j
-414                                    } else {
-415                                        let b = f32::log(
-416                                            (i - j) as f32 / max_exact as f32,
-417                                            self.relative_attention_max_distance as f32
-418                                                / max_exact as f32,
-419                                        ) * (num_buckets - max_exact) as f32;
-420                                        max_exact + b as u32
-421                                    }
-422                                })
-423                                .collect::<Vec<u32>>()
-424                        })
-425                        .collect::<Vec<Vec<_>>>();
-426                    let relative_buckets = Tensor::new(relative_position, q.device())?;
-427                    let position_bias = relative_attention_bias
-428                        .forward(&relative_buckets)?
-429                        .permute((2, 0, 1))?
-430                        .unsqueeze(0)?;
-431                    (scores.broadcast_add(&position_bias)?, Some(position_bias))
-432                    // TODO: position_bias_masked?
-433                }
-434            },
-435        };
-436
-437        let attn_weights = {
-438            let _enter = self.span_sm.enter();
-439            candle_nn::ops::softmax_last_dim(&scores)?
-440        };
-441        let attn_output = attn_weights.matmul(&v)?;
-442        let attn_output = attn_output
-443            .transpose(1, 2)?
-444            .reshape((b_sz, q_len, self.inner_dim))?;
-445        let attn_output = self.o.forward(&attn_output)?;
-446        Ok((attn_output, position_bias))
-447    }
-448
-449    fn clear_kv_cache(&mut self) {
-450        self.kv_cache = None
-451    }
-452}
-453
-454#[derive(Debug, Clone)]
-455struct T5LayerSelfAttention {
-456    self_attention: T5Attention,
-457    layer_norm: T5LayerNorm,
-458    span: tracing::Span,
-459}
-460
-461impl T5LayerSelfAttention {
-462    fn load(h: bool, d: bool, vb: VarBuilder, cfg: &Config) -> Result<Self> {
-463        let self_attention = T5Attention::load(h, d, vb.pp("SelfAttention"), cfg)?;
-464        let layer_norm =
-465            T5LayerNorm::load(cfg.d_model, cfg.layer_norm_epsilon, vb.pp("layer_norm"))?;
-466        Ok(Self {
-467            self_attention,
-468            layer_norm,
-469            span: tracing::span!(tracing::Level::TRACE, "self-attn"),
-470        })
-471    }
-472
-473    fn forward(
-474        &mut self,
-475        xs: &Tensor,
-476        position_bias: Option<&Tensor>,
-477        mask: Option<&Tensor>,
-478    ) -> Result<(Tensor, Option<Tensor>)> {
-479        let _enter = self.span.enter();
-480        let normed_xs = self.layer_norm.forward(xs)?;
-481        let (ys, position_bias) =
-482            self.self_attention
-483                .forward(&normed_xs, position_bias, None, mask)?;
-484        let ys = (xs + ys)?;
-485        Ok((ys, position_bias))
-486    }
-487
-488    fn clear_kv_cache(&mut self) {
-489        self.self_attention.clear_kv_cache()
-490    }
-491}
-492
-493#[derive(Debug, Clone)]
-494struct T5LayerCrossAttention {
-495    cross_attention: T5Attention,
-496    layer_norm: T5LayerNorm,
-497    span: tracing::Span,
-498}
-499
-500impl T5LayerCrossAttention {
-501    fn load(decoder: bool, vb: VarBuilder, cfg: &Config) -> Result<Self> {
-502        let cross_attention = T5Attention::load(false, decoder, vb.pp("EncDecAttention"), cfg)?;
-503        let layer_norm =
-504            T5LayerNorm::load(cfg.d_model, cfg.layer_norm_epsilon, vb.pp("layer_norm"))?;
-505        Ok(Self {
-506            cross_attention,
-507            layer_norm,
-508            span: tracing::span!(tracing::Level::TRACE, "cross-attn"),
-509        })
-510    }
-511
-512    fn forward(
-513        &mut self,
-514        hidden_states: &Tensor,
-515        position_bias: Option<&Tensor>,
-516        key_value_states: &Tensor,
-517    ) -> Result<(Tensor, Option<Tensor>)> {
-518        let _enter = self.span.enter();
-519        let normed_hidden_states = self.layer_norm.forward(hidden_states)?;
-520        let (ys, position_bias) = self.cross_attention.forward(
-521            &normed_hidden_states,
-522            position_bias,
-523            Some(key_value_states),
-524            None,
-525        )?;
-526        let ys = (hidden_states + ys)?;
-527        Ok((ys, position_bias))
-528    }
-529
-530    fn clear_kv_cache(&mut self) {
-531        self.cross_attention.clear_kv_cache()
-532    }
-533}
-534
-535#[derive(Debug, Clone)]
-536struct T5Block {
-537    self_attn: T5LayerSelfAttention,
-538    cross_attn: Option<T5LayerCrossAttention>,
-539    ff: T5LayerFF,
-540    span: tracing::Span,
-541}
-542
-543impl T5Block {
-544    fn load(
-545        has_relative_attention_bias: bool,
-546        decoder: bool,
-547        vb: VarBuilder,
-548        cfg: &Config,
-549    ) -> Result<Self> {
-550        let vb = vb.pp("layer");
-551        let self_attn =
-552            T5LayerSelfAttention::load(has_relative_attention_bias, decoder, vb.pp("0"), cfg)?;
-553        let cross_attn = if cfg.is_decoder {
-554            Some(T5LayerCrossAttention::load(decoder, vb.pp("1"), cfg)?)
-555        } else {
-556            None
-557        };
-558        let ff_i = if cross_attn.is_some() { 2 } else { 1 };
-559        let ff = T5LayerFF::load(vb.pp(ff_i), cfg)?;
-560        Ok(Self {
-561            self_attn,
-562            cross_attn,
-563            ff,
-564            span: tracing::span!(tracing::Level::TRACE, "block"),
-565        })
-566    }
-567
-568    fn forward(
-569        &mut self,
-570        xs: &Tensor,
-571        position_bias: Option<&Tensor>,
-572        encoder_hidden_states: Option<&Tensor>,
-573    ) -> Result<(Tensor, Option<Tensor>)> {
-574        let _enter = self.span.enter();
-575        // TODO: Cache masks
-576        let mask = match self.cross_attn.is_some() {
-577            true => {
-578                let mask_len = xs.dim(1)?;
-579                // If the input seq length is 1, no need for a mask, this is also helpful to avoid shape
-580                // issues when using the KV cache in the decoder.
-581                if mask_len <= 1 {
-582                    None
-583                } else {
-584                    Some(get_mask(mask_len, xs.device())?)
-585                }
-586            }
-587            false => None,
-588        };
-589        let (mut xs, position_bias) = self.self_attn.forward(xs, position_bias, mask.as_ref())?;
-590        // TODO: clamp for f16?
-591        if let Some(cross_attn) = &mut self.cross_attn {
-592            (xs, _) = cross_attn.forward(&xs, None, encoder_hidden_states.unwrap())?;
-593            // TODO: clamp for f16?
-594        }
-595        let xs = self.ff.forward(&xs)?;
-596        // TODO: clamp for f16?
-597        Ok((xs, position_bias))
-598    }
-599
-600    fn clear_kv_cache(&mut self) {
-601        self.self_attn.clear_kv_cache();
-602        self.cross_attn.iter_mut().for_each(|c| c.clear_kv_cache());
-603    }
-604}
-605
-606#[derive(Debug, Clone)]
-607struct T5Stack {
-608    block: Vec<T5Block>,
-609    shared: Arc<Embedding>,
-610    final_layer_norm: T5LayerNorm,
-611    span: tracing::Span,
-612}
-613
-614impl T5Stack {
-615    fn load(decoder: bool, vb: VarBuilder, shared: &Arc<Embedding>, cfg: &Config) -> Result<Self> {
-616        let block = (0..cfg.num_layers)
-617            .map(|i| T5Block::load(i == 0, decoder, vb.pp(format!("block.{i}")), cfg))
-618            .collect::<Result<Vec<_>>>()?;
-619        let final_layer_norm = T5LayerNorm::load(
-620            cfg.d_model,
-621            cfg.layer_norm_epsilon,
-622            vb.pp("final_layer_norm"),
-623        )?;
-624        Ok(Self {
-625            block,
-626            shared: shared.clone(),
-627            final_layer_norm,
-628            span: tracing::span!(tracing::Level::TRACE, "stack"),
-629        })
-630    }
-631
-632    fn forward(
-633        &mut self,
-634        input_ids: &Tensor,
-635        encoder_hidden_states: Option<&Tensor>,
-636    ) -> Result<Tensor> {
-637        let _enter = self.span.enter();
-638        let input_embeds = self.shared.as_ref().forward(input_ids)?;
-639        let mut hidden_states = input_embeds;
-640        let mut position_bias = None;
-641        for block in self.block.iter_mut() {
-642            (hidden_states, position_bias) = block.forward(
-643                &hidden_states,
-644                position_bias.as_ref(),
-645                encoder_hidden_states,
-646            )?
-647        }
-648        self.final_layer_norm.forward(&hidden_states)
-649    }
-650
-651    fn clear_kv_cache(&mut self) {
-652        self.block.iter_mut().for_each(|b| b.clear_kv_cache())
-653    }
-654}
-655
-656#[derive(Debug, Clone)]
-657pub struct T5EncoderModel {
-658    encoder: T5Stack,
-659    device: Device,
-660    span: tracing::Span,
-661}
-662
-663impl T5EncoderModel {
-664    pub fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-665        let shared_vb = if vb.contains_key("shared.weight") {
-666            vb.pp("shared")
-667        } else {
-668            vb.pp("decoder").pp("embed_tokens")
-669        };
-670        let shared = Embedding::new(cfg.vocab_size, cfg.d_model, shared_vb)?;
-671        let shared = Arc::new(shared);
-672        let encoder = T5Stack::load(false, vb.pp("encoder"), &shared, cfg)?;
-673        Ok(Self {
-674            encoder,
-675            device: vb.device().clone(),
-676            span: tracing::span!(tracing::Level::TRACE, "encoder"),
-677        })
-678    }
-679
-680    pub fn forward(&mut self, input_ids: &Tensor) -> Result<Tensor> {
-681        let _enter = self.span.enter();
-682        self.encoder.forward(input_ids, None)
-683    }
-684
-685    pub fn device(&self) -> &Device {
-686        &self.device
-687    }
-688
-689    pub fn clear_kv_cache(&mut self) {
-690        self.encoder.clear_kv_cache()
-691    }
-692}
-693
-694#[derive(Debug, Clone)]
-695pub struct T5ForConditionalGeneration {
-696    encoder: T5Stack,
-697    decoder: T5Stack,
-698    d_model: usize,
-699    tie_word_embeddings: bool,
-700    lm_head: Option<QMatMul>,
-701    shared: Arc<Embedding>,
-702    device: Device,
-703    span_decode: tracing::Span,
-704    span_decode_head: tracing::Span,
-705}
-706
-707impl T5ForConditionalGeneration {
-708    pub fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-709        assert!(cfg.is_encoder_decoder);
-710        let d_model = cfg.d_model;
-711        let shared_vb = if vb.contains_key("shared.weight") {
-712            vb.pp("shared")
-713        } else {
-714            vb.pp("decoder").pp("embed_tokens")
-715        };
-716        let shared = Embedding::new(cfg.vocab_size, cfg.d_model, shared_vb)?;
-717        let shared = Arc::new(shared);
-718
-719        let mut encoder_cfg = cfg.clone();
-720        encoder_cfg.is_decoder = false;
-721        encoder_cfg.use_cache = false;
-722        encoder_cfg.is_encoder_decoder = false;
-723        let encoder = T5Stack::load(false, vb.pp("encoder"), &shared, &encoder_cfg)?;
-724
-725        let mut decoder_cfg = cfg.clone();
-726        decoder_cfg.is_decoder = true;
-727        decoder_cfg.is_encoder_decoder = false;
-728        decoder_cfg.num_layers = cfg.num_decoder_layers.unwrap_or(cfg.num_layers);
-729        let decoder = T5Stack::load(true, vb.pp("decoder"), &shared, &decoder_cfg)?;
-730
-731        let tie_word_embeddings = cfg.tie_word_embeddings;
-732        let lm_head = if tie_word_embeddings {
-733            None
-734        } else {
-735            Some(QMatMul::new(cfg.d_model, cfg.vocab_size, vb.pp("lm_head"))?)
-736        };
-737
-738        Ok(Self {
-739            encoder,
-740            decoder,
-741            d_model,
-742            tie_word_embeddings,
-743            lm_head,
-744            shared,
-745            device: vb.device().clone(),
-746            span_decode: tracing::span!(tracing::Level::TRACE, "decode"),
-747            span_decode_head: tracing::span!(tracing::Level::TRACE, "decode-head"),
-748        })
-749    }
-750
-751    pub fn encode(&mut self, input_ids: &Tensor) -> Result<Tensor> {
-752        self.encoder.forward(input_ids, None)
-753    }
-754
-755    pub fn decode(
-756        &mut self,
-757        decoder_input_ids: &Tensor,
-758        encoder_output: &Tensor,
-759    ) -> Result<Tensor> {
-760        let _enter = self.span_decode.enter();
-761        let decoder_output = self
-762            .decoder
-763            .forward(decoder_input_ids, Some(encoder_output))?;
-764
-765        let scaling_factor = if self.tie_word_embeddings {
-766            // Rescale output before projecting on vocab
-767            // See https://github.com/tensorflow/mesh/blob/fa19d69eafc9a482aff0b59ddd96b025c0cb207d/mesh_tensorflow/transformer/transformer.py#L586
-768            (self.d_model as f64).sqrt()
-769        } else {
-770            1.0
-771        };
-772        let sequence_output = ((decoder_output
-773            .narrow(1, decoder_output.dim(1)? - 1, 1)?
-774            .squeeze(1)?)
-775            * scaling_factor)?;
-776        let output = {
-777            let _enter = self.span_decode_head.enter();
-778            match self.lm_head {
-779                None => sequence_output.matmul(&self.shared.embeddings().t()?)?,
-780                Some(ref lm_head) => lm_head.forward(&sequence_output)?,
-781            }
-782        };
-783        Ok(output)
-784    }
-785
-786    pub fn forward(&mut self, input_ids: &Tensor, decoder_input_ids: &Tensor) -> Result<Tensor> {
-787        let encoder_output = self.encode(input_ids)?;
-788        self.decode(decoder_input_ids, &encoder_output)
-789    }
-790
-791    pub fn device(&self) -> &Device {
-792        &self.device
-793    }
-794
-795    pub fn clear_kv_cache(&mut self) {
-796        self.encoder.clear_kv_cache();
-797        self.decoder.clear_kv_cache();
-798    }
-799}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/qwen2.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/qwen2.rs.html deleted file mode 100644 index b620df9..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/qwen2.rs.html +++ /dev/null @@ -1,403 +0,0 @@ -qwen2.rs - source

candle_transformers/models/
qwen2.rs

1//! Qwen2 model implementation with quantization support.
-2//!
-3//! Qwen2 is a large language model from Alibaba optimized for efficiency.
-4//! This implementation provides quantization for reduced memory and compute.
-5//!
-6//! Key characteristics:
-7//! - Streaming decode support
-8//! - Grouped query attention (GQA)
-9//! - RMSNorm for layer normalization
-10//! - Rotary positional embeddings (RoPE)
-11//! - Support for 8-bit quantization
-12//!
-13//! References:
-14//! - 🤗 [Qwen2 Model](https://huggingface.co/Qwen/Qwen2-7B)
-15//!
-16
-17use crate::models::with_tracing::{linear, linear_no_bias, Linear, RmsNorm};
-18use candle::{DType, Device, IndexOp, Module, Result, Tensor, D};
-19use candle_nn::{Activation, VarBuilder};
-20use std::sync::Arc;
-21
-22#[derive(Debug, Clone, PartialEq, serde::Deserialize)]
-23pub struct Config {
-24    pub vocab_size: usize,
-25    pub hidden_size: usize,
-26    pub intermediate_size: usize,
-27    pub num_hidden_layers: usize,
-28    pub num_attention_heads: usize,
-29    pub num_key_value_heads: usize,
-30    pub max_position_embeddings: usize,
-31    pub sliding_window: usize,
-32    pub max_window_layers: usize,
-33    pub tie_word_embeddings: bool,
-34    pub rope_theta: f64,
-35    pub rms_norm_eps: f64,
-36    pub use_sliding_window: bool,
-37    pub hidden_act: Activation,
-38}
-39
-40#[derive(Debug, Clone)]
-41struct RotaryEmbedding {
-42    sin: Tensor,
-43    cos: Tensor,
-44}
-45
-46impl RotaryEmbedding {
-47    fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-48        let dim = cfg.hidden_size / cfg.num_attention_heads;
-49        let max_seq_len = cfg.max_position_embeddings;
-50        let inv_freq: Vec<_> = (0..dim)
-51            .step_by(2)
-52            .map(|i| 1f32 / cfg.rope_theta.powf(i as f64 / dim as f64) as f32)
-53            .collect();
-54        let inv_freq_len = inv_freq.len();
-55        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-56        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-57            .to_dtype(dtype)?
-58            .reshape((max_seq_len, 1))?;
-59        let freqs = t.matmul(&inv_freq)?;
-60        Ok(Self {
-61            sin: freqs.sin()?,
-62            cos: freqs.cos()?,
-63        })
-64    }
-65
-66    fn apply_rotary_emb_qkv(
-67        &self,
-68        q: &Tensor,
-69        k: &Tensor,
-70        seqlen_offset: usize,
-71    ) -> Result<(Tensor, Tensor)> {
-72        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-73        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-74        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-75        let q_embed = candle_nn::rotary_emb::rope(&q.contiguous()?, &cos, &sin)?;
-76        let k_embed = candle_nn::rotary_emb::rope(&k.contiguous()?, &cos, &sin)?;
-77        Ok((q_embed, k_embed))
-78    }
-79}
-80
-81#[derive(Debug, Clone)]
-82#[allow(clippy::upper_case_acronyms)]
-83struct MLP {
-84    gate_proj: Linear,
-85    up_proj: Linear,
-86    down_proj: Linear,
-87    act_fn: Activation,
-88}
-89
-90impl MLP {
-91    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-92        let hidden_sz = cfg.hidden_size;
-93        let intermediate_sz = cfg.intermediate_size;
-94        let gate_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("gate_proj"))?;
-95        let up_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("up_proj"))?;
-96        let down_proj = linear_no_bias(intermediate_sz, hidden_sz, vb.pp("down_proj"))?;
-97        Ok(Self {
-98            gate_proj,
-99            up_proj,
-100            down_proj,
-101            act_fn: cfg.hidden_act,
-102        })
-103    }
-104}
-105
-106impl Module for MLP {
-107    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-108        let lhs = xs.apply(&self.gate_proj)?.apply(&self.act_fn)?;
-109        let rhs = xs.apply(&self.up_proj)?;
-110        (lhs * rhs)?.apply(&self.down_proj)
-111    }
-112}
-113
-114#[derive(Debug, Clone)]
-115struct Attention {
-116    q_proj: Linear,
-117    k_proj: Linear,
-118    v_proj: Linear,
-119    o_proj: Linear,
-120    num_heads: usize,
-121    num_kv_heads: usize,
-122    num_kv_groups: usize,
-123    head_dim: usize,
-124    hidden_size: usize,
-125    rotary_emb: Arc<RotaryEmbedding>,
-126    kv_cache: Option<(Tensor, Tensor)>,
-127}
-128
-129impl Attention {
-130    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-131        let hidden_sz = cfg.hidden_size;
-132        let num_heads = cfg.num_attention_heads;
-133        let num_kv_heads = cfg.num_key_value_heads;
-134        let num_kv_groups = num_heads / num_kv_heads;
-135        let head_dim = hidden_sz / num_heads;
-136        let q_proj = linear(hidden_sz, num_heads * head_dim, vb.pp("q_proj"))?;
-137        let k_proj = linear(hidden_sz, num_kv_heads * head_dim, vb.pp("k_proj"))?;
-138        let v_proj = linear(hidden_sz, num_kv_heads * head_dim, vb.pp("v_proj"))?;
-139        let o_proj = linear_no_bias(num_heads * head_dim, hidden_sz, vb.pp("o_proj"))?;
-140        Ok(Self {
-141            q_proj,
-142            k_proj,
-143            v_proj,
-144            o_proj,
-145            num_heads,
-146            num_kv_heads,
-147            num_kv_groups,
-148            head_dim,
-149            hidden_size: hidden_sz,
-150            rotary_emb,
-151            kv_cache: None,
-152        })
-153    }
-154
-155    fn forward(
-156        &mut self,
-157        xs: &Tensor,
-158        attention_mask: Option<&Tensor>,
-159        seqlen_offset: usize,
-160    ) -> Result<Tensor> {
-161        let (b_sz, q_len, _) = xs.dims3()?;
-162
-163        let query_states = self.q_proj.forward(xs)?;
-164        let key_states = self.k_proj.forward(xs)?;
-165        let value_states = self.v_proj.forward(xs)?;
-166
-167        let query_states = query_states
-168            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-169            .transpose(1, 2)?;
-170        let key_states = key_states
-171            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-172            .transpose(1, 2)?;
-173        let value_states = value_states
-174            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-175            .transpose(1, 2)?;
-176
-177        let (query_states, key_states) =
-178            self.rotary_emb
-179                .apply_rotary_emb_qkv(&query_states, &key_states, seqlen_offset)?;
-180
-181        let (key_states, value_states) = match &self.kv_cache {
-182            None => (key_states, value_states),
-183            Some((prev_k, prev_v)) => {
-184                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-185                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-186                (key_states, value_states)
-187            }
-188        };
-189        self.kv_cache = Some((key_states.clone(), value_states.clone()));
-190
-191        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?.contiguous()?;
-192        let value_states =
-193            crate::utils::repeat_kv(value_states, self.num_kv_groups)?.contiguous()?;
-194
-195        let attn_output = {
-196            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-197            let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-198
-199            let attn_weights = match attention_mask {
-200                None => attn_weights,
-201                Some(mask) => attn_weights.broadcast_add(mask)?,
-202            };
-203            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-204            attn_weights.matmul(&value_states)?
-205        };
-206        attn_output
-207            .transpose(1, 2)?
-208            .reshape((b_sz, q_len, self.hidden_size))?
-209            .apply(&self.o_proj)
-210    }
-211
-212    fn clear_kv_cache(&mut self) {
-213        self.kv_cache = None
-214    }
-215}
-216
-217#[derive(Debug, Clone)]
-218struct DecoderLayer {
-219    self_attn: Attention,
-220    mlp: MLP,
-221    input_layernorm: RmsNorm,
-222    post_attention_layernorm: RmsNorm,
-223}
-224
-225impl DecoderLayer {
-226    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-227        let self_attn = Attention::new(rotary_emb, cfg, vb.pp("self_attn"))?;
-228        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-229        let input_layernorm =
-230            RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("input_layernorm"))?;
-231        let post_attention_layernorm = RmsNorm::new(
-232            cfg.hidden_size,
-233            cfg.rms_norm_eps,
-234            vb.pp("post_attention_layernorm"),
-235        )?;
-236        Ok(Self {
-237            self_attn,
-238            mlp,
-239            input_layernorm,
-240            post_attention_layernorm,
-241        })
-242    }
-243
-244    fn forward(
-245        &mut self,
-246        xs: &Tensor,
-247        attention_mask: Option<&Tensor>,
-248        seqlen_offset: usize,
-249    ) -> Result<Tensor> {
-250        let residual = xs;
-251        let xs = self.input_layernorm.forward(xs)?;
-252        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-253        let xs = (xs + residual)?;
-254        let residual = &xs;
-255        let xs = xs.apply(&self.post_attention_layernorm)?.apply(&self.mlp)?;
-256        residual + xs
-257    }
-258
-259    fn clear_kv_cache(&mut self) {
-260        self.self_attn.clear_kv_cache()
-261    }
-262}
-263
-264#[derive(Debug, Clone)]
-265pub struct Model {
-266    embed_tokens: candle_nn::Embedding,
-267    layers: Vec<DecoderLayer>,
-268    norm: RmsNorm,
-269    sliding_window: usize,
-270    device: Device,
-271    dtype: DType,
-272}
-273
-274impl Model {
-275    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-276        let vb_m = vb.pp("model");
-277        let embed_tokens =
-278            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-279        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb_m.device())?);
-280        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-281        let vb_l = vb_m.pp("layers");
-282        for layer_idx in 0..cfg.num_hidden_layers {
-283            let layer = DecoderLayer::new(rotary_emb.clone(), cfg, vb_l.pp(layer_idx))?;
-284            layers.push(layer)
-285        }
-286        let norm = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb_m.pp("norm"))?;
-287        Ok(Self {
-288            embed_tokens,
-289            layers,
-290            norm,
-291            sliding_window: cfg.sliding_window,
-292            device: vb.device().clone(),
-293            dtype: vb.dtype(),
-294        })
-295    }
-296
-297    fn prepare_causal_attention_mask(
-298        &self,
-299        b_size: usize,
-300        tgt_len: usize,
-301        seqlen_offset: usize,
-302    ) -> Result<Tensor> {
-303        // Sliding window mask?
-304        let mask: Vec<_> = (0..tgt_len)
-305            .flat_map(|i| {
-306                (0..tgt_len).map(move |j| {
-307                    if i < j || j + self.sliding_window < i {
-308                        f32::NEG_INFINITY
-309                    } else {
-310                        0.
-311                    }
-312                })
-313            })
-314            .collect();
-315        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-316        let mask = if seqlen_offset > 0 {
-317            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), self.dtype, &self.device)?;
-318            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-319        } else {
-320            mask
-321        };
-322        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-323            .to_dtype(self.dtype)
-324    }
-325
-326    fn prepare_attention_mask(&self, attn_mask: &Tensor) -> Result<Tensor> {
-327        let (b_sz, sql_len) = attn_mask.dims2()?;
-328        let mut mask: Vec<Tensor> = vec![];
-329        for b in 0..b_sz {
-330            mask.push(attn_mask.i((b, ..))?.expand((1, 1, sql_len, sql_len))?);
-331        }
-332        let mask = Tensor::cat(&mask, 0)?;
-333        let on_true = mask.zeros_like()?.to_dtype(self.dtype)?;
-334        let on_false = Tensor::new(f32::NEG_INFINITY, &self.device)?
-335            .broadcast_as(mask.shape())?
-336            .to_dtype(self.dtype)?;
-337        mask.where_cond(&on_true, &on_false)
-338    }
-339
-340    pub fn forward(
-341        &mut self,
-342        input_ids: &Tensor,
-343        seqlen_offset: usize,
-344        attn_mask: Option<&Tensor>,
-345    ) -> Result<Tensor> {
-346        let (b_size, seq_len) = input_ids.dims2()?;
-347        let attention_mask: Option<Tensor> = match attn_mask {
-348            Some(mask) => Some(self.prepare_attention_mask(mask)?),
-349            None => {
-350                if seq_len <= 1 {
-351                    None
-352                } else {
-353                    Some(self.prepare_causal_attention_mask(b_size, seq_len, seqlen_offset)?)
-354                }
-355            }
-356        };
-357        let mut xs = self.embed_tokens.forward(input_ids)?;
-358        for layer in self.layers.iter_mut() {
-359            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-360        }
-361        xs.apply(&self.norm)
-362    }
-363
-364    pub fn clear_kv_cache(&mut self) {
-365        for layer in self.layers.iter_mut() {
-366            layer.clear_kv_cache()
-367        }
-368    }
-369}
-370
-371#[derive(Debug, Clone)]
-372pub struct ModelForCausalLM {
-373    base_model: Model,
-374    lm_head: Linear,
-375}
-376
-377impl ModelForCausalLM {
-378    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-379        let base_model = Model::new(cfg, vb.clone())?;
-380        let lm_head = if vb.contains_tensor("lm_head.weight") {
-381            linear_no_bias(cfg.hidden_size, cfg.vocab_size, vb.pp("lm_head"))?
-382        } else {
-383            Linear::from_weights(base_model.embed_tokens.embeddings().clone(), None)
-384        };
-385        Ok(Self {
-386            base_model,
-387            lm_head,
-388        })
-389    }
-390
-391    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-392        let (_b_size, seq_len) = input_ids.dims2()?;
-393        self.base_model
-394            .forward(input_ids, seqlen_offset, None)?
-395            .narrow(1, seq_len - 1, 1)?
-396            .apply(&self.lm_head)
-397    }
-398
-399    pub fn clear_kv_cache(&mut self) {
-400        self.base_model.clear_kv_cache()
-401    }
-402}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/qwen2_moe.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/qwen2_moe.rs.html deleted file mode 100644 index 7bf5295..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/qwen2_moe.rs.html +++ /dev/null @@ -1,484 +0,0 @@ -qwen2_moe.rs - source

candle_transformers/models/
qwen2_moe.rs

1//! Qwen2 model implementation with Mixture of Experts support.
-2//!
-3//! Qwen2 is a large language model using sparse Mixture of Experts (MoE).
-4//! This implementation provides support for sparsely activated MoE layers.
-5//!
-6//! Key characteristics:
-7//! - Mixture of Experts architecture
-8//! - Sparse expert activation
-9//! - Shared expert routing mechanism
-10//! - Grouped query attention (GQA)
-11//! - RMSNorm for layer normalization
-12//! - Rotary positional embeddings (RoPE)
-13//!
-14//! References:
-15//! - [Qwen2 Paper](https://arxiv.org/abs/2401.08985)
-16//! - [Model Card](https://huggingface.co/Qwen/Qwen2-7B-beta)
-17//!
-18
-19use crate::models::with_tracing::{linear, linear_no_bias, Linear, RmsNorm};
-20use candle::{DType, Device, Module, Result, Tensor, D};
-21use candle_nn::{Activation, VarBuilder};
-22use std::sync::Arc;
-23
-24#[derive(Debug, Clone, PartialEq, serde::Deserialize)]
-25pub struct Config {
-26    pub vocab_size: usize,
-27    pub hidden_size: usize,
-28    pub intermediate_size: usize,
-29    pub num_hidden_layers: usize,
-30    pub num_attention_heads: usize,
-31    pub num_key_value_heads: usize,
-32    pub max_position_embeddings: usize,
-33    pub sliding_window: usize,
-34    pub max_window_layers: usize,
-35    pub tie_word_embeddings: bool,
-36    pub rope_theta: f64,
-37    pub rms_norm_eps: f64,
-38    pub use_sliding_window: bool,
-39    pub hidden_act: Activation,
-40    pub decoder_sparse_step: usize,
-41    pub moe_intermediate_size: usize,
-42    pub shared_expert_intermediate_size: usize,
-43    pub num_experts_per_tok: usize,
-44    pub num_experts: usize,
-45    pub norm_topk_prob: bool,
-46}
-47
-48#[derive(Debug, Clone)]
-49struct RotaryEmbedding {
-50    sin: Tensor,
-51    cos: Tensor,
-52}
-53
-54impl RotaryEmbedding {
-55    fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-56        let dim = cfg.hidden_size / cfg.num_attention_heads;
-57        let max_seq_len = cfg.max_position_embeddings;
-58        let inv_freq: Vec<_> = (0..dim)
-59            .step_by(2)
-60            .map(|i| 1f32 / cfg.rope_theta.powf(i as f64 / dim as f64) as f32)
-61            .collect();
-62        let inv_freq_len = inv_freq.len();
-63        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-64        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-65            .to_dtype(dtype)?
-66            .reshape((max_seq_len, 1))?;
-67        let freqs = t.matmul(&inv_freq)?;
-68        Ok(Self {
-69            sin: freqs.sin()?,
-70            cos: freqs.cos()?,
-71        })
-72    }
-73
-74    fn apply_rotary_emb_qkv(
-75        &self,
-76        q: &Tensor,
-77        k: &Tensor,
-78        seqlen_offset: usize,
-79    ) -> Result<(Tensor, Tensor)> {
-80        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-81        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-82        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-83        let q_embed = candle_nn::rotary_emb::rope(&q.contiguous()?, &cos, &sin)?;
-84        let k_embed = candle_nn::rotary_emb::rope(&k.contiguous()?, &cos, &sin)?;
-85        Ok((q_embed, k_embed))
-86    }
-87}
-88
-89#[derive(Debug, Clone)]
-90#[allow(clippy::upper_case_acronyms)]
-91struct MLP {
-92    gate_proj: Linear,
-93    up_proj: Linear,
-94    down_proj: Linear,
-95    act_fn: Activation,
-96}
-97
-98impl MLP {
-99    fn new(intermediate_sz: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-100        let hidden_sz = cfg.hidden_size;
-101        let gate_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("gate_proj"))?;
-102        let up_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("up_proj"))?;
-103        let down_proj = linear_no_bias(intermediate_sz, hidden_sz, vb.pp("down_proj"))?;
-104        Ok(Self {
-105            gate_proj,
-106            up_proj,
-107            down_proj,
-108            act_fn: cfg.hidden_act,
-109        })
-110    }
-111}
-112
-113impl Module for MLP {
-114    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-115        let lhs = xs.apply(&self.gate_proj)?.apply(&self.act_fn)?;
-116        let rhs = xs.apply(&self.up_proj)?;
-117        (lhs * rhs)?.apply(&self.down_proj)
-118    }
-119}
-120
-121#[derive(Debug, Clone)]
-122struct Attention {
-123    q_proj: Linear,
-124    k_proj: Linear,
-125    v_proj: Linear,
-126    o_proj: Linear,
-127    num_heads: usize,
-128    num_kv_heads: usize,
-129    num_kv_groups: usize,
-130    head_dim: usize,
-131    hidden_size: usize,
-132    rotary_emb: Arc<RotaryEmbedding>,
-133    kv_cache: Option<(Tensor, Tensor)>,
-134}
-135
-136impl Attention {
-137    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-138        let hidden_sz = cfg.hidden_size;
-139        let num_heads = cfg.num_attention_heads;
-140        let num_kv_heads = cfg.num_key_value_heads;
-141        let num_kv_groups = num_heads / num_kv_heads;
-142        let head_dim = hidden_sz / num_heads;
-143        let q_proj = linear(hidden_sz, num_heads * head_dim, vb.pp("q_proj"))?;
-144        let k_proj = linear(hidden_sz, num_kv_heads * head_dim, vb.pp("k_proj"))?;
-145        let v_proj = linear(hidden_sz, num_kv_heads * head_dim, vb.pp("v_proj"))?;
-146        let o_proj = linear_no_bias(num_heads * head_dim, hidden_sz, vb.pp("o_proj"))?;
-147        Ok(Self {
-148            q_proj,
-149            k_proj,
-150            v_proj,
-151            o_proj,
-152            num_heads,
-153            num_kv_heads,
-154            num_kv_groups,
-155            head_dim,
-156            hidden_size: hidden_sz,
-157            rotary_emb,
-158            kv_cache: None,
-159        })
-160    }
-161
-162    fn forward(
-163        &mut self,
-164        xs: &Tensor,
-165        attention_mask: Option<&Tensor>,
-166        seqlen_offset: usize,
-167    ) -> Result<Tensor> {
-168        let (b_sz, q_len, _) = xs.dims3()?;
-169
-170        let query_states = self.q_proj.forward(xs)?;
-171        let key_states = self.k_proj.forward(xs)?;
-172        let value_states = self.v_proj.forward(xs)?;
-173
-174        let query_states = query_states
-175            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-176            .transpose(1, 2)?;
-177        let key_states = key_states
-178            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-179            .transpose(1, 2)?;
-180        let value_states = value_states
-181            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-182            .transpose(1, 2)?;
-183
-184        let (query_states, key_states) =
-185            self.rotary_emb
-186                .apply_rotary_emb_qkv(&query_states, &key_states, seqlen_offset)?;
-187
-188        let (key_states, value_states) = match &self.kv_cache {
-189            None => (key_states, value_states),
-190            Some((prev_k, prev_v)) => {
-191                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-192                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-193                (key_states, value_states)
-194            }
-195        };
-196        self.kv_cache = Some((key_states.clone(), value_states.clone()));
-197
-198        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?.contiguous()?;
-199        let value_states =
-200            crate::utils::repeat_kv(value_states, self.num_kv_groups)?.contiguous()?;
-201
-202        let attn_output = {
-203            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-204            let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-205
-206            let attn_weights = match attention_mask {
-207                None => attn_weights,
-208                Some(mask) => attn_weights.broadcast_add(mask)?,
-209            };
-210            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-211            attn_weights.matmul(&value_states)?
-212        };
-213        attn_output
-214            .transpose(1, 2)?
-215            .reshape((b_sz, q_len, self.hidden_size))?
-216            .apply(&self.o_proj)
-217    }
-218
-219    fn clear_kv_cache(&mut self) {
-220        self.kv_cache = None
-221    }
-222}
-223
-224// https://github.com/huggingface/transformers/blob/536ea2aca234fb48c5c69769431d643b0d93b233/src/transformers/models/qwen2_moe/modeling_qwen2_moe.py#L800
-225#[derive(Debug, Clone)]
-226struct SparseMoeBlock {
-227    gate: Linear,
-228    experts: Vec<MLP>,
-229    shared_expert: MLP,
-230    shared_expert_gate: Linear,
-231    norm_topk_prob: bool,
-232    num_experts_per_tok: usize,
-233}
-234
-235impl SparseMoeBlock {
-236    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-237        let gate = linear_no_bias(cfg.hidden_size, cfg.num_experts, vb.pp("gate"))?;
-238        let mut experts = Vec::with_capacity(cfg.num_experts);
-239        let vb_e = vb.pp("experts");
-240        for idx in 0..cfg.num_experts {
-241            let expert = MLP::new(cfg.moe_intermediate_size, cfg, vb_e.pp(idx))?;
-242            experts.push(expert)
-243        }
-244        let shared_expert = MLP::new(
-245            cfg.shared_expert_intermediate_size,
-246            cfg,
-247            vb.pp("shared_expert"),
-248        )?;
-249        let shared_expert_gate = linear_no_bias(cfg.hidden_size, 1, vb.pp("shared_expert_gate"))?;
-250        Ok(Self {
-251            gate,
-252            experts,
-253            shared_expert,
-254            shared_expert_gate,
-255            norm_topk_prob: cfg.norm_topk_prob,
-256            num_experts_per_tok: cfg.num_experts_per_tok,
-257        })
-258    }
-259}
-260
-261impl Module for SparseMoeBlock {
-262    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-263        let (b_size, seq_len, hidden_dim) = xs.dims3()?;
-264        let xs = xs.reshape(((), hidden_dim))?;
-265        let router_logits = xs.apply(&self.gate)?;
-266        let routing_weights = candle_nn::ops::softmax_last_dim(&router_logits)?;
-267
-268        // In order to extract topk, we extract the data from the tensor and manipulate it
-269        // directly. Maybe we will want to use some custom ops instead at some point.
-270        let experts_per_tok = routing_weights
-271            .arg_sort_last_dim(false)?
-272            .narrow(D::Minus1, 0, self.num_experts_per_tok)?
-273            .contiguous()?;
-274        let routing_weights = routing_weights.gather(&experts_per_tok, D::Minus1)?;
-275
-276        // routing_weights, selected_experts = torch.topk(routing_weights, self.top_k, dim=-1)
-277        // top_x contains the row indexes to evaluate for each expert.
-278        let routing_weights = routing_weights.to_dtype(DType::F32)?.to_vec2::<f32>()?;
-279        let experts_per_tok = experts_per_tok.to_vec2::<u32>()?;
-280        let mut top_x = vec![vec![]; self.experts.len()];
-281        let mut selected_experts = vec![vec![]; self.experts.len()];
-282        for (row_idx, (rw, expert_idxs)) in routing_weights
-283            .iter()
-284            .zip(experts_per_tok.iter())
-285            .enumerate()
-286        {
-287            let sum_rw = rw.iter().sum::<f32>();
-288            for (&rw, &expert_idx) in rw.iter().zip(expert_idxs.iter()) {
-289                top_x[expert_idx as usize].push(row_idx as u32);
-290                let rw = if self.norm_topk_prob { rw / sum_rw } else { rw };
-291                selected_experts[expert_idx as usize].push(rw)
-292            }
-293        }
-294
-295        let mut ys = xs.zeros_like()?;
-296        for (expert_idx, expert_layer) in self.experts.iter().enumerate() {
-297            let top_x = &top_x[expert_idx];
-298            if top_x.is_empty() {
-299                continue;
-300            }
-301            let top_x = Tensor::new(top_x.as_slice(), xs.device())?;
-302            let selected_experts =
-303                Tensor::new(selected_experts[expert_idx].as_slice(), xs.device())?
-304                    .reshape(((), 1))?
-305                    .to_dtype(xs.dtype())?;
-306            // Index the correct hidden states and compute the expert hidden state for
-307            // the current expert. We need to make sure to multiply the output hidden
-308            // states by `routing_weights` on the corresponding tokens (top-1 and top-2)
-309            let current_state = xs.index_select(&top_x, 0)?.reshape(((), hidden_dim))?;
-310            // current_hidden_states = expert_layer(current_state, routing_weights[top_x_list, idx_list, None])
-311            let current_hidden_states = expert_layer.forward(&current_state)?;
-312            let current_hidden_states = current_hidden_states.broadcast_mul(&selected_experts)?;
-313            ys = ys.index_add(&top_x, &current_hidden_states, 0)?;
-314        }
-315        let shared_expert_output = xs.apply(&self.shared_expert)?;
-316        let shared_expert_output = shared_expert_output.broadcast_mul(&candle_nn::ops::sigmoid(
-317            &xs.apply(&self.shared_expert_gate)?,
-318        )?)?;
-319        let ys = (ys + shared_expert_output)?;
-320        let ys = ys.reshape((b_size, seq_len, hidden_dim))?;
-321        Ok(ys)
-322    }
-323}
-324
-325#[derive(Debug, Clone)]
-326enum MlpOrMoeBlock {
-327    Mlp(MLP),
-328    MoeBlock(SparseMoeBlock),
-329}
-330
-331impl Module for MlpOrMoeBlock {
-332    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-333        match self {
-334            Self::MoeBlock(m) => m.forward(xs),
-335            Self::Mlp(m) => m.forward(xs),
-336        }
-337    }
-338}
-339
-340#[derive(Debug, Clone)]
-341struct DecoderLayer {
-342    self_attn: Attention,
-343    mlp: MlpOrMoeBlock,
-344    input_layernorm: RmsNorm,
-345    post_attention_layernorm: RmsNorm,
-346}
-347
-348impl DecoderLayer {
-349    fn new(
-350        layer_idx: usize,
-351        rotary_emb: Arc<RotaryEmbedding>,
-352        cfg: &Config,
-353        vb: VarBuilder,
-354    ) -> Result<Self> {
-355        let self_attn = Attention::new(rotary_emb, cfg, vb.pp("self_attn"))?;
-356        let mlp = if cfg.num_experts > 0 && (layer_idx + 1) % cfg.decoder_sparse_step == 0 {
-357            MlpOrMoeBlock::MoeBlock(SparseMoeBlock::new(cfg, vb.pp("mlp"))?)
-358        } else {
-359            MlpOrMoeBlock::Mlp(MLP::new(cfg.intermediate_size, cfg, vb.pp("mlp"))?)
-360        };
-361        let input_layernorm =
-362            RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("input_layernorm"))?;
-363        let post_attention_layernorm = RmsNorm::new(
-364            cfg.hidden_size,
-365            cfg.rms_norm_eps,
-366            vb.pp("post_attention_layernorm"),
-367        )?;
-368        Ok(Self {
-369            self_attn,
-370            mlp,
-371            input_layernorm,
-372            post_attention_layernorm,
-373        })
-374    }
-375
-376    fn forward(
-377        &mut self,
-378        xs: &Tensor,
-379        attention_mask: Option<&Tensor>,
-380        seqlen_offset: usize,
-381    ) -> Result<Tensor> {
-382        let residual = xs;
-383        let xs = self.input_layernorm.forward(xs)?;
-384        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-385        let xs = (xs + residual)?;
-386        let residual = &xs;
-387        let xs = xs.apply(&self.post_attention_layernorm)?.apply(&self.mlp)?;
-388        residual + xs
-389    }
-390
-391    fn clear_kv_cache(&mut self) {
-392        self.self_attn.clear_kv_cache()
-393    }
-394}
-395
-396#[derive(Debug, Clone)]
-397pub struct Model {
-398    embed_tokens: candle_nn::Embedding,
-399    layers: Vec<DecoderLayer>,
-400    norm: RmsNorm,
-401    lm_head: Linear,
-402    sliding_window: usize,
-403    device: Device,
-404    dtype: DType,
-405}
-406
-407impl Model {
-408    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-409        let vb_m = vb.pp("model");
-410        let embed_tokens =
-411            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-412        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb_m.device())?);
-413        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-414        let vb_l = vb_m.pp("layers");
-415        for layer_idx in 0..cfg.num_hidden_layers {
-416            let layer = DecoderLayer::new(layer_idx, rotary_emb.clone(), cfg, vb_l.pp(layer_idx))?;
-417            layers.push(layer)
-418        }
-419        let norm = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb_m.pp("norm"))?;
-420        let lm_head = linear_no_bias(cfg.hidden_size, cfg.vocab_size, vb.pp("lm_head"))?;
-421        Ok(Self {
-422            embed_tokens,
-423            layers,
-424            norm,
-425            lm_head,
-426            sliding_window: cfg.sliding_window,
-427            device: vb.device().clone(),
-428            dtype: vb.dtype(),
-429        })
-430    }
-431
-432    fn prepare_decoder_attention_mask(
-433        &self,
-434        b_size: usize,
-435        tgt_len: usize,
-436        seqlen_offset: usize,
-437    ) -> Result<Tensor> {
-438        // Sliding window mask?
-439        let mask: Vec<_> = (0..tgt_len)
-440            .flat_map(|i| {
-441                (0..tgt_len).map(move |j| {
-442                    if i < j || j + self.sliding_window < i {
-443                        f32::NEG_INFINITY
-444                    } else {
-445                        0.
-446                    }
-447                })
-448            })
-449            .collect();
-450        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-451        let mask = if seqlen_offset > 0 {
-452            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-453            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-454        } else {
-455            mask
-456        };
-457        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-458            .to_dtype(self.dtype)
-459    }
-460
-461    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-462        let (b_size, seq_len) = input_ids.dims2()?;
-463        let attention_mask = if seq_len <= 1 {
-464            None
-465        } else {
-466            let mask = self.prepare_decoder_attention_mask(b_size, seq_len, seqlen_offset)?;
-467            Some(mask)
-468        };
-469        let mut xs = self.embed_tokens.forward(input_ids)?;
-470        for layer in self.layers.iter_mut() {
-471            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-472        }
-473        xs.narrow(1, seq_len - 1, 1)?
-474            .apply(&self.norm)?
-475            .apply(&self.lm_head)
-476    }
-477
-478    pub fn clear_kv_cache(&mut self) {
-479        for layer in self.layers.iter_mut() {
-480            layer.clear_kv_cache()
-481        }
-482    }
-483}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/recurrent_gemma.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/recurrent_gemma.rs.html deleted file mode 100644 index 0d32bb9..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/recurrent_gemma.rs.html +++ /dev/null @@ -1,661 +0,0 @@ -recurrent_gemma.rs - source

candle_transformers/models/
recurrent_gemma.rs

1//! Recurrent Gemma model implementation
-2//!
-3//! Recurrent Gemma is a version of the Gemma language model that incorporates recurrent memory.
-4//! This allows the model to maintain state between predictions and have longer-range memory.
-5//!
-6//! Key characteristics:
-7//! - Real-gated linear recurrent units (RGLRU)
-8//! - 1D convolution for local context
-9//! - RMSNorm for layer normalization
-10//! - Rotary positional embeddings (RoPE)
-11//! - Grouped query attention
-12//!
-13//! References:
-14//! - [Gemma: Open Models Based on Gemini Technology](https://blog.google/technology/developers/gemma-open-models/)
-15//! - [Recurrent Memory model architecture](https://arxiv.org/abs/2402.00441)
-16//!
-17//! This implementation is based on the python version from huggingface/transformers.
-18//! https://github.com/huggingface/transformers/blob/b109257f4fb8b1166e7c53cc5418632014ed53a5/src/transformers/models/recurrent_gemma/modeling_recurrent_gemma.py#L2
-19//!
-20use candle::{DType, Device, IndexOp, Module, Result, Tensor, D};
-21use candle_nn::{linear_b as linear, Linear, VarBuilder};
-22use std::sync::Arc;
-23
-24#[derive(serde::Deserialize, Debug, Clone, Copy)]
-25#[serde(rename_all = "snake_case")]
-26pub enum TemporalBlockType {
-27    Attention,
-28    Recurrent,
-29}
-30
-31#[derive(serde::Deserialize, Debug, Clone)]
-32pub struct Config {
-33    pub num_hidden_layers: usize,
-34    pub vocab_size: usize,
-35    pub hidden_size: usize,
-36    pub intermediate_size: usize,
-37    pub num_attention_heads: usize,
-38    pub num_key_value_heads: usize,
-39    pub head_dim: usize,
-40    pub lru_width: Option<usize>,
-41    pub attention_window_size: usize,
-42    pub conv1d_width: usize,
-43    pub logits_soft_cap: f64,
-44    pub hidden_activation: candle_nn::Activation,
-45    pub partial_rotary_factor: f64,
-46    pub rms_norm_eps: f64,
-47    pub rope_theta: f64,
-48    #[serde(alias = "_block_types")]
-49    pub block_types: Vec<TemporalBlockType>,
-50    pub attention_bias: bool,
-51    #[serde(default = "default_max_seq_len")]
-52    pub max_seq_len: usize,
-53}
-54
-55fn default_max_seq_len() -> usize {
-56    8192
-57}
-58
-59#[derive(Debug, Clone)]
-60pub(crate) struct RmsNorm {
-61    weight: Tensor,
-62    eps: f64,
-63}
-64
-65impl RmsNorm {
-66    pub(crate) fn new(dim: usize, eps: f64, vb: VarBuilder) -> Result<Self> {
-67        let weight = vb.get(dim, "weight")?;
-68        Ok(Self { weight, eps })
-69    }
-70
-71    pub(crate) fn from_weight(weight: Tensor, eps: f64) -> Self {
-72        Self { weight, eps }
-73    }
-74}
-75
-76impl Module for RmsNorm {
-77    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-78        let x_dtype = x.dtype();
-79        let internal_dtype = match x_dtype {
-80            DType::F16 | DType::BF16 => DType::F32,
-81            d => d,
-82        };
-83        let hidden_size = x.dim(D::Minus1)?;
-84        let x = x.to_dtype(internal_dtype)?;
-85        let norm_x = (x.sqr()?.sum_keepdim(D::Minus1)? / hidden_size as f64)?;
-86        let x_normed = x.broadcast_div(&(norm_x + self.eps)?.sqrt()?)?;
-87        x_normed
-88            .to_dtype(x_dtype)?
-89            .broadcast_mul(&(&self.weight + 1.0)?)
-90    }
-91}
-92
-93#[derive(Debug, Clone)]
-94pub(crate) struct RotaryEmbedding {
-95    sin: Tensor,
-96    cos: Tensor,
-97}
-98
-99fn rotate_half(xs: &Tensor) -> Result<Tensor> {
-100    let last_dim = xs.dim(D::Minus1)?;
-101    let xs1 = xs.narrow(D::Minus1, 0, last_dim / 2)?;
-102    let xs2 = xs.narrow(D::Minus1, last_dim / 2, last_dim - last_dim / 2)?;
-103    Tensor::cat(&[&xs2.neg()?, &xs1], D::Minus1)
-104}
-105
-106impl RotaryEmbedding {
-107    pub(crate) fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-108        if cfg.partial_rotary_factor != 0.5 {
-109            candle::bail!("partial-rotary-factor {} <> 0.5", cfg.partial_rotary_factor)
-110        }
-111        let dim = cfg.head_dim / 2;
-112        let max_seq_len = cfg.max_seq_len;
-113        let inv_freq: Vec<_> = (0..dim)
-114            .step_by(2)
-115            .map(|i| 1f32 / cfg.rope_theta.powf(i as f64 / dim as f64) as f32)
-116            .collect();
-117        let inv_freq_len = inv_freq.len();
-118        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-119        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-120            .to_dtype(dtype)?
-121            .reshape((max_seq_len, 1))?;
-122        let freqs = t.matmul(&inv_freq)?;
-123        let freqs = Tensor::cat(&[&freqs, &freqs], D::Minus1)?;
-124        Ok(Self {
-125            sin: freqs.sin()?,
-126            cos: freqs.cos()?,
-127        })
-128    }
-129
-130    pub(crate) fn apply_rotary_emb_qkv(
-131        &self,
-132        q: &Tensor,
-133        k: &Tensor,
-134        seqlen_offset: usize,
-135    ) -> Result<(Tensor, Tensor)> {
-136        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-137        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-138        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-139        let cos = cos.unsqueeze(0)?.unsqueeze(0)?; // (1, 1, seq_len, dim)
-140        let sin = sin.unsqueeze(0)?.unsqueeze(0)?; // (1, 1, seq_len, dim)
-141        let q_embed = (q.broadcast_mul(&cos)? + rotate_half(q)?.broadcast_mul(&sin))?;
-142        let k_embed = (k.broadcast_mul(&cos)? + rotate_half(k)?.broadcast_mul(&sin))?;
-143        Ok((q_embed, k_embed))
-144    }
-145}
-146
-147#[derive(Debug, Clone)]
-148struct Mlp {
-149    gate_proj: Linear,
-150    up_proj: Linear,
-151    down_proj: Linear,
-152    act_fn: candle_nn::Activation,
-153}
-154
-155impl Mlp {
-156    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-157        let h = cfg.hidden_size;
-158        let intermediate_size = cfg.intermediate_size / 2;
-159        let gate_proj = linear(h, intermediate_size, true, vb.pp("gate_proj"))?;
-160        let up_proj = linear(h, intermediate_size, true, vb.pp("up_proj"))?;
-161        let down_proj = linear(intermediate_size, h, true, vb.pp("down_proj"))?;
-162        Ok(Self {
-163            gate_proj,
-164            up_proj,
-165            down_proj,
-166            act_fn: cfg.hidden_activation,
-167        })
-168    }
-169}
-170
-171impl Module for Mlp {
-172    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-173        let gate = xs.apply(&self.gate_proj)?.apply(&self.act_fn)?;
-174        (gate * xs.apply(&self.up_proj))?.apply(&self.down_proj)
-175    }
-176}
-177
-178// Real-Gated Linear Recurrent Unit
-179#[derive(Debug, Clone)]
-180pub(crate) struct Rglru {
-181    pub(crate) recurrent_param: Tensor,
-182    pub(crate) input_gate_weight: Tensor,
-183    pub(crate) input_gate_bias: Tensor,
-184    pub(crate) recurrent_gate_weight: Tensor,
-185    pub(crate) recurrent_gate_bias: Tensor,
-186    pub(crate) block_width: usize,
-187    pub(crate) n_heads: usize,
-188    pub(crate) recurrent_states: Option<Tensor>,
-189}
-190
-191fn baddbmm(a: &Tensor, b: &Tensor, c: &Tensor) -> Result<Tensor> {
-192    a.broadcast_add(&b.matmul(c)?)
-193}
-194
-195fn softplus(xs: &Tensor) -> Result<Tensor> {
-196    (xs.exp()? + 1.0)?.log()
-197}
-198
-199impl Rglru {
-200    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-201        let h = cfg.hidden_size;
-202        let lru_width = cfg.lru_width.unwrap_or(h);
-203        let n_heads = cfg.num_attention_heads;
-204        let block_width = lru_width / n_heads;
-205        let recurrent_param = vb.get((lru_width,), "recurrent_param")?;
-206        let input_gate_weight = vb.get((n_heads, block_width, block_width), "input_gate_weight")?;
-207        let input_gate_bias = vb.get((n_heads, block_width), "input_gate_bias")?;
-208        let recurrent_gate_weight =
-209            vb.get((n_heads, block_width, block_width), "recurrent_gate_weight")?;
-210        let recurrent_gate_bias = vb.get((n_heads, block_width), "recurrent_gate_bias")?;
-211        Ok(Self {
-212            recurrent_param,
-213            input_gate_bias,
-214            input_gate_weight,
-215            recurrent_gate_bias,
-216            recurrent_gate_weight,
-217            block_width,
-218            n_heads,
-219            recurrent_states: None,
-220        })
-221    }
-222
-223    // https://github.com/huggingface/transformers/blob/0bd58f1ce0573c0e3269de4215a17d318add49b9/src/transformers/models/recurrent_gemma/modeling_recurrent_gemma.py#L303
-224    pub(crate) fn forward(&mut self, xs: &Tensor, pos: usize) -> Result<Tensor> {
-225        let (b_sz, seq_len, lru_width) = xs.dims3()?;
-226        let pos = Tensor::arange(pos as u32, (pos + seq_len) as u32, xs.device())?;
-227        let reset = pos.eq(0u32)?.unsqueeze(1)?.unsqueeze(0)?;
-228        let reshape_act = xs
-229            .reshape((b_sz * seq_len, self.n_heads, self.block_width))?
-230            .permute((1, 0, 2))?
-231            .contiguous()?;
-232
-233        let res = baddbmm(
-234            &self.input_gate_bias.unsqueeze(1)?,
-235            &reshape_act,
-236            &self.input_gate_weight,
-237        )?;
-238        let input_gate = res.transpose(0, 1)?.reshape((b_sz, seq_len, lru_width))?;
-239        let input_gate = candle_nn::ops::sigmoid(&input_gate)?;
-240        let res = baddbmm(
-241            &self.recurrent_gate_bias.unsqueeze(1)?,
-242            &reshape_act,
-243            &self.recurrent_gate_weight,
-244        )?;
-245        let recurrent_gate = res.transpose(0, 1)?.reshape((b_sz, seq_len, lru_width))?;
-246        let recurrent_gate = candle_nn::ops::sigmoid(&recurrent_gate)?;
-247
-248        let log_recurrent_gate =
-249            (recurrent_gate * (-8.0))?.broadcast_mul(&softplus(&self.recurrent_param)?)?;
-250        let recurrent_gate = log_recurrent_gate.exp()?;
-251        let a_square = (log_recurrent_gate * 2.)?.exp()?;
-252
-253        // Gate the input.
-254        let gated_inputs = (xs * input_gate)?;
-255
-256        let reset = reset.to_dtype(a_square.dtype())?;
-257        let multiplier =
-258            reset.broadcast_add(&((1.0 - &reset)?.broadcast_mul(&(1.0 - a_square)?.sqrt()?))?)?;
-259        let normalized_x = (gated_inputs * multiplier.to_dtype(xs.dtype()))?;
-260
-261        let (hidden_states, recurrent_states) = rnn_scan(
-262            &normalized_x,
-263            &recurrent_gate,
-264            &reset,
-265            self.recurrent_states.as_ref(),
-266        )?;
-267        self.recurrent_states = Some(recurrent_states);
-268        Ok(hidden_states)
-269    }
-270}
-271
-272fn rnn_scan(
-273    hidden_states: &Tensor,
-274    recurrent_gate: &Tensor,
-275    reset: &Tensor,
-276    recurrent_states: Option<&Tensor>,
-277) -> Result<(Tensor, Tensor)> {
-278    let acc_dtype = DType::F32;
-279    let dev = hidden_states.device();
-280    let in_dtype = hidden_states.dtype();
-281    let inv_reset = (1.0 - reset)?.to_dtype(recurrent_gate.dtype())?;
-282    let recurrent_gate = recurrent_gate.broadcast_mul(&inv_reset)?;
-283    let (c, r) = if hidden_states.dim(1)? == 1 {
-284        match recurrent_states {
-285            None => {
-286                let next_state = hidden_states.i((.., 0))?.to_dtype(acc_dtype)?;
-287                (hidden_states.clone(), next_state)
-288            }
-289            Some(recurrent_states) => {
-290                let contextualized_states =
-291                    recurrent_gate.to_dtype(acc_dtype)? * recurrent_states.unsqueeze(1)?;
-292                let contextualized_states =
-293                    (contextualized_states + hidden_states.to_dtype(acc_dtype)?)?;
-294                let c = contextualized_states.to_dtype(in_dtype)?;
-295                let l = contextualized_states.dim(1)?;
-296                let r = contextualized_states.i((.., l - 1))?;
-297                (c, r)
-298            }
-299        }
-300    } else {
-301        let mut recurrent_states = match recurrent_states {
-302            None => Tensor::zeros(hidden_states.i((.., 0))?.shape(), acc_dtype, dev)?,
-303            Some(r) => r.clone(),
-304        };
-305        let mut contextualized_states = vec![];
-306        for t in 0..hidden_states.dim(1)? {
-307            recurrent_states =
-308                (recurrent_gate.i((.., t))?.to_dtype(acc_dtype)? * recurrent_states)?;
-309            recurrent_states =
-310                (recurrent_states + hidden_states.i((.., t))?.to_dtype(acc_dtype)?)?;
-311            contextualized_states.push(recurrent_states.to_dtype(in_dtype)?)
-312        }
-313        let contextualized_states = Tensor::stack(&contextualized_states, 1)?;
-314        (contextualized_states, recurrent_states)
-315    };
-316    Ok((c, r))
-317}
-318
-319#[derive(Debug, Clone)]
-320struct RecurrentBlock {
-321    linear_y: Linear,
-322    linear_x: Linear,
-323    linear_out: Linear,
-324    conv_1d: candle_nn::Conv1d,
-325    conv1d_state: Option<Tensor>,
-326    conv1d_width: usize,
-327    rg_lru: Rglru,
-328    act_fn: candle_nn::Activation,
-329}
-330
-331impl RecurrentBlock {
-332    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-333        let h = cfg.hidden_size;
-334        let lru_width = cfg.lru_width.unwrap_or(h);
-335        let linear_y = linear(h, lru_width, true, vb.pp("linear_y"))?;
-336        let linear_x = linear(h, lru_width, true, vb.pp("linear_x"))?;
-337        let linear_out = linear(lru_width, h, true, vb.pp("linear_out"))?;
-338        let conv_1d = candle_nn::conv1d(
-339            lru_width,
-340            lru_width,
-341            cfg.conv1d_width,
-342            candle_nn::Conv1dConfig {
-343                groups: lru_width,
-344                padding: cfg.conv1d_width - 1,
-345                ..Default::default()
-346            },
-347            vb.pp("conv_1d"),
-348        )?;
-349        let rg_lru = Rglru::new(cfg, vb.pp("rg_lru"))?;
-350        Ok(Self {
-351            linear_y,
-352            linear_x,
-353            linear_out,
-354            conv_1d,
-355            conv1d_state: None,
-356            conv1d_width: cfg.conv1d_width,
-357            rg_lru,
-358            act_fn: cfg.hidden_activation,
-359        })
-360    }
-361
-362    pub fn forward(&mut self, xs: &Tensor, pos: usize) -> Result<Tensor> {
-363        let (_b_sz, seq_len, _) = xs.dims3()?;
-364
-365        let y_branch = xs.apply(&self.linear_y)?.apply(&self.act_fn)?;
-366        let x_branch = xs.apply(&self.linear_x)?.transpose(1, 2)?;
-367        let x_branch = if pos == 0 {
-368            let x_len = x_branch.dim(D::Minus1)?;
-369            let pad = self.conv1d_width as i64 - x_len as i64 - 1;
-370            let padded = match pad.cmp(&0) {
-371                std::cmp::Ordering::Equal => x_branch.clone(),
-372                std::cmp::Ordering::Less => {
-373                    let rev_pad = (-pad) as usize;
-374                    x_branch.narrow(D::Minus1, rev_pad, x_len - rev_pad)?
-375                }
-376                std::cmp::Ordering::Greater => {
-377                    x_branch.pad_with_zeros(D::Minus1, pad as usize, 0)?
-378                }
-379            };
-380            self.conv1d_state = Some(padded);
-381            x_branch
-382                .apply(&self.conv_1d)?
-383                .narrow(D::Minus1, 0, seq_len)?
-384        } else {
-385            let conv_state = match self.conv1d_state.as_ref() {
-386                None => candle::bail!("empty cache despite pos > 0"),
-387                Some(s) => Tensor::cat(&[s, &x_branch], D::Minus1)?,
-388            };
-389            let w = self.conv_1d.weight().i((.., 0, ..))?;
-390            let x_branch = conv_state.broadcast_mul(&w)?.sum(D::Minus1)?;
-391            let x_branch = match self.conv_1d.bias() {
-392                None => x_branch,
-393                Some(b) => x_branch.broadcast_add(b)?,
-394            };
-395            let x_branch = x_branch.unsqueeze(D::Minus1)?;
-396            self.conv1d_state = Some(conv_state.i((.., .., 1..))?);
-397            x_branch
-398        };
-399        let x_branch = x_branch.transpose(1, 2)?;
-400        let x_branch = self.rg_lru.forward(&x_branch, pos)?;
-401        (x_branch * y_branch)?.apply(&self.linear_out)
-402    }
-403}
-404
-405#[derive(Debug, Clone)]
-406struct SdpaAttention {
-407    q_proj: Linear,
-408    k_proj: Linear,
-409    v_proj: Linear,
-410    o_proj: Linear,
-411    n_heads: usize,
-412    n_kv_heads: usize,
-413    head_dim: usize,
-414    hidden_size: usize,
-415    kv_cache: Option<(Tensor, Tensor)>,
-416    rotary_emb: Arc<RotaryEmbedding>,
-417}
-418
-419impl SdpaAttention {
-420    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-421        let h = cfg.hidden_size;
-422        let n_heads = cfg.num_attention_heads;
-423        let n_kv_heads = cfg.num_key_value_heads;
-424        let hd = cfg.head_dim;
-425        let q_proj = linear(h, n_heads * hd, cfg.attention_bias, vb.pp("q_proj"))?;
-426        let k_proj = linear(h, n_kv_heads * hd, cfg.attention_bias, vb.pp("k_proj"))?;
-427        let v_proj = linear(h, n_kv_heads * hd, cfg.attention_bias, vb.pp("v_proj"))?;
-428        let o_proj = linear(n_heads * hd, h, true, vb.pp("o_proj"))?;
-429        Ok(Self {
-430            q_proj,
-431            k_proj,
-432            v_proj,
-433            o_proj,
-434            n_heads,
-435            n_kv_heads,
-436            head_dim: hd,
-437            hidden_size: h,
-438            kv_cache: None,
-439            rotary_emb,
-440        })
-441    }
-442
-443    fn repeat_kv(&self, x: Tensor) -> Result<Tensor> {
-444        let n_rep = self.n_heads / self.n_kv_heads;
-445        crate::utils::repeat_kv(x, n_rep)
-446    }
-447
-448    fn forward(
-449        &mut self,
-450        xs: &Tensor,
-451        attention_mask: Option<&Tensor>,
-452        pos: usize,
-453    ) -> Result<Tensor> {
-454        let (bsz, q_len, _) = xs.dims3()?;
-455
-456        let query_states = xs.apply(&self.q_proj)?;
-457        let key_states = xs.apply(&self.k_proj)?;
-458        let value_states = xs.apply(&self.v_proj)?;
-459
-460        let query_states = query_states
-461            .reshape((bsz, q_len, self.n_heads, self.head_dim))?
-462            .transpose(1, 2)?;
-463        let key_states = key_states
-464            .reshape((bsz, q_len, self.n_kv_heads, self.head_dim))?
-465            .transpose(1, 2)?;
-466        let value_states = value_states
-467            .reshape((bsz, q_len, self.n_kv_heads, self.head_dim))?
-468            .transpose(1, 2)?;
-469        let query_states = query_states.chunk(2, D::Minus1)?;
-470        let key_states = key_states.chunk(2, D::Minus1)?;
-471        let (query_rot, key_rot) =
-472            self.rotary_emb
-473                .apply_rotary_emb_qkv(&query_states[0], &key_states[0], pos)?;
-474        let query_states = Tensor::cat(&[&query_rot, &query_states[1]], D::Minus1)?.contiguous()?;
-475        let key_states = Tensor::cat(&[&key_rot, &key_states[1]], D::Minus1)?.contiguous()?;
-476
-477        let (key_states, value_states) = match &self.kv_cache {
-478            None => (key_states, value_states),
-479            Some((prev_k, prev_v)) => {
-480                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-481                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-482                (key_states, value_states)
-483            }
-484        };
-485        self.kv_cache = Some((key_states.clone(), value_states.clone()));
-486
-487        let key_states = self.repeat_kv(key_states)?;
-488        let value_states = self.repeat_kv(value_states)?;
-489        let xs = {
-490            let att = (query_states.matmul(&key_states.t()?)? / (self.head_dim as f64).sqrt())?;
-491            let att = if q_len == 1 {
-492                att
-493            } else {
-494                match attention_mask {
-495                    None => att,
-496                    Some(mask) => att.broadcast_add(mask)?,
-497                }
-498            };
-499            let att = candle_nn::ops::softmax_last_dim(&att)?;
-500            att.matmul(&value_states.contiguous()?)?
-501        };
-502
-503        let xs = xs
-504            .transpose(1, 2)?
-505            .reshape((bsz, q_len, self.hidden_size))?;
-506        self.o_proj.forward(&xs)
-507    }
-508}
-509
-510#[derive(Debug, Clone)]
-511enum TemporalBlock {
-512    Recurrent(RecurrentBlock),
-513    Attention(SdpaAttention),
-514}
-515
-516impl TemporalBlock {
-517    fn forward(
-518        &mut self,
-519        xs: &Tensor,
-520        attention_mask: Option<&Tensor>,
-521        pos: usize,
-522    ) -> Result<Tensor> {
-523        match self {
-524            Self::Recurrent(b) => b.forward(xs, pos),
-525            Self::Attention(b) => b.forward(xs, attention_mask, pos),
-526        }
-527    }
-528}
-529
-530#[derive(Debug, Clone)]
-531struct DecoderLayer {
-532    temporal_pre_norm: RmsNorm,
-533    channel_pre_norm: RmsNorm,
-534    temporal_block: TemporalBlock,
-535    mlp_block: Mlp,
-536}
-537
-538impl DecoderLayer {
-539    fn new(
-540        block_idx: usize,
-541        rotary_emb: Arc<RotaryEmbedding>,
-542        cfg: &Config,
-543        vb: VarBuilder,
-544    ) -> Result<Self> {
-545        let h = cfg.hidden_size;
-546        let temporal_pre_norm = RmsNorm::new(h, cfg.rms_norm_eps, vb.pp("temporal_pre_norm"))?;
-547        let channel_pre_norm = RmsNorm::new(h, cfg.rms_norm_eps, vb.pp("channel_pre_norm"))?;
-548        let temporal_block = match cfg.block_types[block_idx % cfg.block_types.len()] {
-549            TemporalBlockType::Recurrent => {
-550                let block = RecurrentBlock::new(cfg, vb.pp("temporal_block"))?;
-551                TemporalBlock::Recurrent(block)
-552            }
-553            TemporalBlockType::Attention => {
-554                let block = SdpaAttention::new(rotary_emb, cfg, vb.pp("temporal_block"))?;
-555                TemporalBlock::Attention(block)
-556            }
-557        };
-558        let mlp_block = Mlp::new(cfg, vb.pp("mlp_block"))?;
-559        Ok(Self {
-560            temporal_pre_norm,
-561            channel_pre_norm,
-562            temporal_block,
-563            mlp_block,
-564        })
-565    }
-566
-567    fn forward(
-568        &mut self,
-569        xs: &Tensor,
-570        attention_mask: Option<&Tensor>,
-571        pos: usize,
-572    ) -> Result<Tensor> {
-573        let residual = xs;
-574        let xs = xs.apply(&self.temporal_pre_norm)?;
-575        let xs = self.temporal_block.forward(&xs, attention_mask, pos)?;
-576        let xs = (xs + residual)?;
-577        let residual = &xs;
-578        let xs = xs.apply(&self.channel_pre_norm)?.apply(&self.mlp_block)?;
-579        xs + residual
-580    }
-581}
-582
-583#[derive(Debug, Clone)]
-584pub struct Model {
-585    embed_tokens: candle_nn::Embedding,
-586    layers: Vec<DecoderLayer>,
-587    final_norm: RmsNorm,
-588    lm_head: Linear,
-589    hidden_size: usize,
-590    logits_soft_cap: f64,
-591    dtype: DType,
-592    device: Device,
-593}
-594
-595impl Model {
-596    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-597        let embed_tokens =
-598            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb.pp("embed_tokens"))?;
-599        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb.device())?);
-600        let vb_b = vb.pp("layers");
-601        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-602        for idx in 0..cfg.num_hidden_layers {
-603            let layer = DecoderLayer::new(idx, rotary_emb.clone(), cfg, vb_b.pp(idx))?;
-604            layers.push(layer)
-605        }
-606        let final_norm = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("final_norm"))?;
-607        let lm_head = Linear::new(embed_tokens.embeddings().clone(), None);
-608        Ok(Self {
-609            embed_tokens,
-610            layers,
-611            final_norm,
-612            lm_head,
-613            hidden_size: cfg.hidden_size,
-614            logits_soft_cap: cfg.logits_soft_cap,
-615            dtype: vb.dtype(),
-616            device: vb.device().clone(),
-617        })
-618    }
-619
-620    fn prepare_decoder_attention_mask(
-621        &self,
-622        b_size: usize,
-623        tgt_len: usize,
-624        seqlen_offset: usize,
-625    ) -> Result<Tensor> {
-626        let mask: Vec<_> = (0..tgt_len)
-627            .flat_map(|i| (0..tgt_len).map(move |j| if i < j { f32::NEG_INFINITY } else { 0. }))
-628            .collect();
-629        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-630        let mask = if seqlen_offset > 0 {
-631            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-632            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-633        } else {
-634            mask
-635        };
-636        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-637            .to_dtype(self.dtype)
-638    }
-639
-640    pub fn forward(&mut self, xs: &Tensor, pos: usize) -> Result<Tensor> {
-641        let (b_size, seq_len) = xs.dims2()?;
-642        let attention_mask = if seq_len <= 1 {
-643            None
-644        } else {
-645            let mask = self.prepare_decoder_attention_mask(b_size, seq_len, pos)?;
-646            Some(mask)
-647        };
-648        let xs = xs.apply(&self.embed_tokens)?;
-649        let mut xs = (xs * (self.hidden_size as f64).sqrt())?;
-650        for layer in self.layers.iter_mut() {
-651            xs = layer.forward(&xs, attention_mask.as_ref(), pos)?;
-652        }
-653        let logits = xs
-654            .narrow(1, seq_len - 1, 1)?
-655            .apply(&self.final_norm)?
-656            .apply(&self.lm_head)?;
-657        let logits = ((logits / self.logits_soft_cap)?.tanh()? * self.logits_soft_cap)?;
-658        Ok(logits)
-659    }
-660}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/repvgg.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/repvgg.rs.html deleted file mode 100644 index 342f085..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/repvgg.rs.html +++ /dev/null @@ -1,315 +0,0 @@ -repvgg.rs - source

candle_transformers/models/
repvgg.rs

1//! RepVGG inference implementation
-2//!
-3//! Key characteristics:
-4//! - Efficient inference architecture through structural reparameterization
-5//! - Single 3x3 conv layer after fusing 3x3 branch, 1x1 branch and identity branch
-6//! - Different configurations including a0-a2, b0-b3 and variants with group convolutions
-7//! - High accuracy with VGG-like plain architecture and training
-8//!
-9//! References:
-10//! - [RepVGG Paper](https://arxiv.org/abs/2101.03697). RepVGG: Making VGG-style ConvNets Great Again
-11//! - [Official Implementation](https://github.com/DingXiaoH/RepVGG)
-12//!
-13
-14use candle::{Result, Tensor, D};
-15use candle_nn::{
-16    batch_norm, conv2d_no_bias, linear, BatchNorm, Conv2d, Conv2dConfig, Func, VarBuilder,
-17};
-18
-19const CHANNELS_PER_STAGE: [usize; 5] = [64, 64, 128, 256, 512];
-20
-21#[derive(Clone)]
-22pub struct Config {
-23    a: f32,
-24    b: f32,
-25    groups: usize,
-26    stages: [usize; 4],
-27}
-28
-29impl Config {
-30    pub fn a0() -> Self {
-31        Self {
-32            a: 0.75,
-33            b: 2.5,
-34            groups: 1,
-35            stages: [2, 4, 14, 1],
-36        }
-37    }
-38
-39    pub fn a1() -> Self {
-40        Self {
-41            a: 1.0,
-42            b: 2.5,
-43            groups: 1,
-44            stages: [2, 4, 14, 1],
-45        }
-46    }
-47
-48    pub fn a2() -> Self {
-49        Self {
-50            a: 1.5,
-51            b: 2.75,
-52            groups: 1,
-53            stages: [2, 4, 14, 1],
-54        }
-55    }
-56
-57    pub fn b0() -> Self {
-58        Self {
-59            a: 1.0,
-60            b: 2.5,
-61            groups: 1,
-62            stages: [4, 6, 16, 1],
-63        }
-64    }
-65
-66    pub fn b1() -> Self {
-67        Self {
-68            a: 2.0,
-69            b: 4.0,
-70            groups: 1,
-71            stages: [4, 6, 16, 1],
-72        }
-73    }
-74
-75    pub fn b2() -> Self {
-76        Self {
-77            a: 2.5,
-78            b: 5.0,
-79            groups: 1,
-80            stages: [4, 6, 16, 1],
-81        }
-82    }
-83
-84    pub fn b3() -> Self {
-85        Self {
-86            a: 3.0,
-87            b: 5.0,
-88            groups: 1,
-89            stages: [4, 6, 16, 1],
-90        }
-91    }
-92
-93    pub fn b1g4() -> Self {
-94        Self {
-95            a: 2.0,
-96            b: 4.0,
-97            groups: 4,
-98            stages: [4, 6, 16, 1],
-99        }
-100    }
-101
-102    pub fn b2g4() -> Self {
-103        Self {
-104            a: 2.5,
-105            b: 5.0,
-106            groups: 4,
-107            stages: [4, 6, 16, 1],
-108        }
-109    }
-110
-111    pub fn b3g4() -> Self {
-112        Self {
-113            a: 3.0,
-114            b: 5.0,
-115            groups: 4,
-116            stages: [4, 6, 16, 1],
-117        }
-118    }
-119}
-120
-121// fuses a convolutional kernel and a batchnorm layer into a convolutional layer
-122// based on the _fuse_bn_tensor method in timm
-123// see https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/byobnet.py#L602
-124fn fuse_conv_bn(weights: &Tensor, bn: BatchNorm) -> Result<(Tensor, Tensor)> {
-125    let (gamma, beta) = bn.weight_and_bias().unwrap();
-126    let mu = bn.running_mean();
-127    let sigma = (bn.running_var() + bn.eps())?.sqrt();
-128    let gps = (gamma / sigma)?;
-129    let bias = (beta - mu * &gps)?;
-130    let weights = weights.broadcast_mul(&gps.reshape(((), 1, 1, 1))?)?;
-131
-132    Ok((weights, bias))
-133}
-134
-135// A RepVGG layer has a different training time and inference time architecture.
-136// The latter is a simple and efficient equivalent transformation of the former
-137// realized by a structural reparameterization technique, where 3x3 and 1x1 convolutions
-138// along with identity branches and batchnorm layers are fused into a single 3x3 convolution.
-139fn repvgg_layer(
-140    has_identity: bool,
-141    dim: usize,
-142    stride: usize,
-143    in_channels: usize,
-144    out_channels: usize,
-145    groups: usize,
-146    vb: VarBuilder,
-147) -> Result<Func<'static>> {
-148    let conv2d_cfg = Conv2dConfig {
-149        stride,
-150        groups,
-151        padding: 1,
-152        ..Default::default()
-153    };
-154
-155    // read and reparameterize the 1x1 conv and bn into w1 and b1
-156    // based on https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/byobnet.py#L543
-157
-158    let conv1x1_bn = batch_norm(dim, 1e-5, vb.pp("conv_1x1.bn"))?;
-159    let conv1x1 = conv2d_no_bias(
-160        in_channels,
-161        out_channels,
-162        1,
-163        conv2d_cfg,
-164        vb.pp("conv_1x1.conv"),
-165    )?;
-166
-167    let (mut w1, b1) = fuse_conv_bn(conv1x1.weight(), conv1x1_bn)?;
-168
-169    // resize to 3x3
-170    w1 = w1.pad_with_zeros(D::Minus1, 1, 1)?;
-171    w1 = w1.pad_with_zeros(D::Minus2, 1, 1)?;
-172
-173    // read and reparameterize the 3x3 conv and bn into w3 and b3
-174    let convkxk_bn = batch_norm(dim, 1e-5, vb.pp("conv_kxk.bn"))?;
-175    let conv3x3 = conv2d_no_bias(
-176        in_channels,
-177        out_channels,
-178        3,
-179        conv2d_cfg,
-180        vb.pp("conv_kxk.conv"),
-181    )?;
-182
-183    let (w3, b3) = fuse_conv_bn(conv3x3.weight(), convkxk_bn)?;
-184
-185    let mut w = (w1 + w3)?;
-186    let mut b = (b1 + b3)?;
-187
-188    // read and reparameterize the identity bn into wi and bi
-189    if has_identity {
-190        let identity_bn = batch_norm(dim, 1e-5, vb.pp("identity"))?;
-191
-192        // create a 3x3 convolution equivalent to the identity branch
-193        let mut weights: Vec<f32> = vec![0.0; conv3x3.weight().elem_count()];
-194
-195        // https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/byobnet.py#L620
-196        let in_dim = in_channels / groups;
-197        for i in 0..in_channels {
-198            weights[i * in_dim * 3 * 3 + (i % in_dim) * 3 * 3 + 4] = 1.0;
-199        }
-200
-201        let weights = &Tensor::from_vec(weights, w.shape(), w.device())?;
-202        let (wi, bi) = fuse_conv_bn(weights, identity_bn)?;
-203
-204        w = (w + wi)?;
-205        b = (b + bi)?;
-206    }
-207
-208    // create the 3x3 conv equivalent to the sum of 3x3, 1x1 and identity branches
-209    let reparam_conv = Conv2d::new(w, Some(b), conv2d_cfg);
-210
-211    Ok(Func::new(move |xs| {
-212        let xs = xs.apply(&reparam_conv)?.relu()?;
-213        Ok(xs)
-214    }))
-215}
-216
-217// Get the number of output channels per stage taking into account the multipliers
-218fn output_channels_per_stage(a: f32, b: f32, stage: usize) -> usize {
-219    let channels = CHANNELS_PER_STAGE[stage] as f32;
-220
-221    match stage {
-222        0 => std::cmp::min(64, (channels * a) as usize),
-223        4 => (channels * b) as usize,
-224        _ => (channels * a) as usize,
-225    }
-226}
-227
-228// Each stage is made of layers. The first layer always downsamples with stride 2.
-229// All but the first layer have a residual connection.
-230// The G4 variants have a groupwise convolution instead of a dense one on odd layers
-231// counted across stage boundaries, so we keep track of which layer we are in the
-232// full model.
-233fn repvgg_stage(cfg: &Config, idx: usize, vb: VarBuilder) -> Result<Func<'static>> {
-234    let nlayers = cfg.stages[idx - 1];
-235    let mut layers = Vec::with_capacity(nlayers);
-236    let prev_layers: usize = cfg.stages[..idx - 1].iter().sum();
-237    let out_channels_prev = output_channels_per_stage(cfg.a, cfg.b, idx - 1);
-238    let out_channels = output_channels_per_stage(cfg.a, cfg.b, idx);
-239
-240    for layer_idx in 0..nlayers {
-241        let (has_identity, stride, in_channels) = if layer_idx == 0 {
-242            (false, 2, out_channels_prev)
-243        } else {
-244            (true, 1, out_channels)
-245        };
-246
-247        let groups = if (prev_layers + layer_idx) % 2 == 1 {
-248            cfg.groups
-249        } else {
-250            1
-251        };
-252
-253        layers.push(repvgg_layer(
-254            has_identity,
-255            out_channels,
-256            stride,
-257            in_channels,
-258            out_channels,
-259            groups,
-260            vb.pp(layer_idx),
-261        )?)
-262    }
-263
-264    Ok(Func::new(move |xs| {
-265        let mut xs = xs.clone();
-266        for layer in layers.iter() {
-267            xs = xs.apply(layer)?
-268        }
-269        Ok(xs)
-270    }))
-271}
-272
-273// Build a RepVGG model for a given configuration.
-274fn repvgg_model(config: &Config, nclasses: Option<usize>, vb: VarBuilder) -> Result<Func<'static>> {
-275    let cls = match nclasses {
-276        None => None,
-277        Some(nclasses) => {
-278            let outputs = output_channels_per_stage(config.a, config.b, 4);
-279            let linear = linear(outputs, nclasses, vb.pp("head.fc"))?;
-280            Some(linear)
-281        }
-282    };
-283
-284    let stem_dim = output_channels_per_stage(config.a, config.b, 0);
-285    let stem = repvgg_layer(false, stem_dim, 2, 3, stem_dim, 1, vb.pp("stem"))?;
-286    let vb = vb.pp("stages");
-287    let stage1 = repvgg_stage(config, 1, vb.pp(0))?;
-288    let stage2 = repvgg_stage(config, 2, vb.pp(1))?;
-289    let stage3 = repvgg_stage(config, 3, vb.pp(2))?;
-290    let stage4 = repvgg_stage(config, 4, vb.pp(3))?;
-291
-292    Ok(Func::new(move |xs| {
-293        let xs = xs
-294            .apply(&stem)?
-295            .apply(&stage1)?
-296            .apply(&stage2)?
-297            .apply(&stage3)?
-298            .apply(&stage4)?
-299            .mean(D::Minus1)?
-300            .mean(D::Minus1)?;
-301        match &cls {
-302            None => Ok(xs),
-303            Some(cls) => xs.apply(cls),
-304        }
-305    }))
-306}
-307
-308pub fn repvgg(cfg: &Config, nclasses: usize, vb: VarBuilder) -> Result<Func<'static>> {
-309    repvgg_model(cfg, Some(nclasses), vb)
-310}
-311
-312pub fn repvgg_no_final_layer(cfg: &Config, vb: VarBuilder) -> Result<Func<'static>> {
-313    repvgg_model(cfg, None, vb)
-314}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/resnet.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/resnet.rs.html deleted file mode 100644 index f79a1e4..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/resnet.rs.html +++ /dev/null @@ -1,258 +0,0 @@ -resnet.rs - source

candle_transformers/models/
resnet.rs

1//! # ResNet Implementation
-2//!
-3//! Implementation of ResNet architectures as described in the paper:
-4//!
-5//! ## Reference
-6//!
-7//! [Deep Residual Learning for Image Recognition](https://arxiv.org/abs/1512.03385)
-8//! He et al. (2015)
-9//!
-10//! This paper introduced ResNet, a deep neural network architecture that utilizes
-11//! skip connections ("residual connections") to enable training of very deep networks.
-12
-13use candle::{Result, D};
-14use candle_nn::{batch_norm, Conv2d, Func, VarBuilder};
-15
-16fn conv2d(
-17    c_in: usize,
-18    c_out: usize,
-19    ksize: usize,
-20    padding: usize,
-21    stride: usize,
-22    vb: VarBuilder,
-23) -> Result<Conv2d> {
-24    let conv2d_cfg = candle_nn::Conv2dConfig {
-25        stride,
-26        padding,
-27        ..Default::default()
-28    };
-29    candle_nn::conv2d_no_bias(c_in, c_out, ksize, conv2d_cfg, vb)
-30}
-31
-32fn downsample(c_in: usize, c_out: usize, stride: usize, vb: VarBuilder) -> Result<Func> {
-33    if stride != 1 || c_in != c_out {
-34        let conv = conv2d(c_in, c_out, 1, 0, stride, vb.pp(0))?;
-35        let bn = batch_norm(c_out, 1e-5, vb.pp(1))?;
-36        Ok(Func::new(move |xs| xs.apply(&conv)?.apply_t(&bn, false)))
-37    } else {
-38        Ok(Func::new(|xs| Ok(xs.clone())))
-39    }
-40}
-41
-42fn basic_block(c_in: usize, c_out: usize, stride: usize, vb: VarBuilder) -> Result<Func> {
-43    let conv1 = conv2d(c_in, c_out, 3, 1, stride, vb.pp("conv1"))?;
-44    let bn1 = batch_norm(c_out, 1e-5, vb.pp("bn1"))?;
-45    let conv2 = conv2d(c_out, c_out, 3, 1, 1, vb.pp("conv2"))?;
-46    let bn2 = batch_norm(c_out, 1e-5, vb.pp("bn2"))?;
-47    let downsample = downsample(c_in, c_out, stride, vb.pp("downsample"))?;
-48    Ok(Func::new(move |xs| {
-49        let ys = xs
-50            .apply(&conv1)?
-51            .apply_t(&bn1, false)?
-52            .relu()?
-53            .apply(&conv2)?
-54            .apply_t(&bn2, false)?;
-55        (xs.apply(&downsample)? + ys)?.relu()
-56    }))
-57}
-58
-59fn basic_layer(
-60    c_in: usize,
-61    c_out: usize,
-62    stride: usize,
-63    cnt: usize,
-64    vb: VarBuilder,
-65) -> Result<Func> {
-66    let mut layers = Vec::with_capacity(cnt);
-67    for index in 0..cnt {
-68        let l_in = if index == 0 { c_in } else { c_out };
-69        let stride = if index == 0 { stride } else { 1 };
-70        layers.push(basic_block(l_in, c_out, stride, vb.pp(index))?)
-71    }
-72    Ok(Func::new(move |xs| {
-73        let mut xs = xs.clone();
-74        for layer in layers.iter() {
-75            xs = xs.apply(layer)?
-76        }
-77        Ok(xs)
-78    }))
-79}
-80
-81fn resnet(
-82    nclasses: Option<usize>,
-83    c1: usize,
-84    c2: usize,
-85    c3: usize,
-86    c4: usize,
-87    vb: VarBuilder,
-88) -> Result<Func> {
-89    let conv1 = conv2d(3, 64, 7, 3, 2, vb.pp("conv1"))?;
-90    let bn1 = batch_norm(64, 1e-5, vb.pp("bn1"))?;
-91    let layer1 = basic_layer(64, 64, 1, c1, vb.pp("layer1"))?;
-92    let layer2 = basic_layer(64, 128, 2, c2, vb.pp("layer2"))?;
-93    let layer3 = basic_layer(128, 256, 2, c3, vb.pp("layer3"))?;
-94    let layer4 = basic_layer(256, 512, 2, c4, vb.pp("layer4"))?;
-95    let fc = match nclasses {
-96        None => None,
-97        Some(nclasses) => {
-98            let linear = candle_nn::linear(512, nclasses, vb.pp("fc"))?;
-99            Some(linear)
-100        }
-101    };
-102    Ok(Func::new(move |xs| {
-103        let xs = xs
-104            .apply(&conv1)?
-105            .apply_t(&bn1, false)?
-106            .relu()?
-107            .pad_with_same(D::Minus1, 1, 1)?
-108            .pad_with_same(D::Minus2, 1, 1)?
-109            .max_pool2d_with_stride(3, 2)?
-110            .apply(&layer1)?
-111            .apply(&layer2)?
-112            .apply(&layer3)?
-113            .apply(&layer4)?
-114            .mean(D::Minus1)?
-115            .mean(D::Minus1)?;
-116        match &fc {
-117            None => Ok(xs),
-118            Some(fc) => xs.apply(fc),
-119        }
-120    }))
-121}
-122
-123/// Creates a ResNet-18 model.
-124pub fn resnet18(num_classes: usize, vb: VarBuilder) -> Result<Func> {
-125    resnet(Some(num_classes), 2, 2, 2, 2, vb)
-126}
-127
-128pub fn resnet18_no_final_layer(vb: VarBuilder) -> Result<Func> {
-129    resnet(None, 2, 2, 2, 2, vb)
-130}
-131
-132/// Creates a ResNet-34 model.
-133pub fn resnet34(num_classes: usize, vb: VarBuilder) -> Result<Func> {
-134    resnet(Some(num_classes), 3, 4, 6, 3, vb)
-135}
-136
-137pub fn resnet34_no_final_layer(vb: VarBuilder) -> Result<Func> {
-138    resnet(None, 3, 4, 6, 3, vb)
-139}
-140
-141// Bottleneck versions for ResNet 50, 101, and 152.
-142fn bottleneck_block(
-143    c_in: usize,
-144    c_out: usize,
-145    stride: usize,
-146    e: usize,
-147    vb: VarBuilder,
-148) -> Result<Func> {
-149    let e_dim = e * c_out;
-150    let conv1 = conv2d(c_in, c_out, 1, 0, 1, vb.pp("conv1"))?;
-151    let bn1 = batch_norm(c_out, 1e-5, vb.pp("bn1"))?;
-152    let conv2 = conv2d(c_out, c_out, 3, 1, stride, vb.pp("conv2"))?;
-153    let bn2 = batch_norm(c_out, 1e-5, vb.pp("bn2"))?;
-154    let conv3 = conv2d(c_out, e_dim, 1, 0, 1, vb.pp("conv3"))?;
-155    let bn3 = batch_norm(e_dim, 1e-5, vb.pp("bn3"))?;
-156    let downsample = downsample(c_in, e_dim, stride, vb.pp("downsample"))?;
-157    Ok(Func::new(move |xs| {
-158        let ys = xs
-159            .apply(&conv1)?
-160            .apply_t(&bn1, false)?
-161            .relu()?
-162            .apply(&conv2)?
-163            .apply_t(&bn2, false)?
-164            .relu()?
-165            .apply(&conv3)?
-166            .apply_t(&bn3, false)?;
-167        (xs.apply(&downsample)? + ys)?.relu()
-168    }))
-169}
-170
-171fn bottleneck_layer(
-172    c_in: usize,
-173    c_out: usize,
-174    stride: usize,
-175    cnt: usize,
-176    vb: VarBuilder,
-177) -> Result<Func> {
-178    let mut layers = Vec::with_capacity(cnt);
-179    for index in 0..cnt {
-180        let l_in = if index == 0 { c_in } else { 4 * c_out };
-181        let stride = if index == 0 { stride } else { 1 };
-182        layers.push(bottleneck_block(l_in, c_out, stride, 4, vb.pp(index))?)
-183    }
-184    Ok(Func::new(move |xs| {
-185        let mut xs = xs.clone();
-186        for layer in layers.iter() {
-187            xs = xs.apply(layer)?
-188        }
-189        Ok(xs)
-190    }))
-191}
-192
-193fn bottleneck_resnet(
-194    nclasses: Option<usize>,
-195    c1: usize,
-196    c2: usize,
-197    c3: usize,
-198    c4: usize,
-199    vb: VarBuilder,
-200) -> Result<Func> {
-201    let conv1 = conv2d(3, 64, 7, 3, 2, vb.pp("conv1"))?;
-202    let bn1 = batch_norm(64, 1e-5, vb.pp("bn1"))?;
-203    let layer1 = bottleneck_layer(64, 64, 1, c1, vb.pp("layer1"))?;
-204    let layer2 = bottleneck_layer(4 * 64, 128, 2, c2, vb.pp("layer2"))?;
-205    let layer3 = bottleneck_layer(4 * 128, 256, 2, c3, vb.pp("layer3"))?;
-206    let layer4 = bottleneck_layer(4 * 256, 512, 2, c4, vb.pp("layer4"))?;
-207    let fc = match nclasses {
-208        None => None,
-209        Some(nclasses) => {
-210            let linear = candle_nn::linear(4 * 512, nclasses, vb.pp("fc"))?;
-211            Some(linear)
-212        }
-213    };
-214    Ok(Func::new(move |xs| {
-215        let xs = xs
-216            .apply(&conv1)?
-217            .apply_t(&bn1, false)?
-218            .relu()?
-219            .pad_with_same(D::Minus1, 1, 1)?
-220            .pad_with_same(D::Minus2, 1, 1)?
-221            .max_pool2d_with_stride(3, 2)?
-222            .apply(&layer1)?
-223            .apply(&layer2)?
-224            .apply(&layer3)?
-225            .apply(&layer4)?
-226            .mean(D::Minus1)?
-227            .mean(D::Minus1)?;
-228        match &fc {
-229            None => Ok(xs),
-230            Some(fc) => xs.apply(fc),
-231        }
-232    }))
-233}
-234
-235pub fn resnet50(num_classes: usize, vb: VarBuilder) -> Result<Func> {
-236    bottleneck_resnet(Some(num_classes), 3, 4, 6, 3, vb)
-237}
-238
-239pub fn resnet50_no_final_layer(vb: VarBuilder) -> Result<Func> {
-240    bottleneck_resnet(None, 3, 4, 6, 3, vb)
-241}
-242
-243pub fn resnet101(num_classes: usize, vb: VarBuilder) -> Result<Func> {
-244    bottleneck_resnet(Some(num_classes), 3, 4, 23, 3, vb)
-245}
-246
-247pub fn resnet101_no_final_layer(vb: VarBuilder) -> Result<Func> {
-248    bottleneck_resnet(None, 3, 4, 23, 3, vb)
-249}
-250
-251pub fn resnet152(num_classes: usize, vb: VarBuilder) -> Result<Func> {
-252    bottleneck_resnet(Some(num_classes), 3, 8, 36, 3, vb)
-253}
-254
-255pub fn resnet152_no_final_layer(vb: VarBuilder) -> Result<Func> {
-256    bottleneck_resnet(None, 3, 8, 36, 3, vb)
-257}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/rwkv_v5.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/rwkv_v5.rs.html deleted file mode 100644 index d36d5c5..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/rwkv_v5.rs.html +++ /dev/null @@ -1,442 +0,0 @@ -rwkv_v5.rs - source

candle_transformers/models/
rwkv_v5.rs

1//! RWKV v5 model implementation.
-2//!
-3//! The [RWKV model](https://wiki.rwkv.com/) is a recurrent neural network model
-4//! with performance on par with transformer architectures. Several variants are
-5//! available, candle implements the v5 and v6 versions and can be used with
-6//! Eagle 7B([blog post](https://blog.rwkv.com/p/eagle-7b-soaring-past-transformers)).
-7//!
-8//! Key characteristics:
-9//! - Time-mix attention mechanism
-10//! - Channel-mix feed-forward network
-11//! - Linear attention
-12//! - Group normalization
-13//! - Token shift mechanism
-14//!
-15//! References:
-16//! - [RWKV Language Model](https://github.com/BlinkDL/RWKV-LM)
-17//! - [RWKV v5 Release](https://github.com/BlinkDL/ChatRWKV/tree/main)
-18//!
-19//! # Example
-20//!
-21//! ```bash
-22//! cargo run --example rwkv --release -- \
-23//!   --prompt "The smallest prime is "
-24//!
-25//! > avx: true, neon: false, simd128: false, f16c: true
-26//! > temp: 0.00 repeat-penalty: 1.10 repeat-last-n: 64
-27//! > The smallest prime is ϕ(2) = 2.
-28//! > The smallest composite is ϕ(3) = 3.
-29//! > The smallest perfect number is ϕ(5) = 5.
-30//! > The smallest perfect square is ϕ(4) = 4.
-31//! > The smallest perfect cube is ϕ(6) = 6.
-32//! ```
-33
-34use super::with_tracing::{layer_norm, linear_no_bias as linear, LayerNorm, Linear};
-35use candle::{DType, Device, IndexOp, Result, Tensor};
-36use candle_nn::{embedding, Embedding, Module, VarBuilder};
-37use std::collections::{HashMap, HashSet};
-38
-39fn default_num_attention_heads() -> usize {
-40    64
-41}
-42
-43// https://huggingface.co/RWKV/HF_v5-Eagle-7B/blob/main/configuration_rwkv5.py
-44#[derive(Debug, Clone, serde::Deserialize)]
-45pub struct Config {
-46    pub vocab_size: usize,
-47    pub hidden_size: usize,
-48    pub num_hidden_layers: usize,
-49    pub attention_hidden_size: usize,
-50    #[serde(default = "default_num_attention_heads")]
-51    pub num_attention_heads: usize,
-52    pub head_size: usize,
-53    pub intermediate_size: Option<usize>,
-54    pub layer_norm_epsilon: f64,
-55    pub rescale_every: usize,
-56}
-57
-58pub struct StatePerLayer {
-59    pub extract_key_value: Tensor,
-60    pub linear_attention: Tensor,
-61    pub feed_forward: Tensor,
-62}
-63
-64pub struct State {
-65    pub per_layer: Vec<StatePerLayer>,
-66    pub pos: usize,
-67}
-68
-69impl State {
-70    pub fn new(batch_size: usize, cfg: &Config, dev: &Device) -> Result<Self> {
-71        let mut per_layer = Vec::with_capacity(cfg.num_hidden_layers);
-72        // Certainly a weird convention but taken from modeling_rwkv5.py
-73        let num_attention_heads = cfg.hidden_size / cfg.num_attention_heads;
-74        for _layer_idx in 0..cfg.num_hidden_layers {
-75            let extract_key_value = Tensor::zeros((batch_size, cfg.hidden_size), DType::F32, dev)?;
-76            let linear_attention = Tensor::zeros(
-77                (
-78                    batch_size,
-79                    num_attention_heads,
-80                    cfg.hidden_size / num_attention_heads,
-81                    cfg.hidden_size / num_attention_heads,
-82                ),
-83                DType::F32,
-84                dev,
-85            )?;
-86            let feed_forward = Tensor::zeros((batch_size, cfg.hidden_size), DType::F32, dev)?;
-87            per_layer.push(StatePerLayer {
-88                extract_key_value,
-89                linear_attention,
-90                feed_forward,
-91            });
-92        }
-93        Ok(Self { per_layer, pos: 0 })
-94    }
-95}
-96
-97#[derive(Debug, Clone)]
-98struct SelfAttention {
-99    key: Linear,
-100    receptance: Linear,
-101    value: Linear,
-102    gate: Linear,
-103    output: Linear,
-104    ln_x: candle_nn::GroupNorm,
-105    time_mix_key: Tensor,
-106    time_mix_value: Tensor,
-107    time_mix_receptance: Tensor,
-108    time_decay: Tensor,
-109    time_faaaa: Tensor,
-110    time_mix_gate: Tensor,
-111    layer_id: usize,
-112    n_attn_heads: usize,
-113}
-114
-115impl SelfAttention {
-116    pub fn new(layer_id: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-117        let hidden_size = cfg.hidden_size;
-118        let attn_hidden_size = cfg.attention_hidden_size;
-119        let key = linear(hidden_size, attn_hidden_size, vb.pp("key"))?;
-120        let receptance = linear(hidden_size, attn_hidden_size, vb.pp("receptance"))?;
-121        let value = linear(hidden_size, attn_hidden_size, vb.pp("value"))?;
-122        let gate = linear(hidden_size, attn_hidden_size, vb.pp("gate"))?;
-123        let output = linear(attn_hidden_size, hidden_size, vb.pp("output"))?;
-124        let ln_x = candle_nn::group_norm(
-125            hidden_size / cfg.head_size,
-126            hidden_size,
-127            1e-5,
-128            vb.pp("ln_x"),
-129        )?;
-130        let time_mix_key = vb.get((1, 1, cfg.hidden_size), "time_mix_key")?;
-131        let time_mix_value = vb.get((1, 1, cfg.hidden_size), "time_mix_value")?;
-132        let time_mix_receptance = vb.get((1, 1, cfg.hidden_size), "time_mix_receptance")?;
-133        let n_attn_heads = cfg.hidden_size / cfg.head_size;
-134        let time_decay = vb.get((n_attn_heads, cfg.head_size), "time_decay")?;
-135        let time_faaaa = vb.get((n_attn_heads, cfg.head_size), "time_faaaa")?;
-136        let time_mix_gate = vb.get((1, 1, cfg.hidden_size), "time_mix_gate")?;
-137        Ok(Self {
-138            key,
-139            value,
-140            receptance,
-141            gate,
-142            output,
-143            ln_x,
-144            time_mix_key,
-145            time_mix_value,
-146            time_mix_receptance,
-147            time_decay,
-148            time_faaaa,
-149            time_mix_gate,
-150            layer_id,
-151            n_attn_heads,
-152        })
-153    }
-154
-155    pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-156        let h = self.time_decay.dim(0)?;
-157        let (b, t, s) = xs.dims3()?;
-158        let s = s / h;
-159        let (receptance, key, value, gate) = {
-160            // extract key-value
-161            let shifted = state.per_layer[self.layer_id].extract_key_value.clone();
-162            let shifted = if shifted.rank() == 2 {
-163                shifted.unsqueeze(1)?
-164            } else {
-165                shifted
-166            };
-167            let key = ((xs * &self.time_mix_key)? + &shifted * (1.0 - &self.time_mix_key)?)?;
-168            let value = ((xs * &self.time_mix_value)? + &shifted * (1.0 - &self.time_mix_value)?)?;
-169            let receptance = ((xs * &self.time_mix_receptance)?
-170                + &shifted * (1.0 - &self.time_mix_receptance)?)?;
-171            let gate = ((xs * &self.time_mix_gate)? + &shifted * (1.0 - &self.time_mix_gate)?)?;
-172
-173            let key = self.key.forward(&key)?;
-174            let value = self.value.forward(&value)?;
-175            let receptance = self.receptance.forward(&receptance)?;
-176            let gate = candle_nn::ops::silu(&self.gate.forward(&gate)?)?;
-177            state.per_layer[self.layer_id].extract_key_value = xs.i((.., t - 1))?;
-178            (receptance, key, value, gate)
-179        };
-180        // linear attention
-181        let mut state_ = state.per_layer[self.layer_id].linear_attention.clone();
-182        let key = key.reshape((b, t, h, s))?.permute((0, 2, 3, 1))?;
-183        let value = value.reshape((b, t, h, s))?.transpose(1, 2)?;
-184        let receptance = receptance.reshape((b, t, h, s))?.transpose(1, 2)?;
-185
-186        let time_decay = self
-187            .time_decay
-188            .exp()?
-189            .neg()?
-190            .exp()?
-191            .reshape(((), 1, 1))?
-192            .reshape((self.n_attn_heads, (), 1))?;
-193        let time_faaaa =
-194            self.time_faaaa
-195                .reshape(((), 1, 1))?
-196                .reshape((self.n_attn_heads, (), 1))?;
-197
-198        let mut out: Vec<Tensor> = Vec::with_capacity(t);
-199        for t_ in 0..t {
-200            let rt = receptance.i((.., .., t_..t_ + 1))?.contiguous()?;
-201            let kt = key.i((.., .., .., t_..t_ + 1))?.contiguous()?;
-202            let vt = value.i((.., .., t_..t_ + 1))?.contiguous()?;
-203            let at = kt.matmul(&vt)?;
-204            let rhs = (time_faaaa.broadcast_mul(&at)? + &state_)?;
-205            let out_ = rt.matmul(&rhs)?.squeeze(2)?;
-206            state_ = (&at + time_decay.broadcast_mul(&state_))?;
-207            out.push(out_)
-208        }
-209        let out = Tensor::cat(&out, 1)?.reshape((b * t, h * s, 1))?;
-210        let out = out.apply(&self.ln_x)?.reshape((b, t, h * s))?;
-211        let out = (out * gate)?.apply(&self.output)?;
-212        state.per_layer[self.layer_id].linear_attention = state_;
-213        Ok(out)
-214    }
-215}
-216
-217#[derive(Debug, Clone)]
-218struct FeedForward {
-219    time_mix_key: Tensor,
-220    time_mix_receptance: Tensor,
-221    key: Linear,
-222    receptance: Linear,
-223    value: Linear,
-224    layer_id: usize,
-225}
-226
-227impl FeedForward {
-228    pub fn new(layer_id: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-229        let int_size = cfg
-230            .intermediate_size
-231            .unwrap_or(((cfg.hidden_size as f64 * 3.5) as usize) / 32 * 32);
-232        let key = linear(cfg.hidden_size, int_size, vb.pp("key"))?;
-233        let receptance = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("receptance"))?;
-234        let value = linear(int_size, cfg.hidden_size, vb.pp("value"))?;
-235        let time_mix_key = vb.get((1, 1, cfg.hidden_size), "time_mix_key")?;
-236        let time_mix_receptance = vb.get((1, 1, cfg.hidden_size), "time_mix_receptance")?;
-237        Ok(Self {
-238            key,
-239            receptance,
-240            value,
-241            time_mix_key,
-242            time_mix_receptance,
-243            layer_id,
-244        })
-245    }
-246
-247    pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-248        let shifted = &state.per_layer[self.layer_id].feed_forward;
-249        let key = (xs.broadcast_mul(&self.time_mix_key)?
-250            + shifted.broadcast_mul(&(1.0 - &self.time_mix_key)?)?)?;
-251        let receptance = (xs.broadcast_mul(&self.time_mix_receptance)?
-252            + shifted.broadcast_mul(&(1.0 - &self.time_mix_receptance)?)?)?;
-253        let key = key.apply(&self.key)?.relu()?.sqr()?;
-254        let value = key.apply(&self.value)?;
-255        let receptance = candle_nn::ops::sigmoid(&receptance.apply(&self.receptance)?)?;
-256        state.per_layer[self.layer_id].feed_forward = xs.i((.., xs.dim(1)? - 1))?;
-257        let xs = (receptance * value)?;
-258        Ok(xs)
-259    }
-260}
-261
-262#[derive(Debug, Clone)]
-263struct Block {
-264    pre_ln: Option<LayerNorm>,
-265    ln1: LayerNorm,
-266    ln2: LayerNorm,
-267    attention: SelfAttention,
-268    feed_forward: FeedForward,
-269}
-270
-271impl Block {
-272    pub fn new(layer_id: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-273        let ln1 = layer_norm(cfg.hidden_size, cfg.layer_norm_epsilon, vb.pp("ln1"))?;
-274        let ln2 = layer_norm(cfg.hidden_size, cfg.layer_norm_epsilon, vb.pp("ln2"))?;
-275        let pre_ln = if layer_id == 0 {
-276            let ln = layer_norm(cfg.hidden_size, cfg.layer_norm_epsilon, vb.pp("pre_ln"))?;
-277            Some(ln)
-278        } else {
-279            None
-280        };
-281        let attention = SelfAttention::new(layer_id, cfg, vb.pp("attention"))?;
-282        let feed_forward = FeedForward::new(layer_id, cfg, vb.pp("feed_forward"))?;
-283        Ok(Self {
-284            pre_ln,
-285            ln1,
-286            ln2,
-287            attention,
-288            feed_forward,
-289        })
-290    }
-291
-292    pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-293        let xs = match self.pre_ln.as_ref() {
-294            None => xs.clone(),
-295            Some(pre_ln) => xs.apply(pre_ln)?,
-296        };
-297        let attention = self.attention.forward(&xs.apply(&self.ln1)?, state)?;
-298        let xs = (xs + attention)?;
-299        let feed_forward = self.feed_forward.forward(&xs.apply(&self.ln2)?, state)?;
-300        let xs = (xs + feed_forward)?;
-301        Ok(xs)
-302    }
-303}
-304
-305#[derive(Debug, Clone)]
-306pub struct Model {
-307    embeddings: Embedding,
-308    blocks: Vec<Block>,
-309    ln_out: LayerNorm,
-310    head: Linear,
-311    rescale_every: usize,
-312    layers_are_rescaled: bool,
-313}
-314
-315impl Model {
-316    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-317        let vb_m = vb.pp("rwkv");
-318        let embeddings = embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embeddings"))?;
-319        let mut blocks = Vec::with_capacity(cfg.num_hidden_layers);
-320        let vb_b = vb_m.pp("blocks");
-321        for block_index in 0..cfg.num_hidden_layers {
-322            let block = Block::new(block_index, cfg, vb_b.pp(block_index))?;
-323            blocks.push(block)
-324        }
-325        let ln_out = layer_norm(cfg.hidden_size, 1e-5, vb_m.pp("ln_out"))?;
-326        let head = linear(cfg.hidden_size, cfg.vocab_size, vb.pp("head"))?;
-327        Ok(Self {
-328            embeddings,
-329            blocks,
-330            ln_out,
-331            head,
-332            rescale_every: cfg.rescale_every,
-333            layers_are_rescaled: false, // This seem to only happen for the f16/bf16 dtypes.
-334        })
-335    }
-336
-337    pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-338        let (_b_size, _seq_len) = xs.dims2()?;
-339        let mut xs = xs.apply(&self.embeddings)?;
-340        for (block_idx, block) in self.blocks.iter().enumerate() {
-341            xs = block.forward(&xs, state)?;
-342            if self.layers_are_rescaled && (block_idx + 1) % self.rescale_every == 0 {
-343                xs = (xs / 2.)?
-344            }
-345        }
-346        let xs = xs.apply(&self.ln_out)?.apply(&self.head)?;
-347        state.pos += 1;
-348        Ok(xs)
-349    }
-350}
-351
-352type Bytes = Vec<u8>;
-353
-354// https://github.com/BlinkDL/ChatRWKV/blob/095e812aef15a1f74107f6c39d13578a2412dc46/RWKV_v5_demo.py#L14
-355pub struct Tokenizer {
-356    table: Vec<Vec<Vec<Bytes>>>,
-357    good: Vec<HashSet<u8>>,
-358    idx2token: HashMap<u32, Vec<u8>>,
-359    token2idx: HashMap<Vec<u8>, u32>,
-360}
-361
-362impl Tokenizer {
-363    pub fn new<P: AsRef<std::path::Path>>(p: P) -> Result<Self> {
-364        let file = std::fs::File::open(p)?;
-365        let token2idx: HashMap<String, u32> =
-366            serde_json::from_reader(file).map_err(candle::Error::wrap)?;
-367        let token2idx = token2idx
-368            .into_iter()
-369            .map(|(key, value)| (key.into_bytes(), value))
-370            .collect::<HashMap<_, _>>();
-371        let idx2token = token2idx
-372            .iter()
-373            .map(|(key, value)| (*value, key.to_vec()))
-374            .collect::<HashMap<_, _>>();
-375
-376        let max_idx = token2idx.values().copied().max().unwrap_or(0);
-377
-378        let mut table = vec![vec![vec![]; 256]; 256];
-379        let mut good = vec![HashSet::new(); 256];
-380        for idx in (0..(1 + max_idx)).rev() {
-381            let s = match idx2token.get(&idx) {
-382                None => continue,
-383                Some(s) => s,
-384            };
-385            if s.len() >= 2 {
-386                let (s0, s1) = (s[0], s[1]);
-387                table[s0 as usize][s1 as usize].push(s.to_vec());
-388                good[s0 as usize].insert(s1);
-389            }
-390        }
-391        Ok(Self {
-392            table,
-393            good,
-394            idx2token,
-395            token2idx,
-396        })
-397    }
-398
-399    pub fn decode_bytes(&self, tokens: &[u32]) -> Vec<u8> {
-400        let mut v = Vec::new();
-401        for token_id in tokens.iter() {
-402            if let Some(token) = self.idx2token.get(token_id) {
-403                v.extend_from_slice(token.as_slice())
-404            }
-405        }
-406        v
-407    }
-408
-409    pub fn decode(&self, tokens: &[u32]) -> Result<String> {
-410        let bytes = self.decode_bytes(tokens);
-411        String::from_utf8(bytes).map_err(candle::Error::wrap)
-412    }
-413
-414    pub fn encode_bytes(&self, bytes: &[u8]) -> Result<Vec<u32>> {
-415        let mut tokens = Vec::new();
-416        let mut i = 0;
-417        while i < bytes.len() {
-418            let mut s = vec![bytes[i]];
-419            if i + 1 < bytes.len() && self.good[bytes[i] as usize].contains(&bytes[i + 1]) {
-420                let table = &self.table[bytes[i] as usize][bytes[i + 1] as usize];
-421                for table_elem in table.iter() {
-422                    if bytes[i..].starts_with(table_elem) {
-423                        s = table_elem.to_vec();
-424                        break;
-425                    }
-426                }
-427            }
-428            i += s.len();
-429            let token = match self.token2idx.get(&s) {
-430                None => candle::bail!("unexpected token '{}' {s:?}", String::from_utf8_lossy(&s)),
-431                Some(token) => *token,
-432            };
-433            tokens.push(token)
-434        }
-435        Ok(tokens)
-436    }
-437
-438    pub fn encode(&self, str: &str) -> Result<Vec<u32>> {
-439        self.encode_bytes(str.as_bytes())
-440    }
-441}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/rwkv_v6.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/rwkv_v6.rs.html deleted file mode 100644 index a20d396..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/rwkv_v6.rs.html +++ /dev/null @@ -1,325 +0,0 @@ -rwkv_v6.rs - source

candle_transformers/models/
rwkv_v6.rs

1//! RWKV v6 model implementation.
-2//!
-3//! The [RWKV model](https://wiki.rwkv.com/) is a recurrent neural network model
-4//! with performance on par with transformer architectures. Several variants are
-5//! available, candle implements the v5 and v6 versions and can be used with
-6//! Eagle 7B([blog post](https://blog.rwkv.com/p/eagle-7b-soaring-past-transformers)).
-7//!
-8//! Key characteristics:
-9//! - Linear attention mechanism
-10//! - Time-mixing for temporal dependencies
-11//! - Group normalization
-12//! - Feed forward gating
-13//! - State recycling for efficient inference
-14//!
-15//! # Example
-16//!
-17//! ```bash
-18//! cargo run --example rwkv --release -- \
-19//!   --prompt "The smallest prime is "
-20//!
-21//! > avx: true, neon: false, simd128: false, f16c: true
-22//! > temp: 0.00 repeat-penalty: 1.10 repeat-last-n: 64
-23//! > The smallest prime is ϕ(2) = 2.
-24//! > The smallest composite is ϕ(3) = 3.
-25//! > The smallest perfect number is ϕ(5) = 5.
-26//! > The smallest perfect square is ϕ(4) = 4.
-27//! > The smallest perfect cube is ϕ(6) = 6.
-28//! ```
-29
-30use super::with_tracing::{layer_norm, linear_no_bias as linear, LayerNorm, Linear};
-31use candle::{IndexOp, Result, Tensor};
-32use candle_nn::{embedding, Embedding, Module, VarBuilder};
-33
-34pub use crate::models::rwkv_v5::{Config, State, Tokenizer};
-35
-36#[derive(Debug, Clone)]
-37struct SelfAttention {
-38    key: Linear,
-39    receptance: Linear,
-40    value: Linear,
-41    gate: Linear,
-42    output: Linear,
-43    ln_x: candle_nn::GroupNorm,
-44    time_mix_x: Tensor,
-45    time_mix_w: Tensor,
-46    time_mix_key: Tensor,
-47    time_mix_value: Tensor,
-48    time_mix_receptance: Tensor,
-49    time_decay: Tensor,
-50    time_faaaa: Tensor,
-51    time_mix_gate: Tensor,
-52    time_decay_w1: Tensor,
-53    time_decay_w2: Tensor,
-54    time_mix_w1: Tensor,
-55    time_mix_w2: Tensor,
-56    layer_id: usize,
-57    n_attn_heads: usize,
-58}
-59
-60impl SelfAttention {
-61    fn new(layer_id: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-62        let hidden_size = cfg.hidden_size;
-63        let attn_hidden_size = cfg.attention_hidden_size;
-64        let key = linear(hidden_size, attn_hidden_size, vb.pp("key"))?;
-65        let receptance = linear(hidden_size, attn_hidden_size, vb.pp("receptance"))?;
-66        let value = linear(hidden_size, attn_hidden_size, vb.pp("value"))?;
-67        let gate = linear(hidden_size, attn_hidden_size, vb.pp("gate"))?;
-68        let output = linear(attn_hidden_size, hidden_size, vb.pp("output"))?;
-69        let ln_x = candle_nn::group_norm(
-70            hidden_size / cfg.head_size,
-71            hidden_size,
-72            1e-5,
-73            vb.pp("ln_x"),
-74        )?;
-75
-76        let time_mix_x = vb.get((1, 1, cfg.hidden_size), "time_mix_x")?;
-77        let time_mix_w = vb.get((1, 1, cfg.hidden_size), "time_mix_w")?;
-78        let time_mix_key = vb.get((1, 1, cfg.hidden_size), "time_mix_key")?;
-79        let time_mix_value = vb.get((1, 1, cfg.hidden_size), "time_mix_value")?;
-80        let time_mix_receptance = vb.get((1, 1, cfg.hidden_size), "time_mix_receptance")?;
-81        let n_attn_heads = cfg.hidden_size / cfg.head_size;
-82        let time_decay = vb.get((1, 1, cfg.hidden_size), "time_decay")?;
-83        let time_faaaa = vb.get((n_attn_heads, cfg.head_size), "time_faaaa")?;
-84        let time_mix_gate = vb.get((1, 1, cfg.hidden_size), "time_mix_gate")?;
-85        let time_decay_w1 = vb.get((cfg.hidden_size, n_attn_heads * 2), "time_decay_w1")?;
-86        let time_decay_w2 = vb.get((n_attn_heads * 2, cfg.hidden_size), "time_decay_w2")?;
-87        let time_mix_w1 = vb.get((cfg.hidden_size, n_attn_heads * 5), "time_mix_w1")?;
-88        let time_mix_w2 = vb.get((5, n_attn_heads, cfg.hidden_size), "time_mix_w2")?;
-89        Ok(Self {
-90            key,
-91            value,
-92            receptance,
-93            gate,
-94            output,
-95            ln_x,
-96            time_mix_x,
-97            time_mix_w,
-98            time_mix_key,
-99            time_mix_value,
-100            time_mix_receptance,
-101            time_decay,
-102            time_faaaa,
-103            time_mix_gate,
-104            time_decay_w1,
-105            time_decay_w2,
-106            time_mix_w1,
-107            time_mix_w2,
-108            layer_id,
-109            n_attn_heads,
-110        })
-111    }
-112
-113    pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-114        let h = self.n_attn_heads;
-115        let (b, t, s) = xs.dims3()?;
-116        let s = s / h;
-117        let (receptance, key, value, gate, w) = {
-118            // extract key-value
-119            let shifted = state.per_layer[self.layer_id].extract_key_value.clone();
-120            let shifted = if shifted.rank() == 2 {
-121                shifted.unsqueeze(1)?
-122            } else {
-123                shifted
-124            };
-125
-126            let sx = (&shifted - xs)?;
-127            let xxx = (xs + &sx * &self.time_mix_x)?;
-128            let xxx = xxx
-129                .broadcast_matmul(&self.time_mix_w1)?
-130                .tanh()?
-131                .reshape((b * t, 5, ()))?
-132                .transpose(0, 1)?;
-133
-134            let xxx = xxx.matmul(&self.time_mix_w2)?.reshape((5, b, t, ()))?;
-135
-136            let (mw, mk, mv, mr, mg) = (xxx.i(0)?, xxx.i(1)?, xxx.i(2)?, xxx.i(3)?, xxx.i(4)?);
-137
-138            let xw = (xs + &sx * (&self.time_mix_w + &mw)?)?;
-139            let xk = (xs + &sx * (&self.time_mix_key + &mk)?)?;
-140            let xv = (xs + &sx * (&self.time_mix_value + &mv)?)?;
-141            let xr = (xs + &sx * (&self.time_mix_receptance + &mr)?)?;
-142            let xg = (xs + &sx * (&self.time_mix_gate + &mg)?)?;
-143
-144            let w = (&self.time_decay
-145                + xw.broadcast_matmul(&self.time_decay_w1)?
-146                    .tanh()?
-147                    .broadcast_matmul(&self.time_decay_w2)?)?
-148            .reshape(((), 1, 1))?
-149            .reshape((self.n_attn_heads, (), 1))?;
-150
-151            let key = self.key.forward(&xk)?;
-152            let value = self.value.forward(&xv)?;
-153            let receptance = self.receptance.forward(&xr)?;
-154            let gate = candle_nn::ops::silu(&self.gate.forward(&xg)?)?;
-155            state.per_layer[self.layer_id].extract_key_value = xs.i((.., t - 1))?;
-156            (receptance, key, value, gate, w)
-157        };
-158
-159        // linear attention
-160        let mut state_ = state.per_layer[self.layer_id].linear_attention.clone();
-161        let key = key.reshape((b, t, h, s))?.permute((0, 2, 3, 1))?;
-162        let value = value.reshape((b, t, h, s))?.transpose(1, 2)?;
-163        let receptance = receptance.reshape((b, t, h, s))?.transpose(1, 2)?;
-164
-165        let w = w.exp()?.neg()?.exp()?;
-166
-167        let time_faaaa =
-168            self.time_faaaa
-169                .reshape(((), 1, 1))?
-170                .reshape((self.n_attn_heads, (), 1))?;
-171
-172        let mut out: Vec<Tensor> = Vec::with_capacity(t);
-173        for t_ in 0..t {
-174            let rt = receptance.i((.., .., t_..t_ + 1))?.contiguous()?;
-175            let kt = key.i((.., .., .., t_..t_ + 1))?.contiguous()?;
-176            let vt = value.i((.., .., t_..t_ + 1))?.contiguous()?;
-177            let at = kt.matmul(&vt)?;
-178            let rhs = (time_faaaa.broadcast_mul(&at)? + &state_)?;
-179            let out_ = rt.matmul(&rhs)?.squeeze(2)?;
-180            state_ = (&at + w.broadcast_mul(&state_))?;
-181            out.push(out_)
-182        }
-183        let out = Tensor::cat(&out, 1)?.reshape((b * t, h * s, 1))?;
-184        let out = out.apply(&self.ln_x)?.reshape((b, t, h * s))?;
-185        let out = (out * gate)?.apply(&self.output)?;
-186        state.per_layer[self.layer_id].linear_attention = state_;
-187        Ok(out)
-188    }
-189}
-190
-191#[derive(Debug, Clone)]
-192struct FeedForward {
-193    time_mix_key: Tensor,
-194    time_mix_receptance: Tensor,
-195    key: Linear,
-196    receptance: Linear,
-197    value: Linear,
-198    layer_id: usize,
-199}
-200
-201impl FeedForward {
-202    fn new(layer_id: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-203        let int_size = cfg
-204            .intermediate_size
-205            .unwrap_or(((cfg.hidden_size as f64 * 3.5) as usize) / 32 * 32);
-206        let key = linear(cfg.hidden_size, int_size, vb.pp("key"))?;
-207        let receptance = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("receptance"))?;
-208        let value = linear(int_size, cfg.hidden_size, vb.pp("value"))?;
-209        let time_mix_key = vb.get((1, 1, cfg.hidden_size), "time_mix_key")?;
-210        let time_mix_receptance = vb.get((1, 1, cfg.hidden_size), "time_mix_receptance")?;
-211        Ok(Self {
-212            key,
-213            receptance,
-214            value,
-215            time_mix_key,
-216            time_mix_receptance,
-217            layer_id,
-218        })
-219    }
-220
-221    fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-222        let shifted = state.per_layer[self.layer_id]
-223            .feed_forward
-224            .broadcast_sub(xs)?;
-225        let key = (xs + shifted.broadcast_mul(&self.time_mix_key)?)?;
-226        let receptance = (xs + shifted.broadcast_mul(&self.time_mix_receptance)?)?;
-227        let key = key.apply(&self.key)?.relu()?.sqr()?;
-228        let value = key.apply(&self.value)?;
-229        let receptance = candle_nn::ops::sigmoid(&receptance.apply(&self.receptance)?)?;
-230        state.per_layer[self.layer_id].feed_forward = xs.i((.., xs.dim(1)? - 1))?;
-231        let xs = (receptance * value)?;
-232        Ok(xs)
-233    }
-234}
-235
-236#[derive(Debug, Clone)]
-237struct Block {
-238    pre_ln: Option<LayerNorm>,
-239    ln1: LayerNorm,
-240    ln2: LayerNorm,
-241    attention: SelfAttention,
-242    feed_forward: FeedForward,
-243}
-244
-245impl Block {
-246    fn new(layer_id: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-247        let ln1 = layer_norm(cfg.hidden_size, cfg.layer_norm_epsilon, vb.pp("ln1"))?;
-248        let ln2 = layer_norm(cfg.hidden_size, cfg.layer_norm_epsilon, vb.pp("ln2"))?;
-249        let pre_ln = if layer_id == 0 {
-250            let ln = layer_norm(cfg.hidden_size, cfg.layer_norm_epsilon, vb.pp("pre_ln"))?;
-251            Some(ln)
-252        } else {
-253            None
-254        };
-255        let attention = SelfAttention::new(layer_id, cfg, vb.pp("attention"))?;
-256        let feed_forward = FeedForward::new(layer_id, cfg, vb.pp("feed_forward"))?;
-257        Ok(Self {
-258            pre_ln,
-259            ln1,
-260            ln2,
-261            attention,
-262            feed_forward,
-263        })
-264    }
-265
-266    fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-267        let xs = match self.pre_ln.as_ref() {
-268            None => xs.clone(),
-269            Some(pre_ln) => xs.apply(pre_ln)?,
-270        };
-271        let attention = self.attention.forward(&xs.apply(&self.ln1)?, state)?;
-272        let xs = (xs + attention)?;
-273        let feed_forward = self.feed_forward.forward(&xs.apply(&self.ln2)?, state)?;
-274        let xs = (xs + feed_forward)?;
-275        Ok(xs)
-276    }
-277}
-278
-279#[derive(Debug, Clone)]
-280pub struct Model {
-281    embeddings: Embedding,
-282    blocks: Vec<Block>,
-283    ln_out: LayerNorm,
-284    head: Linear,
-285    rescale_every: usize,
-286    layers_are_rescaled: bool,
-287}
-288
-289impl Model {
-290    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-291        let vb_m = vb.pp("rwkv");
-292        let embeddings = embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embeddings"))?;
-293        let mut blocks = Vec::with_capacity(cfg.num_hidden_layers);
-294        let vb_b = vb_m.pp("blocks");
-295        for block_index in 0..cfg.num_hidden_layers {
-296            let block = Block::new(block_index, cfg, vb_b.pp(block_index))?;
-297            blocks.push(block)
-298        }
-299        let ln_out = layer_norm(cfg.hidden_size, 1e-5, vb_m.pp("ln_out"))?;
-300        let head = linear(cfg.hidden_size, cfg.vocab_size, vb.pp("head"))?;
-301        Ok(Self {
-302            embeddings,
-303            blocks,
-304            ln_out,
-305            head,
-306            rescale_every: cfg.rescale_every,
-307            layers_are_rescaled: false, // This seem to only happen for the f16/bf16 dtypes.
-308        })
-309    }
-310
-311    pub fn forward(&self, xs: &Tensor, state: &mut State) -> Result<Tensor> {
-312        let (_b_size, _seq_len) = xs.dims2()?;
-313        let mut xs = xs.apply(&self.embeddings)?;
-314        for (block_idx, block) in self.blocks.iter().enumerate() {
-315            xs = block.forward(&xs, state)?;
-316            if self.layers_are_rescaled && (block_idx + 1) % self.rescale_every == 0 {
-317                xs = (xs / 2.)?
-318            }
-319        }
-320        let xs = xs.apply(&self.ln_out)?.apply(&self.head)?;
-321        state.pos += 1;
-322        Ok(xs)
-323    }
-324}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/segformer.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/segformer.rs.html deleted file mode 100644 index 5de7670..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/segformer.rs.html +++ /dev/null @@ -1,722 +0,0 @@ -segformer.rs - source

candle_transformers/models/
segformer.rs

1//! Segformer model implementation for semantic segmentation and image classification.
-2//!
-3//! Segformer is a transformer-based model designed for vision tasks. It uses a hierarchical
-4//! structure that progressively generates features at different scales.
-5//!
-6//! Key characteristics:
-7//! - Efficient self-attention with sequence reduction
-8//! - Hierarchical feature generation
-9//! - Mix-FFN for local and global feature interaction
-10//! - Lightweight all-MLP decode head
-11//!
-12//! References:
-13//! - [SegFormer Paper](https://arxiv.org/abs/2105.15203)
-14//! - [Model Card](https://huggingface.co/nvidia/mit-b0)
-15//!
-16
-17use crate::models::with_tracing::{conv2d, linear, Conv2d, Linear};
-18use candle::{Context, Module, ModuleT, Result, Tensor, D};
-19use candle_nn::{conv2d_no_bias, layer_norm, Activation, Conv2dConfig, VarBuilder};
-20use serde::Deserialize;
-21use std::collections::HashMap;
-22
-23// https://github.com/huggingface/transformers/blob/main/src/transformers/models/segformer/configuration_segformer.py
-24#[derive(Debug, Clone, PartialEq, Deserialize)]
-25pub struct Config {
-26    #[serde(default)]
-27    pub id2label: HashMap<String, String>,
-28    pub num_channels: usize,
-29    pub num_encoder_blocks: usize,
-30    pub depths: Vec<usize>,
-31    pub sr_ratios: Vec<usize>,
-32    pub hidden_sizes: Vec<usize>,
-33    pub patch_sizes: Vec<usize>,
-34    pub strides: Vec<usize>,
-35    pub num_attention_heads: Vec<usize>,
-36    pub mlp_ratios: Vec<usize>,
-37    pub hidden_act: candle_nn::Activation,
-38    pub layer_norm_eps: f64,
-39    pub decoder_hidden_size: usize,
-40}
-41
-42#[derive(Debug, Clone)]
-43struct SegformerOverlapPatchEmbeddings {
-44    projection: Conv2d,
-45    layer_norm: candle_nn::LayerNorm,
-46}
-47
-48impl SegformerOverlapPatchEmbeddings {
-49    fn new(
-50        config: &Config,
-51        patch_size: usize,
-52        stride: usize,
-53        num_channels: usize,
-54        hidden_size: usize,
-55        vb: VarBuilder,
-56    ) -> Result<Self> {
-57        let projection = conv2d(
-58            num_channels,
-59            hidden_size,
-60            patch_size,
-61            Conv2dConfig {
-62                stride,
-63                padding: patch_size / 2,
-64                ..Default::default()
-65            },
-66            vb.pp("proj"),
-67        )?;
-68        let layer_norm =
-69            candle_nn::layer_norm(hidden_size, config.layer_norm_eps, vb.pp("layer_norm"))?;
-70        Ok(Self {
-71            projection,
-72            layer_norm,
-73        })
-74    }
-75}
-76
-77impl Module for SegformerOverlapPatchEmbeddings {
-78    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-79        let embeddings = self.projection.forward(x)?;
-80        let shape = embeddings.shape();
-81        // [B, C, H, W] -> [B, H * W, C]
-82        let embeddings = embeddings.flatten_from(2)?.transpose(1, 2)?;
-83        let embeddings = self.layer_norm.forward(&embeddings)?;
-84        // [B, H * W, C] -> [B, C, H, W]
-85        let embeddings = embeddings.transpose(1, 2)?.reshape(shape)?;
-86        Ok(embeddings)
-87    }
-88}
-89
-90#[derive(Debug, Clone)]
-91struct SegformerEfficientSelfAttention {
-92    num_attention_heads: usize,
-93    attention_head_size: usize,
-94    query: Linear,
-95    key: Linear,
-96    value: Linear,
-97    sr: Option<Conv2d>,
-98    layer_norm: Option<layer_norm::LayerNorm>,
-99}
-100
-101impl SegformerEfficientSelfAttention {
-102    fn new(
-103        config: &Config,
-104        hidden_size: usize,
-105        num_attention_heads: usize,
-106        sequence_reduction_ratio: usize,
-107        vb: VarBuilder,
-108    ) -> Result<Self> {
-109        if hidden_size % num_attention_heads != 0 {
-110            candle::bail!(
-111                "The hidden size {} is not a multiple of the number of attention heads {}",
-112                hidden_size,
-113                num_attention_heads
-114            )
-115        }
-116        let attention_head_size = hidden_size / num_attention_heads;
-117        let all_head_size = num_attention_heads * attention_head_size;
-118        let query = linear(hidden_size, all_head_size, vb.pp("query"))?;
-119        let key = linear(hidden_size, all_head_size, vb.pp("key"))?;
-120        let value = linear(hidden_size, all_head_size, vb.pp("value"))?;
-121        let (sr, layer_norm) = if sequence_reduction_ratio > 1 {
-122            (
-123                Some(conv2d(
-124                    hidden_size,
-125                    hidden_size,
-126                    sequence_reduction_ratio,
-127                    Conv2dConfig {
-128                        stride: sequence_reduction_ratio,
-129                        ..Default::default()
-130                    },
-131                    vb.pp("sr"),
-132                )?),
-133                Some(candle_nn::layer_norm(
-134                    hidden_size,
-135                    config.layer_norm_eps,
-136                    vb.pp("layer_norm"),
-137                )?),
-138            )
-139        } else {
-140            (None, None)
-141        };
-142        Ok(Self {
-143            num_attention_heads,
-144            attention_head_size,
-145            query,
-146            key,
-147            value,
-148            sr,
-149            layer_norm,
-150        })
-151    }
-152
-153    fn transpose_for_scores(&self, hidden_states: Tensor) -> Result<Tensor> {
-154        let (batch, seq_length, _) = hidden_states.shape().dims3()?;
-155        let new_shape = &[
-156            batch,
-157            seq_length,
-158            self.num_attention_heads,
-159            self.attention_head_size,
-160        ];
-161        let hidden_states = hidden_states.reshape(new_shape)?;
-162        let hidden_states = hidden_states.permute((0, 2, 1, 3))?;
-163        Ok(hidden_states)
-164    }
-165}
-166
-167impl Module for SegformerEfficientSelfAttention {
-168    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-169        // [B, C, H, W] -> [B, H * W, C]
-170        let hidden_states = x.flatten_from(2)?.permute((0, 2, 1))?;
-171        let query = self
-172            .transpose_for_scores(self.query.forward(&hidden_states)?)?
-173            .contiguous()?;
-174        let hidden_states = if let (Some(sr), Some(layer_norm)) = (&self.sr, &self.layer_norm) {
-175            let hidden_states = sr.forward(x)?;
-176            // [B, C, H, W] -> [B, H * W, C]
-177            let hidden_states = hidden_states.flatten_from(2)?.permute((0, 2, 1))?;
-178            layer_norm.forward(&hidden_states)?
-179        } else {
-180            // already [B, H * W, C]
-181            hidden_states
-182        };
-183        // standard self-attention
-184        let key = self
-185            .transpose_for_scores(self.key.forward(&hidden_states)?)?
-186            .contiguous()?;
-187        let value = self
-188            .transpose_for_scores(self.value.forward(&hidden_states)?)?
-189            .contiguous()?;
-190        let attention_scores =
-191            (query.matmul(&key.t()?)? / f64::sqrt(self.attention_head_size as f64))?;
-192        let attention_scores = candle_nn::ops::softmax_last_dim(&attention_scores)?;
-193        let result = attention_scores.matmul(&value)?;
-194        let result = result.permute((0, 2, 1, 3))?.contiguous()?;
-195        result.flatten_from(D::Minus2)
-196    }
-197}
-198
-199#[derive(Debug, Clone)]
-200struct SegformerSelfOutput {
-201    dense: Linear,
-202}
-203
-204impl SegformerSelfOutput {
-205    fn new(hidden_size: usize, vb: VarBuilder) -> Result<Self> {
-206        let dense = linear(hidden_size, hidden_size, vb.pp("dense"))?;
-207        Ok(Self { dense })
-208    }
-209}
-210
-211impl Module for SegformerSelfOutput {
-212    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-213        self.dense.forward(x)
-214    }
-215}
-216
-217#[derive(Debug, Clone)]
-218struct SegformerAttention {
-219    attention: SegformerEfficientSelfAttention,
-220    output: SegformerSelfOutput,
-221}
-222
-223impl SegformerAttention {
-224    fn new(
-225        config: &Config,
-226        hidden_size: usize,
-227        num_attention_heads: usize,
-228        sequence_reduction_ratio: usize,
-229        vb: VarBuilder,
-230    ) -> Result<Self> {
-231        let attention = SegformerEfficientSelfAttention::new(
-232            config,
-233            hidden_size,
-234            num_attention_heads,
-235            sequence_reduction_ratio,
-236            vb.pp("self"),
-237        )?;
-238        let output = SegformerSelfOutput::new(hidden_size, vb.pp("output"))?;
-239        Ok(Self { attention, output })
-240    }
-241}
-242
-243impl Module for SegformerAttention {
-244    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-245        let attention_output = self.attention.forward(x)?;
-246        self.output.forward(&attention_output)
-247    }
-248}
-249
-250#[derive(Debug, Clone)]
-251struct SegformerDWConv {
-252    dw_conv: Conv2d,
-253}
-254
-255impl SegformerDWConv {
-256    fn new(dim: usize, vb: VarBuilder) -> Result<Self> {
-257        let dw_conv = conv2d(
-258            dim,
-259            dim,
-260            3,
-261            Conv2dConfig {
-262                stride: 1,
-263                padding: 1,
-264                groups: dim,
-265                ..Default::default()
-266            },
-267            vb.pp("dwconv"),
-268        )?;
-269        Ok(Self { dw_conv })
-270    }
-271}
-272
-273impl Module for SegformerDWConv {
-274    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-275        self.dw_conv.forward(x)
-276    }
-277}
-278
-279#[derive(Debug, Clone)]
-280struct SegformerMixFFN {
-281    dense1: Linear,
-282    dw_conv: SegformerDWConv,
-283    act: Activation,
-284    dense2: Linear,
-285}
-286
-287impl SegformerMixFFN {
-288    fn new(
-289        config: &Config,
-290        in_features: usize,
-291        hidden_features: usize,
-292        out_features: usize,
-293        vb: VarBuilder,
-294    ) -> Result<Self> {
-295        let dense1 = linear(in_features, hidden_features, vb.pp("dense1"))?;
-296        let dw_conv = SegformerDWConv::new(hidden_features, vb.pp("dwconv"))?;
-297        let act = config.hidden_act;
-298        let dense2 = linear(hidden_features, out_features, vb.pp("dense2"))?;
-299        Ok(Self {
-300            dense1,
-301            dw_conv,
-302            act,
-303            dense2,
-304        })
-305    }
-306}
-307
-308impl Module for SegformerMixFFN {
-309    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-310        let (batch, _, height, width) = x.shape().dims4()?;
-311        let hidden_states = self
-312            .dense1
-313            .forward(&x.flatten_from(2)?.permute((0, 2, 1))?)?;
-314        let channels = hidden_states.dim(2)?;
-315        let hidden_states = self.dw_conv.forward(
-316            &hidden_states
-317                .permute((0, 2, 1))?
-318                .reshape((batch, channels, height, width))?,
-319        )?;
-320        let hidden_states = self.act.forward(&hidden_states)?;
-321        let hidden_states = self
-322            .dense2
-323            .forward(&hidden_states.flatten_from(2)?.permute((0, 2, 1))?)?;
-324        let channels = hidden_states.dim(2)?;
-325        hidden_states
-326            .permute((0, 2, 1))?
-327            .reshape((batch, channels, height, width))
-328    }
-329}
-330
-331#[derive(Debug, Clone)]
-332struct SegformerLayer {
-333    layer_norm_1: candle_nn::LayerNorm,
-334    attention: SegformerAttention,
-335    layer_norm_2: candle_nn::LayerNorm,
-336    mlp: SegformerMixFFN,
-337}
-338
-339impl SegformerLayer {
-340    fn new(
-341        config: &Config,
-342        hidden_size: usize,
-343        num_attention_heads: usize,
-344        sequence_reduction_ratio: usize,
-345        mlp_ratio: usize,
-346        vb: VarBuilder,
-347    ) -> Result<Self> {
-348        let layer_norm_1 = layer_norm(hidden_size, config.layer_norm_eps, vb.pp("layer_norm_1"))?;
-349        let attention = SegformerAttention::new(
-350            config,
-351            hidden_size,
-352            num_attention_heads,
-353            sequence_reduction_ratio,
-354            vb.pp("attention"),
-355        )?;
-356        let layer_norm_2 = layer_norm(hidden_size, config.layer_norm_eps, vb.pp("layer_norm_2"))?;
-357        let mlp = SegformerMixFFN::new(
-358            config,
-359            hidden_size,
-360            hidden_size * mlp_ratio,
-361            hidden_size,
-362            vb.pp("mlp"),
-363        )?;
-364        Ok(Self {
-365            layer_norm_1,
-366            attention,
-367            layer_norm_2,
-368            mlp,
-369        })
-370    }
-371}
-372
-373impl Module for SegformerLayer {
-374    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-375        let shape = x.shape().dims4()?;
-376        // [B, C, H, W] -> [B, H * W, C]
-377        let hidden_states = x.flatten_from(2)?.permute((0, 2, 1))?;
-378        let layer_norm_output = self.layer_norm_1.forward(&hidden_states)?;
-379        let layer_norm_output = layer_norm_output.permute((0, 2, 1))?.reshape(shape)?;
-380        // attention takes in [B, C, H, W] in order to properly do conv2d (and output [B, H * W, C])
-381        let attention_output = self.attention.forward(&layer_norm_output)?;
-382        let hidden_states = (attention_output + hidden_states)?;
-383        let layer_norm_output = self.layer_norm_2.forward(&hidden_states)?;
-384        let mlp_output = self
-385            .mlp
-386            .forward(&layer_norm_output.permute((0, 2, 1))?.reshape(shape)?)?;
-387        hidden_states.permute((0, 2, 1))?.reshape(shape)? + mlp_output
-388    }
-389}
-390
-391#[derive(Debug, Clone)]
-392struct SegformerEncoder {
-393    /// config file
-394    config: Config,
-395    /// a list of embeddings
-396    patch_embeddings: Vec<SegformerOverlapPatchEmbeddings>,
-397    /// a list of attention blocks, each consisting of layers
-398    blocks: Vec<Vec<SegformerLayer>>,
-399    /// a final list of layer norms
-400    layer_norms: Vec<candle_nn::LayerNorm>,
-401}
-402
-403impl SegformerEncoder {
-404    fn new(config: Config, vb: VarBuilder) -> Result<Self> {
-405        let mut patch_embeddings = Vec::with_capacity(config.num_encoder_blocks);
-406        let mut blocks = Vec::with_capacity(config.num_encoder_blocks);
-407        let mut layer_norms = Vec::with_capacity(config.num_encoder_blocks);
-408        for i in 0..config.num_encoder_blocks {
-409            let patch_size = config.patch_sizes[i];
-410            let stride = config.strides[i];
-411            let hidden_size = config.hidden_sizes[i];
-412            let num_channels = if i == 0 {
-413                config.num_channels
-414            } else {
-415                config.hidden_sizes[i - 1]
-416            };
-417            patch_embeddings.push(SegformerOverlapPatchEmbeddings::new(
-418                &config,
-419                patch_size,
-420                stride,
-421                num_channels,
-422                hidden_size,
-423                vb.pp(format!("patch_embeddings.{}", i)),
-424            )?);
-425            let mut layers = Vec::with_capacity(config.depths[i]);
-426            for j in 0..config.depths[i] {
-427                let sequence_reduction_ratio = config.sr_ratios[i];
-428                let num_attention_heads = config.num_attention_heads[i];
-429                let mlp_ratio = config.mlp_ratios[i];
-430                layers.push(SegformerLayer::new(
-431                    &config,
-432                    hidden_size,
-433                    num_attention_heads,
-434                    sequence_reduction_ratio,
-435                    mlp_ratio,
-436                    vb.pp(format!("block.{}.{}", i, j)),
-437                )?);
-438            }
-439            blocks.push(layers);
-440            layer_norms.push(layer_norm(
-441                hidden_size,
-442                config.layer_norm_eps,
-443                vb.pp(format!("layer_norm.{}", i)),
-444            )?);
-445        }
-446        Ok(Self {
-447            config,
-448            patch_embeddings,
-449            blocks,
-450            layer_norms,
-451        })
-452    }
-453}
-454
-455impl ModuleWithHiddenStates for SegformerEncoder {
-456    fn forward(&self, x: &Tensor) -> Result<Vec<Tensor>> {
-457        let mut all_hidden_states = Vec::with_capacity(self.config.num_encoder_blocks);
-458        let mut hidden_states = x.clone();
-459        for i in 0..self.config.num_encoder_blocks {
-460            hidden_states = self.patch_embeddings[i].forward(&hidden_states)?;
-461            for layer in &self.blocks[i] {
-462                hidden_states = layer.forward(&hidden_states)?;
-463            }
-464            let shape = hidden_states.shape().dims4()?;
-465            hidden_states =
-466                self.layer_norms[i].forward(&hidden_states.flatten_from(2)?.permute((0, 2, 1))?)?;
-467            hidden_states = hidden_states.permute((0, 2, 1))?.reshape(shape)?;
-468            all_hidden_states.push(hidden_states.clone());
-469        }
-470        Ok(all_hidden_states)
-471    }
-472}
-473
-474#[derive(Debug, Clone)]
-475struct SegformerModel {
-476    encoder: SegformerEncoder,
-477}
-478
-479impl SegformerModel {
-480    fn new(config: &Config, vb: VarBuilder) -> Result<Self> {
-481        let encoder = SegformerEncoder::new(config.clone(), vb.pp("encoder"))?;
-482        Ok(Self { encoder })
-483    }
-484}
-485
-486impl ModuleWithHiddenStates for SegformerModel {
-487    fn forward(&self, x: &Tensor) -> Result<Vec<Tensor>> {
-488        self.encoder.forward(x)
-489    }
-490}
-491
-492#[derive(Debug, Clone)]
-493struct SegformerMLP {
-494    proj: Linear,
-495}
-496
-497impl SegformerMLP {
-498    fn new(config: &Config, input_dim: usize, vb: VarBuilder) -> Result<Self> {
-499        let proj = linear(input_dim, config.decoder_hidden_size, vb.pp("proj"))?;
-500        Ok(Self { proj })
-501    }
-502}
-503
-504impl Module for SegformerMLP {
-505    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-506        self.proj.forward(x)
-507    }
-508}
-509
-510#[derive(Debug, Clone)]
-511struct SegformerDecodeHead {
-512    linear_c: Vec<SegformerMLP>,
-513    linear_fuse: candle_nn::Conv2d,
-514    batch_norm: candle_nn::BatchNorm,
-515    classifier: candle_nn::Conv2d,
-516}
-517
-518impl SegformerDecodeHead {
-519    fn new(config: &Config, num_labels: usize, vb: VarBuilder) -> Result<Self> {
-520        let mut linear_c = Vec::with_capacity(config.num_encoder_blocks);
-521        for i in 0..config.num_encoder_blocks {
-522            let hidden_size = config.hidden_sizes[i];
-523            linear_c.push(SegformerMLP::new(
-524                config,
-525                hidden_size,
-526                vb.pp(format!("linear_c.{}", i)),
-527            )?);
-528        }
-529        let linear_fuse = conv2d_no_bias(
-530            config.decoder_hidden_size * config.num_encoder_blocks,
-531            config.decoder_hidden_size,
-532            1,
-533            Conv2dConfig::default(),
-534            vb.pp("linear_fuse"),
-535        )?;
-536        let batch_norm = candle_nn::batch_norm(
-537            config.decoder_hidden_size,
-538            config.layer_norm_eps,
-539            vb.pp("batch_norm"),
-540        )?;
-541        let classifier = conv2d_no_bias(
-542            config.decoder_hidden_size,
-543            num_labels,
-544            1,
-545            Conv2dConfig::default(),
-546            vb.pp("classifier"),
-547        )?;
-548        Ok(Self {
-549            linear_c,
-550            linear_fuse,
-551            batch_norm,
-552            classifier,
-553        })
-554    }
-555
-556    fn forward(&self, encoder_hidden_states: &[Tensor]) -> Result<Tensor> {
-557        if encoder_hidden_states.len() != self.linear_c.len() {
-558            candle::bail!(
-559                "The number of encoder hidden states {} is not equal to the number of linear layers {}",
-560                encoder_hidden_states.len(),
-561                self.linear_c.len()
-562            )
-563        }
-564        // most fine layer
-565        let (_, _, upsample_height, upsample_width) = encoder_hidden_states[0].shape().dims4()?;
-566        let mut hidden_states = Vec::with_capacity(self.linear_c.len());
-567        for (hidden_state, mlp) in encoder_hidden_states.iter().zip(&self.linear_c) {
-568            let (batch, _, height, width) = hidden_state.shape().dims4()?;
-569            let hidden_state = mlp.forward(&hidden_state.flatten_from(2)?.permute((0, 2, 1))?)?;
-570            let hidden_state = hidden_state.permute((0, 2, 1))?.reshape((
-571                batch,
-572                hidden_state.dim(2)?,
-573                height,
-574                width,
-575            ))?;
-576            let hidden_state = hidden_state.upsample_nearest2d(upsample_height, upsample_width)?;
-577            hidden_states.push(hidden_state);
-578        }
-579        hidden_states.reverse();
-580        let hidden_states = Tensor::cat(&hidden_states, 1)?;
-581        let hidden_states = self.linear_fuse.forward(&hidden_states)?;
-582        let hidden_states = self.batch_norm.forward_t(&hidden_states, false)?;
-583        let hidden_states = hidden_states.relu()?;
-584        self.classifier.forward(&hidden_states)
-585    }
-586}
-587
-588trait ModuleWithHiddenStates {
-589    fn forward(&self, xs: &Tensor) -> Result<Vec<Tensor>>;
-590}
-591
-592#[derive(Debug, Clone)]
-593pub struct SemanticSegmentationModel {
-594    segformer: SegformerModel,
-595    decode_head: SegformerDecodeHead,
-596}
-597
-598impl SemanticSegmentationModel {
-599    pub fn new(config: &Config, num_labels: usize, vb: VarBuilder) -> Result<Self> {
-600        let segformer = SegformerModel::new(config, vb.pp("segformer"))?;
-601        let decode_head = SegformerDecodeHead::new(config, num_labels, vb.pp("decode_head"))?;
-602        Ok(Self {
-603            segformer,
-604            decode_head,
-605        })
-606    }
-607}
-608
-609impl Module for SemanticSegmentationModel {
-610    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-611        let hidden_states = self.segformer.forward(x)?;
-612        self.decode_head.forward(&hidden_states)
-613    }
-614}
-615
-616#[derive(Debug, Clone)]
-617pub struct ImageClassificationModel {
-618    segformer: SegformerModel,
-619    classifier: Linear,
-620}
-621
-622impl ImageClassificationModel {
-623    pub fn new(config: &Config, num_labels: usize, vb: VarBuilder) -> Result<Self> {
-624        let segformer = SegformerModel::new(config, vb.pp("segformer"))?;
-625        let classifier = linear(config.decoder_hidden_size, num_labels, vb.pp("classifier"))?;
-626        Ok(Self {
-627            segformer,
-628            classifier,
-629        })
-630    }
-631}
-632
-633impl Module for ImageClassificationModel {
-634    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-635        let all_hidden_states = self.segformer.forward(x)?;
-636        let hidden_states = all_hidden_states.last().context("no last")?;
-637        let hidden_states = hidden_states.flatten_from(2)?.permute((0, 2, 1))?;
-638        let mean = hidden_states.mean(1)?;
-639        self.classifier.forward(&mean)
-640    }
-641}
-642
-643#[cfg(test)]
-644mod tests {
-645
-646    use super::*;
-647
-648    #[test]
-649    fn test_config_json_load() {
-650        let raw_json = r#"{
-651            "architectures": [
-652              "SegformerForImageClassification"
-653            ],
-654            "attention_probs_dropout_prob": 0.0,
-655            "classifier_dropout_prob": 0.1,
-656            "decoder_hidden_size": 256,
-657            "depths": [
-658              2,
-659              2,
-660              2,
-661              2
-662            ],
-663            "downsampling_rates": [
-664              1,
-665              4,
-666              8,
-667              16
-668            ],
-669            "drop_path_rate": 0.1,
-670            "hidden_act": "gelu",
-671            "hidden_dropout_prob": 0.0,
-672            "hidden_sizes": [
-673              32,
-674              64,
-675              160,
-676              256
-677            ],
-678            "image_size": 224,
-679            "initializer_range": 0.02,
-680            "layer_norm_eps": 1e-06,
-681            "mlp_ratios": [
-682              4,
-683              4,
-684              4,
-685              4
-686            ],
-687            "model_type": "segformer",
-688            "num_attention_heads": [
-689              1,
-690              2,
-691              5,
-692              8
-693            ],
-694            "num_channels": 3,
-695            "num_encoder_blocks": 4,
-696            "patch_sizes": [
-697              7,
-698              3,
-699              3,
-700              3
-701            ],
-702            "sr_ratios": [
-703              8,
-704              4,
-705              2,
-706              1
-707            ],
-708            "strides": [
-709              4,
-710              2,
-711              2,
-712              2
-713            ],
-714            "torch_dtype": "float32",
-715            "transformers_version": "4.12.0.dev0"
-716          }"#;
-717        let config: Config = serde_json::from_str(raw_json).unwrap();
-718        assert_eq!(vec![4, 2, 2, 2], config.strides);
-719        assert_eq!(1e-6, config.layer_norm_eps);
-720    }
-721}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/image_encoder.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/image_encoder.rs.html deleted file mode 100644 index 3e7fe2a..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/image_encoder.rs.html +++ /dev/null @@ -1,484 +0,0 @@ -image_encoder.rs - source

candle_transformers/models/segment_anything/
image_encoder.rs

1use candle::{DType, IndexOp, Result, Tensor};
-2use candle_nn::{layer_norm, LayerNorm, Module, VarBuilder};
-3
-4#[derive(Debug)]
-5struct PatchEmbed {
-6    proj: candle_nn::Conv2d,
-7    span: tracing::Span,
-8}
-9
-10impl PatchEmbed {
-11    fn new(
-12        in_chans: usize,
-13        embed_dim: usize,
-14        k_size: usize,
-15        stride: usize,
-16        padding: usize,
-17        vb: VarBuilder,
-18    ) -> Result<Self> {
-19        let cfg = candle_nn::Conv2dConfig {
-20            stride,
-21            padding,
-22            ..Default::default()
-23        };
-24        let proj = candle_nn::conv2d(in_chans, embed_dim, k_size, cfg, vb.pp("proj"))?;
-25        let span = tracing::span!(tracing::Level::TRACE, "patch-embed");
-26        Ok(Self { proj, span })
-27    }
-28}
-29
-30impl Module for PatchEmbed {
-31    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-32        let _enter = self.span.enter();
-33        xs.apply(&self.proj)?.permute((0, 2, 3, 1))
-34    }
-35}
-36
-37// A custom op to make add_decomposed_rel_pos faster. Most of the time is spent on the final
-38// addition in the case where b = 12, q_h = q_w = 4096, k_h = k_w = 4096
-39//   (attn.reshape((b, q_h, q_w, k_h, k_w))?
-40//       + rel_h.unsqueeze(4)?.broadcast_add(&rel_w.unsqueeze(3)?)?)?
-41//   .reshape((b, q_h * q_w, k_h * k_w))
-42// Ideally we would perform this operation in place but this is not supported in candle at the
-43// moment. We should also investigate using f16 rather than f32.
-44struct Add3(usize, usize, usize, usize, usize);
-45impl candle::CustomOp3 for Add3 {
-46    fn name(&self) -> &'static str {
-47        "add3"
-48    }
-49
-50    fn cpu_fwd(
-51        &self,
-52        s1: &candle::CpuStorage,
-53        l1: &candle::Layout,
-54        s2: &candle::CpuStorage,
-55        l2: &candle::Layout,
-56        s3: &candle::CpuStorage,
-57        l3: &candle::Layout,
-58    ) -> Result<(candle::CpuStorage, candle::Shape)> {
-59        use rayon::prelude::*;
-60
-61        let Add3(b, q_h, q_w, k_h, k_w) = *self;
-62        let s1 = s1.as_slice::<f32>()?;
-63        let s1 = match l1.contiguous_offsets() {
-64            None => candle::bail!("input1 has to be contiguous"),
-65            Some((o1, o2)) => &s1[o1..o2],
-66        };
-67        let s2 = s2.as_slice::<f32>()?;
-68        let s2 = match l2.contiguous_offsets() {
-69            None => candle::bail!("input2 has to be contiguous"),
-70            Some((o1, o2)) => &s2[o1..o2],
-71        };
-72        let s3 = s3.as_slice::<f32>()?;
-73        let s3 = match l3.contiguous_offsets() {
-74            None => candle::bail!("input3 has to be contiguous"),
-75            Some((o1, o2)) => &s3[o1..o2],
-76        };
-77        let mut dst = vec![0f32; b * q_h * q_w * k_h * k_w];
-78        dst.par_chunks_exact_mut(k_h * k_w)
-79            .enumerate()
-80            .for_each(|(b_idx, dst)| {
-81                let s1_idx = b_idx * k_h * k_w;
-82                let s2_idx = b_idx * k_h;
-83                let s3_idx = b_idx * k_w;
-84                for h_idx in 0..k_h {
-85                    let s1_idx = s1_idx + h_idx * k_w;
-86                    let s2_idx = s2_idx + h_idx;
-87                    let dst_idx = h_idx * k_w;
-88                    for w_idx in 0..k_w {
-89                        let s1_idx = s1_idx + w_idx;
-90                        let s3_idx = s3_idx + w_idx;
-91                        let dst_idx = dst_idx + w_idx;
-92                        dst[dst_idx] = s1[s1_idx] + s2[s2_idx] + s3[s3_idx]
-93                    }
-94                }
-95            });
-96        let dst = candle::WithDType::to_cpu_storage_owned(dst);
-97        Ok((dst, (b, q_h * q_w, k_h * k_w).into()))
-98    }
-99}
-100
-101#[derive(Debug)]
-102struct Attention {
-103    qkv: super::Linear,
-104    proj: super::Linear,
-105    num_heads: usize,
-106    scale: f64,
-107    rel_pos_hw: Option<(Tensor, Tensor)>,
-108    span: tracing::Span,
-109    span_matmul: tracing::Span,
-110    span_rel_pos: tracing::Span,
-111    span_softmax: tracing::Span,
-112}
-113
-114impl Attention {
-115    fn new(
-116        dim: usize,
-117        num_heads: usize,
-118        qkv_bias: bool,
-119        use_rel_pos: bool,
-120        input_size: (usize, usize),
-121        vb: VarBuilder,
-122    ) -> Result<Self> {
-123        let span = tracing::span!(tracing::Level::TRACE, "attention");
-124        let span_matmul = tracing::span!(tracing::Level::TRACE, "attn-matmul");
-125        let span_rel_pos = tracing::span!(tracing::Level::TRACE, "attn-rel-pos");
-126        let span_softmax = tracing::span!(tracing::Level::TRACE, "attn-sm");
-127        let qkv = super::linear(vb.pp("qkv"), dim, dim * 3, qkv_bias)?;
-128        let proj = super::linear(vb.pp("proj"), dim, dim, true)?;
-129        let head_dim = dim / num_heads;
-130        let scale = 1. / (head_dim as f64).sqrt();
-131        let rel_pos_hw = if use_rel_pos {
-132            let h = vb.get((2 * input_size.0 - 1, head_dim), "rel_pos_h")?;
-133            let w = vb.get((2 * input_size.1 - 1, head_dim), "rel_pos_w")?;
-134            Some((h, w))
-135        } else {
-136            None
-137        };
-138        Ok(Self {
-139            qkv,
-140            proj,
-141            num_heads,
-142            scale,
-143            rel_pos_hw,
-144            span,
-145            span_matmul,
-146            span_rel_pos,
-147            span_softmax,
-148        })
-149    }
-150
-151    fn add_decomposed_rel_pos(
-152        &self,
-153        attn: Tensor,
-154        q: &Tensor,
-155        (q_h, q_w): (usize, usize),
-156        (k_h, k_w): (usize, usize),
-157    ) -> Result<Tensor> {
-158        match &self.rel_pos_hw {
-159            Some((rel_pos_h, rel_pos_w)) => {
-160                let r_h = get_rel_pos(q_h, k_h, rel_pos_h)?;
-161                let r_w = get_rel_pos(q_w, k_w, rel_pos_w)?;
-162                let (b, _, dim) = q.dims3()?;
-163                let r_q = q.reshape((b, q_h, q_w, dim))?;
-164                // rel_h = torch.einsum("bhwc,hkc->bhwk", r_q, Rh)
-165                let rel_h = r_q.matmul(&r_h.broadcast_left(b)?.t()?.contiguous()?)?;
-166                // rel_w = torch.einsum("bhwc,wkc->bhwk", r_q, Rw)
-167                let rel_w = r_q
-168                    .transpose(1, 2)? // -> bwhc
-169                    .contiguous()?
-170                    .matmul(&r_w.broadcast_left(b)?.t()?.contiguous()?)? // bwhc,bwck -> bwhk
-171                    .transpose(1, 2)?
-172                    .contiguous()?;
-173                if attn.device().is_cpu() {
-174                    let op = Add3(b, q_h, q_w, k_h, k_w);
-175                    attn.apply_op3_no_bwd(&rel_h, &rel_w, &op)
-176                } else {
-177                    (attn.reshape((b, q_h, q_w, k_h, k_w))?
-178                        + rel_h.unsqueeze(4)?.broadcast_add(&rel_w.unsqueeze(3)?)?)?
-179                    .reshape((b, q_h * q_w, k_h * k_w))
-180                }
-181            }
-182            None => Ok(attn),
-183        }
-184    }
-185}
-186
-187fn get_rel_pos(q_size: usize, k_size: usize, rel_pos: &Tensor) -> Result<Tensor> {
-188    let max_rel_dist = 2 * usize::max(q_size, k_size) - 1;
-189    let dev = rel_pos.device();
-190    let rel_pos_resized = if rel_pos.dim(0)? != max_rel_dist {
-191        todo!("interpolation")
-192    } else {
-193        rel_pos
-194    };
-195    let q_coords = Tensor::arange(0u32, q_size as u32, dev)?
-196        .reshape((q_size, 1))?
-197        .to_dtype(DType::F32)?;
-198    let k_coords = Tensor::arange(0u32, k_size as u32, dev)?
-199        .reshape((1, k_size))?
-200        .to_dtype(DType::F32)?;
-201    let q_coords = (q_coords * f64::max(1f64, k_size as f64 / q_size as f64))?;
-202    let k_coords = (k_coords * f64::max(1f64, q_size as f64 / k_size as f64))?;
-203    let relative_coords = (q_coords.broadcast_sub(&k_coords)?
-204        + (k_size as f64 - 1.) * f64::max(1f64, q_size as f64 / k_size as f64))?;
-205    let (d1, d2) = relative_coords.dims2()?;
-206    let relative_coords = relative_coords.to_dtype(DType::U32)?;
-207    rel_pos_resized
-208        .index_select(&relative_coords.reshape(d1 * d2)?, 0)?
-209        .reshape((d1, d2, ()))
-210}
-211
-212impl Module for Attention {
-213    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-214        let _enter = self.span.enter();
-215        let (b, h, w, c) = xs.dims4()?;
-216        let qkv = self
-217            .qkv
-218            .forward(&xs.flatten_to(1)?)?
-219            .reshape((b, h * w, 3, self.num_heads, c / self.num_heads))?
-220            .permute((2, 0, 3, 1, 4))?
-221            .reshape((3, b * self.num_heads, h * w, c / self.num_heads))?;
-222        let q = qkv.i(0)?;
-223        let k = qkv.i(1)?;
-224        let v = qkv.i(2)?;
-225        let attn = {
-226            let _enter = self.span_matmul.enter();
-227            (&q * self.scale)?.matmul(&k.t()?)?
-228        };
-229        let attn = {
-230            let _enter = self.span_rel_pos.enter();
-231            self.add_decomposed_rel_pos(attn, &q, (h, w), (h, w))?
-232        };
-233        let attn = {
-234            let _enter = self.span_softmax.enter();
-235            candle_nn::ops::softmax_last_dim(&attn)?
-236        };
-237        let attn = {
-238            let _enter = self.span_matmul.enter();
-239            attn.matmul(&v)?
-240        };
-241        let attn = attn
-242            .reshape((b, self.num_heads, h, w, c / self.num_heads))?
-243            .permute((0, 2, 3, 1, 4))?
-244            .reshape((b, h * w, c))?;
-245        self.proj.forward(&attn)?.reshape((b, h, w, c))
-246    }
-247}
-248
-249#[derive(Debug)]
-250struct Block {
-251    norm1: LayerNorm,
-252    attn: Attention,
-253    norm2: LayerNorm,
-254    mlp: super::MlpBlock,
-255    window_size: usize,
-256    span: tracing::Span,
-257}
-258
-259impl Block {
-260    fn new(
-261        dim: usize,
-262        num_heads: usize,
-263        qkv_bias: bool,
-264        use_rel_pos: bool,
-265        window_size: usize,
-266        input_size: (usize, usize),
-267        vb: VarBuilder,
-268    ) -> Result<Self> {
-269        let norm1 = layer_norm(dim, 1e-6, vb.pp("norm1"))?;
-270        let norm2 = layer_norm(dim, 1e-6, vb.pp("norm2"))?;
-271        let input_size_attn = if window_size == 0 {
-272            input_size
-273        } else {
-274            (window_size, window_size)
-275        };
-276        let attn = Attention::new(
-277            dim,
-278            num_heads,
-279            qkv_bias,
-280            use_rel_pos,
-281            input_size_attn,
-282            vb.pp("attn"),
-283        )?;
-284        let mlp = super::MlpBlock::new(dim, dim * 4, candle_nn::Activation::Gelu, vb.pp("mlp"))?;
-285        let span = tracing::span!(tracing::Level::TRACE, "ie-block");
-286        Ok(Self {
-287            norm1,
-288            attn,
-289            norm2,
-290            mlp,
-291            window_size,
-292            span,
-293        })
-294    }
-295}
-296
-297fn window_partition(xs: Tensor, window_size: usize) -> Result<(Tensor, (usize, usize))> {
-298    let (b, h, w, c) = xs.dims4()?;
-299    let pad_h = (window_size - h % window_size) % window_size;
-300    let pad_w = (window_size - w % window_size) % window_size;
-301    let xs = if pad_h > 0 {
-302        xs.pad_with_zeros(1, 0, pad_h)?
-303    } else {
-304        xs
-305    };
-306    let xs = if pad_w > 0 {
-307        xs.pad_with_zeros(2, 0, pad_w)?
-308    } else {
-309        xs
-310    };
-311    let (h_p, w_p) = (h + pad_h, w + pad_w);
-312    let windows = xs
-313        .reshape((
-314            b,
-315            h_p / window_size,
-316            window_size,
-317            w_p / window_size,
-318            window_size,
-319            c,
-320        ))?
-321        .transpose(2, 3)?
-322        .contiguous()?
-323        .flatten_to(2)?;
-324    Ok((windows, (h_p, w_p)))
-325}
-326
-327fn window_unpartition(
-328    windows: Tensor,
-329    window_size: usize,
-330    (h_p, w_p): (usize, usize),
-331    (h, w): (usize, usize),
-332) -> Result<Tensor> {
-333    let b = windows.dim(0)? / (h_p * w_p / window_size / window_size);
-334    let xs = windows
-335        .reshape((
-336            b,
-337            h_p / window_size,
-338            w_p / window_size,
-339            window_size,
-340            window_size,
-341            windows.elem_count() / b / h_p / w_p,
-342        ))?
-343        .transpose(2, 3)?
-344        .contiguous()?
-345        .reshape((b, h_p, w_p, ()))?;
-346    let xs = if h_p > h { xs.narrow(1, 0, h)? } else { xs };
-347    let xs = if w_p > w { xs.narrow(2, 0, w)? } else { xs };
-348    Ok(xs)
-349}
-350
-351impl Module for Block {
-352    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-353        let _enter = self.span.enter();
-354        let shortcut = xs;
-355        let xs = self.norm1.forward(xs)?;
-356        let hw = (xs.dim(1)?, xs.dim(2)?);
-357        let (xs, pad_hw) = if self.window_size > 0 {
-358            window_partition(xs, self.window_size)?
-359        } else {
-360            (xs, (0, 0))
-361        };
-362        let xs = self.attn.forward(&xs)?;
-363        let xs = if self.window_size > 0 {
-364            window_unpartition(xs, self.window_size, pad_hw, hw)?
-365        } else {
-366            xs
-367        };
-368        let xs = (xs + shortcut)?;
-369        &xs + xs.apply(&self.norm2)?.apply(&self.mlp)?
-370    }
-371}
-372
-373#[derive(Debug)]
-374pub struct ImageEncoderViT {
-375    patch_embed: PatchEmbed,
-376    blocks: Vec<Block>,
-377    neck_conv1: candle_nn::Conv2d,
-378    neck_ln1: super::LayerNorm2d,
-379    neck_conv2: candle_nn::Conv2d,
-380    neck_ln2: super::LayerNorm2d,
-381    pos_embed: Option<Tensor>,
-382    span: tracing::Span,
-383}
-384
-385impl ImageEncoderViT {
-386    #[allow(clippy::too_many_arguments)]
-387    pub fn new(
-388        img_size: usize,
-389        patch_size: usize,
-390        in_chans: usize,
-391        embed_dim: usize,
-392        depth: usize,
-393        num_heads: usize,
-394        out_chans: usize,
-395        qkv_bias: bool,
-396        use_rel_pos: bool,
-397        use_abs_pos: bool,
-398        window_size: usize,
-399        global_attn_indexes: &[usize],
-400        vb: VarBuilder,
-401    ) -> Result<Self> {
-402        let patch_embed = PatchEmbed::new(
-403            in_chans,
-404            embed_dim,
-405            patch_size,
-406            patch_size,
-407            0,
-408            vb.pp("patch_embed"),
-409        )?;
-410        let mut blocks = Vec::with_capacity(depth);
-411        let vb_b = vb.pp("blocks");
-412        for i in 0..depth {
-413            let window_size = if global_attn_indexes.contains(&i) {
-414                0
-415            } else {
-416                window_size
-417            };
-418            let block = Block::new(
-419                embed_dim,
-420                num_heads,
-421                qkv_bias,
-422                use_rel_pos,
-423                window_size,
-424                (img_size / patch_size, img_size / patch_size),
-425                vb_b.pp(i),
-426            )?;
-427            blocks.push(block)
-428        }
-429        let neck_conv1 = candle_nn::conv2d_no_bias(
-430            embed_dim,
-431            out_chans,
-432            1,
-433            Default::default(),
-434            vb.pp("neck.0"),
-435        )?;
-436        let neck_ln1 = super::LayerNorm2d::new(out_chans, 1e-6, vb.pp("neck.1"))?;
-437        let cfg = candle_nn::Conv2dConfig {
-438            padding: 1,
-439            ..Default::default()
-440        };
-441        let neck_conv2 = candle_nn::conv2d_no_bias(out_chans, out_chans, 3, cfg, vb.pp("neck.2"))?;
-442        let neck_ln2 = super::LayerNorm2d::new(out_chans, 1e-6, vb.pp("neck.3"))?;
-443        let pos_embed = if use_abs_pos {
-444            let p = vb.get(
-445                (1, img_size / patch_size, img_size / patch_size, embed_dim),
-446                "pos_embed",
-447            )?;
-448            Some(p)
-449        } else {
-450            None
-451        };
-452        let span = tracing::span!(tracing::Level::TRACE, "image-encoder-vit");
-453        Ok(Self {
-454            patch_embed,
-455            blocks,
-456            neck_conv1,
-457            neck_ln1,
-458            neck_conv2,
-459            neck_ln2,
-460            pos_embed,
-461            span,
-462        })
-463    }
-464}
-465
-466impl Module for ImageEncoderViT {
-467    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-468        let _enter = self.span.enter();
-469        let xs = self.patch_embed.forward(xs)?;
-470        let mut xs = match &self.pos_embed {
-471            Some(pos_embed) => (xs + pos_embed)?,
-472            None => xs,
-473        };
-474        for block in self.blocks.iter() {
-475            xs = block.forward(&xs)?
-476        }
-477        xs.permute((0, 3, 1, 2))?
-478            .apply(&self.neck_conv1)?
-479            .apply(&self.neck_ln1)?
-480            .apply(&self.neck_conv2)?
-481            .apply(&self.neck_ln2)
-482    }
-483}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/mask_decoder.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/mask_decoder.rs.html deleted file mode 100644 index ed9e0c3..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/mask_decoder.rs.html +++ /dev/null @@ -1,240 +0,0 @@ -mask_decoder.rs - source

candle_transformers/models/segment_anything/
mask_decoder.rs

1use candle::{IndexOp, Result, Tensor};
-2use candle_nn::{Module, VarBuilder};
-3
-4use super::transformer::TwoWayTransformer;
-5
-6#[derive(Debug)]
-7struct MlpMaskDecoder {
-8    layers: Vec<super::Linear>,
-9    sigmoid_output: bool,
-10    span: tracing::Span,
-11}
-12
-13impl MlpMaskDecoder {
-14    fn new(
-15        input_dim: usize,
-16        hidden_dim: usize,
-17        output_dim: usize,
-18        num_layers: usize,
-19        sigmoid_output: bool,
-20        vb: VarBuilder,
-21    ) -> Result<Self> {
-22        let mut layers = Vec::with_capacity(num_layers);
-23        let vb = vb.pp("layers");
-24        for i in 0..num_layers {
-25            let in_dim = if i == 0 { input_dim } else { hidden_dim };
-26            let out_dim = if i + 1 == num_layers {
-27                output_dim
-28            } else {
-29                hidden_dim
-30            };
-31            let layer = super::linear(vb.pp(i), in_dim, out_dim, true)?;
-32            layers.push(layer)
-33        }
-34        let span = tracing::span!(tracing::Level::TRACE, "mlp-mask-decoder");
-35        Ok(Self {
-36            layers,
-37            sigmoid_output,
-38            span,
-39        })
-40    }
-41}
-42
-43impl Module for MlpMaskDecoder {
-44    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-45        let _enter = self.span.enter();
-46        let mut xs = xs.clone();
-47        for (i, layer) in self.layers.iter().enumerate() {
-48            xs = layer.forward(&xs)?;
-49            if i + 1 < self.layers.len() {
-50                xs = xs.relu()?
-51            }
-52        }
-53        if self.sigmoid_output {
-54            candle_nn::ops::sigmoid(&xs)
-55        } else {
-56            Ok(xs)
-57        }
-58    }
-59}
-60
-61#[derive(Debug)]
-62pub struct MaskDecoder {
-63    iou_token: candle_nn::Embedding,
-64    mask_tokens: candle_nn::Embedding,
-65    iou_prediction_head: MlpMaskDecoder,
-66    output_upscaling_conv1: candle_nn::ConvTranspose2d,
-67    output_upscaling_ln: super::LayerNorm2d,
-68    output_upscaling_conv2: candle_nn::ConvTranspose2d,
-69    num_mask_tokens: usize,
-70    output_hypernetworks_mlps: Vec<MlpMaskDecoder>,
-71    transformer: TwoWayTransformer,
-72    span: tracing::Span,
-73}
-74
-75impl MaskDecoder {
-76    pub fn new(
-77        transformer_dim: usize,
-78        num_multimask_outputs: usize,
-79        iou_head_depth: usize,
-80        iou_head_hidden_dim: usize,
-81        vb: VarBuilder,
-82    ) -> Result<Self> {
-83        let num_mask_tokens = num_multimask_outputs + 1;
-84        let iou_prediction_head = MlpMaskDecoder::new(
-85            transformer_dim,
-86            iou_head_hidden_dim,
-87            num_mask_tokens,
-88            iou_head_depth,
-89            false,
-90            vb.pp("iou_prediction_head"),
-91        )?;
-92        let iou_token = candle_nn::embedding(1, transformer_dim, vb.pp("iou_token"))?;
-93        let mask_tokens =
-94            candle_nn::embedding(num_mask_tokens, transformer_dim, vb.pp("mask_tokens"))?;
-95        let cfg = candle_nn::ConvTranspose2dConfig {
-96            stride: 2,
-97            ..Default::default()
-98        };
-99        let output_upscaling_conv1 = candle_nn::conv_transpose2d(
-100            transformer_dim,
-101            transformer_dim / 4,
-102            2,
-103            cfg,
-104            vb.pp("output_upscaling.0"),
-105        )?;
-106        let output_upscaling_ln =
-107            super::LayerNorm2d::new(transformer_dim / 4, 1e-6, vb.pp("output_upscaling.1"))?;
-108        let output_upscaling_conv2 = candle_nn::conv_transpose2d(
-109            transformer_dim / 4,
-110            transformer_dim / 8,
-111            2,
-112            cfg,
-113            vb.pp("output_upscaling.3"),
-114        )?;
-115        let mut output_hypernetworks_mlps = Vec::with_capacity(num_mask_tokens);
-116        let vb_o = vb.pp("output_hypernetworks_mlps");
-117        for i in 0..num_mask_tokens {
-118            let mlp = MlpMaskDecoder::new(
-119                transformer_dim,
-120                transformer_dim,
-121                transformer_dim / 8,
-122                3,
-123                false,
-124                vb_o.pp(i),
-125            )?;
-126            output_hypernetworks_mlps.push(mlp)
-127        }
-128        let transformer = TwoWayTransformer::new(
-129            /* depth */ 2,
-130            /* embedding_dim */ transformer_dim,
-131            /* num_heads */ 8,
-132            /* mlp_dim */ 2048,
-133            vb.pp("transformer"),
-134        )?;
-135        let span = tracing::span!(tracing::Level::TRACE, "mask-decoder");
-136        Ok(Self {
-137            iou_token,
-138            mask_tokens,
-139            iou_prediction_head,
-140            output_upscaling_conv1,
-141            output_upscaling_ln,
-142            output_upscaling_conv2,
-143            num_mask_tokens,
-144            output_hypernetworks_mlps,
-145            transformer,
-146            span,
-147        })
-148    }
-149
-150    pub fn forward(
-151        &self,
-152        image_embeddings: &Tensor,
-153        image_pe: &Tensor,
-154        sparse_prompt_embeddings: &Tensor,
-155        dense_prompt_embeddings: &Tensor,
-156        multimask_output: bool,
-157    ) -> Result<(Tensor, Tensor)> {
-158        let _enter = self.span.enter();
-159        let (masks, iou_pred) = self.predict_masks(
-160            image_embeddings,
-161            image_pe,
-162            sparse_prompt_embeddings,
-163            dense_prompt_embeddings,
-164        )?;
-165        let masks = if multimask_output {
-166            masks.i((.., 1..))?
-167        } else {
-168            masks.i((.., 0..1))?
-169        };
-170        let iou_pred = if multimask_output {
-171            iou_pred.i((.., 1..))?
-172        } else {
-173            iou_pred.i((.., 0..1))?
-174        };
-175        Ok((masks, iou_pred))
-176    }
-177
-178    fn predict_masks(
-179        &self,
-180        image_embeddings: &Tensor,
-181        image_pe: &Tensor,
-182        sparse_prompt_embeddings: &Tensor,
-183        dense_prompt_embeddings: &Tensor,
-184    ) -> Result<(Tensor, Tensor)> {
-185        // Concatenate output tokens.
-186        let output_tokens = Tensor::cat(
-187            &[self.iou_token.embeddings(), self.mask_tokens.embeddings()],
-188            0,
-189        )?;
-190        let (d1, d2) = output_tokens.dims2()?;
-191        let output_tokens =
-192            output_tokens
-193                .unsqueeze(0)?
-194                .expand((sparse_prompt_embeddings.dim(0)?, d1, d2))?;
-195        let tokens = Tensor::cat(&[&output_tokens, sparse_prompt_embeddings], 1)?;
-196
-197        // Expand per-image data in batch direction to be per mask
-198        let src = repeat_interleave(image_embeddings, tokens.dim(0)?, 0)?;
-199        let src = src.broadcast_add(dense_prompt_embeddings)?;
-200        let pos_src = repeat_interleave(image_pe, tokens.dim(0)?, 0)?;
-201        let (b, c, h, w) = src.dims4()?;
-202
-203        // Run the transformer
-204        let (hs, src) = self.transformer.forward(&src, &pos_src, &tokens)?;
-205        let iou_token_out = hs.i((.., 0))?;
-206        let mask_tokens_out = hs.i((.., 1..1 + self.num_mask_tokens))?;
-207
-208        // Upscale mask embeddings and predict masks using the masks tokens.
-209        let src = src.transpose(1, 2)?.reshape((b, c, h, w))?;
-210        let upscaled_embedding = self
-211            .output_upscaling_conv1
-212            .forward(&src)?
-213            .apply(&self.output_upscaling_ln)?
-214            .gelu()?
-215            .apply(&self.output_upscaling_conv2)?
-216            .gelu()?;
-217        let mut hyper_in_list = Vec::with_capacity(self.num_mask_tokens);
-218        for (i, mlp) in self.output_hypernetworks_mlps.iter().enumerate() {
-219            let h = mlp.forward(&mask_tokens_out.i((.., i))?)?;
-220            hyper_in_list.push(h)
-221        }
-222        let hyper_in = Tensor::stack(hyper_in_list.as_slice(), 1)?.contiguous()?;
-223        let (b, c, h, w) = upscaled_embedding.dims4()?;
-224        let masks = hyper_in.matmul(&upscaled_embedding.reshape((b, c, h * w))?)?;
-225        let masks = masks.reshape((b, (), h, w))?;
-226
-227        // Generate mask quality predictions.
-228        let iou_pred = self.iou_prediction_head.forward(&iou_token_out)?;
-229        Ok((masks, iou_pred))
-230    }
-231}
-232
-233// Equivalent to torch.repeat_interleave
-234fn repeat_interleave(img: &Tensor, repeats: usize, dim: usize) -> Result<Tensor> {
-235    let img = img.unsqueeze(dim + 1)?;
-236    let mut dims = img.dims().to_vec();
-237    dims[dim + 1] = repeats;
-238    img.broadcast_as(dims)?.flatten(dim, dim + 1)
-239}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/mod.rs.html deleted file mode 100644 index b6d4a8c..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/mod.rs.html +++ /dev/null @@ -1,118 +0,0 @@ -mod.rs - source

candle_transformers/models/segment_anything/
mod.rs

1//! Segment Anything Model (SAM)
-2//!
-3//! SAM is an architecture for image segmentation, capable of segmenting any object
-4//! in an image based on prompts like points or boxes. //! This model provides a robust and fast image segmentation pipeline that can be tweaked via
-5//! some prompting (requesting some points to be in the target mask, requesting some
-6//! points to be part of the background so _not_ in the target mask, specifying some
-7//! bounding box).
-8//!
-9//! - ⚡ [Interactive Wasm Example](https://huggingface.co/spaces/radames/candle-segment-anything-wasm)
-10//! - 💻 [GH Link](https://github.com/facebookresearch/segment-anything)
-11//! - 📝 [Paper](https://arxiv.org/abs/2304.02643)
-12//! - 💡 The default backbone can be replaced by the smaller and faster TinyViT model based on [MobileSAM](https://github.com/ChaoningZhang/MobileSAM).
-13//!
-14//!
-15//! ## Example
-16//!
-17//! ```bash
-18//! cargo run --example segment-anything --release -- \
-19//!     --image candle-examples/examples/yolo-v8/assets/bike.jpg
-20//!     --use-tiny --point 0.6,0.6 --point 0.6,0.55
-21//! ```
-22//!
-23//! <div align=center style="display: flex; justify-content: center; gap: 10px;">
-24//!   <img src="https://github.com/huggingface/candle/raw/main/candle-examples/examples/yolo-v8/assets/bike.jpg" alt="" width="30%">
-25//!   <img src="https://github.com/huggingface/candle/raw/main/candle-examples/examples/segment-anything/assets/single_pt_prompt.jpg" alt="" width="30%">
-26//!   <img src="https://github.com/huggingface/candle/raw/main/candle-examples/examples/segment-anything/assets/two_pt_prompt.jpg" alt="" width="30%">
-27//! </div>
-28//!
-29//!
-30//! > Original; Prompt with `--point 0.6,0.55`; Prompt with `--point 0.6,0.6 --point 0.6,0.55`
-31//!
-32pub use crate::models::with_tracing::Linear;
-33use candle::{Result, Tensor};
-34use candle_nn::{Module, VarBuilder};
-35
-36pub mod image_encoder;
-37pub mod mask_decoder;
-38pub mod prompt_encoder;
-39pub mod sam;
-40pub mod tiny_vit;
-41pub mod transformer;
-42
-43pub fn linear(vb: VarBuilder, in_dim: usize, out_dim: usize, bias: bool) -> Result<Linear> {
-44    if bias {
-45        crate::models::with_tracing::linear(in_dim, out_dim, vb)
-46    } else {
-47        crate::models::with_tracing::linear_no_bias(in_dim, out_dim, vb)
-48    }
-49}
-50
-51#[derive(Debug)]
-52pub struct LayerNorm2d {
-53    weight: Tensor,
-54    bias: Tensor,
-55    num_channels: usize,
-56    eps: f64,
-57}
-58
-59impl LayerNorm2d {
-60    pub fn new(num_channels: usize, eps: f64, vb: VarBuilder) -> Result<Self> {
-61        let weight = vb.get(num_channels, "weight")?;
-62        let bias = vb.get(num_channels, "bias")?;
-63        Ok(Self {
-64            weight,
-65            bias,
-66            num_channels,
-67            eps,
-68        })
-69    }
-70}
-71
-72impl Module for LayerNorm2d {
-73    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-74        let u = xs.mean_keepdim(1)?;
-75        let xs = xs.broadcast_sub(&u)?;
-76        let s = xs.sqr()?.mean_keepdim(1)?;
-77        let xs = xs.broadcast_div(&(s + self.eps)?.sqrt()?)?;
-78        xs.broadcast_mul(&self.weight.reshape((1, self.num_channels, 1, 1))?)?
-79            .broadcast_add(&self.bias.reshape((1, self.num_channels, 1, 1))?)
-80    }
-81}
-82
-83#[derive(Debug)]
-84pub struct MlpBlock {
-85    lin1: Linear,
-86    lin2: Linear,
-87    activation: candle_nn::Activation,
-88    span: tracing::Span,
-89}
-90
-91impl MlpBlock {
-92    pub fn new(
-93        embedding_dim: usize,
-94        mlp_dim: usize,
-95        activation: candle_nn::Activation,
-96        vb: VarBuilder,
-97    ) -> Result<Self> {
-98        let lin1 = linear(vb.pp("lin1"), embedding_dim, mlp_dim, true)?;
-99        let lin2 = linear(vb.pp("lin2"), mlp_dim, embedding_dim, true)?;
-100        let span = tracing::span!(tracing::Level::TRACE, "mlp-block");
-101        Ok(Self {
-102            lin1,
-103            lin2,
-104            activation,
-105            span,
-106        })
-107    }
-108}
-109
-110impl Module for MlpBlock {
-111    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-112        let _enter = self.span.enter();
-113        xs.apply(&self.lin1)?
-114            .apply(&self.activation)?
-115            .apply(&self.lin2)
-116    }
-117}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/prompt_encoder.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/prompt_encoder.rs.html deleted file mode 100644 index 870babb..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/prompt_encoder.rs.html +++ /dev/null @@ -1,241 +0,0 @@ -prompt_encoder.rs - source

candle_transformers/models/segment_anything/
prompt_encoder.rs

1use candle::{DType, IndexOp, Result, Tensor, D};
-2use candle_nn::VarBuilder;
-3
-4#[derive(Debug)]
-5struct PositionEmbeddingRandom {
-6    positional_encoding_gaussian_matrix: Tensor,
-7}
-8
-9impl PositionEmbeddingRandom {
-10    fn new(num_pos_feats: usize, vb: VarBuilder) -> Result<Self> {
-11        let positional_encoding_gaussian_matrix =
-12            vb.get((2, num_pos_feats), "positional_encoding_gaussian_matrix")?;
-13        Ok(Self {
-14            positional_encoding_gaussian_matrix,
-15        })
-16    }
-17
-18    fn pe_encoding(&self, coords: &Tensor) -> Result<Tensor> {
-19        let coords = coords.affine(2., -1.)?;
-20        let coords = coords.broadcast_matmul(&self.positional_encoding_gaussian_matrix)?;
-21        let coords = (coords * (2. * std::f64::consts::PI))?;
-22        Tensor::cat(&[coords.sin()?, coords.cos()?], D::Minus1)
-23    }
-24
-25    fn forward(&self, h: usize, w: usize) -> Result<Tensor> {
-26        let device = self.positional_encoding_gaussian_matrix.device();
-27        let x_embed = (Tensor::arange(0u32, w as u32, device)?.to_dtype(DType::F32)? + 0.5)?;
-28        let y_embed = (Tensor::arange(0u32, h as u32, device)?.to_dtype(DType::F32)? + 0.5)?;
-29        let x_embed = (x_embed / w as f64)?
-30            .reshape((1, ()))?
-31            .broadcast_as((h, w))?;
-32        let y_embed = (y_embed / h as f64)?
-33            .reshape(((), 1))?
-34            .broadcast_as((h, w))?;
-35        let coords = Tensor::stack(&[&x_embed, &y_embed], D::Minus1)?;
-36        self.pe_encoding(&coords)?.permute((2, 0, 1))
-37    }
-38
-39    fn forward_with_coords(
-40        &self,
-41        coords_input: &Tensor,
-42        image_size: (usize, usize),
-43    ) -> Result<Tensor> {
-44        let coords0 = (coords_input.narrow(D::Minus1, 0, 1)? / image_size.1 as f64)?;
-45        let coords1 = (coords_input.narrow(D::Minus1, 1, 1)? / image_size.0 as f64)?;
-46        let c = coords_input.dim(D::Minus1)?;
-47        let coords_rest = coords_input.narrow(D::Minus1, 2, c - 2)?;
-48        let coords = Tensor::cat(&[&coords0, &coords1, &coords_rest], D::Minus1)?;
-49        self.pe_encoding(&coords)
-50    }
-51}
-52
-53#[derive(Debug)]
-54pub struct PromptEncoder {
-55    pe_layer: PositionEmbeddingRandom,
-56    point_embeddings: Vec<candle_nn::Embedding>,
-57    not_a_point_embed: candle_nn::Embedding,
-58    mask_downscaling_conv1: candle_nn::Conv2d,
-59    mask_downscaling_ln1: super::LayerNorm2d,
-60    mask_downscaling_conv2: candle_nn::Conv2d,
-61    mask_downscaling_ln2: super::LayerNorm2d,
-62    mask_downscaling_conv3: candle_nn::Conv2d,
-63    no_mask_embed: candle_nn::Embedding,
-64    image_embedding_size: (usize, usize),
-65    input_image_size: (usize, usize),
-66    embed_dim: usize,
-67    span: tracing::Span,
-68}
-69
-70impl PromptEncoder {
-71    pub fn new(
-72        embed_dim: usize,
-73        image_embedding_size: (usize, usize),
-74        input_image_size: (usize, usize),
-75        mask_in_chans: usize,
-76        vb: VarBuilder,
-77    ) -> Result<Self> {
-78        let num_points_embeddings = 4;
-79        let pe_layer = PositionEmbeddingRandom::new(embed_dim / 2, vb.pp("pe_layer"))?;
-80        let not_a_point_embed = candle_nn::embedding(1, embed_dim, vb.pp("not_a_point_embed"))?;
-81        let no_mask_embed = candle_nn::embedding(1, embed_dim, vb.pp("no_mask_embed"))?;
-82        let cfg = candle_nn::Conv2dConfig {
-83            stride: 2,
-84            ..Default::default()
-85        };
-86        let mask_downscaling_conv1 =
-87            candle_nn::conv2d(1, mask_in_chans / 4, 2, cfg, vb.pp("mask_downscaling.0"))?;
-88        let mask_downscaling_conv2 = candle_nn::conv2d(
-89            mask_in_chans / 4,
-90            mask_in_chans,
-91            2,
-92            cfg,
-93            vb.pp("mask_downscaling.3"),
-94        )?;
-95        let mask_downscaling_conv3 = candle_nn::conv2d(
-96            mask_in_chans,
-97            embed_dim,
-98            1,
-99            Default::default(),
-100            vb.pp("mask_downscaling.6"),
-101        )?;
-102        let mask_downscaling_ln1 =
-103            super::LayerNorm2d::new(mask_in_chans / 4, 1e-6, vb.pp("mask_downscaling.1"))?;
-104        let mask_downscaling_ln2 =
-105            super::LayerNorm2d::new(mask_in_chans, 1e-6, vb.pp("mask_downscaling.4"))?;
-106        let mut point_embeddings = Vec::with_capacity(num_points_embeddings);
-107        let vb_e = vb.pp("point_embeddings");
-108        for i in 0..num_points_embeddings {
-109            let emb = candle_nn::embedding(1, embed_dim, vb_e.pp(i))?;
-110            point_embeddings.push(emb)
-111        }
-112        let span = tracing::span!(tracing::Level::TRACE, "prompt-encoder");
-113        Ok(Self {
-114            pe_layer,
-115            point_embeddings,
-116            not_a_point_embed,
-117            mask_downscaling_conv1,
-118            mask_downscaling_ln1,
-119            mask_downscaling_conv2,
-120            mask_downscaling_ln2,
-121            mask_downscaling_conv3,
-122            no_mask_embed,
-123            image_embedding_size,
-124            input_image_size,
-125            embed_dim,
-126            span,
-127        })
-128    }
-129
-130    pub fn get_dense_pe(&self) -> Result<Tensor> {
-131        self.pe_layer
-132            .forward(self.image_embedding_size.0, self.image_embedding_size.1)?
-133            .unsqueeze(0)
-134    }
-135
-136    fn embed_masks(&self, masks: &Tensor) -> Result<Tensor> {
-137        masks
-138            .apply(&self.mask_downscaling_conv1)?
-139            .apply(&self.mask_downscaling_ln1)?
-140            .gelu()?
-141            .apply(&self.mask_downscaling_conv2)?
-142            .apply(&self.mask_downscaling_ln2)?
-143            .gelu()?
-144            .apply(&self.mask_downscaling_conv3)
-145    }
-146
-147    fn embed_points(&self, points: &Tensor, labels: &Tensor, pad: bool) -> Result<Tensor> {
-148        let points = (points + 0.5)?;
-149        let dev = points.device();
-150        let (points, labels) = if pad {
-151            let padding_point = Tensor::zeros((points.dim(0)?, 1, 2), DType::F32, dev)?;
-152            let padding_label = (Tensor::ones((labels.dim(0)?, 1), DType::F32, dev)? * (-1f64))?;
-153            let points = Tensor::cat(&[&points, &padding_point], 1)?;
-154            let labels = Tensor::cat(&[labels, &padding_label], 1)?;
-155            (points, labels)
-156        } else {
-157            (points, labels.clone())
-158        };
-159        let point_embedding = self
-160            .pe_layer
-161            .forward_with_coords(&points, self.input_image_size)?;
-162        let labels = labels.unsqueeze(2)?.broadcast_as(point_embedding.shape())?;
-163        let zeros = point_embedding.zeros_like()?;
-164        let point_embedding = labels.lt(0f32)?.where_cond(
-165            &self
-166                .not_a_point_embed
-167                .embeddings()
-168                .broadcast_as(zeros.shape())?,
-169            &point_embedding,
-170        )?;
-171        let labels0 = labels.eq(0f32)?.where_cond(
-172            &self.point_embeddings[0]
-173                .embeddings()
-174                .broadcast_as(zeros.shape())?,
-175            &zeros,
-176        )?;
-177        let point_embedding = (point_embedding + labels0)?;
-178        let labels1 = labels.eq(1f32)?.where_cond(
-179            &self.point_embeddings[1]
-180                .embeddings()
-181                .broadcast_as(zeros.shape())?,
-182            &zeros,
-183        )?;
-184        let point_embedding = (point_embedding + labels1)?;
-185        Ok(point_embedding)
-186    }
-187
-188    fn embed_boxes(&self, boxes: &Tensor) -> Result<Tensor> {
-189        let boxes = (boxes + 0.5)?;
-190        let coords = boxes.reshape(((), 2, 2))?;
-191        let corner_embedding = self
-192            .pe_layer
-193            .forward_with_coords(&coords, self.input_image_size)?;
-194        let ce1 = corner_embedding.i((.., 0))?;
-195        let ce2 = corner_embedding.i((.., 1))?;
-196        let ce1 = (ce1 + self.point_embeddings[2].embeddings())?;
-197        let ce2 = (ce2 + self.point_embeddings[3].embeddings())?;
-198        Tensor::cat(&[&ce1, &ce2], 1)
-199    }
-200
-201    pub fn forward(
-202        &self,
-203        points: Option<(&Tensor, &Tensor)>,
-204        boxes: Option<&Tensor>,
-205        masks: Option<&Tensor>,
-206    ) -> Result<(Tensor, Tensor)> {
-207        let _enter = self.span.enter();
-208        let se_points = match points {
-209            Some((coords, labels)) => Some(self.embed_points(coords, labels, boxes.is_none())?),
-210            None => None,
-211        };
-212        let se_boxes = match boxes {
-213            Some(boxes) => Some(self.embed_boxes(boxes)?),
-214            None => None,
-215        };
-216        let sparse_embeddings = match (se_points, se_boxes) {
-217            (Some(se_points), Some(se_boxes)) => Tensor::cat(&[se_points, se_boxes], 1)?,
-218            (Some(se_points), None) => se_points,
-219            (None, Some(se_boxes)) => se_boxes,
-220            (None, None) => {
-221                let dev = self.no_mask_embed.embeddings().device();
-222                Tensor::zeros((1, 0, self.embed_dim), DType::F32, dev)?
-223            }
-224        };
-225
-226        let dense_embeddings = match masks {
-227            None => {
-228                let emb = self.no_mask_embed.embeddings();
-229                emb.reshape((1, (), 1, 1))?.expand((
-230                    1,
-231                    emb.elem_count(),
-232                    self.image_embedding_size.0,
-233                    self.image_embedding_size.1,
-234                ))?
-235            }
-236            Some(masks) => self.embed_masks(masks)?,
-237        };
-238        Ok((sparse_embeddings, dense_embeddings))
-239    }
-240}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/sam.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/sam.rs.html deleted file mode 100644 index 2cfadb4..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/sam.rs.html +++ /dev/null @@ -1,448 +0,0 @@ -sam.rs - source

candle_transformers/models/segment_anything/
sam.rs

1use candle::{DType, IndexOp, Result, Tensor};
-2use candle_nn::{Module, VarBuilder};
-3
-4use super::image_encoder::ImageEncoderViT;
-5use super::mask_decoder::MaskDecoder;
-6use super::prompt_encoder::PromptEncoder;
-7use super::tiny_vit::{tiny_vit_5m, TinyViT};
-8
-9const PROMPT_EMBED_DIM: usize = 256;
-10pub const IMAGE_SIZE: usize = 1024;
-11const VIT_PATCH_SIZE: usize = 16;
-12const PRED_IOU_THRESH: f32 = 0.88;
-13const STABILITY_SCORE_OFFSET: f32 = 1.0;
-14const STABILITY_SCORE_THRESHOLD: f32 = 0.95;
-15const MODEL_MASK_THRESHOLD: f32 = 0.0;
-16const CROP_NMS_THRESH: f32 = 0.7;
-17
-18#[derive(Debug)]
-19enum ImageEncoder {
-20    Original(ImageEncoderViT),
-21    TinyViT(TinyViT),
-22}
-23
-24impl Module for ImageEncoder {
-25    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-26        match self {
-27            Self::Original(vit) => vit.forward(xs),
-28            Self::TinyViT(vit) => vit.forward(xs),
-29        }
-30    }
-31}
-32
-33#[derive(Debug)]
-34pub struct Sam {
-35    image_encoder: ImageEncoder,
-36    prompt_encoder: PromptEncoder,
-37    mask_decoder: MaskDecoder,
-38    pixel_mean: Tensor,
-39    pixel_std: Tensor,
-40}
-41
-42impl Sam {
-43    pub fn new(
-44        encoder_embed_dim: usize,
-45        encoder_depth: usize,
-46        encoder_num_heads: usize,
-47        encoder_global_attn_indexes: &[usize],
-48        vb: VarBuilder,
-49    ) -> Result<Self> {
-50        let image_embedding_size = IMAGE_SIZE / VIT_PATCH_SIZE;
-51
-52        let image_encoder = ImageEncoderViT::new(
-53            IMAGE_SIZE,
-54            VIT_PATCH_SIZE,
-55            3,
-56            encoder_embed_dim,
-57            encoder_depth,
-58            encoder_num_heads,
-59            PROMPT_EMBED_DIM,
-60            /* qkv_bias */ true,
-61            /* use_rel_pos */ true,
-62            /* use_abs_pos */ true,
-63            /* window_size */ 14,
-64            /* global_attn_indexes */ encoder_global_attn_indexes,
-65            vb.pp("image_encoder"),
-66        )?;
-67        let prompt_encoder = PromptEncoder::new(
-68            PROMPT_EMBED_DIM,
-69            (image_embedding_size, image_embedding_size),
-70            (IMAGE_SIZE, IMAGE_SIZE),
-71            16,
-72            vb.pp("prompt_encoder"),
-73        )?;
-74        let mask_decoder = MaskDecoder::new(
-75            PROMPT_EMBED_DIM,
-76            /* num_multitask_outputs */ 3,
-77            /* iou_head_depth */ 3,
-78            /* iou_head_hidden_dim */ 256,
-79            vb.pp("mask_decoder"),
-80        )?;
-81        let pixel_mean =
-82            Tensor::new(&[123.675f32, 116.28, 103.53], vb.device())?.reshape((3, 1, 1))?;
-83        let pixel_std =
-84            Tensor::new(&[58.395f32, 57.12, 57.375], vb.device())?.reshape((3, 1, 1))?;
-85        Ok(Self {
-86            image_encoder: ImageEncoder::Original(image_encoder),
-87            prompt_encoder,
-88            mask_decoder,
-89            pixel_std,
-90            pixel_mean,
-91        })
-92    }
-93
-94    pub fn new_tiny(vb: VarBuilder) -> Result<Self> {
-95        let image_embedding_size = IMAGE_SIZE / VIT_PATCH_SIZE;
-96
-97        let image_encoder = tiny_vit_5m(vb.pp("image_encoder"))?;
-98        let prompt_encoder = PromptEncoder::new(
-99            PROMPT_EMBED_DIM,
-100            (image_embedding_size, image_embedding_size),
-101            (IMAGE_SIZE, IMAGE_SIZE),
-102            16,
-103            vb.pp("prompt_encoder"),
-104        )?;
-105        let mask_decoder = MaskDecoder::new(
-106            PROMPT_EMBED_DIM,
-107            /* num_multitask_outputs */ 3,
-108            /* iou_head_depth */ 3,
-109            /* iou_head_hidden_dim */ 256,
-110            vb.pp("mask_decoder"),
-111        )?;
-112        let pixel_mean =
-113            Tensor::new(&[123.675f32, 116.28, 103.53], vb.device())?.reshape((3, 1, 1))?;
-114        let pixel_std =
-115            Tensor::new(&[58.395f32, 57.12, 57.375], vb.device())?.reshape((3, 1, 1))?;
-116        Ok(Self {
-117            image_encoder: ImageEncoder::TinyViT(image_encoder),
-118            prompt_encoder,
-119            mask_decoder,
-120            pixel_std,
-121            pixel_mean,
-122        })
-123    }
-124
-125    pub fn embeddings(&self, img: &Tensor) -> Result<Tensor> {
-126        let img = self.preprocess(img)?.unsqueeze(0)?;
-127        self.image_encoder.forward(&img)
-128    }
-129
-130    pub fn forward(
-131        &self,
-132        img: &Tensor,
-133        points: &[(f64, f64, bool)],
-134        multimask_output: bool,
-135    ) -> Result<(Tensor, Tensor)> {
-136        let (_c, original_h, original_w) = img.dims3()?;
-137        let img = self.preprocess(img)?.unsqueeze(0)?;
-138        let img_embeddings = self.image_encoder.forward(&img)?;
-139        let (low_res_mask, iou) = self.forward_for_embeddings(
-140            &img_embeddings,
-141            original_h,
-142            original_w,
-143            points,
-144            multimask_output,
-145        )?;
-146        let mask = low_res_mask
-147            .upsample_nearest2d(IMAGE_SIZE, IMAGE_SIZE)?
-148            .get(0)?
-149            .i((.., ..original_h, ..original_w))?;
-150        Ok((mask, iou))
-151    }
-152
-153    /// Generate the mask and IOU predictions from some image embeddings and prompt.
-154    ///
-155    /// The prompt is specified as a list of points `(x, y, b)`. `x` and `y` are the point
-156    /// coordinates (between 0 and 1) and `b` is `true` for points that should be part of the mask
-157    /// and `false` for points that should be part of the background and so excluded from the mask.
-158    pub fn forward_for_embeddings(
-159        &self,
-160        img_embeddings: &Tensor,
-161        original_h: usize,
-162        original_w: usize,
-163        points: &[(f64, f64, bool)],
-164        multimask_output: bool,
-165    ) -> Result<(Tensor, Tensor)> {
-166        let image_pe = self.prompt_encoder.get_dense_pe()?;
-167        let points = if points.is_empty() {
-168            None
-169        } else {
-170            let n_points = points.len();
-171            let xys = points
-172                .iter()
-173                .flat_map(|(x, y, _b)| {
-174                    let x = (*x as f32) * (original_w as f32);
-175                    let y = (*y as f32) * (original_h as f32);
-176                    [x, y]
-177                })
-178                .collect::<Vec<_>>();
-179            let labels = points
-180                .iter()
-181                .map(|(_x, _y, b)| if *b { 1f32 } else { 0f32 })
-182                .collect::<Vec<_>>();
-183            let points = Tensor::from_vec(xys, (1, n_points, 2), img_embeddings.device())?;
-184            let labels = Tensor::from_vec(labels, (1, n_points), img_embeddings.device())?;
-185            Some((points, labels))
-186        };
-187        let points = points.as_ref().map(|xy| (&xy.0, &xy.1));
-188        let (sparse_prompt_embeddings, dense_prompt_embeddings) =
-189            self.prompt_encoder.forward(points, None, None)?;
-190        self.mask_decoder.forward(
-191            img_embeddings,
-192            &image_pe,
-193            &sparse_prompt_embeddings,
-194            &dense_prompt_embeddings,
-195            multimask_output,
-196        )
-197    }
-198
-199    pub fn unpreprocess(&self, img: &Tensor) -> Result<Tensor> {
-200        let img = img
-201            .broadcast_mul(&self.pixel_std)?
-202            .broadcast_add(&self.pixel_mean)?;
-203        img.maximum(&img.zeros_like()?)?
-204            .minimum(&(img.ones_like()? * 255.)?)
-205    }
-206
-207    pub fn preprocess(&self, img: &Tensor) -> Result<Tensor> {
-208        let (_c, h, w) = img.dims3()?;
-209        let img = img
-210            .to_dtype(DType::F32)?
-211            .broadcast_sub(&self.pixel_mean)?
-212            .broadcast_div(&self.pixel_std)?;
-213        if h > IMAGE_SIZE || w > IMAGE_SIZE {
-214            candle::bail!("image is too large ({w}, {h}), maximum size {IMAGE_SIZE}")
-215        }
-216        let img = img.pad_with_zeros(1, 0, IMAGE_SIZE - h)?;
-217        img.pad_with_zeros(2, 0, IMAGE_SIZE - w)
-218    }
-219
-220    fn process_crop(
-221        &self,
-222        img: &Tensor,
-223        cb: CropBox,
-224        point_grids: &[(f64, f64)],
-225    ) -> Result<Vec<crate::object_detection::Bbox<Tensor>>> {
-226        // Crop the image and calculate embeddings.
-227        let img = img.i((.., cb.y0..cb.y1, cb.x0..cb.x1))?;
-228        let img = self.preprocess(&img)?.unsqueeze(0)?;
-229        let img_embeddings = self.image_encoder.forward(&img)?;
-230
-231        let crop_w = cb.x1 - cb.x0;
-232        let crop_h = cb.y1 - cb.y0;
-233
-234        // Generate masks for this crop.
-235        let image_pe = self.prompt_encoder.get_dense_pe()?;
-236        let points = point_grids
-237            .iter()
-238            .map(|&(x, y)| vec![x as f32 * crop_w as f32, y as f32 * crop_h as f32])
-239            .collect::<Vec<_>>();
-240
-241        let mut bboxes = Vec::new();
-242        for points in points.chunks(64) {
-243            // Run the model on this batch.
-244            let points_len = points.len();
-245            let in_points = Tensor::new(points.to_vec(), img.device())?.unsqueeze(1)?;
-246            let in_labels = Tensor::ones((points_len, 1), DType::F32, img.device())?;
-247            let (sparse_prompt_embeddings, dense_prompt_embeddings) =
-248                self.prompt_encoder
-249                    .forward(Some((&in_points, &in_labels)), None, None)?;
-250
-251            let (low_res_mask, iou_predictions) = self.mask_decoder.forward(
-252                &img_embeddings,
-253                &image_pe,
-254                &sparse_prompt_embeddings,
-255                &dense_prompt_embeddings,
-256                /* multimask_output */ true,
-257            )?;
-258            let low_res_mask = low_res_mask.flatten(0, 1)?;
-259            let iou_predictions = iou_predictions.flatten(0, 1)?.to_vec1::<f32>()?;
-260            let dev = low_res_mask.device();
-261
-262            for (i, iou) in iou_predictions.iter().enumerate() {
-263                // Filter by predicted IoU.
-264                if *iou < PRED_IOU_THRESH {
-265                    continue;
-266                }
-267                let low_res_mask = low_res_mask.get(i)?;
-268
-269                // Calculate stability score.
-270                let bound = Tensor::new(MODEL_MASK_THRESHOLD + STABILITY_SCORE_OFFSET, dev)?
-271                    .broadcast_as(low_res_mask.shape())?;
-272                let intersections = low_res_mask
-273                    .ge(&bound)?
-274                    .to_dtype(DType::F32)?
-275                    .sum_all()?
-276                    .to_vec0::<f32>()?;
-277                let bound = Tensor::new(MODEL_MASK_THRESHOLD - STABILITY_SCORE_OFFSET, dev)?
-278                    .broadcast_as(low_res_mask.shape())?;
-279                let unions = low_res_mask
-280                    .ge(&bound)?
-281                    .to_dtype(DType::F32)?
-282                    .sum_all()?
-283                    .to_vec0::<f32>()?;
-284                let stability_score = intersections / unions;
-285                if stability_score < STABILITY_SCORE_THRESHOLD {
-286                    continue;
-287                }
-288
-289                // Threshold masks and calculate boxes.
-290                let low_res_mask = low_res_mask
-291                    .ge(&Tensor::new(0f32, dev)?.broadcast_as(low_res_mask.shape())?)?
-292                    .to_dtype(DType::U32)?;
-293                let low_res_mask_per_x = low_res_mask.sum(0)?.to_vec1::<u32>()?;
-294                let low_res_mask_per_y = low_res_mask.sum(1)?.to_vec1::<u32>()?;
-295                let min_max_x = min_max_indexes(&low_res_mask_per_x);
-296                let min_max_y = min_max_indexes(&low_res_mask_per_y);
-297                if let Some(((x0, x1), (y0, y1))) = min_max_x.zip(min_max_y) {
-298                    let bbox = crate::object_detection::Bbox {
-299                        xmin: x0 as f32,
-300                        ymin: y0 as f32,
-301                        xmax: x1 as f32,
-302                        ymax: y1 as f32,
-303                        confidence: *iou,
-304                        data: low_res_mask,
-305                    };
-306                    bboxes.push(bbox);
-307                }
-308                // TODO:
-309                // Filter boxes that touch crop boundaries
-310                // Compress to RLE.
-311            }
-312        }
-313
-314        let mut bboxes = vec![bboxes];
-315        // Remove duplicates within this crop.
-316        crate::object_detection::non_maximum_suppression(&mut bboxes, CROP_NMS_THRESH);
-317
-318        // TODO: Return to the original image frame.
-319        Ok(bboxes.remove(0))
-320    }
-321
-322    pub fn generate_masks(
-323        &self,
-324        img: &Tensor,
-325        points_per_side: usize,
-326        crop_n_layer: usize,
-327        crop_overlap_ratio: f64,
-328        crop_n_points_downscale_factor: usize,
-329    ) -> Result<Vec<crate::object_detection::Bbox<Tensor>>> {
-330        let (_c, h, w) = img.dims3()?;
-331        let point_grids = build_all_layer_point_grids(
-332            points_per_side,
-333            crop_n_layer,
-334            crop_n_points_downscale_factor,
-335        );
-336        let crop_boxes = generate_crop_boxes((h, w), crop_n_layer, crop_overlap_ratio);
-337        let mut bboxes = Vec::new();
-338        for crop_box in crop_boxes.into_iter() {
-339            let layer_idx = crop_box.layer_idx;
-340            let b = self.process_crop(img, crop_box, &point_grids[layer_idx])?;
-341            bboxes.extend(b)
-342        }
-343        // TODO: remove duplicates
-344        Ok(bboxes)
-345    }
-346}
-347
-348// Return the first and last indexes i for which values[i] > 0
-349fn min_max_indexes(values: &[u32]) -> Option<(usize, usize)> {
-350    let (mut min_i, mut max_i) = (usize::MAX, usize::MIN);
-351    for (i, &s) in values.iter().enumerate() {
-352        if s == 0 {
-353            continue;
-354        }
-355        min_i = usize::min(i, min_i);
-356        max_i = usize::max(i, max_i);
-357    }
-358    if max_i < min_i {
-359        None
-360    } else {
-361        Some((min_i, max_i))
-362    }
-363}
-364
-365#[derive(Debug)]
-366struct CropBox {
-367    x0: usize,
-368    y0: usize,
-369    x1: usize,
-370    y1: usize,
-371    layer_idx: usize,
-372}
-373
-374impl CropBox {
-375    fn new(x0: usize, y0: usize, x1: usize, y1: usize, layer_idx: usize) -> Self {
-376        Self {
-377            x0,
-378            y0,
-379            x1,
-380            y1,
-381            layer_idx,
-382        }
-383    }
-384}
-385
-386fn generate_crop_boxes(
-387    (im_h, im_w): (usize, usize),
-388    n_layers: usize,
-389    overlap_ratio: f64,
-390) -> Vec<CropBox> {
-391    fn crop_len(orig_len: usize, n_crops: usize, overlap: usize) -> usize {
-392        f64::ceil((overlap * (n_crops - 1) + orig_len) as f64 / n_crops as f64) as usize
-393    }
-394
-395    let short_side = usize::min(im_h, im_w);
-396
-397    let mut crop_boxes = Vec::new();
-398
-399    // Original image.
-400    crop_boxes.push(CropBox::new(0, 0, im_w, im_h, 0));
-401
-402    for layer_idx in 1..=n_layers {
-403        let n_crops_per_side = 1 << layer_idx;
-404        let overlap = (overlap_ratio * short_side as f64 * 2. / n_crops_per_side as f64) as usize;
-405        let crop_w = crop_len(im_w, n_crops_per_side, overlap);
-406        let crop_h = crop_len(im_w, n_crops_per_side, overlap);
-407
-408        for i_x in 0..n_crops_per_side {
-409            let x0 = (crop_w - overlap) * i_x;
-410            for i_y in 0..n_crops_per_side {
-411                let y0 = (crop_h - overlap) * i_y;
-412                let x1 = usize::min(im_w, x0 + crop_w);
-413                let y1 = usize::min(im_h, y0 + crop_h);
-414                crop_boxes.push(CropBox::new(x0, y0, x1, y1, layer_idx));
-415            }
-416        }
-417    }
-418
-419    crop_boxes
-420}
-421
-422// Generates a 2D grid of points evenly spaced in [0,1]x[0,1].
-423fn build_point_grid(n_per_side: usize) -> Vec<(f64, f64)> {
-424    let offset = 1f64 / (2 * n_per_side) as f64;
-425    let mut points = Vec::with_capacity(n_per_side * n_per_side);
-426    for i_x in 0..n_per_side {
-427        let x = offset + i_x as f64 / n_per_side as f64;
-428        for i_y in 0..n_per_side {
-429            let y = offset + i_y as f64 / n_per_side as f64;
-430            points.push((x, y))
-431        }
-432    }
-433    points
-434}
-435
-436fn build_all_layer_point_grids(
-437    n_per_side: usize,
-438    n_layers: usize,
-439    scale_per_layer: usize,
-440) -> Vec<Vec<(f64, f64)>> {
-441    let mut points_by_layer = Vec::with_capacity(n_layers + 1);
-442    for i in 0..=n_layers {
-443        let n_points = n_per_side / scale_per_layer.pow(i as u32);
-444        points_by_layer.push(build_point_grid(n_points))
-445    }
-446    points_by_layer
-447}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/tiny_vit.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/tiny_vit.rs.html deleted file mode 100644 index efc8c16..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/tiny_vit.rs.html +++ /dev/null @@ -1,634 +0,0 @@ -tiny_vit.rs - source

candle_transformers/models/segment_anything/
tiny_vit.rs

1// Adapted from:
-2// https://github.com/ChaoningZhang/MobileSAM/blob/master/mobile_sam/modeling/tiny_vit_sam.py
-3use candle::{IndexOp, Result, Tensor, D};
-4use candle_nn::{Conv2dConfig, Module, VarBuilder};
-5
-6const MBCONV_EXPAND_RATIO: usize = 4;
-7const MLP_RATIO: usize = 4;
-8const LOCAL_CONV_SIZE: usize = 3;
-9const IMG_SIZE: usize = 1024;
-10const IN_CHANNELS: usize = 3;
-11
-12#[derive(Debug)]
-13struct Conv2dBN {
-14    c: candle_nn::Conv2d,
-15    bn: candle_nn::BatchNorm,
-16    span: tracing::Span,
-17}
-18
-19impl Conv2dBN {
-20    fn new(in_: usize, out: usize, ks: usize, cfg: Conv2dConfig, vb: VarBuilder) -> Result<Self> {
-21        let c = candle_nn::conv2d_no_bias(in_, out, ks, cfg, vb.pp("c"))?;
-22        let bn = candle_nn::batch_norm(out, 1e-5, vb.pp("bn"))?;
-23        let span = tracing::span!(tracing::Level::TRACE, "conv2d-bn");
-24        Ok(Self { c, bn, span })
-25    }
-26}
-27
-28impl Module for Conv2dBN {
-29    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-30        let _enter = self.span.enter();
-31        xs.apply(&self.c)?.apply_t(&self.bn, false)
-32    }
-33}
-34
-35#[derive(Debug)]
-36struct PatchEmbed {
-37    conv1: Conv2dBN,
-38    conv2: Conv2dBN,
-39    span: tracing::Span,
-40}
-41
-42impl PatchEmbed {
-43    fn new(in_chans: usize, embed_dim: usize, vb: VarBuilder) -> Result<Self> {
-44        let cfg = candle_nn::Conv2dConfig {
-45            stride: 2,
-46            padding: 1,
-47            ..Default::default()
-48        };
-49        let conv1 = Conv2dBN::new(in_chans, embed_dim / 2, 3, cfg, vb.pp("seq.0"))?;
-50        let conv2 = Conv2dBN::new(embed_dim / 2, embed_dim, 3, cfg, vb.pp("seq.2"))?;
-51        let span = tracing::span!(tracing::Level::TRACE, "patch-embed");
-52        Ok(Self { conv1, conv2, span })
-53    }
-54}
-55
-56impl Module for PatchEmbed {
-57    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-58        let _enter = self.span.enter();
-59        xs.apply(&self.conv1)?.gelu()?.apply(&self.conv2)
-60    }
-61}
-62
-63#[derive(Debug)]
-64struct MBConv {
-65    conv1: Conv2dBN,
-66    conv2: Conv2dBN,
-67    conv3: Conv2dBN,
-68    span: tracing::Span,
-69}
-70
-71impl MBConv {
-72    fn new(in_: usize, out: usize, expand_ratio: usize, vb: VarBuilder) -> Result<Self> {
-73        let hidden = in_ * expand_ratio;
-74        let cfg2 = candle_nn::Conv2dConfig {
-75            padding: 1,
-76            groups: hidden,
-77            ..Default::default()
-78        };
-79        let conv1 = Conv2dBN::new(in_, hidden, 1, Default::default(), vb.pp("conv1"))?;
-80        let conv2 = Conv2dBN::new(hidden, hidden, 3, cfg2, vb.pp("conv2"))?;
-81        let conv3 = Conv2dBN::new(hidden, out, 1, Default::default(), vb.pp("conv3"))?;
-82        let span = tracing::span!(tracing::Level::TRACE, "mb-conv");
-83        Ok(Self {
-84            conv1,
-85            conv2,
-86            conv3,
-87            span,
-88        })
-89    }
-90}
-91
-92impl Module for MBConv {
-93    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-94        let _enter = self.span.enter();
-95        let shortcut = xs;
-96        let xs = xs
-97            .apply(&self.conv1)?
-98            .gelu()?
-99            .apply(&self.conv2)?
-100            .gelu()?
-101            .apply(&self.conv3)?;
-102        (xs + shortcut)?.gelu()
-103    }
-104}
-105
-106#[derive(Debug)]
-107struct PatchMerging {
-108    conv1: Conv2dBN,
-109    conv2: Conv2dBN,
-110    conv3: Conv2dBN,
-111    input_resolution: (usize, usize),
-112    span: tracing::Span,
-113}
-114
-115impl PatchMerging {
-116    fn new(
-117        input_resolution: (usize, usize),
-118        dim: usize,
-119        out: usize,
-120        vb: VarBuilder,
-121    ) -> Result<Self> {
-122        let stride = if [320, 448, 576].contains(&out) { 1 } else { 2 };
-123        let cfg2 = candle_nn::Conv2dConfig {
-124            padding: 1,
-125            stride,
-126            groups: out,
-127            ..Default::default()
-128        };
-129        let conv1 = Conv2dBN::new(dim, out, 1, Default::default(), vb.pp("conv1"))?;
-130        let conv2 = Conv2dBN::new(out, out, 3, cfg2, vb.pp("conv2"))?;
-131        let conv3 = Conv2dBN::new(out, out, 1, Default::default(), vb.pp("conv3"))?;
-132        let span = tracing::span!(tracing::Level::TRACE, "patch-merging");
-133        Ok(Self {
-134            conv1,
-135            conv2,
-136            conv3,
-137            input_resolution,
-138            span,
-139        })
-140    }
-141}
-142
-143impl Module for PatchMerging {
-144    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-145        let _enter = self.span.enter();
-146        let xs = if xs.rank() == 3 {
-147            let (h, w) = self.input_resolution;
-148            let b = xs.dim(0)?;
-149            xs.reshape((b, h, w, ()))?.permute((0, 3, 1, 2))?
-150        } else {
-151            xs.clone()
-152        };
-153        xs.apply(&self.conv1)?
-154            .gelu()?
-155            .apply(&self.conv2)?
-156            .gelu()?
-157            .apply(&self.conv3)?
-158            .flatten_from(2)?
-159            .transpose(1, 2)
-160    }
-161}
-162
-163#[derive(Debug)]
-164struct ConvLayer {
-165    blocks: Vec<MBConv>,
-166    downsample: Option<PatchMerging>,
-167    span: tracing::Span,
-168}
-169
-170impl ConvLayer {
-171    fn new(
-172        dim: usize,
-173        out: usize,
-174        input_resolution: (usize, usize),
-175        depth: usize,
-176        downsample: bool,
-177        conv_expand_ratio: usize,
-178        vb: VarBuilder,
-179    ) -> Result<Self> {
-180        let vb_b = vb.pp("blocks");
-181        let mut blocks = Vec::with_capacity(depth);
-182        for index in 0..depth {
-183            let block = MBConv::new(dim, dim, conv_expand_ratio, vb_b.pp(index))?;
-184            blocks.push(block)
-185        }
-186        let downsample = if downsample {
-187            let downsample = PatchMerging::new(input_resolution, dim, out, vb.pp("downsample"))?;
-188            Some(downsample)
-189        } else {
-190            None
-191        };
-192        let span = tracing::span!(tracing::Level::TRACE, "conv-layer");
-193        Ok(Self {
-194            blocks,
-195            downsample,
-196            span,
-197        })
-198    }
-199}
-200
-201impl Module for ConvLayer {
-202    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-203        let _enter = self.span.enter();
-204        let mut xs = xs.clone();
-205        for block in self.blocks.iter() {
-206            xs = block.forward(&xs)?
-207        }
-208        match &self.downsample {
-209            None => Ok(xs),
-210            Some(downsample) => downsample.forward(&xs),
-211        }
-212    }
-213}
-214
-215#[derive(Debug)]
-216struct Mlp {
-217    norm: candle_nn::LayerNorm,
-218    fc1: super::Linear,
-219    fc2: super::Linear,
-220    span: tracing::Span,
-221}
-222
-223impl Mlp {
-224    fn new(in_: usize, hidden: usize, vb: VarBuilder) -> Result<Self> {
-225        let norm = candle_nn::layer_norm(in_, 1e-5, vb.pp("norm"))?;
-226        let fc1 = super::linear(vb.pp("fc1"), in_, hidden, true)?;
-227        let fc2 = super::linear(vb.pp("fc2"), hidden, in_, true)?;
-228        let span = tracing::span!(tracing::Level::TRACE, "mlp");
-229        Ok(Self {
-230            norm,
-231            fc1,
-232            fc2,
-233            span,
-234        })
-235    }
-236}
-237
-238impl Module for Mlp {
-239    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-240        let _enter = self.span.enter();
-241        xs.apply(&self.norm)?
-242            .apply(&self.fc1)?
-243            .gelu()?
-244            .apply(&self.fc2)
-245    }
-246}
-247
-248#[derive(Debug)]
-249struct Attention {
-250    norm: candle_nn::LayerNorm,
-251    qkv: super::Linear,
-252    proj: super::Linear,
-253    ab: Tensor,
-254    key_dim: usize,
-255    num_heads: usize,
-256    d: usize,
-257    dh: usize,
-258    scale: f64,
-259    span: tracing::Span,
-260    span_matmul: tracing::Span,
-261    span_softmax: tracing::Span,
-262}
-263
-264impl Attention {
-265    fn new(
-266        dim: usize,
-267        key_dim: usize,
-268        num_heads: usize,
-269        attn_ratio: usize,
-270        resolution: (usize, usize),
-271        vb: VarBuilder,
-272    ) -> Result<Self> {
-273        let d = attn_ratio * key_dim;
-274        let dh = d * num_heads;
-275        let nh_kd = key_dim * num_heads;
-276        let h = dh + nh_kd * 2;
-277        let norm = candle_nn::layer_norm(dim, 1e-5, vb.pp("norm"))?;
-278        let qkv = super::linear(vb.pp("qkv"), dim, h, true)?;
-279        let proj = super::linear(vb.pp("proj"), dh, dim, true)?;
-280
-281        let points = (0..resolution.0)
-282            .flat_map(|x| (0..resolution.1).map(move |y| (x as i64, y as i64)))
-283            .collect::<Vec<_>>();
-284        let mut idxs = Vec::with_capacity(points.len() * points.len());
-285        let mut attention_offsets = std::collections::HashMap::new();
-286        for &(x1, y1) in points.iter() {
-287            for &(x2, y2) in points.iter() {
-288                let offset = ((x2 - x1).abs(), (y2 - y1).abs());
-289                let l = attention_offsets.len();
-290                let idx = attention_offsets.entry(offset).or_insert(l);
-291                idxs.push(*idx as u32)
-292            }
-293        }
-294        let attention_biases = vb.get((num_heads, attention_offsets.len()), "attention_biases")?;
-295        let idxs = Tensor::new(idxs, attention_biases.device())?;
-296        let ab =
-297            attention_biases
-298                .index_select(&idxs, 1)?
-299                .reshape(((), points.len(), points.len()))?;
-300        let span = tracing::span!(tracing::Level::TRACE, "attention");
-301        let span_matmul = tracing::span!(tracing::Level::TRACE, "attn-matmul");
-302        let span_softmax = tracing::span!(tracing::Level::TRACE, "attn-sm");
-303        Ok(Self {
-304            norm,
-305            qkv,
-306            proj,
-307            ab,
-308            key_dim,
-309            num_heads,
-310            d,
-311            dh,
-312            scale: 1f64 / (key_dim as f64).sqrt(),
-313            span,
-314            span_matmul,
-315            span_softmax,
-316        })
-317    }
-318}
-319
-320impl Module for Attention {
-321    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-322        let _enter = self.span.enter();
-323        let (b, n, _) = xs.dims3()?;
-324        let xs = xs.apply(&self.norm)?;
-325        let qkv = xs.apply(&self.qkv)?.reshape((b, n, self.num_heads, ()))?;
-326        let q = qkv
-327            .narrow(D::Minus1, 0, self.key_dim)?
-328            .permute((0, 2, 1, 3))?
-329            .contiguous()?;
-330        let k = qkv
-331            .narrow(D::Minus1, self.key_dim, self.key_dim)?
-332            .permute((0, 2, 1, 3))?
-333            .contiguous()?;
-334        let v = qkv
-335            .narrow(D::Minus1, 2 * self.key_dim, self.d)?
-336            .permute((0, 2, 1, 3))?
-337            .contiguous()?;
-338        let attn = {
-339            let _enter = self.span_matmul.enter();
-340            (q.matmul(&k.t()?)? * self.scale)?
-341        };
-342        let attn = attn.broadcast_add(&self.ab)?;
-343        let attn = {
-344            let _enter = self.span_softmax.enter();
-345            candle_nn::ops::softmax_last_dim(&attn)?
-346        };
-347        let attn = {
-348            let _enter = self.span_matmul.enter();
-349            attn.matmul(&v)?
-350        };
-351        attn.transpose(1, 2)?
-352            .reshape((b, n, self.dh))?
-353            .apply(&self.proj)
-354    }
-355}
-356
-357#[derive(Debug)]
-358struct TinyViTBlock {
-359    attn: Attention,
-360    local_conv: Conv2dBN,
-361    mlp: Mlp,
-362    window_size: usize,
-363    input_resolution: (usize, usize),
-364    span: tracing::Span,
-365}
-366
-367impl TinyViTBlock {
-368    fn new(
-369        dim: usize,
-370        input_resolution: (usize, usize),
-371        num_heads: usize,
-372        window_size: usize,
-373        vb: VarBuilder,
-374    ) -> Result<Self> {
-375        let head_dim = dim / num_heads;
-376        let attn = Attention::new(
-377            dim,
-378            head_dim,
-379            num_heads,
-380            1,
-381            (window_size, window_size),
-382            vb.pp("attn"),
-383        )?;
-384        let mlp = Mlp::new(dim, dim * MLP_RATIO, vb.pp("mlp"))?;
-385        let cfg = candle_nn::Conv2dConfig {
-386            padding: LOCAL_CONV_SIZE / 2,
-387            groups: dim,
-388            ..Default::default()
-389        };
-390        let local_conv = Conv2dBN::new(dim, dim, LOCAL_CONV_SIZE, cfg, vb.pp("local_conv"))?;
-391        let span = tracing::span!(tracing::Level::TRACE, "attention");
-392        Ok(Self {
-393            attn,
-394            local_conv,
-395            mlp,
-396            window_size,
-397            input_resolution,
-398            span,
-399        })
-400    }
-401}
-402
-403impl Module for TinyViTBlock {
-404    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-405        let _enter = self.span.enter();
-406        let (h, w) = self.input_resolution;
-407        let (b, l, c) = xs.dims3()?;
-408        let res_x = xs;
-409        let xs = if h == self.window_size && w == self.window_size {
-410            self.attn.forward(xs)?
-411        } else {
-412            let xs = xs.reshape((b, h, w, c))?;
-413            let pad_b = (self.window_size - h % self.window_size) % self.window_size;
-414            let pad_r = (self.window_size - w % self.window_size) % self.window_size;
-415
-416            let xs = if pad_b > 0 {
-417                xs.pad_with_zeros(1, 0, pad_b)?
-418            } else {
-419                xs
-420            };
-421            let xs = if pad_r > 0 {
-422                xs.pad_with_zeros(2, 0, pad_r)?
-423            } else {
-424                xs
-425            };
-426            let (p_h, p_w) = (h + pad_b, w + pad_r);
-427            let n_h = p_h / self.window_size;
-428            let n_w = p_w / self.window_size;
-429            let xs = xs
-430                .reshape((b, n_h, self.window_size, n_w, self.window_size, c))?
-431                .transpose(2, 3)?
-432                .reshape((b * n_h * n_w, self.window_size * self.window_size, c))?;
-433            let xs = self.attn.forward(&xs)?;
-434            let xs = xs
-435                .reshape((b, n_h, n_w, self.window_size, self.window_size, c))?
-436                .transpose(2, 3)?
-437                .reshape((b, p_h, p_w, c))?;
-438            let xs = if pad_r > 0 {
-439                xs.i((.., .., ..w))?.contiguous()?
-440            } else {
-441                xs
-442            };
-443            let xs = if pad_b > 0 {
-444                xs.i((.., ..h, ..))?.contiguous()?
-445            } else {
-446                xs
-447            };
-448            xs.reshape((b, l, c))?
-449        };
-450        let xs = (xs + res_x)?;
-451        let xs = xs
-452            .transpose(1, 2)?
-453            .reshape((b, c, h, w))?
-454            .apply(&self.local_conv)?
-455            .reshape((b, c, l))?
-456            .transpose(1, 2)?;
-457        &xs + self.mlp.forward(&xs)?
-458    }
-459}
-460
-461#[derive(Debug)]
-462struct BasicLayer {
-463    blocks: Vec<TinyViTBlock>,
-464    downsample: Option<PatchMerging>,
-465    span: tracing::Span,
-466}
-467
-468impl BasicLayer {
-469    #[allow(clippy::too_many_arguments)]
-470    fn new(
-471        dim: usize,
-472        input_resolution: (usize, usize),
-473        depth: usize,
-474        num_heads: usize,
-475        window_size: usize,
-476        downsample: bool,
-477        out: usize,
-478        vb: VarBuilder,
-479    ) -> Result<Self> {
-480        let vb_b = vb.pp("blocks");
-481        let mut blocks = Vec::with_capacity(depth);
-482        for index in 0..depth {
-483            let block = TinyViTBlock::new(
-484                dim,
-485                input_resolution,
-486                num_heads,
-487                window_size,
-488                vb_b.pp(index),
-489            )?;
-490            blocks.push(block)
-491        }
-492        let downsample = if downsample {
-493            let downsample = PatchMerging::new(input_resolution, dim, out, vb.pp("downsample"))?;
-494            Some(downsample)
-495        } else {
-496            None
-497        };
-498        let span = tracing::span!(tracing::Level::TRACE, "basic-layer");
-499        Ok(Self {
-500            blocks,
-501            downsample,
-502            span,
-503        })
-504    }
-505}
-506
-507impl Module for BasicLayer {
-508    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-509        let _enter = self.span.enter();
-510        let mut xs = xs.clone();
-511        for block in self.blocks.iter() {
-512            xs = block.forward(&xs)?
-513        }
-514        match &self.downsample {
-515            None => Ok(xs),
-516            Some(downsample) => downsample.forward(&xs),
-517        }
-518    }
-519}
-520
-521#[derive(Debug)]
-522pub struct TinyViT {
-523    patch_embed: PatchEmbed,
-524    layer0: ConvLayer,
-525    layers: Vec<BasicLayer>,
-526    // norm_head: candle_nn::LayerNorm,
-527    // head: candle_nn::Linear,
-528    neck_conv1: candle_nn::Conv2d,
-529    neck_ln1: super::LayerNorm2d,
-530    neck_conv2: candle_nn::Conv2d,
-531    neck_ln2: super::LayerNorm2d,
-532    span: tracing::Span,
-533    span_neck: tracing::Span,
-534}
-535
-536impl TinyViT {
-537    pub fn new(
-538        embed_dims: &[usize],
-539        depths: &[usize],
-540        num_heads: &[usize],
-541        window_sizes: &[usize],
-542        _num_classes: usize,
-543        vb: VarBuilder,
-544    ) -> Result<Self> {
-545        let patch_embed = PatchEmbed::new(IN_CHANNELS, embed_dims[0], vb.pp("patch_embed"))?;
-546        let patches_resolution = IMG_SIZE / 4;
-547
-548        let vb_l = vb.pp("layers");
-549        let layer0 = ConvLayer::new(
-550            /* dim */ embed_dims[0],
-551            /* out */ embed_dims[1],
-552            /* input_resolution */ (patches_resolution, patches_resolution),
-553            /* depth */ depths[0],
-554            /* downsample */ true,
-555            /* conv_expand_ratio */ MBCONV_EXPAND_RATIO,
-556            vb_l.pp(0),
-557        )?;
-558
-559        let num_layers = embed_dims.len();
-560        let mut layers = Vec::with_capacity(num_layers - 1);
-561        for i_layer in 1..num_layers {
-562            let patches_resolution = patches_resolution / (1 << usize::min(i_layer, 2));
-563            let layer = BasicLayer::new(
-564                /* dim */ embed_dims[i_layer],
-565                /* input_resolution */ (patches_resolution, patches_resolution),
-566                /* depth */ depths[i_layer],
-567                /* num_heads */ num_heads[i_layer],
-568                /* window_size */ window_sizes[i_layer],
-569                /* downsample */ i_layer < num_layers - 1,
-570                /* out */ embed_dims[usize::min(i_layer + 1, num_layers - 1)],
-571                vb_l.pp(i_layer),
-572            )?;
-573            layers.push(layer)
-574        }
-575
-576        let last_embed_dim = embed_dims[embed_dims.len() - 1];
-577        // let norm_head = candle_nn::layer_norm(last_embed_dim, 1e-5, vb.pp("norm_head"))?;
-578        // let head = candle_nn::linear(last_embed_dim, num_classes, vb.pp("head"))?;
-579        let neck_conv1 =
-580            candle_nn::conv2d_no_bias(last_embed_dim, 256, 1, Default::default(), vb.pp("neck.0"))?;
-581        let neck_ln1 = super::LayerNorm2d::new(256, 1e-6, vb.pp("neck.1"))?;
-582        let cfg = candle_nn::Conv2dConfig {
-583            padding: 1,
-584            ..Default::default()
-585        };
-586        let neck_conv2 = candle_nn::conv2d_no_bias(256, 256, 3, cfg, vb.pp("neck.2"))?;
-587        let neck_ln2 = super::LayerNorm2d::new(256, 1e-6, vb.pp("neck.3"))?;
-588
-589        let span = tracing::span!(tracing::Level::TRACE, "tiny-vit");
-590        let span_neck = tracing::span!(tracing::Level::TRACE, "neck");
-591        Ok(Self {
-592            patch_embed,
-593            layer0,
-594            layers,
-595            neck_conv1,
-596            neck_ln1,
-597            neck_conv2,
-598            neck_ln2,
-599            span,
-600            span_neck,
-601        })
-602    }
-603}
-604
-605impl Module for TinyViT {
-606    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-607        let _enter = self.span.enter();
-608        let xs = self.patch_embed.forward(xs)?;
-609        let mut xs = self.layer0.forward(&xs)?;
-610        for layer in self.layers.iter() {
-611            xs = layer.forward(&xs)?
-612        }
-613        let (b, _, c) = xs.dims3()?;
-614        let _enter = self.span_neck.enter();
-615        xs.reshape((b, 64, 64, c))?
-616            .permute((0, 3, 1, 2))?
-617            .apply(&self.neck_conv1)?
-618            .apply(&self.neck_ln1)?
-619            .apply(&self.neck_conv2)?
-620            .apply(&self.neck_ln2)
-621    }
-622}
-623
-624pub fn tiny_vit_5m(vb: VarBuilder) -> Result<TinyViT> {
-625    TinyViT::new(
-626        /* embed_dims */ &[64, 128, 160, 320],
-627        /* depths */ &[2, 2, 6, 2],
-628        /* num_heads */ &[2, 4, 5, 10],
-629        /* window_sizes */ &[7, 7, 14, 7],
-630        /* num_classes */ 1000,
-631        vb,
-632    )
-633}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/transformer.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/transformer.rs.html deleted file mode 100644 index 78d0f32..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/segment_anything/transformer.rs.html +++ /dev/null @@ -1,222 +0,0 @@ -transformer.rs - source

candle_transformers/models/segment_anything/
transformer.rs

1use candle::{Result, Tensor};
-2use candle_nn::{layer_norm, LayerNorm, Linear, Module, VarBuilder};
-3
-4#[derive(Debug)]
-5struct Attention {
-6    q_proj: Linear,
-7    k_proj: Linear,
-8    v_proj: Linear,
-9    out_proj: Linear,
-10    num_heads: usize,
-11}
-12
-13impl Attention {
-14    fn new(
-15        embedding_dim: usize,
-16        num_heads: usize,
-17        downsample_rate: usize,
-18        vb: VarBuilder,
-19    ) -> Result<Self> {
-20        let internal_dim = embedding_dim / downsample_rate;
-21        let q_proj = candle_nn::linear(embedding_dim, internal_dim, vb.pp("q_proj"))?;
-22        let k_proj = candle_nn::linear(embedding_dim, internal_dim, vb.pp("k_proj"))?;
-23        let v_proj = candle_nn::linear(embedding_dim, internal_dim, vb.pp("v_proj"))?;
-24        let out_proj = candle_nn::linear(internal_dim, embedding_dim, vb.pp("out_proj"))?;
-25        Ok(Self {
-26            q_proj,
-27            k_proj,
-28            v_proj,
-29            out_proj,
-30            num_heads,
-31        })
-32    }
-33
-34    fn separate_heads(&self, x: &Tensor) -> Result<Tensor> {
-35        let (b, n, c) = x.dims3()?;
-36        x.reshape((b, n, self.num_heads, c / self.num_heads))?
-37            .transpose(1, 2)?
-38            .contiguous()
-39    }
-40
-41    fn recombine_heads(&self, x: &Tensor) -> Result<Tensor> {
-42        let (b, n_heads, n_tokens, c_per_head) = x.dims4()?;
-43        x.transpose(1, 2)?
-44            .reshape((b, n_tokens, n_heads * c_per_head))
-45    }
-46
-47    fn forward(&self, q: &Tensor, k: &Tensor, v: &Tensor) -> Result<Tensor> {
-48        let q = self.q_proj.forward(&q.contiguous()?)?;
-49        let k = self.k_proj.forward(&k.contiguous()?)?;
-50        let v = self.v_proj.forward(&v.contiguous()?)?;
-51
-52        let q = self.separate_heads(&q)?;
-53        let k = self.separate_heads(&k)?;
-54        let v = self.separate_heads(&v)?;
-55
-56        let (_, _, _, c_per_head) = q.dims4()?;
-57        let attn = (q.matmul(&k.t()?)? / (c_per_head as f64).sqrt())?;
-58        let attn = candle_nn::ops::softmax_last_dim(&attn)?;
-59
-60        let out = attn.matmul(&v)?;
-61        self.recombine_heads(&out)?.apply(&self.out_proj)
-62    }
-63}
-64
-65#[derive(Debug)]
-66struct TwoWayAttentionBlock {
-67    self_attn: Attention,
-68    norm1: LayerNorm,
-69    cross_attn_token_to_image: Attention,
-70    norm2: LayerNorm,
-71    mlp: super::MlpBlock,
-72    norm3: LayerNorm,
-73    norm4: LayerNorm,
-74    cross_attn_image_to_token: Attention,
-75    skip_first_layer_pe: bool,
-76}
-77
-78impl TwoWayAttentionBlock {
-79    fn new(
-80        embedding_dim: usize,
-81        num_heads: usize,
-82        mlp_dim: usize,
-83        skip_first_layer_pe: bool,
-84        vb: VarBuilder,
-85    ) -> Result<Self> {
-86        let norm1 = layer_norm(embedding_dim, 1e-5, vb.pp("norm1"))?;
-87        let norm2 = layer_norm(embedding_dim, 1e-5, vb.pp("norm2"))?;
-88        let norm3 = layer_norm(embedding_dim, 1e-5, vb.pp("norm3"))?;
-89        let norm4 = layer_norm(embedding_dim, 1e-5, vb.pp("norm4"))?;
-90        let self_attn = Attention::new(embedding_dim, num_heads, 1, vb.pp("self_attn"))?;
-91        let cross_attn_token_to_image = Attention::new(
-92            embedding_dim,
-93            num_heads,
-94            2,
-95            vb.pp("cross_attn_token_to_image"),
-96        )?;
-97        let cross_attn_image_to_token = Attention::new(
-98            embedding_dim,
-99            num_heads,
-100            2,
-101            vb.pp("cross_attn_image_to_token"),
-102        )?;
-103        let mlp = super::MlpBlock::new(
-104            embedding_dim,
-105            mlp_dim,
-106            candle_nn::Activation::Relu,
-107            vb.pp("mlp"),
-108        )?;
-109        Ok(Self {
-110            self_attn,
-111            norm1,
-112            cross_attn_image_to_token,
-113            norm2,
-114            mlp,
-115            norm3,
-116            norm4,
-117            cross_attn_token_to_image,
-118            skip_first_layer_pe,
-119        })
-120    }
-121
-122    fn forward(
-123        &self,
-124        queries: &Tensor,
-125        keys: &Tensor,
-126        query_pe: &Tensor,
-127        key_pe: &Tensor,
-128    ) -> Result<(Tensor, Tensor)> {
-129        // Self attention block
-130        let queries = if self.skip_first_layer_pe {
-131            self.self_attn.forward(queries, queries, queries)?
-132        } else {
-133            let q = (queries + query_pe)?;
-134            let attn_out = self.self_attn.forward(&q, &q, queries)?;
-135            (queries + attn_out)?
-136        };
-137        let queries = self.norm1.forward(&queries)?;
-138
-139        // Cross attention block, tokens attending to image embedding
-140        let q = (&queries + query_pe)?;
-141        let k = (keys + key_pe)?;
-142        let attn_out = self.cross_attn_token_to_image.forward(&q, &k, keys)?;
-143        let queries = (&queries + attn_out)?;
-144        let queries = self.norm2.forward(&queries)?;
-145
-146        // MLP block
-147        let mlp_out = self.mlp.forward(&queries);
-148        let queries = (queries + mlp_out)?;
-149        let queries = self.norm3.forward(&queries)?;
-150
-151        // Cross attention block, image embedding attending to tokens
-152        let q = (&queries + query_pe)?;
-153        let k = (keys + key_pe)?;
-154        let attn_out = self.cross_attn_image_to_token.forward(&k, &q, &queries)?;
-155        let keys = (keys + attn_out)?;
-156        let keys = self.norm4.forward(&keys)?;
-157
-158        Ok((queries, keys))
-159    }
-160}
-161
-162#[derive(Debug)]
-163pub struct TwoWayTransformer {
-164    layers: Vec<TwoWayAttentionBlock>,
-165    final_attn_token_to_image: Attention,
-166    norm_final_attn: LayerNorm,
-167}
-168
-169impl TwoWayTransformer {
-170    pub fn new(
-171        depth: usize,
-172        embedding_dim: usize,
-173        num_heads: usize,
-174        mlp_dim: usize,
-175        vb: VarBuilder,
-176    ) -> Result<Self> {
-177        let vb_l = vb.pp("layers");
-178        let mut layers = Vec::with_capacity(depth);
-179        for i in 0..depth {
-180            let layer =
-181                TwoWayAttentionBlock::new(embedding_dim, num_heads, mlp_dim, i == 0, vb_l.pp(i))?;
-182            layers.push(layer)
-183        }
-184        let final_attn_token_to_image = Attention::new(
-185            embedding_dim,
-186            num_heads,
-187            2,
-188            vb.pp("final_attn_token_to_image"),
-189        )?;
-190        let norm_final_attn = layer_norm(embedding_dim, 1e-5, vb.pp("norm_final_attn"))?;
-191        Ok(Self {
-192            layers,
-193            final_attn_token_to_image,
-194            norm_final_attn,
-195        })
-196    }
-197
-198    pub fn forward(
-199        &self,
-200        image_embedding: &Tensor,
-201        image_pe: &Tensor,
-202        point_embedding: &Tensor,
-203    ) -> Result<(Tensor, Tensor)> {
-204        let image_embedding = image_embedding.flatten_from(2)?.permute((0, 2, 1))?;
-205        let image_pe = image_pe.flatten_from(2)?.permute((0, 2, 1))?;
-206
-207        let mut queries = point_embedding.clone();
-208        let mut keys = image_embedding;
-209
-210        for layer in self.layers.iter() {
-211            (queries, keys) = layer.forward(&queries, &keys, point_embedding, &image_pe)?
-212        }
-213
-214        let q = (&queries + point_embedding)?;
-215        let k = (&keys + image_pe)?;
-216        let attn_out = self.final_attn_token_to_image.forward(&q, &k, &keys)?;
-217        let queries = (queries + attn_out)?.apply(&self.norm_final_attn)?;
-218
-219        Ok((queries, keys))
-220    }
-221}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/siglip.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/siglip.rs.html deleted file mode 100644 index 9411552..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/siglip.rs.html +++ /dev/null @@ -1,799 +0,0 @@ -siglip.rs - source

candle_transformers/models/
siglip.rs

1//! Siglip model implementation.
-2//!
-3//! Siglip architecture combining vision and language for zero-shot tasks.
-4//!
-5//! References:
-6//! - 🤗 [Model Card](https://huggingface.co/google/siglip-base-patch16-224)
-7//!
-8
-9use crate::models::clip::div_l2_norm;
-10use candle::{IndexOp, Module, Result, Tensor, D};
-11use candle_nn::{layer_norm, linear, LayerNorm, Linear, VarBuilder};
-12
-13fn default_text_vocab_size() -> usize {
-14    32000
-15}
-16
-17fn default_text_hidden_size() -> usize {
-18    768
-19}
-20
-21fn default_text_intermediate_size() -> usize {
-22    3072
-23}
-24
-25fn default_text_num_hidden_layers() -> usize {
-26    12
-27}
-28
-29fn default_text_num_attention_heads() -> usize {
-30    12
-31}
-32
-33fn default_text_max_position_embeddings() -> usize {
-34    64
-35}
-36
-37fn default_text_layer_norm_eps() -> f64 {
-38    1e-6
-39}
-40
-41fn default_text_pad_token_id() -> u32 {
-42    1
-43}
-44
-45fn default_text_bos_token_id() -> u32 {
-46    49406
-47}
-48
-49fn default_text_eos_token_id() -> u32 {
-50    49407
-51}
-52
-53fn default_text_hidden_act() -> candle_nn::Activation {
-54    candle_nn::Activation::GeluPytorchTanh
-55}
-56
-57// https://github.com/huggingface/transformers/blob/2e24ee4dfa39cc0bc264b89edbccc373c8337086/src/transformers/models/siglip/configuration_siglip.py#L27
-58#[derive(serde::Deserialize, Clone, Debug)]
-59pub struct TextConfig {
-60    #[serde(default = "default_text_vocab_size")]
-61    pub vocab_size: usize,
-62    #[serde(default = "default_text_hidden_size")]
-63    pub hidden_size: usize,
-64    #[serde(default = "default_text_intermediate_size")]
-65    pub intermediate_size: usize,
-66    #[serde(default = "default_text_num_hidden_layers")]
-67    pub num_hidden_layers: usize,
-68    #[serde(default = "default_text_num_attention_heads")]
-69    pub num_attention_heads: usize,
-70    #[serde(default = "default_text_max_position_embeddings")]
-71    pub max_position_embeddings: usize,
-72    #[serde(default = "default_text_hidden_act")]
-73    pub hidden_act: candle_nn::Activation,
-74    #[serde(default = "default_text_layer_norm_eps")]
-75    pub layer_norm_eps: f64,
-76    #[serde(default = "default_text_pad_token_id")]
-77    pub pad_token_id: u32,
-78    #[serde(default = "default_text_bos_token_id")]
-79    pub bos_token_id: u32,
-80    #[serde(default = "default_text_eos_token_id")]
-81    pub eos_token_id: u32,
-82}
-83
-84fn default_vision_hidden_size() -> usize {
-85    768
-86}
-87
-88fn default_vision_intermediate_size() -> usize {
-89    3072
-90}
-91
-92fn default_vision_num_hidden_layers() -> usize {
-93    12
-94}
-95
-96fn default_vision_num_attention_heads() -> usize {
-97    12
-98}
-99
-100fn default_vision_num_channels() -> usize {
-101    3
-102}
-103
-104fn default_vision_image_size() -> usize {
-105    224
-106}
-107
-108fn default_vision_batch_size() -> usize {
-109    16
-110}
-111
-112fn default_vision_layer_norm_eps() -> f64 {
-113    1e-6
-114}
-115
-116fn default_vision_hidden_act() -> candle_nn::Activation {
-117    candle_nn::Activation::GeluPytorchTanh
-118}
-119
-120// https://github.com/huggingface/transformers/blob/2e24ee4dfa39cc0bc264b89edbccc373c8337086/src/transformers/models/siglip/configuration_siglip.py#L132
-121#[derive(serde::Deserialize, Clone, Debug)]
-122pub struct VisionConfig {
-123    #[serde(default = "default_vision_hidden_size")]
-124    pub hidden_size: usize,
-125    #[serde(default = "default_vision_intermediate_size")]
-126    pub intermediate_size: usize,
-127    #[serde(default = "default_vision_num_hidden_layers")]
-128    pub num_hidden_layers: usize,
-129    #[serde(default = "default_vision_num_attention_heads")]
-130    pub num_attention_heads: usize,
-131    #[serde(default = "default_vision_num_channels")]
-132    pub num_channels: usize,
-133    #[serde(default = "default_vision_image_size")]
-134    pub image_size: usize,
-135    #[serde(default = "default_vision_batch_size")]
-136    pub patch_size: usize,
-137    #[serde(default = "default_vision_hidden_act")]
-138    pub hidden_act: candle_nn::Activation,
-139    #[serde(default = "default_vision_layer_norm_eps")]
-140    pub layer_norm_eps: f64,
-141}
-142
-143trait TransformerConfig {
-144    fn hidden_size(&self) -> usize;
-145    fn intermediate_size(&self) -> usize;
-146    fn num_attention_heads(&self) -> usize;
-147    fn num_hidden_layers(&self) -> usize;
-148    fn layer_norm_eps(&self) -> f64;
-149    fn hidden_act(&self) -> candle_nn::Activation;
-150}
-151
-152impl TransformerConfig for TextConfig {
-153    fn hidden_size(&self) -> usize {
-154        self.hidden_size
-155    }
-156    fn intermediate_size(&self) -> usize {
-157        self.intermediate_size
-158    }
-159    fn num_attention_heads(&self) -> usize {
-160        self.num_attention_heads
-161    }
-162    fn num_hidden_layers(&self) -> usize {
-163        self.num_hidden_layers
-164    }
-165    fn layer_norm_eps(&self) -> f64 {
-166        self.layer_norm_eps
-167    }
-168    fn hidden_act(&self) -> candle_nn::Activation {
-169        self.hidden_act
-170    }
-171}
-172
-173impl TransformerConfig for VisionConfig {
-174    fn hidden_size(&self) -> usize {
-175        self.hidden_size
-176    }
-177    fn intermediate_size(&self) -> usize {
-178        self.intermediate_size
-179    }
-180    fn num_attention_heads(&self) -> usize {
-181        self.num_attention_heads
-182    }
-183    fn num_hidden_layers(&self) -> usize {
-184        self.num_hidden_layers
-185    }
-186    fn layer_norm_eps(&self) -> f64 {
-187        self.layer_norm_eps
-188    }
-189    fn hidden_act(&self) -> candle_nn::Activation {
-190        self.hidden_act
-191    }
-192}
-193
-194impl VisionConfig {
-195    pub fn paligemma_3b_224() -> Self {
-196        Self {
-197            // https://huggingface.co/google/paligemma-3b-pt-224/blob/main/config.json
-198            patch_size: 14,
-199            num_attention_heads: 16,
-200            num_hidden_layers: 27,
-201            hidden_size: 1152,
-202            intermediate_size: 4304,
-203            image_size: 224, // num_image_tokens: (224 / 14)^2 = 256
-204            // Default values.
-205            num_channels: 3,
-206            hidden_act: candle_nn::Activation::GeluPytorchTanh,
-207            layer_norm_eps: 1e-6,
-208        }
-209    }
-210
-211    pub fn paligemma_3b_448() -> Self {
-212        Self {
-213            // https://huggingface.co/google/paligemma-3b-pt-448/blob/main/config.json
-214            patch_size: 14,
-215            num_attention_heads: 16,
-216            num_hidden_layers: 27,
-217            hidden_size: 1152,
-218            intermediate_size: 4304,
-219            image_size: 448, // num_image_tokens: (448 / 14)^2 = 1024
-220            // Default values.
-221            num_channels: 3,
-222            hidden_act: candle_nn::Activation::GeluPytorchTanh,
-223            layer_norm_eps: 1e-6,
-224        }
-225    }
-226
-227    pub fn paligemma_3b_896() -> Self {
-228        Self {
-229            // https://huggingface.co/google/paligemma-3b-pt-448/blob/main/config.json
-230            patch_size: 14,
-231            num_attention_heads: 16,
-232            num_hidden_layers: 27,
-233            hidden_size: 1152,
-234            intermediate_size: 4304,
-235            image_size: 896, // num_image_tokens: (896 / 14)^2 = 4096
-236            // Default values.
-237            num_channels: 3,
-238            hidden_act: candle_nn::Activation::GeluPytorchTanh,
-239            layer_norm_eps: 1e-6,
-240        }
-241    }
-242
-243    pub fn num_patches(&self) -> usize {
-244        (self.image_size / self.patch_size).pow(2)
-245    }
-246}
-247
-248// https://github.com/huggingface/transformers/blob/2e24ee4dfa39cc0bc264b89edbccc373c8337086/src/transformers/models/siglip/configuration_siglip.py#L228
-249#[derive(serde::Deserialize, Clone, Debug)]
-250pub struct Config {
-251    pub text_config: TextConfig,
-252    pub vision_config: VisionConfig,
-253}
-254
-255impl Config {
-256    pub fn base_patch16_224() -> Self {
-257        let text_config = TextConfig {
-258            // https://huggingface.co/google/siglip-base-patch16-224/blob/main/config.json
-259            hidden_size: 768,
-260            intermediate_size: 3072,
-261            num_attention_heads: 12,
-262            vocab_size: 32000,
-263            // Default values.
-264            pad_token_id: 1,
-265            bos_token_id: 49406,
-266            eos_token_id: 49407,
-267            layer_norm_eps: 1e-6,
-268            hidden_act: candle_nn::Activation::GeluPytorchTanh,
-269            max_position_embeddings: 64,
-270            num_hidden_layers: 12,
-271        };
-272        let vision_config = VisionConfig {
-273            patch_size: 16,
-274            // Default values.
-275            hidden_size: 768,
-276            intermediate_size: 3072,
-277            num_hidden_layers: 12,
-278            num_attention_heads: 12,
-279            num_channels: 3,
-280            image_size: 224,
-281            hidden_act: candle_nn::Activation::GeluPytorchTanh,
-282            layer_norm_eps: 1e-6,
-283        };
-284        Self {
-285            text_config,
-286            vision_config,
-287        }
-288    }
-289}
-290
-291#[derive(Clone, Debug)]
-292struct MultiheadAttention {
-293    q_proj: Linear,
-294    k_proj: Linear,
-295    v_proj: Linear,
-296    out_proj: Linear,
-297    num_heads: usize,
-298}
-299
-300impl MultiheadAttention {
-301    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-302        let h = cfg.hidden_size;
-303        let num_heads = cfg.num_attention_heads;
-304        let w_in_proj = vb.get((3 * h, h), "in_proj_weight")?.chunk(3, 0)?;
-305        let b_in_proj = vb.get(3 * h, "in_proj_bias")?.chunk(3, 0)?;
-306        let q_proj = Linear::new(w_in_proj[0].clone(), Some(b_in_proj[0].clone()));
-307        let k_proj = Linear::new(w_in_proj[1].clone(), Some(b_in_proj[1].clone()));
-308        let v_proj = Linear::new(w_in_proj[2].clone(), Some(b_in_proj[2].clone()));
-309        let out_proj = linear(h, h, vb.pp("out_proj"))?;
-310        Ok(Self {
-311            q_proj,
-312            k_proj,
-313            v_proj,
-314            out_proj,
-315            num_heads,
-316        })
-317    }
-318
-319    fn separate_heads(&self, x: &Tensor) -> Result<Tensor> {
-320        let (b, n, c) = x.dims3()?;
-321        x.reshape((b, n, self.num_heads, c / self.num_heads))?
-322            .transpose(1, 2)?
-323            .contiguous()
-324    }
-325
-326    fn recombine_heads(&self, x: &Tensor) -> Result<Tensor> {
-327        let (b, n_heads, n_tokens, c_per_head) = x.dims4()?;
-328        x.transpose(1, 2)?
-329            .reshape((b, n_tokens, n_heads * c_per_head))
-330    }
-331
-332    fn forward(&self, q: &Tensor, k: &Tensor, v: &Tensor) -> Result<Tensor> {
-333        let q = self.q_proj.forward(&q.contiguous()?)?;
-334        let k = self.k_proj.forward(&k.contiguous()?)?;
-335        let v = self.v_proj.forward(&v.contiguous()?)?;
-336
-337        let q = self.separate_heads(&q)?;
-338        let k = self.separate_heads(&k)?;
-339        let v = self.separate_heads(&v)?;
-340
-341        let (_, _, _, c_per_head) = q.dims4()?;
-342        let attn = (q.matmul(&k.t()?)? / (c_per_head as f64).sqrt())?;
-343        let attn = candle_nn::ops::softmax_last_dim(&attn)?;
-344
-345        let out = attn.matmul(&v)?;
-346        self.recombine_heads(&out)?.apply(&self.out_proj)
-347    }
-348}
-349
-350#[derive(Debug, Clone)]
-351struct MultiheadAttentionPoolingHead {
-352    probe: Tensor,
-353    attention: MultiheadAttention,
-354    layernorm: LayerNorm,
-355    mlp: Mlp,
-356}
-357
-358impl MultiheadAttentionPoolingHead {
-359    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-360        let mlp = Mlp::new(cfg, vb.pp("mlp"))?;
-361        let layernorm = layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("layernorm"))?;
-362        let probe = vb.get((1, 1, cfg.hidden_size), "probe")?;
-363        let attention = MultiheadAttention::new(cfg, vb.pp("attention"))?;
-364        Ok(Self {
-365            probe,
-366            attention,
-367            layernorm,
-368            mlp,
-369        })
-370    }
-371}
-372
-373impl Module for MultiheadAttentionPoolingHead {
-374    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-375        let batch_size = xs.dim(0)?;
-376        let probe = self.probe.repeat((batch_size, 1, 1))?;
-377        let xs = self.attention.forward(&probe, xs, xs)?;
-378        let residual = &xs;
-379        let xs = xs.apply(&self.layernorm)?.apply(&self.mlp)?;
-380        (xs + residual)?.i((.., 0))
-381    }
-382}
-383
-384#[derive(Debug, Clone)]
-385struct Attention {
-386    q_proj: Linear,
-387    k_proj: Linear,
-388    v_proj: Linear,
-389    out_proj: Linear,
-390    num_heads: usize,
-391    head_dim: usize,
-392    scale: f64,
-393}
-394
-395impl Attention {
-396    fn new<C: TransformerConfig>(cfg: &C, vb: VarBuilder) -> Result<Self> {
-397        let embed_dim = cfg.hidden_size();
-398        let q_proj = linear(embed_dim, embed_dim, vb.pp("q_proj"))?;
-399        let k_proj = linear(embed_dim, embed_dim, vb.pp("k_proj"))?;
-400        let v_proj = linear(embed_dim, embed_dim, vb.pp("v_proj"))?;
-401        let out_proj = linear(embed_dim, embed_dim, vb.pp("out_proj"))?;
-402        let num_heads = cfg.num_attention_heads();
-403        let head_dim = embed_dim / num_heads;
-404        Ok(Self {
-405            q_proj,
-406            k_proj,
-407            v_proj,
-408            out_proj,
-409            num_heads,
-410            head_dim,
-411            scale: (head_dim as f64).powf(-0.5),
-412        })
-413    }
-414
-415    fn forward(&self, xs: &Tensor, attention_mask: Option<&Tensor>) -> Result<Tensor> {
-416        let (batch_size, q_len, _) = xs.dims3()?;
-417        let query_states = xs.apply(&self.q_proj)?;
-418        let key_states = xs.apply(&self.k_proj)?;
-419        let value_states = xs.apply(&self.v_proj)?;
-420
-421        let shape = (batch_size, q_len, self.num_heads, self.head_dim);
-422        let query_states = query_states.reshape(shape)?.transpose(1, 2)?.contiguous()?;
-423        let key_states = key_states.reshape(shape)?.transpose(1, 2)?.contiguous()?;
-424        let value_states = value_states.reshape(shape)?.transpose(1, 2)?.contiguous()?;
-425
-426        let attn_weights = (query_states.matmul(&key_states.t()?)? * self.scale)?;
-427        let attn_weights = match attention_mask {
-428            None => attn_weights,
-429            Some(mask) => attn_weights.broadcast_add(mask)?,
-430        };
-431        // The original implementation upcasts to f32 but candle_nn::ops::softmax should handle this properly.
-432        let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-433        let attn_outputs = attn_weights
-434            .matmul(&value_states)?
-435            .transpose(1, 2)?
-436            .reshape((batch_size, q_len, ()))?
-437            .apply(&self.out_proj)?;
-438        Ok(attn_outputs)
-439    }
-440}
-441
-442// https://github.com/huggingface/transformers/blob/2e24ee4dfa39cc0bc264b89edbccc373c8337086/src/transformers/models/siglip/modeling_siglip.py#L599
-443#[derive(Debug, Clone)]
-444struct Mlp {
-445    fc1: Linear,
-446    fc2: Linear,
-447    activation_fn: candle_nn::Activation,
-448}
-449
-450impl Mlp {
-451    fn new<C: TransformerConfig>(cfg: &C, vb: VarBuilder) -> Result<Self> {
-452        let hidden_size = cfg.hidden_size();
-453        let intermediate_size = cfg.intermediate_size();
-454        let fc1 = candle_nn::linear(hidden_size, intermediate_size, vb.pp("fc1"))?;
-455        let fc2 = candle_nn::linear(intermediate_size, hidden_size, vb.pp("fc2"))?;
-456        Ok(Self {
-457            fc1,
-458            fc2,
-459            activation_fn: cfg.hidden_act(),
-460        })
-461    }
-462}
-463
-464impl Module for Mlp {
-465    fn forward(&self, xs: &candle::Tensor) -> Result<candle::Tensor> {
-466        xs.apply(&self.fc1)?
-467            .apply(&self.activation_fn)?
-468            .apply(&self.fc2)
-469    }
-470}
-471
-472// https://github.com/huggingface/transformers/blob/2e24ee4dfa39cc0bc264b89edbccc373c8337086/src/transformers/models/siglip/modeling_siglip.py#L614
-473#[derive(Debug, Clone)]
-474struct EncoderLayer {
-475    self_attn: Attention,
-476    layer_norm1: LayerNorm,
-477    mlp: Mlp,
-478    layer_norm2: LayerNorm,
-479}
-480
-481impl EncoderLayer {
-482    fn new<C: TransformerConfig>(cfg: &C, vb: VarBuilder) -> Result<Self> {
-483        let hidden_size = cfg.hidden_size();
-484        let layer_norm_eps = cfg.layer_norm_eps();
-485        let self_attn = Attention::new(cfg, vb.pp("self_attn"))?;
-486        let layer_norm1 = layer_norm(hidden_size, layer_norm_eps, vb.pp("layer_norm1"))?;
-487        let mlp = Mlp::new(cfg, vb.pp("mlp"))?;
-488        let layer_norm2 = layer_norm(hidden_size, layer_norm_eps, vb.pp("layer_norm2"))?;
-489        Ok(Self {
-490            self_attn,
-491            layer_norm1,
-492            mlp,
-493            layer_norm2,
-494        })
-495    }
-496
-497    fn forward(&self, xs: &Tensor, attention_mask: Option<&Tensor>) -> Result<Tensor> {
-498        let residual = xs;
-499        let xs = xs.apply(&self.layer_norm1)?;
-500        let xs = self.self_attn.forward(&xs, attention_mask)?;
-501        let xs = (residual + xs)?;
-502        let residual = &xs;
-503        let xs = xs.apply(&self.layer_norm2)?.apply(&self.mlp)?;
-504        let xs = (xs + residual)?;
-505        Ok(xs)
-506    }
-507}
-508
-509#[derive(Debug, Clone)]
-510struct Encoder {
-511    layers: Vec<EncoderLayer>,
-512}
-513
-514impl Encoder {
-515    fn new<C: TransformerConfig>(cfg: &C, vb: VarBuilder) -> Result<Self> {
-516        let mut layers = vec![];
-517        let vb = vb.pp("layers");
-518        for layer_idx in 0..cfg.num_hidden_layers() {
-519            let layer = EncoderLayer::new(cfg, vb.pp(layer_idx))?;
-520            layers.push(layer)
-521        }
-522        Ok(Self { layers })
-523    }
-524
-525    fn forward(&self, xs: &Tensor, attention_mask: Option<&Tensor>) -> Result<Tensor> {
-526        let mut xs = xs.clone();
-527        for layer in self.layers.iter() {
-528            xs = layer.forward(&xs, attention_mask)?
-529        }
-530        Ok(xs)
-531    }
-532}
-533
-534#[derive(Debug, Clone)]
-535struct VisionEmbeddings {
-536    patch_embedding: candle_nn::Conv2d,
-537    position_embedding: Tensor,
-538    patch_size: usize,
-539    base_num_patches_per_side: usize,
-540}
-541
-542impl VisionEmbeddings {
-543    fn new(cfg: &VisionConfig, vb: VarBuilder) -> Result<Self> {
-544        let conv2d_cfg = candle_nn::Conv2dConfig {
-545            stride: cfg.patch_size,
-546            ..Default::default()
-547        };
-548        let patch_embedding = candle_nn::conv2d(
-549            cfg.num_channels,
-550            cfg.hidden_size,
-551            cfg.patch_size,
-552            conv2d_cfg,
-553            vb.pp("patch_embedding"),
-554        )?;
-555        let num_patches_per_side = cfg.image_size / cfg.patch_size;
-556        let embedder = candle_nn::embedding(
-557            num_patches_per_side.pow(2),
-558            cfg.hidden_size(),
-559            vb.pp("position_embedding"),
-560        )?;
-561        let position_embedding = embedder.embeddings();
-562        let position_embedding = position_embedding
-563            .reshape((
-564                1,
-565                num_patches_per_side,
-566                num_patches_per_side,
-567                cfg.hidden_size(),
-568            ))?
-569            .permute((0, 3, 1, 2))?;
-570        Ok(Self {
-571            patch_embedding,
-572            position_embedding,
-573            patch_size: cfg.patch_size,
-574            base_num_patches_per_side: num_patches_per_side,
-575        })
-576    }
-577}
-578
-579impl Module for VisionEmbeddings {
-580    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-581        //embed tokens
-582        let (_batch, _channels, _height, _width) = xs.dims4()?;
-583        let embeddings = xs.apply(&self.patch_embedding)?;
-584        // interpolate position embeddings for the current image size (if needed)
-585        let num_patches_h = _height / self.patch_size;
-586        let num_patches_w = _width / self.patch_size;
-587        let resized_position_embedding = if num_patches_w == self.base_num_patches_per_side
-588            && num_patches_h == self.base_num_patches_per_side
-589        {
-590            self.position_embedding.clone()
-591        } else {
-592            self.position_embedding
-593                .interpolate2d(num_patches_h, num_patches_w)?
-594        };
-595        // Add position embeddings to tokens and flatten from 2D patches to 1D sequence
-596        let embeddings = embeddings
-597            .broadcast_add(&resized_position_embedding)?
-598            .flatten_from(2)?
-599            .transpose(1, 2)?;
-600        Ok(embeddings)
-601    }
-602}
-603
-604#[derive(Debug, Clone)]
-605struct VisionTransformer {
-606    embeddings: VisionEmbeddings,
-607    encoder: Encoder,
-608    post_layernorm: LayerNorm,
-609    head: Option<MultiheadAttentionPoolingHead>,
-610}
-611
-612impl VisionTransformer {
-613    fn new(cfg: &VisionConfig, use_head: bool, vb: VarBuilder) -> Result<Self> {
-614        let embeddings = VisionEmbeddings::new(cfg, vb.pp("embeddings"))?;
-615        let encoder = Encoder::new(cfg, vb.pp("encoder"))?;
-616        let post_layernorm =
-617            layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("post_layernorm"))?;
-618        let head = if use_head {
-619            Some(MultiheadAttentionPoolingHead::new(cfg, vb.pp("head"))?)
-620        } else {
-621            None
-622        };
-623        Ok(Self {
-624            embeddings,
-625            encoder,
-626            post_layernorm,
-627            head,
-628        })
-629    }
-630}
-631
-632impl Module for VisionTransformer {
-633    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-634        let xs = xs.apply(&self.embeddings)?;
-635        let xs = self.encoder.forward(&xs, None)?;
-636        let xs = xs.apply(&self.post_layernorm)?;
-637        match self.head.as_ref() {
-638            None => Ok(xs),
-639            Some(h) => xs.apply(h),
-640        }
-641    }
-642}
-643
-644#[derive(Debug, Clone)]
-645pub struct VisionModel {
-646    vision_model: VisionTransformer,
-647}
-648
-649impl VisionModel {
-650    pub fn new(cfg: &VisionConfig, use_head: bool, vb: VarBuilder) -> Result<Self> {
-651        let vision_model = VisionTransformer::new(cfg, use_head, vb)?;
-652        Ok(Self { vision_model })
-653    }
-654}
-655
-656impl Module for VisionModel {
-657    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-658        xs.apply(&self.vision_model)
-659    }
-660}
-661
-662#[derive(Debug, Clone)]
-663struct TextEmbeddings {
-664    token_embedding: candle_nn::Embedding,
-665    position_embedding: candle_nn::Embedding,
-666    position_ids: Tensor,
-667}
-668
-669impl TextEmbeddings {
-670    fn new(cfg: &TextConfig, vb: VarBuilder) -> Result<Self> {
-671        let token_embedding =
-672            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb.pp("token_embedding"))?;
-673        let position_embedding = candle_nn::embedding(
-674            cfg.max_position_embeddings,
-675            cfg.hidden_size,
-676            vb.pp("position_embedding"),
-677        )?;
-678        let position_ids =
-679            Tensor::arange(0u32, cfg.max_position_embeddings as u32, vb.device())?.unsqueeze(0)?;
-680        Ok(Self {
-681            token_embedding,
-682            position_embedding,
-683            position_ids,
-684        })
-685    }
-686}
-687
-688impl Module for TextEmbeddings {
-689    fn forward(&self, input_ids: &Tensor) -> Result<Tensor> {
-690        let seq_length = input_ids.dim(D::Minus1)?;
-691        let inputs_embeds = self.token_embedding.forward(input_ids)?;
-692        let position_ids = self.position_ids.narrow(1, 0, seq_length)?;
-693        let position_embedding = self.position_embedding.forward(&position_ids)?;
-694        inputs_embeds.broadcast_add(&position_embedding)
-695    }
-696}
-697
-698#[derive(Debug, Clone)]
-699pub struct TextTransformer {
-700    embeddings: TextEmbeddings,
-701    encoder: Encoder,
-702    final_layer_norm: LayerNorm,
-703    pub head: Linear,
-704}
-705
-706impl TextTransformer {
-707    fn new(cfg: &TextConfig, vb: VarBuilder) -> Result<Self> {
-708        let embeddings = TextEmbeddings::new(cfg, vb.pp("embeddings"))?;
-709        let encoder = Encoder::new(cfg, vb.pp("encoder"))?;
-710        let final_layer_norm = layer_norm(
-711            cfg.hidden_size,
-712            cfg.layer_norm_eps,
-713            vb.pp("final_layer_norm"),
-714        )?;
-715        let head = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("head"))?;
-716        Ok(Self {
-717            embeddings,
-718            encoder,
-719            final_layer_norm,
-720            head,
-721        })
-722    }
-723}
-724impl Module for TextTransformer {
-725    fn forward(&self, input_ids: &Tensor) -> Result<Tensor> {
-726        let (_bsz, seq_len) = input_ids.dims2()?;
-727        let input_ids = self.embeddings.forward(input_ids)?;
-728        let input_ids = self.encoder.forward(&input_ids, None)?;
-729        let last_hidden_state = self.final_layer_norm.forward(&input_ids)?;
-730        last_hidden_state
-731            .i((.., seq_len - 1, ..))?
-732            .contiguous()?
-733            .apply(&self.head)
-734    }
-735}
-736
-737#[derive(Debug, Clone)]
-738pub struct TextModel {
-739    pub text_model: TextTransformer,
-740}
-741
-742impl TextModel {
-743    pub fn new(cfg: &TextConfig, vb: VarBuilder) -> Result<Self> {
-744        let text_model = TextTransformer::new(cfg, vb)?;
-745        Ok(Self { text_model })
-746    }
-747}
-748
-749impl Module for TextModel {
-750    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-751        xs.apply(&self.text_model)
-752    }
-753}
-754
-755#[derive(Clone, Debug)]
-756pub struct Model {
-757    text_model: TextModel,
-758    vision_model: VisionModel,
-759    logit_bias: Tensor,
-760    logit_scale: Tensor,
-761}
-762
-763impl Model {
-764    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-765        let text_model = TextModel::new(&cfg.text_config, vb.pp("text_model"))?;
-766        let vision_model = VisionModel::new(&cfg.vision_config, true, vb.pp("vision_model"))?;
-767        let logit_scale = vb.get(&[1], "logit_scale")?;
-768        let logit_bias = vb.get(&[1], "logit_bias")?;
-769        Ok(Self {
-770            text_model,
-771            vision_model,
-772            logit_bias,
-773            logit_scale,
-774        })
-775    }
-776
-777    pub fn get_text_features(&self, input_ids: &Tensor) -> Result<Tensor> {
-778        input_ids.apply(&self.text_model)
-779    }
-780
-781    pub fn get_image_features(&self, pixel_values: &Tensor) -> Result<Tensor> {
-782        pixel_values.apply(&self.vision_model)
-783    }
-784
-785    pub fn forward(&self, pixel_values: &Tensor, input_ids: &Tensor) -> Result<(Tensor, Tensor)> {
-786        let image_features = self.get_image_features(pixel_values)?;
-787        let text_features = self.get_text_features(input_ids)?;
-788        let image_features_normalized = div_l2_norm(&image_features)?;
-789        let text_features_normalized = div_l2_norm(&text_features)?;
-790        let logits_per_text = text_features_normalized.matmul(&image_features_normalized.t()?)?;
-791        let logit_scale = self.logit_scale.exp()?;
-792        let logits_per_text = logits_per_text
-793            .broadcast_mul(&logit_scale)?
-794            .broadcast_add(&self.logit_bias)?;
-795        let logits_per_image = logits_per_text.t()?;
-796        Ok((logits_per_text, logits_per_image))
-797    }
-798}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/attention.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/attention.rs.html deleted file mode 100644 index 9ae7385..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/attention.rs.html +++ /dev/null @@ -1,568 +0,0 @@ -attention.rs - source

candle_transformers/models/stable_diffusion/
attention.rs

1//! Attention Based Building Blocks
-2use candle::{DType, IndexOp, Result, Tensor, D};
-3use candle_nn as nn;
-4use candle_nn::Module;
-5
-6#[derive(Debug)]
-7struct GeGlu {
-8    proj: nn::Linear,
-9    span: tracing::Span,
-10}
-11
-12impl GeGlu {
-13    fn new(vs: nn::VarBuilder, dim_in: usize, dim_out: usize) -> Result<Self> {
-14        let proj = nn::linear(dim_in, dim_out * 2, vs.pp("proj"))?;
-15        let span = tracing::span!(tracing::Level::TRACE, "geglu");
-16        Ok(Self { proj, span })
-17    }
-18}
-19
-20impl Module for GeGlu {
-21    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-22        let _enter = self.span.enter();
-23        let hidden_states_and_gate = self.proj.forward(xs)?.chunk(2, D::Minus1)?;
-24        &hidden_states_and_gate[0] * hidden_states_and_gate[1].gelu()?
-25    }
-26}
-27
-28/// A feed-forward layer.
-29#[derive(Debug)]
-30struct FeedForward {
-31    project_in: GeGlu,
-32    linear: nn::Linear,
-33    span: tracing::Span,
-34}
-35
-36impl FeedForward {
-37    // The glu parameter in the python code is unused?
-38    // https://github.com/huggingface/diffusers/blob/d3d22ce5a894becb951eec03e663951b28d45135/src/diffusers/models/attention.py#L347
-39    /// Creates a new feed-forward layer based on some given input dimension, some
-40    /// output dimension, and a multiplier to be used for the intermediary layer.
-41    fn new(vs: nn::VarBuilder, dim: usize, dim_out: Option<usize>, mult: usize) -> Result<Self> {
-42        let inner_dim = dim * mult;
-43        let dim_out = dim_out.unwrap_or(dim);
-44        let vs = vs.pp("net");
-45        let project_in = GeGlu::new(vs.pp("0"), dim, inner_dim)?;
-46        let linear = nn::linear(inner_dim, dim_out, vs.pp("2"))?;
-47        let span = tracing::span!(tracing::Level::TRACE, "ff");
-48        Ok(Self {
-49            project_in,
-50            linear,
-51            span,
-52        })
-53    }
-54}
-55
-56impl Module for FeedForward {
-57    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-58        let _enter = self.span.enter();
-59        let xs = self.project_in.forward(xs)?;
-60        self.linear.forward(&xs)
-61    }
-62}
-63
-64#[cfg(feature = "flash-attn")]
-65fn flash_attn(
-66    q: &Tensor,
-67    k: &Tensor,
-68    v: &Tensor,
-69    softmax_scale: f32,
-70    causal: bool,
-71) -> Result<Tensor> {
-72    candle_flash_attn::flash_attn(q, k, v, softmax_scale, causal)
-73}
-74
-75#[cfg(not(feature = "flash-attn"))]
-76fn flash_attn(_: &Tensor, _: &Tensor, _: &Tensor, _: f32, _: bool) -> Result<Tensor> {
-77    unimplemented!("compile with '--features flash-attn'")
-78}
-79
-80#[derive(Debug)]
-81pub struct CrossAttention {
-82    to_q: nn::Linear,
-83    to_k: nn::Linear,
-84    to_v: nn::Linear,
-85    to_out: nn::Linear,
-86    heads: usize,
-87    scale: f64,
-88    slice_size: Option<usize>,
-89    span: tracing::Span,
-90    span_attn: tracing::Span,
-91    span_softmax: tracing::Span,
-92    use_flash_attn: bool,
-93}
-94
-95impl CrossAttention {
-96    // Defaults should be heads = 8, dim_head = 64, context_dim = None
-97    pub fn new(
-98        vs: nn::VarBuilder,
-99        query_dim: usize,
-100        context_dim: Option<usize>,
-101        heads: usize,
-102        dim_head: usize,
-103        slice_size: Option<usize>,
-104        use_flash_attn: bool,
-105    ) -> Result<Self> {
-106        let inner_dim = dim_head * heads;
-107        let context_dim = context_dim.unwrap_or(query_dim);
-108        let scale = 1.0 / f64::sqrt(dim_head as f64);
-109        let to_q = nn::linear_no_bias(query_dim, inner_dim, vs.pp("to_q"))?;
-110        let to_k = nn::linear_no_bias(context_dim, inner_dim, vs.pp("to_k"))?;
-111        let to_v = nn::linear_no_bias(context_dim, inner_dim, vs.pp("to_v"))?;
-112        let to_out = nn::linear(inner_dim, query_dim, vs.pp("to_out.0"))?;
-113        let span = tracing::span!(tracing::Level::TRACE, "xa");
-114        let span_attn = tracing::span!(tracing::Level::TRACE, "xa-attn");
-115        let span_softmax = tracing::span!(tracing::Level::TRACE, "xa-softmax");
-116        Ok(Self {
-117            to_q,
-118            to_k,
-119            to_v,
-120            to_out,
-121            heads,
-122            scale,
-123            slice_size,
-124            span,
-125            span_attn,
-126            span_softmax,
-127            use_flash_attn,
-128        })
-129    }
-130
-131    fn reshape_heads_to_batch_dim(&self, xs: &Tensor) -> Result<Tensor> {
-132        let (batch_size, seq_len, dim) = xs.dims3()?;
-133        xs.reshape((batch_size, seq_len, self.heads, dim / self.heads))?
-134            .transpose(1, 2)?
-135            .reshape((batch_size * self.heads, seq_len, dim / self.heads))
-136    }
-137
-138    fn reshape_batch_dim_to_heads(&self, xs: &Tensor) -> Result<Tensor> {
-139        let (batch_size, seq_len, dim) = xs.dims3()?;
-140        xs.reshape((batch_size / self.heads, self.heads, seq_len, dim))?
-141            .transpose(1, 2)?
-142            .reshape((batch_size / self.heads, seq_len, dim * self.heads))
-143    }
-144
-145    fn sliced_attention(
-146        &self,
-147        query: &Tensor,
-148        key: &Tensor,
-149        value: &Tensor,
-150        slice_size: usize,
-151    ) -> Result<Tensor> {
-152        let batch_size_attention = query.dim(0)?;
-153        let mut hidden_states = Vec::with_capacity(batch_size_attention / slice_size);
-154        let in_dtype = query.dtype();
-155        let query = query.to_dtype(DType::F32)?;
-156        let key = key.to_dtype(DType::F32)?;
-157        let value = value.to_dtype(DType::F32)?;
-158
-159        for i in 0..batch_size_attention / slice_size {
-160            let start_idx = i * slice_size;
-161            let end_idx = (i + 1) * slice_size;
-162
-163            let xs = query
-164                .i(start_idx..end_idx)?
-165                .matmul(&(key.i(start_idx..end_idx)?.t()? * self.scale)?)?;
-166            let xs = nn::ops::softmax(&xs, D::Minus1)?.matmul(&value.i(start_idx..end_idx)?)?;
-167            hidden_states.push(xs)
-168        }
-169        let hidden_states = Tensor::stack(&hidden_states, 0)?.to_dtype(in_dtype)?;
-170        self.reshape_batch_dim_to_heads(&hidden_states)
-171    }
-172
-173    fn attention(&self, query: &Tensor, key: &Tensor, value: &Tensor) -> Result<Tensor> {
-174        let _enter = self.span_attn.enter();
-175        let xs = if self.use_flash_attn {
-176            let init_dtype = query.dtype();
-177            let q = query
-178                .to_dtype(candle::DType::F16)?
-179                .unsqueeze(0)?
-180                .transpose(1, 2)?;
-181            let k = key
-182                .to_dtype(candle::DType::F16)?
-183                .unsqueeze(0)?
-184                .transpose(1, 2)?;
-185            let v = value
-186                .to_dtype(candle::DType::F16)?
-187                .unsqueeze(0)?
-188                .transpose(1, 2)?;
-189            flash_attn(&q, &k, &v, self.scale as f32, false)?
-190                .transpose(1, 2)?
-191                .squeeze(0)?
-192                .to_dtype(init_dtype)?
-193        } else {
-194            let in_dtype = query.dtype();
-195            let query = query.to_dtype(DType::F32)?;
-196            let key = key.to_dtype(DType::F32)?;
-197            let value = value.to_dtype(DType::F32)?;
-198            let xs = query.matmul(&(key.t()? * self.scale)?)?;
-199            let xs = {
-200                let _enter = self.span_softmax.enter();
-201                nn::ops::softmax_last_dim(&xs)?
-202            };
-203            xs.matmul(&value)?.to_dtype(in_dtype)?
-204        };
-205        self.reshape_batch_dim_to_heads(&xs)
-206    }
-207
-208    pub fn forward(&self, xs: &Tensor, context: Option<&Tensor>) -> Result<Tensor> {
-209        let _enter = self.span.enter();
-210        let query = self.to_q.forward(xs)?;
-211        let context = context.unwrap_or(xs).contiguous()?;
-212        let key = self.to_k.forward(&context)?;
-213        let value = self.to_v.forward(&context)?;
-214        let query = self.reshape_heads_to_batch_dim(&query)?;
-215        let key = self.reshape_heads_to_batch_dim(&key)?;
-216        let value = self.reshape_heads_to_batch_dim(&value)?;
-217        let dim0 = query.dim(0)?;
-218        let slice_size = self.slice_size.and_then(|slice_size| {
-219            if dim0 < slice_size {
-220                None
-221            } else {
-222                Some(slice_size)
-223            }
-224        });
-225        let xs = match slice_size {
-226            None => self.attention(&query, &key, &value)?,
-227            Some(slice_size) => self.sliced_attention(&query, &key, &value, slice_size)?,
-228        };
-229        self.to_out.forward(&xs)
-230    }
-231}
-232
-233/// A basic Transformer block.
-234#[derive(Debug)]
-235struct BasicTransformerBlock {
-236    attn1: CrossAttention,
-237    ff: FeedForward,
-238    attn2: CrossAttention,
-239    norm1: nn::LayerNorm,
-240    norm2: nn::LayerNorm,
-241    norm3: nn::LayerNorm,
-242    span: tracing::Span,
-243}
-244
-245impl BasicTransformerBlock {
-246    fn new(
-247        vs: nn::VarBuilder,
-248        dim: usize,
-249        n_heads: usize,
-250        d_head: usize,
-251        context_dim: Option<usize>,
-252        sliced_attention_size: Option<usize>,
-253        use_flash_attn: bool,
-254    ) -> Result<Self> {
-255        let attn1 = CrossAttention::new(
-256            vs.pp("attn1"),
-257            dim,
-258            None,
-259            n_heads,
-260            d_head,
-261            sliced_attention_size,
-262            use_flash_attn,
-263        )?;
-264        let ff = FeedForward::new(vs.pp("ff"), dim, None, 4)?;
-265        let attn2 = CrossAttention::new(
-266            vs.pp("attn2"),
-267            dim,
-268            context_dim,
-269            n_heads,
-270            d_head,
-271            sliced_attention_size,
-272            use_flash_attn,
-273        )?;
-274        let norm1 = nn::layer_norm(dim, 1e-5, vs.pp("norm1"))?;
-275        let norm2 = nn::layer_norm(dim, 1e-5, vs.pp("norm2"))?;
-276        let norm3 = nn::layer_norm(dim, 1e-5, vs.pp("norm3"))?;
-277        let span = tracing::span!(tracing::Level::TRACE, "basic-transformer");
-278        Ok(Self {
-279            attn1,
-280            ff,
-281            attn2,
-282            norm1,
-283            norm2,
-284            norm3,
-285            span,
-286        })
-287    }
-288
-289    fn forward(&self, xs: &Tensor, context: Option<&Tensor>) -> Result<Tensor> {
-290        let _enter = self.span.enter();
-291        let xs = (self.attn1.forward(&self.norm1.forward(xs)?, None)? + xs)?;
-292        let xs = (self.attn2.forward(&self.norm2.forward(&xs)?, context)? + xs)?;
-293        self.ff.forward(&self.norm3.forward(&xs)?)? + xs
-294    }
-295}
-296
-297#[derive(Debug, Clone, Copy)]
-298pub struct SpatialTransformerConfig {
-299    pub depth: usize,
-300    pub num_groups: usize,
-301    pub context_dim: Option<usize>,
-302    pub sliced_attention_size: Option<usize>,
-303    pub use_linear_projection: bool,
-304}
-305
-306impl Default for SpatialTransformerConfig {
-307    fn default() -> Self {
-308        Self {
-309            depth: 1,
-310            num_groups: 32,
-311            context_dim: None,
-312            sliced_attention_size: None,
-313            use_linear_projection: false,
-314        }
-315    }
-316}
-317
-318#[derive(Debug)]
-319enum Proj {
-320    Conv2d(nn::Conv2d),
-321    Linear(nn::Linear),
-322}
-323
-324// Aka Transformer2DModel
-325#[derive(Debug)]
-326pub struct SpatialTransformer {
-327    norm: nn::GroupNorm,
-328    proj_in: Proj,
-329    transformer_blocks: Vec<BasicTransformerBlock>,
-330    proj_out: Proj,
-331    span: tracing::Span,
-332    pub config: SpatialTransformerConfig,
-333}
-334
-335impl SpatialTransformer {
-336    pub fn new(
-337        vs: nn::VarBuilder,
-338        in_channels: usize,
-339        n_heads: usize,
-340        d_head: usize,
-341        use_flash_attn: bool,
-342        config: SpatialTransformerConfig,
-343    ) -> Result<Self> {
-344        let inner_dim = n_heads * d_head;
-345        let norm = nn::group_norm(config.num_groups, in_channels, 1e-6, vs.pp("norm"))?;
-346        let proj_in = if config.use_linear_projection {
-347            Proj::Linear(nn::linear(in_channels, inner_dim, vs.pp("proj_in"))?)
-348        } else {
-349            Proj::Conv2d(nn::conv2d(
-350                in_channels,
-351                inner_dim,
-352                1,
-353                Default::default(),
-354                vs.pp("proj_in"),
-355            )?)
-356        };
-357        let mut transformer_blocks = vec![];
-358        let vs_tb = vs.pp("transformer_blocks");
-359        for index in 0..config.depth {
-360            let tb = BasicTransformerBlock::new(
-361                vs_tb.pp(index.to_string()),
-362                inner_dim,
-363                n_heads,
-364                d_head,
-365                config.context_dim,
-366                config.sliced_attention_size,
-367                use_flash_attn,
-368            )?;
-369            transformer_blocks.push(tb)
-370        }
-371        let proj_out = if config.use_linear_projection {
-372            Proj::Linear(nn::linear(in_channels, inner_dim, vs.pp("proj_out"))?)
-373        } else {
-374            Proj::Conv2d(nn::conv2d(
-375                inner_dim,
-376                in_channels,
-377                1,
-378                Default::default(),
-379                vs.pp("proj_out"),
-380            )?)
-381        };
-382        let span = tracing::span!(tracing::Level::TRACE, "spatial-transformer");
-383        Ok(Self {
-384            norm,
-385            proj_in,
-386            transformer_blocks,
-387            proj_out,
-388            span,
-389            config,
-390        })
-391    }
-392
-393    pub fn forward(&self, xs: &Tensor, context: Option<&Tensor>) -> Result<Tensor> {
-394        let _enter = self.span.enter();
-395        let (batch, _channel, height, weight) = xs.dims4()?;
-396        let residual = xs;
-397        let xs = self.norm.forward(xs)?;
-398        let (inner_dim, xs) = match &self.proj_in {
-399            Proj::Conv2d(p) => {
-400                let xs = p.forward(&xs)?;
-401                let inner_dim = xs.dim(1)?;
-402                let xs = xs
-403                    .transpose(1, 2)?
-404                    .t()?
-405                    .reshape((batch, height * weight, inner_dim))?;
-406                (inner_dim, xs)
-407            }
-408            Proj::Linear(p) => {
-409                let inner_dim = xs.dim(1)?;
-410                let xs = xs
-411                    .transpose(1, 2)?
-412                    .t()?
-413                    .reshape((batch, height * weight, inner_dim))?;
-414                (inner_dim, p.forward(&xs)?)
-415            }
-416        };
-417        let mut xs = xs;
-418        for block in self.transformer_blocks.iter() {
-419            xs = block.forward(&xs, context)?
-420        }
-421        let xs = match &self.proj_out {
-422            Proj::Conv2d(p) => p.forward(
-423                &xs.reshape((batch, height, weight, inner_dim))?
-424                    .t()?
-425                    .transpose(1, 2)?,
-426            )?,
-427            Proj::Linear(p) => p
-428                .forward(&xs)?
-429                .reshape((batch, height, weight, inner_dim))?
-430                .t()?
-431                .transpose(1, 2)?,
-432        };
-433        xs + residual
-434    }
-435}
-436
-437/// Configuration for an attention block.
-438#[derive(Debug, Clone, Copy)]
-439pub struct AttentionBlockConfig {
-440    pub num_head_channels: Option<usize>,
-441    pub num_groups: usize,
-442    pub rescale_output_factor: f64,
-443    pub eps: f64,
-444}
-445
-446impl Default for AttentionBlockConfig {
-447    fn default() -> Self {
-448        Self {
-449            num_head_channels: None,
-450            num_groups: 32,
-451            rescale_output_factor: 1.,
-452            eps: 1e-5,
-453        }
-454    }
-455}
-456
-457#[derive(Debug)]
-458pub struct AttentionBlock {
-459    group_norm: nn::GroupNorm,
-460    query: nn::Linear,
-461    key: nn::Linear,
-462    value: nn::Linear,
-463    proj_attn: nn::Linear,
-464    channels: usize,
-465    num_heads: usize,
-466    span: tracing::Span,
-467    config: AttentionBlockConfig,
-468}
-469
-470// In the .safetensor weights of official Stable Diffusion 3 Medium Huggingface repo
-471// https://huggingface.co/stabilityai/stable-diffusion-3-medium
-472// Linear layer may use a different dimension for the weight in the linear, which is
-473// incompatible with the current implementation of the nn::linear constructor.
-474// This is a workaround to handle the different dimensions.
-475fn get_qkv_linear(channels: usize, vs: nn::VarBuilder) -> Result<nn::Linear> {
-476    match vs.get((channels, channels), "weight") {
-477        Ok(_) => nn::linear(channels, channels, vs),
-478        Err(_) => {
-479            let weight = vs
-480                .get((channels, channels, 1, 1), "weight")?
-481                .reshape((channels, channels))?;
-482            let bias = vs.get((channels,), "bias")?;
-483            Ok(nn::Linear::new(weight, Some(bias)))
-484        }
-485    }
-486}
-487
-488impl AttentionBlock {
-489    pub fn new(vs: nn::VarBuilder, channels: usize, config: AttentionBlockConfig) -> Result<Self> {
-490        let num_head_channels = config.num_head_channels.unwrap_or(channels);
-491        let num_heads = channels / num_head_channels;
-492        let group_norm =
-493            nn::group_norm(config.num_groups, channels, config.eps, vs.pp("group_norm"))?;
-494        let (q_path, k_path, v_path, out_path) = if vs.contains_tensor("to_q.weight") {
-495            ("to_q", "to_k", "to_v", "to_out.0")
-496        } else {
-497            ("query", "key", "value", "proj_attn")
-498        };
-499        let query = get_qkv_linear(channels, vs.pp(q_path))?;
-500        let key = get_qkv_linear(channels, vs.pp(k_path))?;
-501        let value = get_qkv_linear(channels, vs.pp(v_path))?;
-502        let proj_attn = get_qkv_linear(channels, vs.pp(out_path))?;
-503        let span = tracing::span!(tracing::Level::TRACE, "attn-block");
-504        Ok(Self {
-505            group_norm,
-506            query,
-507            key,
-508            value,
-509            proj_attn,
-510            channels,
-511            num_heads,
-512            span,
-513            config,
-514        })
-515    }
-516
-517    fn transpose_for_scores(&self, xs: Tensor) -> Result<Tensor> {
-518        let (batch, t, h_times_d) = xs.dims3()?;
-519        xs.reshape((batch, t, self.num_heads, h_times_d / self.num_heads))?
-520            .transpose(1, 2)
-521    }
-522}
-523
-524impl Module for AttentionBlock {
-525    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-526        let _enter = self.span.enter();
-527        let in_dtype = xs.dtype();
-528        let residual = xs;
-529        let (batch, channel, height, width) = xs.dims4()?;
-530        let xs = self
-531            .group_norm
-532            .forward(xs)?
-533            .reshape((batch, channel, height * width))?
-534            .transpose(1, 2)?;
-535
-536        let query_proj = self.query.forward(&xs)?;
-537        let key_proj = self.key.forward(&xs)?;
-538        let value_proj = self.value.forward(&xs)?;
-539
-540        let query_states = self
-541            .transpose_for_scores(query_proj)?
-542            .to_dtype(DType::F32)?;
-543        let key_states = self.transpose_for_scores(key_proj)?.to_dtype(DType::F32)?;
-544        let value_states = self
-545            .transpose_for_scores(value_proj)?
-546            .to_dtype(DType::F32)?;
-547
-548        // scale is applied twice, hence the -0.25 here rather than -0.5.
-549        // https://github.com/huggingface/diffusers/blob/d3d22ce5a894becb951eec03e663951b28d45135/src/diffusers/models/attention.py#L87
-550        let scale = f64::powf(self.channels as f64 / self.num_heads as f64, -0.25);
-551        let attention_scores = (query_states * scale)?.matmul(&(key_states.t()? * scale)?)?;
-552        let attention_probs = nn::ops::softmax(&attention_scores, D::Minus1)?;
-553
-554        // TODO: revert the call to force_contiguous once the three matmul kernels have been
-555        // adapted to handle layout with some dims set to 1.
-556        let xs = attention_probs.matmul(&value_states)?;
-557        let xs = xs.to_dtype(in_dtype)?;
-558        let xs = xs.transpose(1, 2)?.contiguous()?;
-559        let xs = xs.flatten_from(D::Minus2)?;
-560        let xs = self
-561            .proj_attn
-562            .forward(&xs)?
-563            .t()?
-564            .reshape((batch, channel, height, width))?;
-565        (xs + residual)? / self.config.rescale_output_factor
-566    }
-567}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/clip.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/clip.rs.html deleted file mode 100644 index 8160b16..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/clip.rs.html +++ /dev/null @@ -1,429 +0,0 @@ -clip.rs - source

candle_transformers/models/stable_diffusion/
clip.rs

1//! Contrastive Language-Image Pre-Training
-2//!
-3//! Contrastive Language-Image Pre-Training (CLIP) is an architecture trained on
-4//! pairs of images with related texts.
-5//!
-6//! - [CLIP](https://github.com/openai/CLIP)
-7use candle::{DType, Device, Result, Tensor, D};
-8use candle_nn as nn;
-9use candle_nn::Module;
-10
-11#[derive(Debug, Clone, Copy)]
-12pub enum Activation {
-13    QuickGelu,
-14    Gelu,
-15    GeluErf,
-16}
-17
-18impl Module for Activation {
-19    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-20        match self {
-21            Activation::QuickGelu => xs * nn::ops::sigmoid(&(xs * 1.702f64)?)?,
-22            Activation::Gelu => xs.gelu(),
-23            Activation::GeluErf => xs.gelu_erf(),
-24        }
-25    }
-26}
-27
-28#[derive(Debug, Clone)]
-29pub struct Config {
-30    vocab_size: usize,
-31    embed_dim: usize,       // aka config.hidden_size
-32    activation: Activation, // aka config.hidden_act
-33    intermediate_size: usize,
-34    pub max_position_embeddings: usize,
-35    // The character to use for padding, use EOS when not set.
-36    pub pad_with: Option<String>,
-37    num_hidden_layers: usize,
-38    num_attention_heads: usize,
-39    #[allow(dead_code)]
-40    projection_dim: usize,
-41}
-42
-43impl Config {
-44    // The config details can be found in the "text_config" section of this json file:
-45    // https://huggingface.co/openai/clip-vit-large-patch14/blob/main/config.json
-46    pub fn v1_5() -> Self {
-47        Self {
-48            vocab_size: 49408,
-49            embed_dim: 768,
-50            intermediate_size: 3072,
-51            max_position_embeddings: 77,
-52            pad_with: None,
-53            num_hidden_layers: 12,
-54            num_attention_heads: 12,
-55            projection_dim: 768,
-56            activation: Activation::QuickGelu,
-57        }
-58    }
-59
-60    // https://huggingface.co/stabilityai/stable-diffusion-2-1/blob/main/text_encoder/config.json
-61    pub fn v2_1() -> Self {
-62        Self {
-63            vocab_size: 49408,
-64            embed_dim: 1024,
-65            intermediate_size: 4096,
-66            max_position_embeddings: 77,
-67            pad_with: Some("!".to_string()),
-68            num_hidden_layers: 23,
-69            num_attention_heads: 16,
-70            projection_dim: 512,
-71            activation: Activation::Gelu,
-72        }
-73    }
-74
-75    // https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/text_encoder/config.json
-76    pub fn sdxl() -> Self {
-77        Self {
-78            vocab_size: 49408,
-79            embed_dim: 768,
-80            intermediate_size: 3072,
-81            max_position_embeddings: 77,
-82            pad_with: Some("!".to_string()),
-83            num_hidden_layers: 12,
-84            num_attention_heads: 12,
-85            projection_dim: 768,
-86            activation: Activation::QuickGelu,
-87        }
-88    }
-89
-90    // https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/text_encoder_2/config.json
-91    pub fn sdxl2() -> Self {
-92        Self {
-93            vocab_size: 49408,
-94            embed_dim: 1280,
-95            intermediate_size: 5120,
-96            max_position_embeddings: 77,
-97            pad_with: Some("!".to_string()),
-98            num_hidden_layers: 32,
-99            num_attention_heads: 20,
-100            projection_dim: 1280,
-101            activation: Activation::Gelu,
-102        }
-103    }
-104
-105    pub fn ssd1b() -> Self {
-106        Self::sdxl()
-107    }
-108
-109    pub fn ssd1b2() -> Self {
-110        Self::sdxl2()
-111    }
-112
-113    // https://huggingface.co/warp-ai/wuerstchen/blob/main/text_encoder/config.json
-114    pub fn wuerstchen() -> Self {
-115        Self {
-116            vocab_size: 49408,
-117            embed_dim: 1024,
-118            intermediate_size: 4096,
-119            max_position_embeddings: 77,
-120            pad_with: None,
-121            num_hidden_layers: 24,
-122            num_attention_heads: 16,
-123            projection_dim: 1024,
-124            activation: Activation::GeluErf,
-125        }
-126    }
-127
-128    // https://huggingface.co/warp-ai/wuerstchen-prior/blob/main/text_encoder/config.json
-129    pub fn wuerstchen_prior() -> Self {
-130        Self {
-131            vocab_size: 49408,
-132            embed_dim: 1280,
-133            intermediate_size: 5120,
-134            max_position_embeddings: 77,
-135            pad_with: None,
-136            num_hidden_layers: 32,
-137            num_attention_heads: 20,
-138            projection_dim: 512,
-139            activation: Activation::GeluErf,
-140        }
-141    }
-142}
-143
-144// CLIP Text Model
-145// https://github.com/huggingface/transformers/blob/674f750a57431222fa2832503a108df3badf1564/src/transformers/models/clip/modeling_clip.py
-146#[derive(Debug)]
-147struct ClipTextEmbeddings {
-148    token_embedding: candle_nn::Embedding,
-149    position_embedding: candle_nn::Embedding,
-150    position_ids: Tensor,
-151}
-152
-153impl ClipTextEmbeddings {
-154    fn new(vs: candle_nn::VarBuilder, c: &Config) -> Result<Self> {
-155        let token_embedding =
-156            candle_nn::embedding(c.vocab_size, c.embed_dim, vs.pp("token_embedding"))?;
-157        let position_embedding = candle_nn::embedding(
-158            c.max_position_embeddings,
-159            c.embed_dim,
-160            vs.pp("position_embedding"),
-161        )?;
-162        let position_ids =
-163            Tensor::arange(0u32, c.max_position_embeddings as u32, vs.device())?.unsqueeze(0)?;
-164        Ok(ClipTextEmbeddings {
-165            token_embedding,
-166            position_embedding,
-167            position_ids,
-168        })
-169    }
-170}
-171
-172impl Module for ClipTextEmbeddings {
-173    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-174        let token_embedding = self.token_embedding.forward(xs)?;
-175        let position_embedding = self.position_embedding.forward(&self.position_ids)?;
-176        token_embedding.broadcast_add(&position_embedding)
-177    }
-178}
-179
-180#[derive(Debug)]
-181struct ClipAttention {
-182    k_proj: candle_nn::Linear,
-183    v_proj: candle_nn::Linear,
-184    q_proj: candle_nn::Linear,
-185    out_proj: candle_nn::Linear,
-186    head_dim: usize,
-187    scale: f64,
-188    num_attention_heads: usize,
-189}
-190
-191impl ClipAttention {
-192    fn new(vs: candle_nn::VarBuilder, c: &Config) -> Result<Self> {
-193        let embed_dim = c.embed_dim;
-194        let num_attention_heads = c.num_attention_heads;
-195        let k_proj = candle_nn::linear(embed_dim, embed_dim, vs.pp("k_proj"))?;
-196        let v_proj = candle_nn::linear(embed_dim, embed_dim, vs.pp("v_proj"))?;
-197        let q_proj = candle_nn::linear(embed_dim, embed_dim, vs.pp("q_proj"))?;
-198        let out_proj = candle_nn::linear(embed_dim, embed_dim, vs.pp("out_proj"))?;
-199        let head_dim = embed_dim / num_attention_heads;
-200        let scale = (head_dim as f64).powf(-0.5);
-201        Ok(ClipAttention {
-202            k_proj,
-203            v_proj,
-204            q_proj,
-205            out_proj,
-206            head_dim,
-207            scale,
-208            num_attention_heads,
-209        })
-210    }
-211
-212    fn shape(&self, xs: &Tensor, seq_len: usize, bsz: usize) -> Result<Tensor> {
-213        xs.reshape((bsz, seq_len, self.num_attention_heads, self.head_dim))?
-214            .transpose(1, 2)?
-215            .contiguous()
-216    }
-217
-218    fn forward(&self, xs: &Tensor, causal_attention_mask: &Tensor) -> Result<Tensor> {
-219        let in_dtype = xs.dtype();
-220        let (bsz, seq_len, embed_dim) = xs.dims3()?;
-221        let query_states = (self.q_proj.forward(xs)? * self.scale)?;
-222        let proj_shape = (bsz * self.num_attention_heads, seq_len, self.head_dim);
-223        let query_states = self
-224            .shape(&query_states, seq_len, bsz)?
-225            .reshape(proj_shape)?
-226            .to_dtype(DType::F32)?;
-227        let key_states = self
-228            .shape(&self.k_proj.forward(xs)?, seq_len, bsz)?
-229            .reshape(proj_shape)?
-230            .to_dtype(DType::F32)?;
-231        let value_states = self
-232            .shape(&self.v_proj.forward(xs)?, seq_len, bsz)?
-233            .reshape(proj_shape)?
-234            .to_dtype(DType::F32)?;
-235        let attn_weights = query_states.matmul(&key_states.transpose(1, 2)?)?;
-236
-237        let src_len = key_states.dim(1)?;
-238        let attn_weights = attn_weights
-239            .reshape((bsz, self.num_attention_heads, seq_len, src_len))?
-240            .broadcast_add(causal_attention_mask)?;
-241        let attn_weights =
-242            attn_weights.reshape((bsz * self.num_attention_heads, seq_len, src_len))?;
-243        let attn_weights = candle_nn::ops::softmax(&attn_weights, D::Minus1)?;
-244
-245        let attn_output = attn_weights.matmul(&value_states)?.to_dtype(in_dtype)?;
-246        let attn_output = attn_output
-247            .reshape((bsz, self.num_attention_heads, seq_len, self.head_dim))?
-248            .transpose(1, 2)?
-249            .reshape((bsz, seq_len, embed_dim))?;
-250        self.out_proj.forward(&attn_output)
-251    }
-252}
-253
-254#[derive(Debug)]
-255struct ClipMlp {
-256    fc1: candle_nn::Linear,
-257    fc2: candle_nn::Linear,
-258    activation: Activation,
-259}
-260
-261impl ClipMlp {
-262    fn new(vs: candle_nn::VarBuilder, c: &Config) -> Result<Self> {
-263        let fc1 = candle_nn::linear(c.embed_dim, c.intermediate_size, vs.pp("fc1"))?;
-264        let fc2 = candle_nn::linear(c.intermediate_size, c.embed_dim, vs.pp("fc2"))?;
-265        Ok(ClipMlp {
-266            fc1,
-267            fc2,
-268            activation: c.activation,
-269        })
-270    }
-271}
-272
-273impl ClipMlp {
-274    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-275        let xs = self.fc1.forward(xs)?;
-276        self.fc2.forward(&self.activation.forward(&xs)?)
-277    }
-278}
-279
-280#[derive(Debug)]
-281struct ClipEncoderLayer {
-282    self_attn: ClipAttention,
-283    layer_norm1: candle_nn::LayerNorm,
-284    mlp: ClipMlp,
-285    layer_norm2: candle_nn::LayerNorm,
-286}
-287
-288impl ClipEncoderLayer {
-289    fn new(vs: candle_nn::VarBuilder, c: &Config) -> Result<Self> {
-290        let self_attn = ClipAttention::new(vs.pp("self_attn"), c)?;
-291        let layer_norm1 = candle_nn::layer_norm(c.embed_dim, 1e-5, vs.pp("layer_norm1"))?;
-292        let mlp = ClipMlp::new(vs.pp("mlp"), c)?;
-293        let layer_norm2 = candle_nn::layer_norm(c.embed_dim, 1e-5, vs.pp("layer_norm2"))?;
-294        Ok(ClipEncoderLayer {
-295            self_attn,
-296            layer_norm1,
-297            mlp,
-298            layer_norm2,
-299        })
-300    }
-301
-302    fn forward(&self, xs: &Tensor, causal_attention_mask: &Tensor) -> Result<Tensor> {
-303        let residual = xs;
-304        let xs = self.layer_norm1.forward(xs)?;
-305        let xs = self.self_attn.forward(&xs, causal_attention_mask)?;
-306        let xs = (xs + residual)?;
-307
-308        let residual = &xs;
-309        let xs = self.layer_norm2.forward(&xs)?;
-310        let xs = self.mlp.forward(&xs)?;
-311        xs + residual
-312    }
-313}
-314
-315#[derive(Debug)]
-316struct ClipEncoder {
-317    layers: Vec<ClipEncoderLayer>,
-318}
-319
-320impl ClipEncoder {
-321    fn new(vs: candle_nn::VarBuilder, c: &Config) -> Result<Self> {
-322        let vs = vs.pp("layers");
-323        let mut layers: Vec<ClipEncoderLayer> = Vec::new();
-324        for index in 0..c.num_hidden_layers {
-325            let layer = ClipEncoderLayer::new(vs.pp(index.to_string()), c)?;
-326            layers.push(layer)
-327        }
-328        Ok(ClipEncoder { layers })
-329    }
-330
-331    fn forward(&self, xs: &Tensor, causal_attention_mask: &Tensor) -> Result<Tensor> {
-332        let mut xs = xs.clone();
-333        for layer in self.layers.iter() {
-334            xs = layer.forward(&xs, causal_attention_mask)?;
-335        }
-336        Ok(xs)
-337    }
-338}
-339
-340/// A CLIP transformer based model.
-341#[derive(Debug)]
-342pub struct ClipTextTransformer {
-343    embeddings: ClipTextEmbeddings,
-344    encoder: ClipEncoder,
-345    final_layer_norm: candle_nn::LayerNorm,
-346}
-347
-348impl ClipTextTransformer {
-349    pub fn new(vs: candle_nn::VarBuilder, c: &Config) -> Result<Self> {
-350        let vs = vs.pp("text_model");
-351        let embeddings = ClipTextEmbeddings::new(vs.pp("embeddings"), c)?;
-352        let encoder = ClipEncoder::new(vs.pp("encoder"), c)?;
-353        let final_layer_norm = candle_nn::layer_norm(c.embed_dim, 1e-5, vs.pp("final_layer_norm"))?;
-354        Ok(ClipTextTransformer {
-355            embeddings,
-356            encoder,
-357            final_layer_norm,
-358        })
-359    }
-360
-361    // https://github.com/huggingface/transformers/blob/674f750a57431222fa2832503a108df3badf1564/src/transformers/models/clip/modeling_clip.py#L678
-362    fn build_causal_attention_mask(
-363        bsz: usize,
-364        seq_len: usize,
-365        mask_after: usize,
-366        device: &Device,
-367    ) -> Result<Tensor> {
-368        let mask: Vec<_> = (0..seq_len)
-369            .flat_map(|i| {
-370                (0..seq_len).map(move |j| {
-371                    if j > i || j > mask_after {
-372                        f32::MIN
-373                    } else {
-374                        0.
-375                    }
-376                })
-377            })
-378            .collect();
-379        let mask = Tensor::from_slice(&mask, (seq_len, seq_len), device)?;
-380        mask.broadcast_as((bsz, seq_len, seq_len))
-381    }
-382
-383    pub fn forward_with_mask(&self, xs: &Tensor, mask_after: usize) -> Result<Tensor> {
-384        let (bsz, seq_len) = xs.dims2()?;
-385        let xs = self.embeddings.forward(xs)?;
-386        let causal_attention_mask =
-387            Self::build_causal_attention_mask(bsz, seq_len, mask_after, xs.device())?;
-388        let xs = self.encoder.forward(&xs, &causal_attention_mask)?;
-389        self.final_layer_norm.forward(&xs)
-390    }
-391
-392    pub fn forward_until_encoder_layer(
-393        &self,
-394        xs: &Tensor,
-395        mask_after: usize,
-396        until_layer: isize,
-397    ) -> Result<(Tensor, Tensor)> {
-398        let (bsz, seq_len) = xs.dims2()?;
-399        let xs = self.embeddings.forward(xs)?;
-400        let causal_attention_mask =
-401            Self::build_causal_attention_mask(bsz, seq_len, mask_after, xs.device())?;
-402
-403        let mut xs = xs.clone();
-404        let mut intermediate = xs.clone();
-405
-406        // Modified encoder.forward that returns the intermediate tensor along with final output.
-407        let until_layer = if until_layer < 0 {
-408            self.encoder.layers.len() as isize + until_layer
-409        } else {
-410            until_layer
-411        } as usize;
-412
-413        for (layer_id, layer) in self.encoder.layers.iter().enumerate() {
-414            xs = layer.forward(&xs, &causal_attention_mask)?;
-415            if layer_id == until_layer {
-416                intermediate = xs.clone();
-417            }
-418        }
-419
-420        Ok((self.final_layer_norm.forward(&xs)?, intermediate))
-421    }
-422}
-423
-424impl Module for ClipTextTransformer {
-425    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-426        self.forward_with_mask(xs, usize::MAX)
-427    }
-428}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/ddim.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/ddim.rs.html deleted file mode 100644 index 7ee66d3..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/ddim.rs.html +++ /dev/null @@ -1,214 +0,0 @@ -ddim.rs - source

candle_transformers/models/stable_diffusion/
ddim.rs

1//! # Denoising Diffusion Implicit Models
-2//!
-3//! The Denoising Diffusion Implicit Models (DDIM) is a simple scheduler
-4//! similar to Denoising Diffusion Probabilistic Models (DDPM). The DDPM
-5//! generative process is the reverse of a Markovian process, DDIM generalizes
-6//! this to non-Markovian guidance.
-7//!
-8//! Denoising Diffusion Implicit Models, J. Song et al, 2020.
-9//! https://arxiv.org/abs/2010.02502
-10use super::schedulers::{
-11    betas_for_alpha_bar, BetaSchedule, PredictionType, Scheduler, SchedulerConfig, TimestepSpacing,
-12};
-13use candle::{Result, Tensor};
-14
-15/// The configuration for the DDIM scheduler.
-16#[derive(Debug, Clone, Copy)]
-17pub struct DDIMSchedulerConfig {
-18    /// The value of beta at the beginning of training.
-19    pub beta_start: f64,
-20    /// The value of beta at the end of training.
-21    pub beta_end: f64,
-22    /// How beta evolved during training.
-23    pub beta_schedule: BetaSchedule,
-24    /// The amount of noise to be added at each step.
-25    pub eta: f64,
-26    /// Adjust the indexes of the inference schedule by this value.
-27    pub steps_offset: usize,
-28    /// prediction type of the scheduler function, one of `epsilon` (predicting
-29    /// the noise of the diffusion process), `sample` (directly predicting the noisy sample`)
-30    /// or `v_prediction` (see section 2.4 https://imagen.research.google/video/paper.pdf)
-31    pub prediction_type: PredictionType,
-32    /// number of diffusion steps used to train the model
-33    pub train_timesteps: usize,
-34    /// time step spacing for the diffusion process
-35    pub timestep_spacing: TimestepSpacing,
-36}
-37
-38impl Default for DDIMSchedulerConfig {
-39    fn default() -> Self {
-40        Self {
-41            beta_start: 0.00085f64,
-42            beta_end: 0.012f64,
-43            beta_schedule: BetaSchedule::ScaledLinear,
-44            eta: 0.,
-45            steps_offset: 1,
-46            prediction_type: PredictionType::Epsilon,
-47            train_timesteps: 1000,
-48            timestep_spacing: TimestepSpacing::Leading,
-49        }
-50    }
-51}
-52
-53impl SchedulerConfig for DDIMSchedulerConfig {
-54    fn build(&self, inference_steps: usize) -> Result<Box<dyn Scheduler>> {
-55        Ok(Box::new(DDIMScheduler::new(inference_steps, *self)?))
-56    }
-57}
-58
-59/// The DDIM scheduler.
-60#[derive(Debug, Clone)]
-61pub struct DDIMScheduler {
-62    timesteps: Vec<usize>,
-63    alphas_cumprod: Vec<f64>,
-64    step_ratio: usize,
-65    init_noise_sigma: f64,
-66    pub config: DDIMSchedulerConfig,
-67}
-68
-69// clip_sample: False, set_alpha_to_one: False
-70impl DDIMScheduler {
-71    /// Creates a new DDIM scheduler given the number of steps to be
-72    /// used for inference as well as the number of steps that was used
-73    /// during training.
-74    fn new(inference_steps: usize, config: DDIMSchedulerConfig) -> Result<Self> {
-75        let step_ratio = config.train_timesteps / inference_steps;
-76        let timesteps: Vec<usize> = match config.timestep_spacing {
-77            TimestepSpacing::Leading => (0..(inference_steps))
-78                .map(|s| s * step_ratio + config.steps_offset)
-79                .rev()
-80                .collect(),
-81            TimestepSpacing::Trailing => std::iter::successors(Some(config.train_timesteps), |n| {
-82                if *n > step_ratio {
-83                    Some(n - step_ratio)
-84                } else {
-85                    None
-86                }
-87            })
-88            .map(|n| n - 1)
-89            .collect(),
-90            TimestepSpacing::Linspace => {
-91                super::utils::linspace(0.0, (config.train_timesteps - 1) as f64, inference_steps)?
-92                    .to_vec1::<f64>()?
-93                    .iter()
-94                    .map(|&f| f as usize)
-95                    .rev()
-96                    .collect()
-97            }
-98        };
-99
-100        let betas = match config.beta_schedule {
-101            BetaSchedule::ScaledLinear => super::utils::linspace(
-102                config.beta_start.sqrt(),
-103                config.beta_end.sqrt(),
-104                config.train_timesteps,
-105            )?
-106            .sqr()?,
-107            BetaSchedule::Linear => {
-108                super::utils::linspace(config.beta_start, config.beta_end, config.train_timesteps)?
-109            }
-110            BetaSchedule::SquaredcosCapV2 => betas_for_alpha_bar(config.train_timesteps, 0.999)?,
-111        };
-112        let betas = betas.to_vec1::<f64>()?;
-113        let mut alphas_cumprod = Vec::with_capacity(betas.len());
-114        for &beta in betas.iter() {
-115            let alpha = 1.0 - beta;
-116            alphas_cumprod.push(alpha * *alphas_cumprod.last().unwrap_or(&1f64))
-117        }
-118        Ok(Self {
-119            alphas_cumprod,
-120            timesteps,
-121            step_ratio,
-122            init_noise_sigma: 1.,
-123            config,
-124        })
-125    }
-126}
-127
-128impl Scheduler for DDIMScheduler {
-129    /// Performs a backward step during inference.
-130    fn step(&mut self, model_output: &Tensor, timestep: usize, sample: &Tensor) -> Result<Tensor> {
-131        let timestep = if timestep >= self.alphas_cumprod.len() {
-132            timestep - 1
-133        } else {
-134            timestep
-135        };
-136        // https://github.com/huggingface/diffusers/blob/6e099e2c8ce4c4f5c7318e970a8c093dc5c7046e/src/diffusers/schedulers/scheduling_ddim.py#L195
-137        let prev_timestep = if timestep > self.step_ratio {
-138            timestep - self.step_ratio
-139        } else {
-140            0
-141        };
-142
-143        let alpha_prod_t = self.alphas_cumprod[timestep];
-144        let alpha_prod_t_prev = self.alphas_cumprod[prev_timestep];
-145        let beta_prod_t = 1. - alpha_prod_t;
-146        let beta_prod_t_prev = 1. - alpha_prod_t_prev;
-147
-148        let (pred_original_sample, pred_epsilon) = match self.config.prediction_type {
-149            PredictionType::Epsilon => {
-150                let pred_original_sample = ((sample - (model_output * beta_prod_t.sqrt())?)?
-151                    * (1. / alpha_prod_t.sqrt()))?;
-152                (pred_original_sample, model_output.clone())
-153            }
-154            PredictionType::VPrediction => {
-155                let pred_original_sample =
-156                    ((sample * alpha_prod_t.sqrt())? - (model_output * beta_prod_t.sqrt())?)?;
-157                let pred_epsilon =
-158                    ((model_output * alpha_prod_t.sqrt())? + (sample * beta_prod_t.sqrt())?)?;
-159                (pred_original_sample, pred_epsilon)
-160            }
-161            PredictionType::Sample => {
-162                let pred_original_sample = model_output.clone();
-163                let pred_epsilon = ((sample - &pred_original_sample * alpha_prod_t.sqrt())?
-164                    * (1. / beta_prod_t.sqrt()))?;
-165                (pred_original_sample, pred_epsilon)
-166            }
-167        };
-168
-169        let variance = (beta_prod_t_prev / beta_prod_t) * (1. - alpha_prod_t / alpha_prod_t_prev);
-170        let std_dev_t = self.config.eta * variance.sqrt();
-171
-172        let pred_sample_direction =
-173            (pred_epsilon * (1. - alpha_prod_t_prev - std_dev_t * std_dev_t).sqrt())?;
-174        let prev_sample =
-175            ((pred_original_sample * alpha_prod_t_prev.sqrt())? + pred_sample_direction)?;
-176        if self.config.eta > 0. {
-177            &prev_sample
-178                + Tensor::randn(
-179                    0f32,
-180                    std_dev_t as f32,
-181                    prev_sample.shape(),
-182                    prev_sample.device(),
-183                )?
-184        } else {
-185            Ok(prev_sample)
-186        }
-187    }
-188
-189    ///  Ensures interchangeability with schedulers that need to scale the denoising model input
-190    /// depending on the current timestep.
-191    fn scale_model_input(&self, sample: Tensor, _timestep: usize) -> Result<Tensor> {
-192        Ok(sample)
-193    }
-194
-195    fn timesteps(&self) -> &[usize] {
-196        self.timesteps.as_slice()
-197    }
-198
-199    fn add_noise(&self, original: &Tensor, noise: Tensor, timestep: usize) -> Result<Tensor> {
-200        let timestep = if timestep >= self.alphas_cumprod.len() {
-201            timestep - 1
-202        } else {
-203            timestep
-204        };
-205        let sqrt_alpha_prod = self.alphas_cumprod[timestep].sqrt();
-206        let sqrt_one_minus_alpha_prod = (1.0 - self.alphas_cumprod[timestep]).sqrt();
-207        (original * sqrt_alpha_prod)? + (noise * sqrt_one_minus_alpha_prod)?
-208    }
-209
-210    fn init_noise_sigma(&self) -> f64 {
-211        self.init_noise_sigma
-212    }
-213}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/ddpm.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/ddpm.rs.html deleted file mode 100644 index e8b6c0b..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/ddpm.rs.html +++ /dev/null @@ -1,206 +0,0 @@ -ddpm.rs - source

candle_transformers/models/stable_diffusion/
ddpm.rs

1use super::schedulers::{betas_for_alpha_bar, BetaSchedule, PredictionType};
-2use candle::{Result, Tensor};
-3
-4#[derive(Debug, Clone, PartialEq, Eq)]
-5pub enum DDPMVarianceType {
-6    FixedSmall,
-7    FixedSmallLog,
-8    FixedLarge,
-9    FixedLargeLog,
-10    Learned,
-11}
-12
-13impl Default for DDPMVarianceType {
-14    fn default() -> Self {
-15        Self::FixedSmall
-16    }
-17}
-18
-19#[derive(Debug, Clone)]
-20pub struct DDPMSchedulerConfig {
-21    /// The value of beta at the beginning of training.
-22    pub beta_start: f64,
-23    /// The value of beta at the end of training.
-24    pub beta_end: f64,
-25    /// How beta evolved during training.
-26    pub beta_schedule: BetaSchedule,
-27    /// Option to predicted sample between -1 and 1 for numerical stability.
-28    pub clip_sample: bool,
-29    /// Option to clip the variance used when adding noise to the denoised sample.
-30    pub variance_type: DDPMVarianceType,
-31    /// prediction type of the scheduler function
-32    pub prediction_type: PredictionType,
-33    /// number of diffusion steps used to train the model.
-34    pub train_timesteps: usize,
-35}
-36
-37impl Default for DDPMSchedulerConfig {
-38    fn default() -> Self {
-39        Self {
-40            beta_start: 0.00085,
-41            beta_end: 0.012,
-42            beta_schedule: BetaSchedule::ScaledLinear,
-43            clip_sample: false,
-44            variance_type: DDPMVarianceType::FixedSmall,
-45            prediction_type: PredictionType::Epsilon,
-46            train_timesteps: 1000,
-47        }
-48    }
-49}
-50
-51pub struct DDPMScheduler {
-52    alphas_cumprod: Vec<f64>,
-53    init_noise_sigma: f64,
-54    timesteps: Vec<usize>,
-55    step_ratio: usize,
-56    pub config: DDPMSchedulerConfig,
-57}
-58
-59impl DDPMScheduler {
-60    pub fn new(inference_steps: usize, config: DDPMSchedulerConfig) -> Result<Self> {
-61        let betas = match config.beta_schedule {
-62            BetaSchedule::ScaledLinear => super::utils::linspace(
-63                config.beta_start.sqrt(),
-64                config.beta_end.sqrt(),
-65                config.train_timesteps,
-66            )?
-67            .sqr()?,
-68            BetaSchedule::Linear => {
-69                super::utils::linspace(config.beta_start, config.beta_end, config.train_timesteps)?
-70            }
-71            BetaSchedule::SquaredcosCapV2 => betas_for_alpha_bar(config.train_timesteps, 0.999)?,
-72        };
-73
-74        let betas = betas.to_vec1::<f64>()?;
-75        let mut alphas_cumprod = Vec::with_capacity(betas.len());
-76        for &beta in betas.iter() {
-77            let alpha = 1.0 - beta;
-78            alphas_cumprod.push(alpha * *alphas_cumprod.last().unwrap_or(&1f64))
-79        }
-80
-81        // min(train_timesteps, inference_steps)
-82        // https://github.com/huggingface/diffusers/blob/8331da46837be40f96fbd24de6a6fb2da28acd11/src/diffusers/schedulers/scheduling_ddpm.py#L187
-83        let inference_steps = inference_steps.min(config.train_timesteps);
-84        // arange the number of the scheduler's timesteps
-85        let step_ratio = config.train_timesteps / inference_steps;
-86        let timesteps: Vec<usize> = (0..inference_steps).map(|s| s * step_ratio).rev().collect();
-87
-88        Ok(Self {
-89            alphas_cumprod,
-90            init_noise_sigma: 1.0,
-91            timesteps,
-92            step_ratio,
-93            config,
-94        })
-95    }
-96
-97    fn get_variance(&self, timestep: usize) -> f64 {
-98        let prev_t = timestep as isize - self.step_ratio as isize;
-99        let alpha_prod_t = self.alphas_cumprod[timestep];
-100        let alpha_prod_t_prev = if prev_t >= 0 {
-101            self.alphas_cumprod[prev_t as usize]
-102        } else {
-103            1.0
-104        };
-105        let current_beta_t = 1. - alpha_prod_t / alpha_prod_t_prev;
-106
-107        // For t > 0, compute predicted variance βt (see formula (6) and (7) from [the pdf](https://arxiv.org/pdf/2006.11239.pdf))
-108        // and sample from it to get previous sample
-109        // x_{t-1} ~ N(pred_prev_sample, variance) == add variance to pred_sample
-110        let variance = (1. - alpha_prod_t_prev) / (1. - alpha_prod_t) * current_beta_t;
-111
-112        // retrieve variance
-113        match self.config.variance_type {
-114            DDPMVarianceType::FixedSmall => variance.max(1e-20),
-115            // for rl-diffuser https://arxiv.org/abs/2205.09991
-116            DDPMVarianceType::FixedSmallLog => {
-117                let variance = variance.max(1e-20).ln();
-118                (variance * 0.5).exp()
-119            }
-120            DDPMVarianceType::FixedLarge => current_beta_t,
-121            DDPMVarianceType::FixedLargeLog => current_beta_t.ln(),
-122            DDPMVarianceType::Learned => variance,
-123        }
-124    }
-125
-126    pub fn timesteps(&self) -> &[usize] {
-127        self.timesteps.as_slice()
-128    }
-129
-130    ///  Ensures interchangeability with schedulers that need to scale the denoising model input
-131    /// depending on the current timestep.
-132    pub fn scale_model_input(&self, sample: Tensor, _timestep: usize) -> Tensor {
-133        sample
-134    }
-135
-136    pub fn step(&self, model_output: &Tensor, timestep: usize, sample: &Tensor) -> Result<Tensor> {
-137        let prev_t = timestep as isize - self.step_ratio as isize;
-138
-139        // https://github.com/huggingface/diffusers/blob/df2b548e893ccb8a888467c2508756680df22821/src/diffusers/schedulers/scheduling_ddpm.py#L272
-140        // 1. compute alphas, betas
-141        let alpha_prod_t = self.alphas_cumprod[timestep];
-142        let alpha_prod_t_prev = if prev_t >= 0 {
-143            self.alphas_cumprod[prev_t as usize]
-144        } else {
-145            1.0
-146        };
-147        let beta_prod_t = 1. - alpha_prod_t;
-148        let beta_prod_t_prev = 1. - alpha_prod_t_prev;
-149        let current_alpha_t = alpha_prod_t / alpha_prod_t_prev;
-150        let current_beta_t = 1. - current_alpha_t;
-151
-152        // 2. compute predicted original sample from predicted noise also called "predicted x_0" of formula (15)
-153        let mut pred_original_sample = match self.config.prediction_type {
-154            PredictionType::Epsilon => {
-155                ((sample - model_output * beta_prod_t.sqrt())? / alpha_prod_t.sqrt())?
-156            }
-157            PredictionType::Sample => model_output.clone(),
-158            PredictionType::VPrediction => {
-159                ((sample * alpha_prod_t.sqrt())? - model_output * beta_prod_t.sqrt())?
-160            }
-161        };
-162
-163        // 3. clip predicted x_0
-164        if self.config.clip_sample {
-165            pred_original_sample = pred_original_sample.clamp(-1f32, 1f32)?;
-166        }
-167
-168        // 4. Compute coefficients for pred_original_sample x_0 and current sample x_t
-169        // See formula (7) from https://arxiv.org/pdf/2006.11239.pdf
-170        let pred_original_sample_coeff = (alpha_prod_t_prev.sqrt() * current_beta_t) / beta_prod_t;
-171        let current_sample_coeff = current_alpha_t.sqrt() * beta_prod_t_prev / beta_prod_t;
-172
-173        // 5. Compute predicted previous sample µ_t
-174        // See formula (7) from https://arxiv.org/pdf/2006.11239.pdf
-175        let pred_prev_sample = ((&pred_original_sample * pred_original_sample_coeff)?
-176            + sample * current_sample_coeff)?;
-177
-178        // https://github.com/huggingface/diffusers/blob/df2b548e893ccb8a888467c2508756680df22821/src/diffusers/schedulers/scheduling_ddpm.py#L305
-179        // 6. Add noise
-180        let mut variance = model_output.zeros_like()?;
-181        if timestep > 0 {
-182            let variance_noise = model_output.randn_like(0., 1.)?;
-183            if self.config.variance_type == DDPMVarianceType::FixedSmallLog {
-184                variance = (variance_noise * self.get_variance(timestep))?;
-185            } else {
-186                variance = (variance_noise * self.get_variance(timestep).sqrt())?;
-187            }
-188        }
-189        &pred_prev_sample + variance
-190    }
-191
-192    pub fn add_noise(
-193        &self,
-194        original_samples: &Tensor,
-195        noise: Tensor,
-196        timestep: usize,
-197    ) -> Result<Tensor> {
-198        (original_samples * self.alphas_cumprod[timestep].sqrt())?
-199            + noise * (1. - self.alphas_cumprod[timestep]).sqrt()
-200    }
-201
-202    pub fn init_noise_sigma(&self) -> f64 {
-203        self.init_noise_sigma
-204    }
-205}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/embeddings.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/embeddings.rs.html deleted file mode 100644 index 4db712e..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/embeddings.rs.html +++ /dev/null @@ -1,66 +0,0 @@ -embeddings.rs - source

candle_transformers/models/stable_diffusion/
embeddings.rs

1use candle::{Result, Tensor, D};
-2use candle_nn as nn;
-3use candle_nn::Module;
-4
-5#[derive(Debug)]
-6pub struct TimestepEmbedding {
-7    linear_1: nn::Linear,
-8    linear_2: nn::Linear,
-9}
-10
-11impl TimestepEmbedding {
-12    // act_fn: "silu"
-13    pub fn new(vs: nn::VarBuilder, channel: usize, time_embed_dim: usize) -> Result<Self> {
-14        let linear_1 = nn::linear(channel, time_embed_dim, vs.pp("linear_1"))?;
-15        let linear_2 = nn::linear(time_embed_dim, time_embed_dim, vs.pp("linear_2"))?;
-16        Ok(Self { linear_1, linear_2 })
-17    }
-18}
-19
-20impl Module for TimestepEmbedding {
-21    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-22        let xs = nn::ops::silu(&self.linear_1.forward(xs)?)?;
-23        self.linear_2.forward(&xs)
-24    }
-25}
-26
-27#[derive(Debug)]
-28pub struct Timesteps {
-29    num_channels: usize,
-30    flip_sin_to_cos: bool,
-31    downscale_freq_shift: f64,
-32}
-33
-34impl Timesteps {
-35    pub fn new(num_channels: usize, flip_sin_to_cos: bool, downscale_freq_shift: f64) -> Self {
-36        Self {
-37            num_channels,
-38            flip_sin_to_cos,
-39            downscale_freq_shift,
-40        }
-41    }
-42}
-43
-44impl Module for Timesteps {
-45    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-46        let half_dim = (self.num_channels / 2) as u32;
-47        let exponent = (Tensor::arange(0, half_dim, xs.device())?.to_dtype(candle::DType::F32)?
-48            * -f64::ln(10000.))?;
-49        let exponent = (exponent / (half_dim as f64 - self.downscale_freq_shift))?;
-50        let emb = exponent.exp()?.to_dtype(xs.dtype())?;
-51        // emb = timesteps[:, None].float() * emb[None, :]
-52        let emb = xs.unsqueeze(D::Minus1)?.broadcast_mul(&emb.unsqueeze(0)?)?;
-53        let (cos, sin) = (emb.cos()?, emb.sin()?);
-54        let emb = if self.flip_sin_to_cos {
-55            Tensor::cat(&[&cos, &sin], D::Minus1)?
-56        } else {
-57            Tensor::cat(&[&sin, &cos], D::Minus1)?
-58        };
-59        if self.num_channels % 2 == 1 {
-60            emb.pad_with_zeros(D::Minus2, 0, 1)
-61        } else {
-62            Ok(emb)
-63        }
-64    }
-65}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/euler_ancestral_discrete.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/euler_ancestral_discrete.rs.html deleted file mode 100644 index ec8a3dd..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/euler_ancestral_discrete.rs.html +++ /dev/null @@ -1,231 +0,0 @@ -euler_ancestral_discrete.rs - source

candle_transformers/models/stable_diffusion/
euler_ancestral_discrete.rs

1//! Ancestral sampling with Euler method steps.
-2//!
-3//! Based on the original [`k-diffusion` implementation by Katherine Crowson]( https://github.com/crowsonkb/k-diffusion/blob/481677d114f6ea445aa009cf5bd7a9cdee909e47/k_diffusion/sampling.py#L72).
-4//!
-5use super::{
-6    schedulers::{
-7        betas_for_alpha_bar, BetaSchedule, PredictionType, Scheduler, SchedulerConfig,
-8        TimestepSpacing,
-9    },
-10    utils::interp,
-11};
-12use candle::{bail, Error, Result, Tensor};
-13
-14/// The configuration for the EulerAncestral Discrete scheduler.
-15#[derive(Debug, Clone, Copy)]
-16pub struct EulerAncestralDiscreteSchedulerConfig {
-17    /// The value of beta at the beginning of training.n
-18    pub beta_start: f64,
-19    /// The value of beta at the end of training.
-20    pub beta_end: f64,
-21    /// How beta evolved during training.
-22    pub beta_schedule: BetaSchedule,
-23    /// Adjust the indexes of the inference schedule by this value.
-24    pub steps_offset: usize,
-25    /// prediction type of the scheduler function, one of `epsilon` (predicting
-26    /// the noise of the diffusion process), `sample` (directly predicting the noisy sample`)
-27    /// or `v_prediction` (see [section 2.4](https://imagen.research.google/video/paper.pdf))
-28    pub prediction_type: PredictionType,
-29    /// number of diffusion steps used to train the model
-30    pub train_timesteps: usize,
-31    /// time step spacing for the diffusion process
-32    pub timestep_spacing: TimestepSpacing,
-33}
-34
-35impl Default for EulerAncestralDiscreteSchedulerConfig {
-36    fn default() -> Self {
-37        Self {
-38            beta_start: 0.00085f64,
-39            beta_end: 0.012f64,
-40            beta_schedule: BetaSchedule::ScaledLinear,
-41            steps_offset: 1,
-42            prediction_type: PredictionType::Epsilon,
-43            train_timesteps: 1000,
-44            timestep_spacing: TimestepSpacing::Leading,
-45        }
-46    }
-47}
-48
-49impl SchedulerConfig for EulerAncestralDiscreteSchedulerConfig {
-50    fn build(&self, inference_steps: usize) -> Result<Box<dyn Scheduler>> {
-51        Ok(Box::new(EulerAncestralDiscreteScheduler::new(
-52            inference_steps,
-53            *self,
-54        )?))
-55    }
-56}
-57
-58/// The EulerAncestral Discrete scheduler.
-59#[derive(Debug, Clone)]
-60pub struct EulerAncestralDiscreteScheduler {
-61    timesteps: Vec<usize>,
-62    sigmas: Vec<f64>,
-63    init_noise_sigma: f64,
-64    pub config: EulerAncestralDiscreteSchedulerConfig,
-65}
-66
-67// clip_sample: False, set_alpha_to_one: False
-68impl EulerAncestralDiscreteScheduler {
-69    /// Creates a new EulerAncestral Discrete scheduler given the number of steps to be
-70    /// used for inference as well as the number of steps that was used
-71    /// during training.
-72    pub fn new(
-73        inference_steps: usize,
-74        config: EulerAncestralDiscreteSchedulerConfig,
-75    ) -> Result<Self> {
-76        let step_ratio = config.train_timesteps / inference_steps;
-77        let timesteps: Vec<usize> = match config.timestep_spacing {
-78            TimestepSpacing::Leading => (0..(inference_steps))
-79                .map(|s| s * step_ratio + config.steps_offset)
-80                .rev()
-81                .collect(),
-82            TimestepSpacing::Trailing => std::iter::successors(Some(config.train_timesteps), |n| {
-83                if *n > step_ratio {
-84                    Some(n - step_ratio)
-85                } else {
-86                    None
-87                }
-88            })
-89            .map(|n| n - 1)
-90            .collect(),
-91            TimestepSpacing::Linspace => {
-92                super::utils::linspace(0.0, (config.train_timesteps - 1) as f64, inference_steps)?
-93                    .to_vec1::<f64>()?
-94                    .iter()
-95                    .map(|&f| f as usize)
-96                    .rev()
-97                    .collect()
-98            }
-99        };
-100
-101        let betas = match config.beta_schedule {
-102            BetaSchedule::ScaledLinear => super::utils::linspace(
-103                config.beta_start.sqrt(),
-104                config.beta_end.sqrt(),
-105                config.train_timesteps,
-106            )?
-107            .sqr()?,
-108            BetaSchedule::Linear => {
-109                super::utils::linspace(config.beta_start, config.beta_end, config.train_timesteps)?
-110            }
-111            BetaSchedule::SquaredcosCapV2 => betas_for_alpha_bar(config.train_timesteps, 0.999)?,
-112        };
-113        let betas = betas.to_vec1::<f64>()?;
-114        let mut alphas_cumprod = Vec::with_capacity(betas.len());
-115        for &beta in betas.iter() {
-116            let alpha = 1.0 - beta;
-117            alphas_cumprod.push(alpha * *alphas_cumprod.last().unwrap_or(&1f64))
-118        }
-119        let sigmas: Vec<f64> = alphas_cumprod
-120            .iter()
-121            .map(|&f| ((1. - f) / f).sqrt())
-122            .collect();
-123
-124        let sigmas_xa: Vec<_> = (0..sigmas.len()).map(|i| i as f64).collect();
-125
-126        let mut sigmas_int = interp(
-127            &timesteps.iter().map(|&t| t as f64).collect::<Vec<_>>(),
-128            &sigmas_xa,
-129            &sigmas,
-130        );
-131        sigmas_int.push(0.0);
-132
-133        // standard deviation of the initial noise distribution
-134        // f64 does not implement Ord such that there is no `max`, so we need to use this workaround
-135        let init_noise_sigma = *sigmas_int
-136            .iter()
-137            .chain(std::iter::once(&0.0))
-138            .reduce(|a, b| if a > b { a } else { b })
-139            .expect("init_noise_sigma could not be reduced from sigmas - this should never happen");
-140
-141        Ok(Self {
-142            sigmas: sigmas_int,
-143            timesteps,
-144            init_noise_sigma,
-145            config,
-146        })
-147    }
-148}
-149
-150impl Scheduler for EulerAncestralDiscreteScheduler {
-151    fn timesteps(&self) -> &[usize] {
-152        self.timesteps.as_slice()
-153    }
-154
-155    /// Ensures interchangeability with schedulers that need to scale the denoising model input
-156    /// depending on the current timestep.
-157    ///
-158    /// Scales the denoising model input by `(sigma**2 + 1) ** 0.5` to match the K-LMS algorithm
-159    fn scale_model_input(&self, sample: Tensor, timestep: usize) -> Result<Tensor> {
-160        let step_index = match self.timesteps.iter().position(|&t| t == timestep) {
-161            Some(i) => i,
-162            None => bail!("timestep out of this schedulers bounds: {timestep}"),
-163        };
-164
-165        let sigma = self
-166            .sigmas
-167            .get(step_index)
-168            .expect("step_index out of sigma bounds - this shouldn't happen");
-169
-170        sample / ((sigma.powi(2) + 1.).sqrt())
-171    }
-172
-173    /// Performs a backward step during inference.
-174    fn step(&mut self, model_output: &Tensor, timestep: usize, sample: &Tensor) -> Result<Tensor> {
-175        let step_index = self
-176            .timesteps
-177            .iter()
-178            .position(|&p| p == timestep)
-179            .ok_or_else(|| Error::Msg("timestep out of this schedulers bounds".to_string()))?;
-180
-181        let sigma_from = &self.sigmas[step_index];
-182        let sigma_to = &self.sigmas[step_index + 1];
-183
-184        // 1. compute predicted original sample (x_0) from sigma-scaled predicted noise
-185        let pred_original_sample = match self.config.prediction_type {
-186            PredictionType::Epsilon => (sample - (model_output * *sigma_from))?,
-187            PredictionType::VPrediction => {
-188                ((model_output * (-sigma_from / (sigma_from.powi(2) + 1.0).sqrt()))?
-189                    + (sample / (sigma_from.powi(2) + 1.0))?)?
-190            }
-191            PredictionType::Sample => bail!("prediction_type not implemented yet: sample"),
-192        };
-193
-194        let sigma_up = (sigma_to.powi(2) * (sigma_from.powi(2) - sigma_to.powi(2))
-195            / sigma_from.powi(2))
-196        .sqrt();
-197        let sigma_down = (sigma_to.powi(2) - sigma_up.powi(2)).sqrt();
-198
-199        // 2. convert to a ODE derivative
-200        let derivative = ((sample - pred_original_sample)? / *sigma_from)?;
-201        let dt = sigma_down - *sigma_from;
-202        let prev_sample = (sample + derivative * dt)?;
-203
-204        let noise = prev_sample.randn_like(0.0, 1.0)?;
-205
-206        prev_sample + noise * sigma_up
-207    }
-208
-209    fn add_noise(&self, original: &Tensor, noise: Tensor, timestep: usize) -> Result<Tensor> {
-210        let step_index = self
-211            .timesteps
-212            .iter()
-213            .position(|&p| p == timestep)
-214            .ok_or_else(|| Error::Msg("timestep out of this schedulers bounds".to_string()))?;
-215
-216        let sigma = self
-217            .sigmas
-218            .get(step_index)
-219            .expect("step_index out of sigma bounds - this shouldn't happen");
-220
-221        original + (noise * *sigma)?
-222    }
-223
-224    fn init_noise_sigma(&self) -> f64 {
-225        match self.config.timestep_spacing {
-226            TimestepSpacing::Trailing | TimestepSpacing::Linspace => self.init_noise_sigma,
-227            TimestepSpacing::Leading => (self.init_noise_sigma.powi(2) + 1.0).sqrt(),
-228        }
-229    }
-230}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/mod.rs.html deleted file mode 100644 index b3f45c7..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/mod.rs.html +++ /dev/null @@ -1,509 +0,0 @@ -mod.rs - source

candle_transformers/models/stable_diffusion/
mod.rs

1//! Stable Diffusion
-2//!
-3//! Stable Diffusion is a latent text-to-image diffusion model capable of
-4//! generating photo-realistic images given any text input.
-5//!
-6//! - 💻 [Original Repository](https://github.com/CompVis/stable-diffusion)
-7//! - 🤗 [Hugging Face](https://huggingface.co/runwayml/stable-diffusion-v1-5)
-8//! - The default scheduler for the v1.5, v2.1 and XL 1.0 version is the Denoising Diffusion Implicit Model scheduler (DDIM). The original paper and some code can be found in the [associated repo](https://github.com/ermongroup/ddim). The default scheduler for the XL Turbo version is the Euler Ancestral scheduler.
-9//!
-10//!
-11//! # Example
-12//!
-13//! <div align=center>
-14//!   <img src="https://github.com/huggingface/candle/raw/main/candle-examples/examples/stable-diffusion/assets/stable-diffusion-xl.jpg" alt="rusty robot holding a candle" width=320>
-15//! </div>
-16//!
-17//! _"A rusty robot holding a fire torch in its hand."_ Generated by Stable Diffusion XL using Rust and [candle](https://github.com/huggingface/candle).
-18//!
-19//! ```bash
-20//! # example running with cuda
-21//! # see the candle-examples/examples/stable-diffusion for all options
-22//! cargo run --example stable-diffusion --release --features=cuda,cudnn \
-23//!     -- --prompt "a cosmonaut on a horse (hd, realistic, high-def)"
-24//!
-25//! # with sd-turbo
-26//! cargo run --example stable-diffusion --release --features=cuda,cudnn \
-27//!     -- --prompt "a cosmonaut on a horse (hd, realistic, high-def)" \
-28//!     --sd-version turbo
-29//!
-30//! # with flash attention.
-31//! # feature flag: `--features flash-attn`
-32//! # cli flag: `--use-flash-attn`.
-33//! # flash-attention-v2 is only compatible with Ampere, Ada, \
-34//! # or Hopper GPUs (e.g., A100/H100, RTX 3090/4090).
-35//! cargo run --example stable-diffusion --release --features=cuda,cudnn \
-36//!     -- --prompt "a cosmonaut on a horse (hd, realistic, high-def)" \
-37//!     --use-flash-attn
-38//! ```
-39
-40pub mod attention;
-41pub mod clip;
-42pub mod ddim;
-43pub mod ddpm;
-44pub mod embeddings;
-45pub mod euler_ancestral_discrete;
-46pub mod resnet;
-47pub mod schedulers;
-48pub mod unet_2d;
-49pub mod unet_2d_blocks;
-50pub mod uni_pc;
-51pub mod utils;
-52pub mod vae;
-53
-54use std::sync::Arc;
-55
-56use candle::{DType, Device, Result};
-57use candle_nn as nn;
-58
-59use self::schedulers::{Scheduler, SchedulerConfig};
-60
-61#[derive(Clone, Debug)]
-62pub struct StableDiffusionConfig {
-63    pub width: usize,
-64    pub height: usize,
-65    pub clip: clip::Config,
-66    pub clip2: Option<clip::Config>,
-67    autoencoder: vae::AutoEncoderKLConfig,
-68    unet: unet_2d::UNet2DConditionModelConfig,
-69    scheduler: Arc<dyn SchedulerConfig>,
-70}
-71
-72impl StableDiffusionConfig {
-73    pub fn v1_5(
-74        sliced_attention_size: Option<usize>,
-75        height: Option<usize>,
-76        width: Option<usize>,
-77    ) -> Self {
-78        let bc = |out_channels, use_cross_attn, attention_head_dim| unet_2d::BlockConfig {
-79            out_channels,
-80            use_cross_attn,
-81            attention_head_dim,
-82        };
-83        // https://huggingface.co/runwayml/stable-diffusion-v1-5/blob/main/unet/config.json
-84        let unet = unet_2d::UNet2DConditionModelConfig {
-85            blocks: vec![
-86                bc(320, Some(1), 8),
-87                bc(640, Some(1), 8),
-88                bc(1280, Some(1), 8),
-89                bc(1280, None, 8),
-90            ],
-91            center_input_sample: false,
-92            cross_attention_dim: 768,
-93            downsample_padding: 1,
-94            flip_sin_to_cos: true,
-95            freq_shift: 0.,
-96            layers_per_block: 2,
-97            mid_block_scale_factor: 1.,
-98            norm_eps: 1e-5,
-99            norm_num_groups: 32,
-100            sliced_attention_size,
-101            use_linear_projection: false,
-102        };
-103        let autoencoder = vae::AutoEncoderKLConfig {
-104            block_out_channels: vec![128, 256, 512, 512],
-105            layers_per_block: 2,
-106            latent_channels: 4,
-107            norm_num_groups: 32,
-108            use_quant_conv: true,
-109            use_post_quant_conv: true,
-110        };
-111        let height = if let Some(height) = height {
-112            assert_eq!(height % 8, 0, "height has to be divisible by 8");
-113            height
-114        } else {
-115            512
-116        };
-117
-118        let width = if let Some(width) = width {
-119            assert_eq!(width % 8, 0, "width has to be divisible by 8");
-120            width
-121        } else {
-122            512
-123        };
-124
-125        let scheduler = Arc::new(ddim::DDIMSchedulerConfig {
-126            prediction_type: schedulers::PredictionType::Epsilon,
-127            ..Default::default()
-128        });
-129
-130        StableDiffusionConfig {
-131            width,
-132            height,
-133            clip: clip::Config::v1_5(),
-134            clip2: None,
-135            autoencoder,
-136            scheduler,
-137            unet,
-138        }
-139    }
-140
-141    fn v2_1_(
-142        sliced_attention_size: Option<usize>,
-143        height: Option<usize>,
-144        width: Option<usize>,
-145        prediction_type: schedulers::PredictionType,
-146    ) -> Self {
-147        let bc = |out_channels, use_cross_attn, attention_head_dim| unet_2d::BlockConfig {
-148            out_channels,
-149            use_cross_attn,
-150            attention_head_dim,
-151        };
-152        // https://huggingface.co/stabilityai/stable-diffusion-2-1/blob/main/unet/config.json
-153        let unet = unet_2d::UNet2DConditionModelConfig {
-154            blocks: vec![
-155                bc(320, Some(1), 5),
-156                bc(640, Some(1), 10),
-157                bc(1280, Some(1), 20),
-158                bc(1280, None, 20),
-159            ],
-160            center_input_sample: false,
-161            cross_attention_dim: 1024,
-162            downsample_padding: 1,
-163            flip_sin_to_cos: true,
-164            freq_shift: 0.,
-165            layers_per_block: 2,
-166            mid_block_scale_factor: 1.,
-167            norm_eps: 1e-5,
-168            norm_num_groups: 32,
-169            sliced_attention_size,
-170            use_linear_projection: true,
-171        };
-172        // https://huggingface.co/stabilityai/stable-diffusion-2-1/blob/main/vae/config.json
-173        let autoencoder = vae::AutoEncoderKLConfig {
-174            block_out_channels: vec![128, 256, 512, 512],
-175            layers_per_block: 2,
-176            latent_channels: 4,
-177            norm_num_groups: 32,
-178            use_quant_conv: true,
-179            use_post_quant_conv: true,
-180        };
-181        let scheduler = Arc::new(ddim::DDIMSchedulerConfig {
-182            prediction_type,
-183            ..Default::default()
-184        });
-185
-186        let height = if let Some(height) = height {
-187            assert_eq!(height % 8, 0, "height has to be divisible by 8");
-188            height
-189        } else {
-190            768
-191        };
-192
-193        let width = if let Some(width) = width {
-194            assert_eq!(width % 8, 0, "width has to be divisible by 8");
-195            width
-196        } else {
-197            768
-198        };
-199
-200        StableDiffusionConfig {
-201            width,
-202            height,
-203            clip: clip::Config::v2_1(),
-204            clip2: None,
-205            autoencoder,
-206            scheduler,
-207            unet,
-208        }
-209    }
-210
-211    pub fn v2_1(
-212        sliced_attention_size: Option<usize>,
-213        height: Option<usize>,
-214        width: Option<usize>,
-215    ) -> Self {
-216        // https://huggingface.co/stabilityai/stable-diffusion-2-1/blob/main/scheduler/scheduler_config.json
-217        Self::v2_1_(
-218            sliced_attention_size,
-219            height,
-220            width,
-221            schedulers::PredictionType::VPrediction,
-222        )
-223    }
-224
-225    fn sdxl_(
-226        sliced_attention_size: Option<usize>,
-227        height: Option<usize>,
-228        width: Option<usize>,
-229        prediction_type: schedulers::PredictionType,
-230    ) -> Self {
-231        let bc = |out_channels, use_cross_attn, attention_head_dim| unet_2d::BlockConfig {
-232            out_channels,
-233            use_cross_attn,
-234            attention_head_dim,
-235        };
-236        // https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/unet/config.json
-237        let unet = unet_2d::UNet2DConditionModelConfig {
-238            blocks: vec![
-239                bc(320, None, 5),
-240                bc(640, Some(2), 10),
-241                bc(1280, Some(10), 20),
-242            ],
-243            center_input_sample: false,
-244            cross_attention_dim: 2048,
-245            downsample_padding: 1,
-246            flip_sin_to_cos: true,
-247            freq_shift: 0.,
-248            layers_per_block: 2,
-249            mid_block_scale_factor: 1.,
-250            norm_eps: 1e-5,
-251            norm_num_groups: 32,
-252            sliced_attention_size,
-253            use_linear_projection: true,
-254        };
-255        // https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/vae/config.json
-256        let autoencoder = vae::AutoEncoderKLConfig {
-257            block_out_channels: vec![128, 256, 512, 512],
-258            layers_per_block: 2,
-259            latent_channels: 4,
-260            norm_num_groups: 32,
-261            use_quant_conv: true,
-262            use_post_quant_conv: true,
-263        };
-264        let scheduler = Arc::new(ddim::DDIMSchedulerConfig {
-265            prediction_type,
-266            ..Default::default()
-267        });
-268
-269        let height = if let Some(height) = height {
-270            assert_eq!(height % 8, 0, "height has to be divisible by 8");
-271            height
-272        } else {
-273            1024
-274        };
-275
-276        let width = if let Some(width) = width {
-277            assert_eq!(width % 8, 0, "width has to be divisible by 8");
-278            width
-279        } else {
-280            1024
-281        };
-282
-283        StableDiffusionConfig {
-284            width,
-285            height,
-286            clip: clip::Config::sdxl(),
-287            clip2: Some(clip::Config::sdxl2()),
-288            autoencoder,
-289            scheduler,
-290            unet,
-291        }
-292    }
-293
-294    fn sdxl_turbo_(
-295        sliced_attention_size: Option<usize>,
-296        height: Option<usize>,
-297        width: Option<usize>,
-298        prediction_type: schedulers::PredictionType,
-299    ) -> Self {
-300        let bc = |out_channels, use_cross_attn, attention_head_dim| unet_2d::BlockConfig {
-301            out_channels,
-302            use_cross_attn,
-303            attention_head_dim,
-304        };
-305        // https://huggingface.co/stabilityai/sdxl-turbo/blob/main/unet/config.json
-306        let unet = unet_2d::UNet2DConditionModelConfig {
-307            blocks: vec![
-308                bc(320, None, 5),
-309                bc(640, Some(2), 10),
-310                bc(1280, Some(10), 20),
-311            ],
-312            center_input_sample: false,
-313            cross_attention_dim: 2048,
-314            downsample_padding: 1,
-315            flip_sin_to_cos: true,
-316            freq_shift: 0.,
-317            layers_per_block: 2,
-318            mid_block_scale_factor: 1.,
-319            norm_eps: 1e-5,
-320            norm_num_groups: 32,
-321            sliced_attention_size,
-322            use_linear_projection: true,
-323        };
-324        // https://huggingface.co/stabilityai/sdxl-turbo/blob/main/vae/config.json
-325        let autoencoder = vae::AutoEncoderKLConfig {
-326            block_out_channels: vec![128, 256, 512, 512],
-327            layers_per_block: 2,
-328            latent_channels: 4,
-329            norm_num_groups: 32,
-330            use_quant_conv: true,
-331            use_post_quant_conv: true,
-332        };
-333        let scheduler = Arc::new(
-334            euler_ancestral_discrete::EulerAncestralDiscreteSchedulerConfig {
-335                prediction_type,
-336                timestep_spacing: schedulers::TimestepSpacing::Trailing,
-337                ..Default::default()
-338            },
-339        );
-340
-341        let height = if let Some(height) = height {
-342            assert_eq!(height % 8, 0, "height has to be divisible by 8");
-343            height
-344        } else {
-345            512
-346        };
-347
-348        let width = if let Some(width) = width {
-349            assert_eq!(width % 8, 0, "width has to be divisible by 8");
-350            width
-351        } else {
-352            512
-353        };
-354
-355        Self {
-356            width,
-357            height,
-358            clip: clip::Config::sdxl(),
-359            clip2: Some(clip::Config::sdxl2()),
-360            autoencoder,
-361            scheduler,
-362            unet,
-363        }
-364    }
-365
-366    pub fn sdxl(
-367        sliced_attention_size: Option<usize>,
-368        height: Option<usize>,
-369        width: Option<usize>,
-370    ) -> Self {
-371        Self::sdxl_(
-372            sliced_attention_size,
-373            height,
-374            width,
-375            // https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/scheduler/scheduler_config.json
-376            schedulers::PredictionType::Epsilon,
-377        )
-378    }
-379
-380    pub fn sdxl_turbo(
-381        sliced_attention_size: Option<usize>,
-382        height: Option<usize>,
-383        width: Option<usize>,
-384    ) -> Self {
-385        Self::sdxl_turbo_(
-386            sliced_attention_size,
-387            height,
-388            width,
-389            // https://huggingface.co/stabilityai/sdxl-turbo/blob/main/scheduler/scheduler_config.json
-390            schedulers::PredictionType::Epsilon,
-391        )
-392    }
-393
-394    pub fn ssd1b(
-395        sliced_attention_size: Option<usize>,
-396        height: Option<usize>,
-397        width: Option<usize>,
-398    ) -> Self {
-399        let bc = |out_channels, use_cross_attn, attention_head_dim| unet_2d::BlockConfig {
-400            out_channels,
-401            use_cross_attn,
-402            attention_head_dim,
-403        };
-404        // https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/unet/config.json
-405        let unet = unet_2d::UNet2DConditionModelConfig {
-406            blocks: vec![
-407                bc(320, None, 5),
-408                bc(640, Some(2), 10),
-409                bc(1280, Some(10), 20),
-410            ],
-411            center_input_sample: false,
-412            cross_attention_dim: 2048,
-413            downsample_padding: 1,
-414            flip_sin_to_cos: true,
-415            freq_shift: 0.,
-416            layers_per_block: 2,
-417            mid_block_scale_factor: 1.,
-418            norm_eps: 1e-5,
-419            norm_num_groups: 32,
-420            sliced_attention_size,
-421            use_linear_projection: true,
-422        };
-423        // https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/vae/config.json
-424        let autoencoder = vae::AutoEncoderKLConfig {
-425            block_out_channels: vec![128, 256, 512, 512],
-426            layers_per_block: 2,
-427            latent_channels: 4,
-428            norm_num_groups: 32,
-429            use_quant_conv: true,
-430            use_post_quant_conv: true,
-431        };
-432        let scheduler = Arc::new(ddim::DDIMSchedulerConfig {
-433            ..Default::default()
-434        });
-435
-436        let height = if let Some(height) = height {
-437            assert_eq!(height % 8, 0, "height has to be divisible by 8");
-438            height
-439        } else {
-440            1024
-441        };
-442
-443        let width = if let Some(width) = width {
-444            assert_eq!(width % 8, 0, "width has to be divisible by 8");
-445            width
-446        } else {
-447            1024
-448        };
-449
-450        Self {
-451            width,
-452            height,
-453            clip: clip::Config::ssd1b(),
-454            clip2: Some(clip::Config::ssd1b2()),
-455            autoencoder,
-456            scheduler,
-457            unet,
-458        }
-459    }
-460
-461    pub fn build_vae<P: AsRef<std::path::Path>>(
-462        &self,
-463        vae_weights: P,
-464        device: &Device,
-465        dtype: DType,
-466    ) -> Result<vae::AutoEncoderKL> {
-467        let vs_ae =
-468            unsafe { nn::VarBuilder::from_mmaped_safetensors(&[vae_weights], dtype, device)? };
-469        // https://huggingface.co/runwayml/stable-diffusion-v1-5/blob/main/vae/config.json
-470        let autoencoder = vae::AutoEncoderKL::new(vs_ae, 3, 3, self.autoencoder.clone())?;
-471        Ok(autoencoder)
-472    }
-473
-474    pub fn build_unet<P: AsRef<std::path::Path>>(
-475        &self,
-476        unet_weights: P,
-477        device: &Device,
-478        in_channels: usize,
-479        use_flash_attn: bool,
-480        dtype: DType,
-481    ) -> Result<unet_2d::UNet2DConditionModel> {
-482        let vs_unet =
-483            unsafe { nn::VarBuilder::from_mmaped_safetensors(&[unet_weights], dtype, device)? };
-484        let unet = unet_2d::UNet2DConditionModel::new(
-485            vs_unet,
-486            in_channels,
-487            4,
-488            use_flash_attn,
-489            self.unet.clone(),
-490        )?;
-491        Ok(unet)
-492    }
-493
-494    pub fn build_scheduler(&self, n_steps: usize) -> Result<Box<dyn Scheduler>> {
-495        self.scheduler.build(n_steps)
-496    }
-497}
-498
-499pub fn build_clip_transformer<P: AsRef<std::path::Path>>(
-500    clip: &clip::Config,
-501    clip_weights: P,
-502    device: &Device,
-503    dtype: DType,
-504) -> Result<clip::ClipTextTransformer> {
-505    let vs = unsafe { nn::VarBuilder::from_mmaped_safetensors(&[clip_weights], dtype, device)? };
-506    let text_model = clip::ClipTextTransformer::new(vs, clip)?;
-507    Ok(text_model)
-508}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/resnet.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/resnet.rs.html deleted file mode 100644 index 304015c..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/resnet.rs.html +++ /dev/null @@ -1,140 +0,0 @@ -resnet.rs - source

candle_transformers/models/stable_diffusion/
resnet.rs

1//! ResNet Building Blocks
-2//!
-3//! Some Residual Network blocks used in UNet models.
-4//!
-5//! Denoising Diffusion Implicit Models, K. He and al, 2015.
-6//! - [Paper](https://arxiv.org/abs/1512.03385)
-7//!
-8use crate::models::with_tracing::{conv2d, Conv2d};
-9use candle::{Result, Tensor, D};
-10use candle_nn as nn;
-11use candle_nn::Module;
-12
-13/// Configuration for a ResNet block.
-14#[derive(Debug, Clone, Copy)]
-15pub struct ResnetBlock2DConfig {
-16    /// The number of output channels, defaults to the number of input channels.
-17    pub out_channels: Option<usize>,
-18    pub temb_channels: Option<usize>,
-19    /// The number of groups to use in group normalization.
-20    pub groups: usize,
-21    pub groups_out: Option<usize>,
-22    /// The epsilon to be used in the group normalization operations.
-23    pub eps: f64,
-24    /// Whether to use a 2D convolution in the skip connection. When using None,
-25    /// such a convolution is used if the number of input channels is different from
-26    /// the number of output channels.
-27    pub use_in_shortcut: Option<bool>,
-28    // non_linearity: silu
-29    /// The final output is scaled by dividing by this value.
-30    pub output_scale_factor: f64,
-31}
-32
-33impl Default for ResnetBlock2DConfig {
-34    fn default() -> Self {
-35        Self {
-36            out_channels: None,
-37            temb_channels: Some(512),
-38            groups: 32,
-39            groups_out: None,
-40            eps: 1e-6,
-41            use_in_shortcut: None,
-42            output_scale_factor: 1.,
-43        }
-44    }
-45}
-46
-47#[derive(Debug)]
-48pub struct ResnetBlock2D {
-49    norm1: nn::GroupNorm,
-50    conv1: Conv2d,
-51    norm2: nn::GroupNorm,
-52    conv2: Conv2d,
-53    time_emb_proj: Option<nn::Linear>,
-54    conv_shortcut: Option<Conv2d>,
-55    span: tracing::Span,
-56    config: ResnetBlock2DConfig,
-57}
-58
-59impl ResnetBlock2D {
-60    pub fn new(
-61        vs: nn::VarBuilder,
-62        in_channels: usize,
-63        config: ResnetBlock2DConfig,
-64    ) -> Result<Self> {
-65        let out_channels = config.out_channels.unwrap_or(in_channels);
-66        let conv_cfg = nn::Conv2dConfig {
-67            stride: 1,
-68            padding: 1,
-69            groups: 1,
-70            dilation: 1,
-71        };
-72        let norm1 = nn::group_norm(config.groups, in_channels, config.eps, vs.pp("norm1"))?;
-73        let conv1 = conv2d(in_channels, out_channels, 3, conv_cfg, vs.pp("conv1"))?;
-74        let groups_out = config.groups_out.unwrap_or(config.groups);
-75        let norm2 = nn::group_norm(groups_out, out_channels, config.eps, vs.pp("norm2"))?;
-76        let conv2 = conv2d(out_channels, out_channels, 3, conv_cfg, vs.pp("conv2"))?;
-77        let use_in_shortcut = config
-78            .use_in_shortcut
-79            .unwrap_or(in_channels != out_channels);
-80        let conv_shortcut = if use_in_shortcut {
-81            let conv_cfg = nn::Conv2dConfig {
-82                stride: 1,
-83                padding: 0,
-84                groups: 1,
-85                dilation: 1,
-86            };
-87            Some(conv2d(
-88                in_channels,
-89                out_channels,
-90                1,
-91                conv_cfg,
-92                vs.pp("conv_shortcut"),
-93            )?)
-94        } else {
-95            None
-96        };
-97        let time_emb_proj = match config.temb_channels {
-98            None => None,
-99            Some(temb_channels) => Some(nn::linear(
-100                temb_channels,
-101                out_channels,
-102                vs.pp("time_emb_proj"),
-103            )?),
-104        };
-105        let span = tracing::span!(tracing::Level::TRACE, "resnet2d");
-106        Ok(Self {
-107            norm1,
-108            conv1,
-109            norm2,
-110            conv2,
-111            time_emb_proj,
-112            span,
-113            config,
-114            conv_shortcut,
-115        })
-116    }
-117
-118    pub fn forward(&self, xs: &Tensor, temb: Option<&Tensor>) -> Result<Tensor> {
-119        let _enter = self.span.enter();
-120        let shortcut_xs = match &self.conv_shortcut {
-121            Some(conv_shortcut) => conv_shortcut.forward(xs)?,
-122            None => xs.clone(),
-123        };
-124        let xs = self.norm1.forward(xs)?;
-125        let xs = self.conv1.forward(&nn::ops::silu(&xs)?)?;
-126        let xs = match (temb, &self.time_emb_proj) {
-127            (Some(temb), Some(time_emb_proj)) => time_emb_proj
-128                .forward(&nn::ops::silu(temb)?)?
-129                .unsqueeze(D::Minus1)?
-130                .unsqueeze(D::Minus1)?
-131                .broadcast_add(&xs)?,
-132            _ => xs,
-133        };
-134        let xs = self
-135            .conv2
-136            .forward(&nn::ops::silu(&self.norm2.forward(&xs)?)?)?;
-137        (shortcut_xs + xs)? / self.config.output_scale_factor
-138    }
-139}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/schedulers.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/schedulers.rs.html deleted file mode 100644 index da2c75e..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/schedulers.rs.html +++ /dev/null @@ -1,78 +0,0 @@ -schedulers.rs - source

candle_transformers/models/stable_diffusion/
schedulers.rs

1#![allow(dead_code)]
-2//! # Diffusion pipelines and models
-3//!
-4//! Noise schedulers can be used to set the trade-off between
-5//! inference speed and quality.
-6use candle::{Result, Tensor};
-7
-8pub trait SchedulerConfig: std::fmt::Debug + Send + Sync {
-9    fn build(&self, inference_steps: usize) -> Result<Box<dyn Scheduler>>;
-10}
-11
-12/// This trait represents a scheduler for the diffusion process.
-13pub trait Scheduler {
-14    fn timesteps(&self) -> &[usize];
-15
-16    fn add_noise(&self, original: &Tensor, noise: Tensor, timestep: usize) -> Result<Tensor>;
-17
-18    fn init_noise_sigma(&self) -> f64;
-19
-20    fn scale_model_input(&self, sample: Tensor, _timestep: usize) -> Result<Tensor>;
-21
-22    fn step(&mut self, model_output: &Tensor, timestep: usize, sample: &Tensor) -> Result<Tensor>;
-23}
-24
-25/// This represents how beta ranges from its minimum value to the maximum
-26/// during training.
-27#[derive(Debug, Clone, Copy)]
-28pub enum BetaSchedule {
-29    /// Linear interpolation.
-30    Linear,
-31    /// Linear interpolation of the square root of beta.
-32    ScaledLinear,
-33    /// Glide cosine schedule
-34    SquaredcosCapV2,
-35}
-36
-37#[derive(Debug, Clone, Copy)]
-38pub enum PredictionType {
-39    Epsilon,
-40    VPrediction,
-41    Sample,
-42}
-43
-44/// Time step spacing for the diffusion process.
-45///
-46/// "linspace", "leading", "trailing" corresponds to annotation of Table 2. of the [paper](https://arxiv.org/abs/2305.08891)
-47#[derive(Debug, Clone, Copy)]
-48pub enum TimestepSpacing {
-49    Leading,
-50    Linspace,
-51    Trailing,
-52}
-53
-54impl Default for TimestepSpacing {
-55    fn default() -> Self {
-56        Self::Leading
-57    }
-58}
-59
-60/// Create a beta schedule that discretizes the given alpha_t_bar function, which defines the cumulative product of
-61/// `(1-beta)` over time from `t = [0,1]`.
-62///
-63/// Contains a function `alpha_bar` that takes an argument `t` and transforms it to the cumulative product of `(1-beta)`
-64/// up to that part of the diffusion process.
-65pub(crate) fn betas_for_alpha_bar(num_diffusion_timesteps: usize, max_beta: f64) -> Result<Tensor> {
-66    let alpha_bar = |time_step: usize| {
-67        f64::cos((time_step as f64 + 0.008) / 1.008 * std::f64::consts::FRAC_PI_2).powi(2)
-68    };
-69    let mut betas = Vec::with_capacity(num_diffusion_timesteps);
-70    for i in 0..num_diffusion_timesteps {
-71        let t1 = i / num_diffusion_timesteps;
-72        let t2 = (i + 1) / num_diffusion_timesteps;
-73        betas.push((1.0 - alpha_bar(t2) / alpha_bar(t1)).min(max_beta));
-74    }
-75    let betas_len = betas.len();
-76    Tensor::from_vec(betas, betas_len, &candle::Device::Cpu)
-77}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/unet_2d.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/unet_2d.rs.html deleted file mode 100644 index fa60029..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/unet_2d.rs.html +++ /dev/null @@ -1,402 +0,0 @@ -unet_2d.rs - source

candle_transformers/models/stable_diffusion/
unet_2d.rs

1//! 2D UNet Denoising Models
-2//!
-3//! The 2D Unet models take as input a noisy sample and the current diffusion
-4//! timestep and return a denoised version of the input.
-5use super::embeddings::{TimestepEmbedding, Timesteps};
-6use super::unet_2d_blocks::*;
-7use crate::models::with_tracing::{conv2d, Conv2d};
-8use candle::{Result, Tensor};
-9use candle_nn as nn;
-10use candle_nn::Module;
-11
-12#[derive(Debug, Clone, Copy)]
-13pub struct BlockConfig {
-14    pub out_channels: usize,
-15    /// When `None` no cross-attn is used, when `Some(d)` then cross-attn is used and `d` is the
-16    /// number of transformer blocks to be used.
-17    pub use_cross_attn: Option<usize>,
-18    pub attention_head_dim: usize,
-19}
-20
-21#[derive(Debug, Clone)]
-22pub struct UNet2DConditionModelConfig {
-23    pub center_input_sample: bool,
-24    pub flip_sin_to_cos: bool,
-25    pub freq_shift: f64,
-26    pub blocks: Vec<BlockConfig>,
-27    pub layers_per_block: usize,
-28    pub downsample_padding: usize,
-29    pub mid_block_scale_factor: f64,
-30    pub norm_num_groups: usize,
-31    pub norm_eps: f64,
-32    pub cross_attention_dim: usize,
-33    pub sliced_attention_size: Option<usize>,
-34    pub use_linear_projection: bool,
-35}
-36
-37impl Default for UNet2DConditionModelConfig {
-38    fn default() -> Self {
-39        Self {
-40            center_input_sample: false,
-41            flip_sin_to_cos: true,
-42            freq_shift: 0.,
-43            blocks: vec![
-44                BlockConfig {
-45                    out_channels: 320,
-46                    use_cross_attn: Some(1),
-47                    attention_head_dim: 8,
-48                },
-49                BlockConfig {
-50                    out_channels: 640,
-51                    use_cross_attn: Some(1),
-52                    attention_head_dim: 8,
-53                },
-54                BlockConfig {
-55                    out_channels: 1280,
-56                    use_cross_attn: Some(1),
-57                    attention_head_dim: 8,
-58                },
-59                BlockConfig {
-60                    out_channels: 1280,
-61                    use_cross_attn: None,
-62                    attention_head_dim: 8,
-63                },
-64            ],
-65            layers_per_block: 2,
-66            downsample_padding: 1,
-67            mid_block_scale_factor: 1.,
-68            norm_num_groups: 32,
-69            norm_eps: 1e-5,
-70            cross_attention_dim: 1280,
-71            sliced_attention_size: None,
-72            use_linear_projection: false,
-73        }
-74    }
-75}
-76
-77#[derive(Debug)]
-78pub(crate) enum UNetDownBlock {
-79    Basic(DownBlock2D),
-80    CrossAttn(CrossAttnDownBlock2D),
-81}
-82
-83#[derive(Debug)]
-84enum UNetUpBlock {
-85    Basic(UpBlock2D),
-86    CrossAttn(CrossAttnUpBlock2D),
-87}
-88
-89#[derive(Debug)]
-90pub struct UNet2DConditionModel {
-91    conv_in: Conv2d,
-92    time_proj: Timesteps,
-93    time_embedding: TimestepEmbedding,
-94    down_blocks: Vec<UNetDownBlock>,
-95    mid_block: UNetMidBlock2DCrossAttn,
-96    up_blocks: Vec<UNetUpBlock>,
-97    conv_norm_out: nn::GroupNorm,
-98    conv_out: Conv2d,
-99    span: tracing::Span,
-100    config: UNet2DConditionModelConfig,
-101}
-102
-103impl UNet2DConditionModel {
-104    pub fn new(
-105        vs: nn::VarBuilder,
-106        in_channels: usize,
-107        out_channels: usize,
-108        use_flash_attn: bool,
-109        config: UNet2DConditionModelConfig,
-110    ) -> Result<Self> {
-111        let n_blocks = config.blocks.len();
-112        let b_channels = config.blocks[0].out_channels;
-113        let bl_channels = config.blocks.last().unwrap().out_channels;
-114        let bl_attention_head_dim = config.blocks.last().unwrap().attention_head_dim;
-115        let time_embed_dim = b_channels * 4;
-116        let conv_cfg = nn::Conv2dConfig {
-117            padding: 1,
-118            ..Default::default()
-119        };
-120        let conv_in = conv2d(in_channels, b_channels, 3, conv_cfg, vs.pp("conv_in"))?;
-121
-122        let time_proj = Timesteps::new(b_channels, config.flip_sin_to_cos, config.freq_shift);
-123        let time_embedding =
-124            TimestepEmbedding::new(vs.pp("time_embedding"), b_channels, time_embed_dim)?;
-125
-126        let vs_db = vs.pp("down_blocks");
-127        let down_blocks = (0..n_blocks)
-128            .map(|i| {
-129                let BlockConfig {
-130                    out_channels,
-131                    use_cross_attn,
-132                    attention_head_dim,
-133                } = config.blocks[i];
-134
-135                // Enable automatic attention slicing if the config sliced_attention_size is set to 0.
-136                let sliced_attention_size = match config.sliced_attention_size {
-137                    Some(0) => Some(attention_head_dim / 2),
-138                    _ => config.sliced_attention_size,
-139                };
-140
-141                let in_channels = if i > 0 {
-142                    config.blocks[i - 1].out_channels
-143                } else {
-144                    b_channels
-145                };
-146                let db_cfg = DownBlock2DConfig {
-147                    num_layers: config.layers_per_block,
-148                    resnet_eps: config.norm_eps,
-149                    resnet_groups: config.norm_num_groups,
-150                    add_downsample: i < n_blocks - 1,
-151                    downsample_padding: config.downsample_padding,
-152                    ..Default::default()
-153                };
-154                if let Some(transformer_layers_per_block) = use_cross_attn {
-155                    let config = CrossAttnDownBlock2DConfig {
-156                        downblock: db_cfg,
-157                        attn_num_head_channels: attention_head_dim,
-158                        cross_attention_dim: config.cross_attention_dim,
-159                        sliced_attention_size,
-160                        use_linear_projection: config.use_linear_projection,
-161                        transformer_layers_per_block,
-162                    };
-163                    let block = CrossAttnDownBlock2D::new(
-164                        vs_db.pp(i.to_string()),
-165                        in_channels,
-166                        out_channels,
-167                        Some(time_embed_dim),
-168                        use_flash_attn,
-169                        config,
-170                    )?;
-171                    Ok(UNetDownBlock::CrossAttn(block))
-172                } else {
-173                    let block = DownBlock2D::new(
-174                        vs_db.pp(i.to_string()),
-175                        in_channels,
-176                        out_channels,
-177                        Some(time_embed_dim),
-178                        db_cfg,
-179                    )?;
-180                    Ok(UNetDownBlock::Basic(block))
-181                }
-182            })
-183            .collect::<Result<Vec<_>>>()?;
-184
-185        // https://github.com/huggingface/diffusers/blob/a76f2ad538e73b34d5fe7be08c8eb8ab38c7e90c/src/diffusers/models/unet_2d_condition.py#L462
-186        let mid_transformer_layers_per_block = match config.blocks.last() {
-187            None => 1,
-188            Some(block) => block.use_cross_attn.unwrap_or(1),
-189        };
-190        let mid_cfg = UNetMidBlock2DCrossAttnConfig {
-191            resnet_eps: config.norm_eps,
-192            output_scale_factor: config.mid_block_scale_factor,
-193            cross_attn_dim: config.cross_attention_dim,
-194            attn_num_head_channels: bl_attention_head_dim,
-195            resnet_groups: Some(config.norm_num_groups),
-196            use_linear_projection: config.use_linear_projection,
-197            transformer_layers_per_block: mid_transformer_layers_per_block,
-198            ..Default::default()
-199        };
-200
-201        let mid_block = UNetMidBlock2DCrossAttn::new(
-202            vs.pp("mid_block"),
-203            bl_channels,
-204            Some(time_embed_dim),
-205            use_flash_attn,
-206            mid_cfg,
-207        )?;
-208
-209        let vs_ub = vs.pp("up_blocks");
-210        let up_blocks = (0..n_blocks)
-211            .map(|i| {
-212                let BlockConfig {
-213                    out_channels,
-214                    use_cross_attn,
-215                    attention_head_dim,
-216                } = config.blocks[n_blocks - 1 - i];
-217
-218                // Enable automatic attention slicing if the config sliced_attention_size is set to 0.
-219                let sliced_attention_size = match config.sliced_attention_size {
-220                    Some(0) => Some(attention_head_dim / 2),
-221                    _ => config.sliced_attention_size,
-222                };
-223
-224                let prev_out_channels = if i > 0 {
-225                    config.blocks[n_blocks - i].out_channels
-226                } else {
-227                    bl_channels
-228                };
-229                let in_channels = {
-230                    let index = if i == n_blocks - 1 {
-231                        0
-232                    } else {
-233                        n_blocks - i - 2
-234                    };
-235                    config.blocks[index].out_channels
-236                };
-237                let ub_cfg = UpBlock2DConfig {
-238                    num_layers: config.layers_per_block + 1,
-239                    resnet_eps: config.norm_eps,
-240                    resnet_groups: config.norm_num_groups,
-241                    add_upsample: i < n_blocks - 1,
-242                    ..Default::default()
-243                };
-244                if let Some(transformer_layers_per_block) = use_cross_attn {
-245                    let config = CrossAttnUpBlock2DConfig {
-246                        upblock: ub_cfg,
-247                        attn_num_head_channels: attention_head_dim,
-248                        cross_attention_dim: config.cross_attention_dim,
-249                        sliced_attention_size,
-250                        use_linear_projection: config.use_linear_projection,
-251                        transformer_layers_per_block,
-252                    };
-253                    let block = CrossAttnUpBlock2D::new(
-254                        vs_ub.pp(i.to_string()),
-255                        in_channels,
-256                        prev_out_channels,
-257                        out_channels,
-258                        Some(time_embed_dim),
-259                        use_flash_attn,
-260                        config,
-261                    )?;
-262                    Ok(UNetUpBlock::CrossAttn(block))
-263                } else {
-264                    let block = UpBlock2D::new(
-265                        vs_ub.pp(i.to_string()),
-266                        in_channels,
-267                        prev_out_channels,
-268                        out_channels,
-269                        Some(time_embed_dim),
-270                        ub_cfg,
-271                    )?;
-272                    Ok(UNetUpBlock::Basic(block))
-273                }
-274            })
-275            .collect::<Result<Vec<_>>>()?;
-276
-277        let conv_norm_out = nn::group_norm(
-278            config.norm_num_groups,
-279            b_channels,
-280            config.norm_eps,
-281            vs.pp("conv_norm_out"),
-282        )?;
-283        let conv_out = conv2d(b_channels, out_channels, 3, conv_cfg, vs.pp("conv_out"))?;
-284        let span = tracing::span!(tracing::Level::TRACE, "unet2d");
-285        Ok(Self {
-286            conv_in,
-287            time_proj,
-288            time_embedding,
-289            down_blocks,
-290            mid_block,
-291            up_blocks,
-292            conv_norm_out,
-293            conv_out,
-294            span,
-295            config,
-296        })
-297    }
-298
-299    pub fn forward(
-300        &self,
-301        xs: &Tensor,
-302        timestep: f64,
-303        encoder_hidden_states: &Tensor,
-304    ) -> Result<Tensor> {
-305        let _enter = self.span.enter();
-306        self.forward_with_additional_residuals(xs, timestep, encoder_hidden_states, None, None)
-307    }
-308
-309    pub fn forward_with_additional_residuals(
-310        &self,
-311        xs: &Tensor,
-312        timestep: f64,
-313        encoder_hidden_states: &Tensor,
-314        down_block_additional_residuals: Option<&[Tensor]>,
-315        mid_block_additional_residual: Option<&Tensor>,
-316    ) -> Result<Tensor> {
-317        let (bsize, _channels, height, width) = xs.dims4()?;
-318        let device = xs.device();
-319        let n_blocks = self.config.blocks.len();
-320        let num_upsamplers = n_blocks - 1;
-321        let default_overall_up_factor = 2usize.pow(num_upsamplers as u32);
-322        let forward_upsample_size =
-323            height % default_overall_up_factor != 0 || width % default_overall_up_factor != 0;
-324        // 0. center input if necessary
-325        let xs = if self.config.center_input_sample {
-326            ((xs * 2.0)? - 1.0)?
-327        } else {
-328            xs.clone()
-329        };
-330        // 1. time
-331        let emb = (Tensor::ones(bsize, xs.dtype(), device)? * timestep)?;
-332        let emb = self.time_proj.forward(&emb)?;
-333        let emb = self.time_embedding.forward(&emb)?;
-334        // 2. pre-process
-335        let xs = self.conv_in.forward(&xs)?;
-336        // 3. down
-337        let mut down_block_res_xs = vec![xs.clone()];
-338        let mut xs = xs;
-339        for down_block in self.down_blocks.iter() {
-340            let (_xs, res_xs) = match down_block {
-341                UNetDownBlock::Basic(b) => b.forward(&xs, Some(&emb))?,
-342                UNetDownBlock::CrossAttn(b) => {
-343                    b.forward(&xs, Some(&emb), Some(encoder_hidden_states))?
-344                }
-345            };
-346            down_block_res_xs.extend(res_xs);
-347            xs = _xs;
-348        }
-349
-350        let new_down_block_res_xs =
-351            if let Some(down_block_additional_residuals) = down_block_additional_residuals {
-352                let mut v = vec![];
-353                // A previous version of this code had a bug because of the addition being made
-354                // in place via += hence modifying the input of the mid block.
-355                for (i, residuals) in down_block_additional_residuals.iter().enumerate() {
-356                    v.push((&down_block_res_xs[i] + residuals)?)
-357                }
-358                v
-359            } else {
-360                down_block_res_xs
-361            };
-362        let mut down_block_res_xs = new_down_block_res_xs;
-363
-364        // 4. mid
-365        let xs = self
-366            .mid_block
-367            .forward(&xs, Some(&emb), Some(encoder_hidden_states))?;
-368        let xs = match mid_block_additional_residual {
-369            None => xs,
-370            Some(m) => (m + xs)?,
-371        };
-372        // 5. up
-373        let mut xs = xs;
-374        let mut upsample_size = None;
-375        for (i, up_block) in self.up_blocks.iter().enumerate() {
-376            let n_resnets = match up_block {
-377                UNetUpBlock::Basic(b) => b.resnets.len(),
-378                UNetUpBlock::CrossAttn(b) => b.upblock.resnets.len(),
-379            };
-380            let res_xs = down_block_res_xs.split_off(down_block_res_xs.len() - n_resnets);
-381            if i < n_blocks - 1 && forward_upsample_size {
-382                let (_, _, h, w) = down_block_res_xs.last().unwrap().dims4()?;
-383                upsample_size = Some((h, w))
-384            }
-385            xs = match up_block {
-386                UNetUpBlock::Basic(b) => b.forward(&xs, &res_xs, Some(&emb), upsample_size)?,
-387                UNetUpBlock::CrossAttn(b) => b.forward(
-388                    &xs,
-389                    &res_xs,
-390                    Some(&emb),
-391                    upsample_size,
-392                    Some(encoder_hidden_states),
-393                )?,
-394            };
-395        }
-396        // 6. post-process
-397        let xs = self.conv_norm_out.forward(&xs)?;
-398        let xs = nn::ops::silu(&xs)?;
-399        self.conv_out.forward(&xs)
-400    }
-401}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/unet_2d_blocks.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/unet_2d_blocks.rs.html deleted file mode 100644 index 254e4a1..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/unet_2d_blocks.rs.html +++ /dev/null @@ -1,869 +0,0 @@ -unet_2d_blocks.rs - source

candle_transformers/models/stable_diffusion/
unet_2d_blocks.rs

1//! 2D UNet Building Blocks
-2//!
-3use super::attention::{
-4    AttentionBlock, AttentionBlockConfig, SpatialTransformer, SpatialTransformerConfig,
-5};
-6use super::resnet::{ResnetBlock2D, ResnetBlock2DConfig};
-7use crate::models::with_tracing::{conv2d, Conv2d};
-8use candle::{Module, Result, Tensor, D};
-9use candle_nn as nn;
-10
-11#[derive(Debug)]
-12struct Downsample2D {
-13    conv: Option<Conv2d>,
-14    padding: usize,
-15    span: tracing::Span,
-16}
-17
-18impl Downsample2D {
-19    fn new(
-20        vs: nn::VarBuilder,
-21        in_channels: usize,
-22        use_conv: bool,
-23        out_channels: usize,
-24        padding: usize,
-25    ) -> Result<Self> {
-26        let conv = if use_conv {
-27            let config = nn::Conv2dConfig {
-28                stride: 2,
-29                padding,
-30                ..Default::default()
-31            };
-32            let conv = conv2d(in_channels, out_channels, 3, config, vs.pp("conv"))?;
-33            Some(conv)
-34        } else {
-35            None
-36        };
-37        let span = tracing::span!(tracing::Level::TRACE, "downsample2d");
-38        Ok(Self {
-39            conv,
-40            padding,
-41            span,
-42        })
-43    }
-44}
-45
-46impl Module for Downsample2D {
-47    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-48        let _enter = self.span.enter();
-49        match &self.conv {
-50            None => xs.avg_pool2d(2),
-51            Some(conv) => {
-52                if self.padding == 0 {
-53                    let xs = xs
-54                        .pad_with_zeros(D::Minus1, 0, 1)?
-55                        .pad_with_zeros(D::Minus2, 0, 1)?;
-56                    conv.forward(&xs)
-57                } else {
-58                    conv.forward(xs)
-59                }
-60            }
-61        }
-62    }
-63}
-64
-65// This does not support the conv-transpose mode.
-66#[derive(Debug)]
-67struct Upsample2D {
-68    conv: Conv2d,
-69    span: tracing::Span,
-70}
-71
-72impl Upsample2D {
-73    fn new(vs: nn::VarBuilder, in_channels: usize, out_channels: usize) -> Result<Self> {
-74        let config = nn::Conv2dConfig {
-75            padding: 1,
-76            ..Default::default()
-77        };
-78        let conv = conv2d(in_channels, out_channels, 3, config, vs.pp("conv"))?;
-79        let span = tracing::span!(tracing::Level::TRACE, "upsample2d");
-80        Ok(Self { conv, span })
-81    }
-82}
-83
-84impl Upsample2D {
-85    fn forward(&self, xs: &Tensor, size: Option<(usize, usize)>) -> Result<Tensor> {
-86        let _enter = self.span.enter();
-87        let xs = match size {
-88            None => {
-89                let (_bsize, _channels, h, w) = xs.dims4()?;
-90                xs.upsample_nearest2d(2 * h, 2 * w)?
-91            }
-92            Some((h, w)) => xs.upsample_nearest2d(h, w)?,
-93        };
-94        self.conv.forward(&xs)
-95    }
-96}
-97
-98#[derive(Debug, Clone, Copy)]
-99pub struct DownEncoderBlock2DConfig {
-100    pub num_layers: usize,
-101    pub resnet_eps: f64,
-102    pub resnet_groups: usize,
-103    pub output_scale_factor: f64,
-104    pub add_downsample: bool,
-105    pub downsample_padding: usize,
-106}
-107
-108impl Default for DownEncoderBlock2DConfig {
-109    fn default() -> Self {
-110        Self {
-111            num_layers: 1,
-112            resnet_eps: 1e-6,
-113            resnet_groups: 32,
-114            output_scale_factor: 1.,
-115            add_downsample: true,
-116            downsample_padding: 1,
-117        }
-118    }
-119}
-120
-121#[derive(Debug)]
-122pub struct DownEncoderBlock2D {
-123    resnets: Vec<ResnetBlock2D>,
-124    downsampler: Option<Downsample2D>,
-125    span: tracing::Span,
-126    pub config: DownEncoderBlock2DConfig,
-127}
-128
-129impl DownEncoderBlock2D {
-130    pub fn new(
-131        vs: nn::VarBuilder,
-132        in_channels: usize,
-133        out_channels: usize,
-134        config: DownEncoderBlock2DConfig,
-135    ) -> Result<Self> {
-136        let resnets: Vec<_> = {
-137            let vs = vs.pp("resnets");
-138            let conv_cfg = ResnetBlock2DConfig {
-139                eps: config.resnet_eps,
-140                out_channels: Some(out_channels),
-141                groups: config.resnet_groups,
-142                output_scale_factor: config.output_scale_factor,
-143                temb_channels: None,
-144                ..Default::default()
-145            };
-146            (0..(config.num_layers))
-147                .map(|i| {
-148                    let in_channels = if i == 0 { in_channels } else { out_channels };
-149                    ResnetBlock2D::new(vs.pp(i.to_string()), in_channels, conv_cfg)
-150                })
-151                .collect::<Result<Vec<_>>>()?
-152        };
-153        let downsampler = if config.add_downsample {
-154            let downsample = Downsample2D::new(
-155                vs.pp("downsamplers").pp("0"),
-156                out_channels,
-157                true,
-158                out_channels,
-159                config.downsample_padding,
-160            )?;
-161            Some(downsample)
-162        } else {
-163            None
-164        };
-165        let span = tracing::span!(tracing::Level::TRACE, "down-enc2d");
-166        Ok(Self {
-167            resnets,
-168            downsampler,
-169            span,
-170            config,
-171        })
-172    }
-173}
-174
-175impl Module for DownEncoderBlock2D {
-176    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-177        let _enter = self.span.enter();
-178        let mut xs = xs.clone();
-179        for resnet in self.resnets.iter() {
-180            xs = resnet.forward(&xs, None)?
-181        }
-182        match &self.downsampler {
-183            Some(downsampler) => downsampler.forward(&xs),
-184            None => Ok(xs),
-185        }
-186    }
-187}
-188
-189#[derive(Debug, Clone, Copy)]
-190pub struct UpDecoderBlock2DConfig {
-191    pub num_layers: usize,
-192    pub resnet_eps: f64,
-193    pub resnet_groups: usize,
-194    pub output_scale_factor: f64,
-195    pub add_upsample: bool,
-196}
-197
-198impl Default for UpDecoderBlock2DConfig {
-199    fn default() -> Self {
-200        Self {
-201            num_layers: 1,
-202            resnet_eps: 1e-6,
-203            resnet_groups: 32,
-204            output_scale_factor: 1.,
-205            add_upsample: true,
-206        }
-207    }
-208}
-209
-210#[derive(Debug)]
-211pub struct UpDecoderBlock2D {
-212    resnets: Vec<ResnetBlock2D>,
-213    upsampler: Option<Upsample2D>,
-214    span: tracing::Span,
-215    pub config: UpDecoderBlock2DConfig,
-216}
-217
-218impl UpDecoderBlock2D {
-219    pub fn new(
-220        vs: nn::VarBuilder,
-221        in_channels: usize,
-222        out_channels: usize,
-223        config: UpDecoderBlock2DConfig,
-224    ) -> Result<Self> {
-225        let resnets: Vec<_> = {
-226            let vs = vs.pp("resnets");
-227            let conv_cfg = ResnetBlock2DConfig {
-228                out_channels: Some(out_channels),
-229                eps: config.resnet_eps,
-230                groups: config.resnet_groups,
-231                output_scale_factor: config.output_scale_factor,
-232                temb_channels: None,
-233                ..Default::default()
-234            };
-235            (0..(config.num_layers))
-236                .map(|i| {
-237                    let in_channels = if i == 0 { in_channels } else { out_channels };
-238                    ResnetBlock2D::new(vs.pp(i.to_string()), in_channels, conv_cfg)
-239                })
-240                .collect::<Result<Vec<_>>>()?
-241        };
-242        let upsampler = if config.add_upsample {
-243            let upsample =
-244                Upsample2D::new(vs.pp("upsamplers").pp("0"), out_channels, out_channels)?;
-245            Some(upsample)
-246        } else {
-247            None
-248        };
-249        let span = tracing::span!(tracing::Level::TRACE, "up-dec2d");
-250        Ok(Self {
-251            resnets,
-252            upsampler,
-253            span,
-254            config,
-255        })
-256    }
-257}
-258
-259impl Module for UpDecoderBlock2D {
-260    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-261        let _enter = self.span.enter();
-262        let mut xs = xs.clone();
-263        for resnet in self.resnets.iter() {
-264            xs = resnet.forward(&xs, None)?
-265        }
-266        match &self.upsampler {
-267            Some(upsampler) => upsampler.forward(&xs, None),
-268            None => Ok(xs),
-269        }
-270    }
-271}
-272
-273#[derive(Debug, Clone, Copy)]
-274pub struct UNetMidBlock2DConfig {
-275    pub num_layers: usize,
-276    pub resnet_eps: f64,
-277    pub resnet_groups: Option<usize>,
-278    pub attn_num_head_channels: Option<usize>,
-279    // attention_type "default"
-280    pub output_scale_factor: f64,
-281}
-282
-283impl Default for UNetMidBlock2DConfig {
-284    fn default() -> Self {
-285        Self {
-286            num_layers: 1,
-287            resnet_eps: 1e-6,
-288            resnet_groups: Some(32),
-289            attn_num_head_channels: Some(1),
-290            output_scale_factor: 1.,
-291        }
-292    }
-293}
-294
-295#[derive(Debug)]
-296pub struct UNetMidBlock2D {
-297    resnet: ResnetBlock2D,
-298    attn_resnets: Vec<(AttentionBlock, ResnetBlock2D)>,
-299    span: tracing::Span,
-300    pub config: UNetMidBlock2DConfig,
-301}
-302
-303impl UNetMidBlock2D {
-304    pub fn new(
-305        vs: nn::VarBuilder,
-306        in_channels: usize,
-307        temb_channels: Option<usize>,
-308        config: UNetMidBlock2DConfig,
-309    ) -> Result<Self> {
-310        let vs_resnets = vs.pp("resnets");
-311        let vs_attns = vs.pp("attentions");
-312        let resnet_groups = config
-313            .resnet_groups
-314            .unwrap_or_else(|| usize::min(in_channels / 4, 32));
-315        let resnet_cfg = ResnetBlock2DConfig {
-316            eps: config.resnet_eps,
-317            groups: resnet_groups,
-318            output_scale_factor: config.output_scale_factor,
-319            temb_channels,
-320            ..Default::default()
-321        };
-322        let resnet = ResnetBlock2D::new(vs_resnets.pp("0"), in_channels, resnet_cfg)?;
-323        let attn_cfg = AttentionBlockConfig {
-324            num_head_channels: config.attn_num_head_channels,
-325            num_groups: resnet_groups,
-326            rescale_output_factor: config.output_scale_factor,
-327            eps: config.resnet_eps,
-328        };
-329        let mut attn_resnets = vec![];
-330        for index in 0..config.num_layers {
-331            let attn = AttentionBlock::new(vs_attns.pp(index.to_string()), in_channels, attn_cfg)?;
-332            let resnet = ResnetBlock2D::new(
-333                vs_resnets.pp((index + 1).to_string()),
-334                in_channels,
-335                resnet_cfg,
-336            )?;
-337            attn_resnets.push((attn, resnet))
-338        }
-339        let span = tracing::span!(tracing::Level::TRACE, "mid2d");
-340        Ok(Self {
-341            resnet,
-342            attn_resnets,
-343            span,
-344            config,
-345        })
-346    }
-347
-348    pub fn forward(&self, xs: &Tensor, temb: Option<&Tensor>) -> Result<Tensor> {
-349        let _enter = self.span.enter();
-350        let mut xs = self.resnet.forward(xs, temb)?;
-351        for (attn, resnet) in self.attn_resnets.iter() {
-352            xs = resnet.forward(&attn.forward(&xs)?, temb)?
-353        }
-354        Ok(xs)
-355    }
-356}
-357
-358#[derive(Debug, Clone, Copy)]
-359pub struct UNetMidBlock2DCrossAttnConfig {
-360    pub num_layers: usize,
-361    pub resnet_eps: f64,
-362    pub resnet_groups: Option<usize>,
-363    pub attn_num_head_channels: usize,
-364    // attention_type "default"
-365    pub output_scale_factor: f64,
-366    pub cross_attn_dim: usize,
-367    pub sliced_attention_size: Option<usize>,
-368    pub use_linear_projection: bool,
-369    pub transformer_layers_per_block: usize,
-370}
-371
-372impl Default for UNetMidBlock2DCrossAttnConfig {
-373    fn default() -> Self {
-374        Self {
-375            num_layers: 1,
-376            resnet_eps: 1e-6,
-377            resnet_groups: Some(32),
-378            attn_num_head_channels: 1,
-379            output_scale_factor: 1.,
-380            cross_attn_dim: 1280,
-381            sliced_attention_size: None, // Sliced attention disabled
-382            use_linear_projection: false,
-383            transformer_layers_per_block: 1,
-384        }
-385    }
-386}
-387
-388#[derive(Debug)]
-389pub struct UNetMidBlock2DCrossAttn {
-390    resnet: ResnetBlock2D,
-391    attn_resnets: Vec<(SpatialTransformer, ResnetBlock2D)>,
-392    span: tracing::Span,
-393    pub config: UNetMidBlock2DCrossAttnConfig,
-394}
-395
-396impl UNetMidBlock2DCrossAttn {
-397    pub fn new(
-398        vs: nn::VarBuilder,
-399        in_channels: usize,
-400        temb_channels: Option<usize>,
-401        use_flash_attn: bool,
-402        config: UNetMidBlock2DCrossAttnConfig,
-403    ) -> Result<Self> {
-404        let vs_resnets = vs.pp("resnets");
-405        let vs_attns = vs.pp("attentions");
-406        let resnet_groups = config
-407            .resnet_groups
-408            .unwrap_or_else(|| usize::min(in_channels / 4, 32));
-409        let resnet_cfg = ResnetBlock2DConfig {
-410            eps: config.resnet_eps,
-411            groups: resnet_groups,
-412            output_scale_factor: config.output_scale_factor,
-413            temb_channels,
-414            ..Default::default()
-415        };
-416        let resnet = ResnetBlock2D::new(vs_resnets.pp("0"), in_channels, resnet_cfg)?;
-417        let n_heads = config.attn_num_head_channels;
-418        let attn_cfg = SpatialTransformerConfig {
-419            depth: config.transformer_layers_per_block,
-420            num_groups: resnet_groups,
-421            context_dim: Some(config.cross_attn_dim),
-422            sliced_attention_size: config.sliced_attention_size,
-423            use_linear_projection: config.use_linear_projection,
-424        };
-425        let mut attn_resnets = vec![];
-426        for index in 0..config.num_layers {
-427            let attn = SpatialTransformer::new(
-428                vs_attns.pp(index.to_string()),
-429                in_channels,
-430                n_heads,
-431                in_channels / n_heads,
-432                use_flash_attn,
-433                attn_cfg,
-434            )?;
-435            let resnet = ResnetBlock2D::new(
-436                vs_resnets.pp((index + 1).to_string()),
-437                in_channels,
-438                resnet_cfg,
-439            )?;
-440            attn_resnets.push((attn, resnet))
-441        }
-442        let span = tracing::span!(tracing::Level::TRACE, "xa-mid2d");
-443        Ok(Self {
-444            resnet,
-445            attn_resnets,
-446            span,
-447            config,
-448        })
-449    }
-450
-451    pub fn forward(
-452        &self,
-453        xs: &Tensor,
-454        temb: Option<&Tensor>,
-455        encoder_hidden_states: Option<&Tensor>,
-456    ) -> Result<Tensor> {
-457        let _enter = self.span.enter();
-458        let mut xs = self.resnet.forward(xs, temb)?;
-459        for (attn, resnet) in self.attn_resnets.iter() {
-460            xs = resnet.forward(&attn.forward(&xs, encoder_hidden_states)?, temb)?
-461        }
-462        Ok(xs)
-463    }
-464}
-465
-466#[derive(Debug, Clone, Copy)]
-467pub struct DownBlock2DConfig {
-468    pub num_layers: usize,
-469    pub resnet_eps: f64,
-470    // resnet_time_scale_shift: "default"
-471    // resnet_act_fn: "swish"
-472    pub resnet_groups: usize,
-473    pub output_scale_factor: f64,
-474    pub add_downsample: bool,
-475    pub downsample_padding: usize,
-476}
-477
-478impl Default for DownBlock2DConfig {
-479    fn default() -> Self {
-480        Self {
-481            num_layers: 1,
-482            resnet_eps: 1e-6,
-483            resnet_groups: 32,
-484            output_scale_factor: 1.,
-485            add_downsample: true,
-486            downsample_padding: 1,
-487        }
-488    }
-489}
-490
-491#[derive(Debug)]
-492pub struct DownBlock2D {
-493    resnets: Vec<ResnetBlock2D>,
-494    downsampler: Option<Downsample2D>,
-495    span: tracing::Span,
-496    pub config: DownBlock2DConfig,
-497}
-498
-499impl DownBlock2D {
-500    pub fn new(
-501        vs: nn::VarBuilder,
-502        in_channels: usize,
-503        out_channels: usize,
-504        temb_channels: Option<usize>,
-505        config: DownBlock2DConfig,
-506    ) -> Result<Self> {
-507        let vs_resnets = vs.pp("resnets");
-508        let resnet_cfg = ResnetBlock2DConfig {
-509            out_channels: Some(out_channels),
-510            eps: config.resnet_eps,
-511            output_scale_factor: config.output_scale_factor,
-512            temb_channels,
-513            ..Default::default()
-514        };
-515        let resnets = (0..config.num_layers)
-516            .map(|i| {
-517                let in_channels = if i == 0 { in_channels } else { out_channels };
-518                ResnetBlock2D::new(vs_resnets.pp(i.to_string()), in_channels, resnet_cfg)
-519            })
-520            .collect::<Result<Vec<_>>>()?;
-521        let downsampler = if config.add_downsample {
-522            let downsampler = Downsample2D::new(
-523                vs.pp("downsamplers").pp("0"),
-524                out_channels,
-525                true,
-526                out_channels,
-527                config.downsample_padding,
-528            )?;
-529            Some(downsampler)
-530        } else {
-531            None
-532        };
-533        let span = tracing::span!(tracing::Level::TRACE, "down2d");
-534        Ok(Self {
-535            resnets,
-536            downsampler,
-537            span,
-538            config,
-539        })
-540    }
-541
-542    pub fn forward(&self, xs: &Tensor, temb: Option<&Tensor>) -> Result<(Tensor, Vec<Tensor>)> {
-543        let _enter = self.span.enter();
-544        let mut xs = xs.clone();
-545        let mut output_states = vec![];
-546        for resnet in self.resnets.iter() {
-547            xs = resnet.forward(&xs, temb)?;
-548            output_states.push(xs.clone());
-549        }
-550        let xs = match &self.downsampler {
-551            Some(downsampler) => {
-552                let xs = downsampler.forward(&xs)?;
-553                output_states.push(xs.clone());
-554                xs
-555            }
-556            None => xs,
-557        };
-558        Ok((xs, output_states))
-559    }
-560}
-561
-562#[derive(Debug, Clone, Copy)]
-563pub struct CrossAttnDownBlock2DConfig {
-564    pub downblock: DownBlock2DConfig,
-565    pub attn_num_head_channels: usize,
-566    pub cross_attention_dim: usize,
-567    // attention_type: "default"
-568    pub sliced_attention_size: Option<usize>,
-569    pub use_linear_projection: bool,
-570    pub transformer_layers_per_block: usize,
-571}
-572
-573impl Default for CrossAttnDownBlock2DConfig {
-574    fn default() -> Self {
-575        Self {
-576            downblock: Default::default(),
-577            attn_num_head_channels: 1,
-578            cross_attention_dim: 1280,
-579            sliced_attention_size: None,
-580            use_linear_projection: false,
-581            transformer_layers_per_block: 1,
-582        }
-583    }
-584}
-585
-586#[derive(Debug)]
-587pub struct CrossAttnDownBlock2D {
-588    downblock: DownBlock2D,
-589    attentions: Vec<SpatialTransformer>,
-590    span: tracing::Span,
-591    pub config: CrossAttnDownBlock2DConfig,
-592}
-593
-594impl CrossAttnDownBlock2D {
-595    pub fn new(
-596        vs: nn::VarBuilder,
-597        in_channels: usize,
-598        out_channels: usize,
-599        temb_channels: Option<usize>,
-600        use_flash_attn: bool,
-601        config: CrossAttnDownBlock2DConfig,
-602    ) -> Result<Self> {
-603        let downblock = DownBlock2D::new(
-604            vs.clone(),
-605            in_channels,
-606            out_channels,
-607            temb_channels,
-608            config.downblock,
-609        )?;
-610        let n_heads = config.attn_num_head_channels;
-611        let cfg = SpatialTransformerConfig {
-612            depth: config.transformer_layers_per_block,
-613            context_dim: Some(config.cross_attention_dim),
-614            num_groups: config.downblock.resnet_groups,
-615            sliced_attention_size: config.sliced_attention_size,
-616            use_linear_projection: config.use_linear_projection,
-617        };
-618        let vs_attn = vs.pp("attentions");
-619        let attentions = (0..config.downblock.num_layers)
-620            .map(|i| {
-621                SpatialTransformer::new(
-622                    vs_attn.pp(i.to_string()),
-623                    out_channels,
-624                    n_heads,
-625                    out_channels / n_heads,
-626                    use_flash_attn,
-627                    cfg,
-628                )
-629            })
-630            .collect::<Result<Vec<_>>>()?;
-631        let span = tracing::span!(tracing::Level::TRACE, "xa-down2d");
-632        Ok(Self {
-633            downblock,
-634            attentions,
-635            span,
-636            config,
-637        })
-638    }
-639
-640    pub fn forward(
-641        &self,
-642        xs: &Tensor,
-643        temb: Option<&Tensor>,
-644        encoder_hidden_states: Option<&Tensor>,
-645    ) -> Result<(Tensor, Vec<Tensor>)> {
-646        let _enter = self.span.enter();
-647        let mut output_states = vec![];
-648        let mut xs = xs.clone();
-649        for (resnet, attn) in self.downblock.resnets.iter().zip(self.attentions.iter()) {
-650            xs = resnet.forward(&xs, temb)?;
-651            xs = attn.forward(&xs, encoder_hidden_states)?;
-652            output_states.push(xs.clone());
-653        }
-654        let xs = match &self.downblock.downsampler {
-655            Some(downsampler) => {
-656                let xs = downsampler.forward(&xs)?;
-657                output_states.push(xs.clone());
-658                xs
-659            }
-660            None => xs,
-661        };
-662        Ok((xs, output_states))
-663    }
-664}
-665
-666#[derive(Debug, Clone, Copy)]
-667pub struct UpBlock2DConfig {
-668    pub num_layers: usize,
-669    pub resnet_eps: f64,
-670    // resnet_time_scale_shift: "default"
-671    // resnet_act_fn: "swish"
-672    pub resnet_groups: usize,
-673    pub output_scale_factor: f64,
-674    pub add_upsample: bool,
-675}
-676
-677impl Default for UpBlock2DConfig {
-678    fn default() -> Self {
-679        Self {
-680            num_layers: 1,
-681            resnet_eps: 1e-6,
-682            resnet_groups: 32,
-683            output_scale_factor: 1.,
-684            add_upsample: true,
-685        }
-686    }
-687}
-688
-689#[derive(Debug)]
-690pub struct UpBlock2D {
-691    pub resnets: Vec<ResnetBlock2D>,
-692    upsampler: Option<Upsample2D>,
-693    span: tracing::Span,
-694    pub config: UpBlock2DConfig,
-695}
-696
-697impl UpBlock2D {
-698    pub fn new(
-699        vs: nn::VarBuilder,
-700        in_channels: usize,
-701        prev_output_channels: usize,
-702        out_channels: usize,
-703        temb_channels: Option<usize>,
-704        config: UpBlock2DConfig,
-705    ) -> Result<Self> {
-706        let vs_resnets = vs.pp("resnets");
-707        let resnet_cfg = ResnetBlock2DConfig {
-708            out_channels: Some(out_channels),
-709            temb_channels,
-710            eps: config.resnet_eps,
-711            output_scale_factor: config.output_scale_factor,
-712            ..Default::default()
-713        };
-714        let resnets = (0..config.num_layers)
-715            .map(|i| {
-716                let res_skip_channels = if i == config.num_layers - 1 {
-717                    in_channels
-718                } else {
-719                    out_channels
-720                };
-721                let resnet_in_channels = if i == 0 {
-722                    prev_output_channels
-723                } else {
-724                    out_channels
-725                };
-726                let in_channels = resnet_in_channels + res_skip_channels;
-727                ResnetBlock2D::new(vs_resnets.pp(i.to_string()), in_channels, resnet_cfg)
-728            })
-729            .collect::<Result<Vec<_>>>()?;
-730        let upsampler = if config.add_upsample {
-731            let upsampler =
-732                Upsample2D::new(vs.pp("upsamplers").pp("0"), out_channels, out_channels)?;
-733            Some(upsampler)
-734        } else {
-735            None
-736        };
-737        let span = tracing::span!(tracing::Level::TRACE, "up2d");
-738        Ok(Self {
-739            resnets,
-740            upsampler,
-741            span,
-742            config,
-743        })
-744    }
-745
-746    pub fn forward(
-747        &self,
-748        xs: &Tensor,
-749        res_xs: &[Tensor],
-750        temb: Option<&Tensor>,
-751        upsample_size: Option<(usize, usize)>,
-752    ) -> Result<Tensor> {
-753        let _enter = self.span.enter();
-754        let mut xs = xs.clone();
-755        for (index, resnet) in self.resnets.iter().enumerate() {
-756            xs = Tensor::cat(&[&xs, &res_xs[res_xs.len() - index - 1]], 1)?;
-757            xs = xs.contiguous()?;
-758            xs = resnet.forward(&xs, temb)?;
-759        }
-760        match &self.upsampler {
-761            Some(upsampler) => upsampler.forward(&xs, upsample_size),
-762            None => Ok(xs),
-763        }
-764    }
-765}
-766
-767#[derive(Debug, Clone, Copy)]
-768pub struct CrossAttnUpBlock2DConfig {
-769    pub upblock: UpBlock2DConfig,
-770    pub attn_num_head_channels: usize,
-771    pub cross_attention_dim: usize,
-772    // attention_type: "default"
-773    pub sliced_attention_size: Option<usize>,
-774    pub use_linear_projection: bool,
-775    pub transformer_layers_per_block: usize,
-776}
-777
-778impl Default for CrossAttnUpBlock2DConfig {
-779    fn default() -> Self {
-780        Self {
-781            upblock: Default::default(),
-782            attn_num_head_channels: 1,
-783            cross_attention_dim: 1280,
-784            sliced_attention_size: None,
-785            use_linear_projection: false,
-786            transformer_layers_per_block: 1,
-787        }
-788    }
-789}
-790
-791#[derive(Debug)]
-792pub struct CrossAttnUpBlock2D {
-793    pub upblock: UpBlock2D,
-794    pub attentions: Vec<SpatialTransformer>,
-795    span: tracing::Span,
-796    pub config: CrossAttnUpBlock2DConfig,
-797}
-798
-799impl CrossAttnUpBlock2D {
-800    pub fn new(
-801        vs: nn::VarBuilder,
-802        in_channels: usize,
-803        prev_output_channels: usize,
-804        out_channels: usize,
-805        temb_channels: Option<usize>,
-806        use_flash_attn: bool,
-807        config: CrossAttnUpBlock2DConfig,
-808    ) -> Result<Self> {
-809        let upblock = UpBlock2D::new(
-810            vs.clone(),
-811            in_channels,
-812            prev_output_channels,
-813            out_channels,
-814            temb_channels,
-815            config.upblock,
-816        )?;
-817        let n_heads = config.attn_num_head_channels;
-818        let cfg = SpatialTransformerConfig {
-819            depth: config.transformer_layers_per_block,
-820            context_dim: Some(config.cross_attention_dim),
-821            num_groups: config.upblock.resnet_groups,
-822            sliced_attention_size: config.sliced_attention_size,
-823            use_linear_projection: config.use_linear_projection,
-824        };
-825        let vs_attn = vs.pp("attentions");
-826        let attentions = (0..config.upblock.num_layers)
-827            .map(|i| {
-828                SpatialTransformer::new(
-829                    vs_attn.pp(i.to_string()),
-830                    out_channels,
-831                    n_heads,
-832                    out_channels / n_heads,
-833                    use_flash_attn,
-834                    cfg,
-835                )
-836            })
-837            .collect::<Result<Vec<_>>>()?;
-838        let span = tracing::span!(tracing::Level::TRACE, "xa-up2d");
-839        Ok(Self {
-840            upblock,
-841            attentions,
-842            span,
-843            config,
-844        })
-845    }
-846
-847    pub fn forward(
-848        &self,
-849        xs: &Tensor,
-850        res_xs: &[Tensor],
-851        temb: Option<&Tensor>,
-852        upsample_size: Option<(usize, usize)>,
-853        encoder_hidden_states: Option<&Tensor>,
-854    ) -> Result<Tensor> {
-855        let _enter = self.span.enter();
-856        let mut xs = xs.clone();
-857        for (index, resnet) in self.upblock.resnets.iter().enumerate() {
-858            xs = Tensor::cat(&[&xs, &res_xs[res_xs.len() - index - 1]], 1)?;
-859            xs = xs.contiguous()?;
-860            xs = resnet.forward(&xs, temb)?;
-861            xs = self.attentions[index].forward(&xs, encoder_hidden_states)?;
-862        }
-863        match &self.upblock.upsampler {
-864            Some(upsampler) => upsampler.forward(&xs, upsample_size),
-865            None => Ok(xs),
-866        }
-867    }
-868}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/uni_pc.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/uni_pc.rs.html deleted file mode 100644 index d1cc8a0..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/uni_pc.rs.html +++ /dev/null @@ -1,1006 +0,0 @@ -uni_pc.rs - source

candle_transformers/models/stable_diffusion/
uni_pc.rs

1//! # UniPC Scheduler
-2//!
-3//! UniPC is a training-free framework designed for the fast sampling of diffusion models, which consists of a
-4//! corrector (UniC) and a predictor (UniP) that share a unified analytical form and support arbitrary orders.
-5//!
-6//! UniPC is by design model-agnostic, supporting pixel-space/latent-space DPMs on unconditional/conditional
-7//! sampling. It can also be applied to both noise prediction and data prediction models. Compared with prior
-8//! methods, UniPC converges faster thanks to the increased order of accuracy. Both quantitative and qualitative
-9//! results show UniPC can improve sampling quality, especially at very low step counts (5~10).
-10//!
-11//! For more information, see the original publication:
-12//! UniPC: A Unified Predictor-Corrector Framework for Fast Sampling of Diffusion Models, W. Zhao et al, 2023.
-13//! https://arxiv.org/abs/2302.04867
-14//!
-15//! This work is based largely on UniPC implementation from the diffusers python package:
-16//! https://raw.githubusercontent.com/huggingface/diffusers/e8aacda762e311505ba05ae340af23b149e37af3/src/diffusers/schedulers/scheduling_unipc_multistep.py
-17use std::collections::HashSet;
-18use std::ops::Neg;
-19
-20use super::schedulers::PredictionType;
-21use super::{
-22    schedulers::{Scheduler, SchedulerConfig},
-23    utils::{interp, linspace},
-24};
-25use candle::{Error, IndexOp, Result, Tensor};
-26
-27#[derive(Debug, Clone, Copy)]
-28pub enum SigmaSchedule {
-29    Karras(KarrasSigmaSchedule),
-30    Exponential(ExponentialSigmaSchedule),
-31}
-32
-33impl SigmaSchedule {
-34    fn sigma_t(&self, t: f64) -> f64 {
-35        match self {
-36            Self::Karras(x) => x.sigma_t(t),
-37            Self::Exponential(x) => x.sigma_t(t),
-38        }
-39    }
-40}
-41
-42impl Default for SigmaSchedule {
-43    fn default() -> Self {
-44        Self::Karras(KarrasSigmaSchedule::default())
-45    }
-46}
-47
-48#[derive(Debug, Clone, Copy)]
-49pub struct KarrasSigmaSchedule {
-50    pub sigma_min: f64,
-51    pub sigma_max: f64,
-52    pub rho: f64,
-53}
-54
-55impl KarrasSigmaSchedule {
-56    fn sigma_t(&self, t: f64) -> f64 {
-57        let (min_inv_rho, max_inv_rho) = (
-58            self.sigma_min.powf(1.0 / self.rho),
-59            self.sigma_max.powf(1.0 / self.rho),
-60        );
-61
-62        (max_inv_rho + ((1.0 - t) * (min_inv_rho - max_inv_rho))).powf(self.rho)
-63    }
-64}
-65
-66impl Default for KarrasSigmaSchedule {
-67    fn default() -> Self {
-68        Self {
-69            sigma_max: 10.0,
-70            sigma_min: 0.1,
-71            rho: 4.0,
-72        }
-73    }
-74}
-75
-76#[derive(Debug, Clone, Copy)]
-77pub struct ExponentialSigmaSchedule {
-78    sigma_min: f64,
-79    sigma_max: f64,
-80}
-81
-82impl ExponentialSigmaSchedule {
-83    fn sigma_t(&self, t: f64) -> f64 {
-84        (t * (self.sigma_max.ln() - self.sigma_min.ln()) + self.sigma_min.ln()).exp()
-85    }
-86}
-87
-88impl Default for ExponentialSigmaSchedule {
-89    fn default() -> Self {
-90        Self {
-91            sigma_max: 80.0,
-92            sigma_min: 0.1,
-93        }
-94    }
-95}
-96
-97#[derive(Debug, Default, Clone, Copy)]
-98pub enum SolverType {
-99    #[default]
-100    Bh1,
-101    Bh2,
-102}
-103
-104#[derive(Debug, Default, Clone, Copy)]
-105pub enum AlgorithmType {
-106    #[default]
-107    DpmSolverPlusPlus,
-108    SdeDpmSolverPlusPlus,
-109}
-110
-111#[derive(Debug, Default, Clone, Copy)]
-112pub enum FinalSigmasType {
-113    #[default]
-114    Zero,
-115    SigmaMin,
-116}
-117
-118#[derive(Debug, Clone)]
-119pub enum TimestepSchedule {
-120    /// Timesteps will be determined by interpolation of sigmas
-121    FromSigmas,
-122    /// Timesteps will be separated by regular intervals
-123    Linspace,
-124}
-125
-126impl TimestepSchedule {
-127    fn timesteps(
-128        &self,
-129        sigma_schedule: &SigmaSchedule,
-130        num_inference_steps: usize,
-131        num_training_steps: usize,
-132    ) -> Result<Vec<usize>> {
-133        match self {
-134            Self::FromSigmas => {
-135                let sigmas: Tensor = linspace(1., 0., num_inference_steps)?
-136                    .to_vec1()?
-137                    .into_iter()
-138                    .map(|t| sigma_schedule.sigma_t(t))
-139                    .collect::<Vec<f64>>()
-140                    .try_into()?;
-141                let log_sigmas = sigmas.log()?.to_vec1::<f64>()?;
-142                let timesteps = interp(
-143                    &log_sigmas.iter().copied().rev().collect::<Vec<_>>(),
-144                    &linspace(
-145                        log_sigmas[log_sigmas.len() - 1] - 0.001,
-146                        log_sigmas[0] + 0.001,
-147                        num_inference_steps,
-148                    )?
-149                    .to_vec1::<f64>()?,
-150                    &linspace(0., num_training_steps as f64, num_inference_steps)?
-151                        .to_vec1::<f64>()?,
-152                )
-153                .into_iter()
-154                .map(|f| (num_training_steps - 1) - (f as usize))
-155                .collect::<Vec<_>>();
-156
-157                Ok(timesteps)
-158            }
-159
-160            Self::Linspace => {
-161                Ok(
-162                    linspace((num_training_steps - 1) as f64, 0., num_inference_steps)?
-163                        .to_vec1::<f64>()?
-164                        .into_iter()
-165                        .map(|f| f as usize)
-166                        .collect(),
-167                )
-168            }
-169        }
-170    }
-171}
-172
-173#[derive(Debug, Clone)]
-174pub enum CorrectorConfiguration {
-175    Disabled,
-176    Enabled { skip_steps: HashSet<usize> },
-177}
-178
-179impl Default for CorrectorConfiguration {
-180    fn default() -> Self {
-181        Self::Enabled {
-182            skip_steps: [0, 1, 2].into_iter().collect(),
-183        }
-184    }
-185}
-186
-187impl CorrectorConfiguration {
-188    pub fn new(disabled_steps: impl IntoIterator<Item = usize>) -> Self {
-189        Self::Enabled {
-190            skip_steps: disabled_steps.into_iter().collect(),
-191        }
-192    }
-193}
-194
-195#[derive(Debug, Clone)]
-196pub struct UniPCSchedulerConfig {
-197    /// Configure the UNIC corrector. By default it is disabled
-198    pub corrector: CorrectorConfiguration,
-199    /// Determines how sigma relates to a given timestep
-200    pub sigma_schedule: SigmaSchedule,
-201    /// Determines the points
-202    pub timestep_schedule: TimestepSchedule,
-203    /// The solver order which can be `1` or higher. It is recommended to use `solver_order=2` for guided
-204    /// sampling, and `solver_order=3` for unconditional sampling.
-205    pub solver_order: usize,
-206    /// Prediction type of the scheduler function
-207    pub prediction_type: PredictionType,
-208    pub num_training_timesteps: usize,
-209    /// Whether to use the "dynamic thresholding" method. This is unsuitable for latent-space diffusion models such
-210    /// as Stable Diffusion.
-211    pub thresholding: bool,
-212    /// The ratio for the dynamic thresholding method. Valid only when `thresholding=True`.
-213    pub dynamic_thresholding_ratio: f64,
-214    /// The threshold value for dynamic thresholding.
-215    pub sample_max_value: f64,
-216    pub solver_type: SolverType,
-217    /// Whether to use lower-order solvers in the final steps.
-218    pub lower_order_final: bool,
-219}
-220
-221impl Default for UniPCSchedulerConfig {
-222    fn default() -> Self {
-223        Self {
-224            corrector: Default::default(),
-225            timestep_schedule: TimestepSchedule::FromSigmas,
-226            sigma_schedule: SigmaSchedule::Karras(Default::default()),
-227            prediction_type: PredictionType::Epsilon,
-228            num_training_timesteps: 1000,
-229            solver_order: 2,
-230            thresholding: false,
-231            dynamic_thresholding_ratio: 0.995,
-232            sample_max_value: 1.0,
-233            solver_type: SolverType::Bh1,
-234            lower_order_final: true,
-235        }
-236    }
-237}
-238
-239impl SchedulerConfig for UniPCSchedulerConfig {
-240    fn build(&self, inference_steps: usize) -> Result<Box<dyn Scheduler>> {
-241        Ok(Box::new(EdmDpmMultistepScheduler::new(
-242            self.clone(),
-243            inference_steps,
-244        )?))
-245    }
-246}
-247
-248struct State {
-249    model_outputs: Vec<Option<Tensor>>,
-250    lower_order_nums: usize,
-251    order: usize,
-252    last_sample: Option<Tensor>,
-253}
-254
-255impl State {
-256    fn new(solver_order: usize) -> Self {
-257        Self {
-258            model_outputs: vec![None; solver_order],
-259            lower_order_nums: 0,
-260            order: 0,
-261            last_sample: None,
-262        }
-263    }
-264
-265    fn lower_order_nums(&self) -> usize {
-266        self.lower_order_nums
-267    }
-268
-269    fn update_lower_order_nums(&mut self, n: usize) {
-270        self.lower_order_nums = n;
-271    }
-272
-273    fn model_outputs(&self) -> &[Option<Tensor>] {
-274        self.model_outputs.as_slice()
-275    }
-276
-277    fn update_model_output(&mut self, idx: usize, output: Option<Tensor>) {
-278        self.model_outputs[idx] = output;
-279    }
-280
-281    fn last_sample(&self) -> Option<&Tensor> {
-282        self.last_sample.as_ref()
-283    }
-284
-285    fn update_last_sample(&mut self, sample: Tensor) {
-286        let _ = self.last_sample.replace(sample);
-287    }
-288
-289    fn order(&self) -> usize {
-290        self.order
-291    }
-292
-293    fn update_order(&mut self, order: usize) {
-294        self.order = order;
-295    }
-296}
-297
-298pub struct EdmDpmMultistepScheduler {
-299    schedule: Schedule,
-300    config: UniPCSchedulerConfig,
-301    state: State,
-302}
-303
-304impl EdmDpmMultistepScheduler {
-305    pub fn new(config: UniPCSchedulerConfig, num_inference_steps: usize) -> Result<Self> {
-306        let schedule = Schedule::new(
-307            config.timestep_schedule.clone(),
-308            config.sigma_schedule,
-309            num_inference_steps,
-310            config.num_training_timesteps,
-311        )?;
-312
-313        Ok(Self {
-314            schedule,
-315            state: State::new(config.solver_order),
-316            config,
-317        })
-318    }
-319
-320    fn step_index(&self, timestep: usize) -> usize {
-321        let index_candidates = self
-322            .schedule
-323            .timesteps()
-324            .iter()
-325            .enumerate()
-326            .filter(|(_, t)| (*t == &timestep))
-327            .map(|(i, _)| i)
-328            .collect::<Vec<_>>();
-329
-330        match index_candidates.len() {
-331            0 => 0,
-332            1 => index_candidates[0],
-333            _ => index_candidates[1],
-334        }
-335    }
-336
-337    fn timestep(&self, step_idx: usize) -> usize {
-338        self.schedule
-339            .timesteps()
-340            .get(step_idx)
-341            .copied()
-342            .unwrap_or(0)
-343    }
-344
-345    fn convert_model_output(
-346        &self,
-347        model_output: &Tensor,
-348        sample: &Tensor,
-349        timestep: usize,
-350    ) -> Result<Tensor> {
-351        let (alpha_t, sigma_t) = (
-352            self.schedule.alpha_t(timestep),
-353            self.schedule.sigma_t(timestep),
-354        );
-355
-356        let x0_pred = match self.config.prediction_type {
-357            PredictionType::Epsilon => ((sample - (model_output * sigma_t))? / alpha_t)?,
-358            PredictionType::Sample => model_output.clone(),
-359            PredictionType::VPrediction => ((alpha_t * sample)? - (sigma_t * model_output)?)?,
-360        };
-361
-362        if self.config.thresholding {
-363            self.threshold_sample(x0_pred)
-364        } else {
-365            Ok(x0_pred)
-366        }
-367    }
-368
-369    fn threshold_sample(&self, sample: Tensor) -> Result<Tensor> {
-370        let shape = sample.shape().clone().into_dims();
-371        let v = sample
-372            .abs()?
-373            .reshape((shape[0], shape[1] * shape[2..].iter().product::<usize>()))?
-374            .to_dtype(candle::DType::F64)?
-375            .to_vec2::<f64>()?;
-376        let q = stats::Quantile::new(self.config.dynamic_thresholding_ratio)
-377            .with_samples(v.into_iter().flatten());
-378        let (threshold, max) = (q.quantile().max(self.config.sample_max_value), q.max());
-379
-380        sample.clamp(-threshold, threshold)? / (threshold / max).sqrt().min(1.)
-381    }
-382
-383    fn multistep_uni_p_bh_update(&self, sample: &Tensor, timestep: usize) -> Result<Tensor> {
-384        let step_index = self.step_index(timestep);
-385        let ns = &self.schedule;
-386        let model_outputs = self.state.model_outputs();
-387        let Some(m0) = &model_outputs[model_outputs.len() - 1] else {
-388            return Err(Error::Msg(
-389                "Expected model output for predictor update".to_string(),
-390            ));
-391        };
-392
-393        let (t0, tt) = (timestep, self.timestep(self.step_index(timestep) + 1));
-394        let (sigma_t, sigma_s0) = (ns.sigma_t(tt), ns.sigma_t(t0));
-395        let (alpha_t, _alpha_s0) = (ns.alpha_t(tt), ns.alpha_t(t0));
-396        let (lambda_t, lambda_s0) = (ns.lambda_t(tt), ns.lambda_t(t0));
-397
-398        let h = lambda_t - lambda_s0;
-399        let device = sample.device();
-400
-401        let (mut rks, mut d1s) = (vec![], vec![]);
-402        for i in 1..self.state.order() {
-403            let ti = self.timestep(step_index.saturating_sub(i + 1));
-404            let Some(mi) = model_outputs
-405                .get(model_outputs.len().saturating_sub(i + 1))
-406                .into_iter()
-407                .flatten()
-408                .next()
-409            else {
-410                return Err(Error::Msg(
-411                    "Expected model output for predictor update".to_string(),
-412                ));
-413            };
-414            let (alpha_si, sigma_si) = (ns.alpha_t(ti), ns.sigma_t(ti));
-415            let lambda_si = alpha_si.ln() - sigma_si.ln();
-416            let rk = (lambda_si - lambda_s0) / h;
-417            rks.push(rk);
-418            d1s.push(((mi - m0)? / rk)?);
-419        }
-420        rks.push(1.0);
-421        let rks = Tensor::new(rks, device)?;
-422        let (mut r, mut b) = (vec![], vec![]);
-423
-424        let hh = h.neg();
-425        let h_phi_1 = hh.exp_m1();
-426        let mut h_phi_k = h_phi_1 / hh - 1.;
-427        let mut factorial_i = 1.;
-428
-429        let b_h = match self.config.solver_type {
-430            SolverType::Bh1 => hh,
-431            SolverType::Bh2 => hh.exp_m1(),
-432        };
-433
-434        for i in 1..self.state.order() + 1 {
-435            r.push(rks.powf(i as f64 - 1.)?);
-436            b.push(h_phi_k * factorial_i / b_h);
-437            factorial_i = i as f64 + 1.;
-438            h_phi_k = h_phi_k / hh - 1. / factorial_i;
-439        }
-440
-441        let (r, b) = (Tensor::stack(&r, 0)?, Tensor::new(b, device)?);
-442        let (d1s, rhos_p) = match d1s.len() {
-443            0 => (None, None),
-444            _ => {
-445                let rhos_p = match self.state.order() {
-446                    2 => Tensor::new(&[0.5f64], m0.device())?.to_dtype(m0.dtype())?,
-447                    _ => {
-448                        let ((r1, r2), b1) = (r.dims2()?, b.dims1()?);
-449                        let inverse = linalg::inverse(&r.i((..(r1 - 1), ..(r2 - 1)))?)?;
-450                        let b = b.i(..(b1 - 1))?;
-451                        b.broadcast_mul(&inverse)?.sum(1)?.to_dtype(m0.dtype())?
-452                    }
-453                };
-454
-455                (Some(Tensor::stack(&d1s, 1)?), Some(rhos_p))
-456            }
-457        };
-458
-459        let x_t_ = ((sigma_t / sigma_s0 * sample)? - (alpha_t * h_phi_1 * m0)?)?;
-460        if let (Some(d1s), Some(rhos_p)) = (d1s, rhos_p) {
-461            use linalg::{Permutation, TensordotFixedPosition, TensordotGeneral};
-462            let output_shape = m0.shape().clone();
-463            let pred_res = TensordotGeneral {
-464                lhs_permutation: Permutation { dims: vec![0] },
-465                rhs_permutation: Permutation {
-466                    dims: vec![1, 0, 2, 3, 4],
-467                },
-468                tensordot_fixed_position: TensordotFixedPosition {
-469                    len_uncontracted_lhs: 1,
-470                    len_uncontracted_rhs: output_shape.dims().iter().product::<usize>(),
-471                    len_contracted_axes: d1s.dim(1)?,
-472                    output_shape,
-473                },
-474                output_permutation: Permutation {
-475                    dims: vec![0, 1, 2, 3],
-476                },
-477            }
-478            .eval(&rhos_p, &d1s)?;
-479            x_t_ - (alpha_t * b_h * pred_res)?
-480        } else {
-481            Ok(x_t_)
-482        }
-483    }
-484
-485    fn multistep_uni_c_bh_update(
-486        &self,
-487        model_output: &Tensor,
-488        model_outputs: &[Option<Tensor>],
-489        last_sample: &Tensor,
-490        sample: &Tensor,
-491        timestep: usize,
-492    ) -> Result<Tensor> {
-493        let step_index = self.step_index(timestep);
-494        let Some(m0) = model_outputs.last().into_iter().flatten().next() else {
-495            return Err(Error::Msg(
-496                "Expected model output for corrector update".to_string(),
-497            ));
-498        };
-499        let model_t = model_output;
-500        let (x, _xt) = (last_sample, sample);
-501
-502        let (t0, tt, ns) = (
-503            self.timestep(self.step_index(timestep) - 1),
-504            timestep,
-505            &self.schedule,
-506        );
-507        let (sigma_t, sigma_s0) = (ns.sigma_t(tt), ns.sigma_t(t0));
-508        let (alpha_t, _alpha_s0) = (ns.alpha_t(tt), ns.alpha_t(t0));
-509        let (lambda_t, lambda_s0) = (ns.lambda_t(tt), ns.lambda_t(t0));
-510
-511        let h = lambda_t - lambda_s0;
-512        let device = sample.device();
-513
-514        let (mut rks, mut d1s) = (vec![], vec![]);
-515        for i in 1..self.state.order() {
-516            let ti = self.timestep(step_index.saturating_sub(i + 1));
-517            let Some(mi) = model_outputs
-518                .get(model_outputs.len().saturating_sub(i + 1))
-519                .into_iter()
-520                .flatten()
-521                .next()
-522            else {
-523                return Err(Error::Msg(
-524                    "Expected model output for corrector update".to_string(),
-525                ));
-526            };
-527            let (alpha_si, sigma_si) = (ns.alpha_t(ti), ns.sigma_t(ti));
-528            let lambda_si = alpha_si.ln() - sigma_si.ln();
-529            let rk = (lambda_si - lambda_s0) / h;
-530            rks.push(rk);
-531            d1s.push(((mi - m0)? / rk)?);
-532        }
-533        rks.push(1.0);
-534        let rks = Tensor::new(rks, device)?;
-535        let (mut r, mut b) = (vec![], vec![]);
-536
-537        let hh = h.neg();
-538        let h_phi_1 = hh.exp_m1();
-539        let mut h_phi_k = h_phi_1 / hh - 1.;
-540        let mut factorial_i = 1.;
-541
-542        let b_h = match self.config.solver_type {
-543            SolverType::Bh1 => hh,
-544            SolverType::Bh2 => hh.exp_m1(),
-545        };
-546
-547        for i in 1..self.state.order() + 1 {
-548            r.push(rks.powf(i as f64 - 1.)?);
-549            b.push(h_phi_k * factorial_i / b_h);
-550            factorial_i = i as f64 + 1.;
-551            h_phi_k = h_phi_k / hh - 1. / factorial_i;
-552        }
-553
-554        let (r, b) = (Tensor::stack(&r, 0)?, Tensor::new(b, device)?);
-555        let d1s = match d1s.len() {
-556            0 => None,
-557            _ => Some(Tensor::stack(&d1s, 1)?),
-558        };
-559        let rhos_c = match self.state.order() {
-560            1 => Tensor::new(&[0.5f64], m0.device())?.to_dtype(m0.dtype())?,
-561            _ => {
-562                let inverse = linalg::inverse(&r)?;
-563                b.broadcast_mul(&inverse)?.sum(1)?.to_dtype(m0.dtype())?
-564            }
-565        };
-566
-567        let x_t_ = ((sigma_t / sigma_s0 * x)? - (alpha_t * h_phi_1 * m0)?)?;
-568        let corr_res = d1s
-569            .map(|d1s| {
-570                use linalg::{Permutation, TensordotFixedPosition, TensordotGeneral};
-571                let output_shape = x_t_.shape().clone();
-572                TensordotGeneral {
-573                    lhs_permutation: Permutation { dims: vec![0] },
-574                    rhs_permutation: Permutation {
-575                        dims: vec![1, 0, 2, 3, 4],
-576                    },
-577                    tensordot_fixed_position: TensordotFixedPosition {
-578                        len_uncontracted_lhs: 1,
-579                        len_uncontracted_rhs: output_shape.dims().iter().product::<usize>(),
-580                        len_contracted_axes: d1s.dim(1)?,
-581                        output_shape,
-582                    },
-583                    output_permutation: Permutation {
-584                        dims: vec![0, 1, 2, 3],
-585                    },
-586                }
-587                .eval(&rhos_c.i(..rhos_c.dims()[0] - 1)?, &d1s)
-588            })
-589            .unwrap_or_else(|| Tensor::zeros_like(m0))?;
-590
-591        let d1_t = (model_t - m0)?;
-592        let x_t = (x_t_
-593            - (alpha_t
-594                * b_h
-595                * (corr_res + rhos_c.i(rhos_c.dims()[0] - 1)?.broadcast_mul(&d1_t)?)?)?)?;
-596
-597        Ok(x_t)
-598    }
-599}
-600
-601impl Scheduler for EdmDpmMultistepScheduler {
-602    fn step(&mut self, model_output: &Tensor, timestep: usize, sample: &Tensor) -> Result<Tensor> {
-603        let step_index = self.step_index(timestep);
-604        let model_output_converted = &self.convert_model_output(model_output, sample, timestep)?;
-605        let sample = match (&self.config.corrector, self.state.last_sample()) {
-606            (CorrectorConfiguration::Enabled { skip_steps: s }, Some(last_sample))
-607                if !s.contains(&step_index) && step_index > 0 =>
-608            {
-609                &self.multistep_uni_c_bh_update(
-610                    model_output_converted,
-611                    self.state.model_outputs(),
-612                    last_sample,
-613                    sample,
-614                    timestep,
-615                )?
-616            }
-617            (CorrectorConfiguration::Enabled { .. }, _) | (CorrectorConfiguration::Disabled, _) => {
-618                sample
-619            }
-620        };
-621
-622        let mut model_outputs = self.state.model_outputs().to_vec();
-623        for i in 0..self.config.solver_order.saturating_sub(1) {
-624            self.state
-625                .update_model_output(i, model_outputs[i + 1].take());
-626        }
-627        self.state.update_model_output(
-628            model_outputs.len() - 1,
-629            Some(model_output_converted.clone()),
-630        );
-631
-632        let mut this_order = self.config.solver_order;
-633        if self.config.lower_order_final {
-634            this_order = self
-635                .config
-636                .solver_order
-637                .min(self.schedule.timesteps.len() - step_index);
-638        }
-639        self.state
-640            .update_order(this_order.min(self.state.lower_order_nums() + 1));
-641
-642        self.state.update_last_sample(sample.clone());
-643        let prev_sample = self.multistep_uni_p_bh_update(sample, timestep)?;
-644
-645        let lower_order_nums = self.state.lower_order_nums();
-646        if lower_order_nums < self.config.solver_order {
-647            self.state.update_lower_order_nums(lower_order_nums + 1);
-648        }
-649
-650        Ok(prev_sample)
-651    }
-652
-653    fn scale_model_input(&self, sample: Tensor, _timestep: usize) -> Result<Tensor> {
-654        Ok(sample)
-655    }
-656
-657    fn timesteps(&self) -> &[usize] {
-658        &self.schedule.timesteps
-659    }
-660
-661    fn add_noise(&self, original: &Tensor, noise: Tensor, timestep: usize) -> Result<Tensor> {
-662        let (alpha_t, sigma_t) = (
-663            self.schedule.alpha_t(timestep),
-664            self.schedule.sigma_t(timestep),
-665        );
-666
-667        (alpha_t * original)? + (sigma_t * noise)?
-668    }
-669
-670    fn init_noise_sigma(&self) -> f64 {
-671        self.schedule.sigma_t(self.schedule.num_training_steps())
-672    }
-673}
-674
-675#[derive(Debug, Clone)]
-676struct Schedule {
-677    timesteps: Vec<usize>,
-678    num_training_steps: usize,
-679    sigma_schedule: SigmaSchedule,
-680    #[allow(unused)]
-681    timestep_schedule: TimestepSchedule,
-682}
-683
-684impl Schedule {
-685    fn new(
-686        timestep_schedule: TimestepSchedule,
-687        sigma_schedule: SigmaSchedule,
-688        num_inference_steps: usize,
-689        num_training_steps: usize,
-690    ) -> Result<Self> {
-691        Ok(Self {
-692            timesteps: timestep_schedule.timesteps(
-693                &sigma_schedule,
-694                num_inference_steps,
-695                num_training_steps,
-696            )?,
-697            timestep_schedule,
-698            sigma_schedule,
-699            num_training_steps,
-700        })
-701    }
-702
-703    fn timesteps(&self) -> &[usize] {
-704        &self.timesteps
-705    }
-706
-707    fn num_training_steps(&self) -> usize {
-708        self.num_training_steps
-709    }
-710
-711    fn t(&self, step: usize) -> f64 {
-712        (step as f64 + 1.) / self.num_training_steps as f64
-713    }
-714
-715    fn alpha_t(&self, t: usize) -> f64 {
-716        (1. / (self.sigma_schedule.sigma_t(self.t(t)).powi(2) + 1.)).sqrt()
-717    }
-718
-719    fn sigma_t(&self, t: usize) -> f64 {
-720        self.sigma_schedule.sigma_t(self.t(t)) * self.alpha_t(t)
-721    }
-722
-723    fn lambda_t(&self, t: usize) -> f64 {
-724        self.alpha_t(t).ln() - self.sigma_t(t).ln()
-725    }
-726}
-727
-728mod stats {
-729    //! This is a slightly modified form of the P² quantile implementation from https://github.com/vks/average.
-730    //! Also see: http://www.cs.wustl.edu/~jain/papers/ftp/psqr.pdf
-731    use num_traits::{Float, ToPrimitive};
-732
-733    #[derive(Debug, Clone)]
-734    pub struct Quantile {
-735        q: [f64; 5],
-736        n: [i64; 5],
-737        m: [f64; 5],
-738        dm: [f64; 5],
-739        max: Option<f64>,
-740    }
-741
-742    impl Quantile {
-743        pub fn new(p: f64) -> Quantile {
-744            assert!((0. ..=1.).contains(&p));
-745            Quantile {
-746                q: [0.; 5],
-747                n: [1, 2, 3, 4, 0],
-748                m: [1., 1. + 2. * p, 1. + 4. * p, 3. + 2. * p, 5.],
-749                dm: [0., p / 2., p, (1. + p) / 2., 1.],
-750                max: None,
-751            }
-752        }
-753
-754        pub fn max(&self) -> f64 {
-755            self.max.unwrap_or(f64::NAN)
-756        }
-757
-758        fn p(&self) -> f64 {
-759            self.dm[2]
-760        }
-761
-762        fn parabolic(&self, i: usize, d: f64) -> f64 {
-763            let s = d.round() as i64;
-764            self.q[i]
-765                + d / (self.n[i + 1] - self.n[i - 1]).to_f64().unwrap()
-766                    * ((self.n[i] - self.n[i - 1] + s).to_f64().unwrap()
-767                        * (self.q[i + 1] - self.q[i])
-768                        / (self.n[i + 1] - self.n[i]).to_f64().unwrap()
-769                        + (self.n[i + 1] - self.n[i] - s).to_f64().unwrap()
-770                            * (self.q[i] - self.q[i - 1])
-771                            / (self.n[i] - self.n[i - 1]).to_f64().unwrap())
-772        }
-773
-774        fn linear(&self, i: usize, d: f64) -> f64 {
-775            let sum = if d < 0. { i - 1 } else { i + 1 };
-776            self.q[i] + d * (self.q[sum] - self.q[i]) / (self.n[sum] - self.n[i]).to_f64().unwrap()
-777        }
-778
-779        pub fn quantile(&self) -> f64 {
-780            if self.len() >= 5 {
-781                return self.q[2];
-782            }
-783
-784            if self.is_empty() {
-785                return f64::NAN;
-786            }
-787            let mut heights: [f64; 4] = [self.q[0], self.q[1], self.q[2], self.q[3]];
-788            let len = self.len() as usize;
-789            debug_assert!(len < 5);
-790            sort_floats(&mut heights[..len]);
-791            let desired_index = (len as f64) * self.p() - 1.;
-792            let mut index = desired_index.ceil();
-793            if desired_index == index && index >= 0. {
-794                let index = index.round() as usize;
-795                debug_assert!(index < 5);
-796                if index < len - 1 {
-797                    return 0.5 * self.q[index] + 0.5 * self.q[index + 1];
-798                }
-799            }
-800            index = index.max(0.);
-801            let mut index = index.round() as usize;
-802            debug_assert!(index < 5);
-803            index = index.min(len - 1);
-804            self.q[index]
-805        }
-806
-807        fn len(&self) -> u64 {
-808            self.n[4] as u64
-809        }
-810
-811        fn is_empty(&self) -> bool {
-812            self.len() == 0
-813        }
-814
-815        pub fn add(&mut self, x: f64) {
-816            self.max = self.max.map(|y| y.max(x)).or(Some(x));
-817
-818            if self.n[4] < 5 {
-819                self.q[self.n[4] as usize] = x;
-820                self.n[4] += 1;
-821                if self.n[4] == 5 {
-822                    sort_floats(&mut self.q);
-823                }
-824                return;
-825            }
-826
-827            let mut k: usize;
-828            if x < self.q[0] {
-829                self.q[0] = x;
-830                k = 0;
-831            } else {
-832                k = 4;
-833                for i in 1..5 {
-834                    if x < self.q[i] {
-835                        k = i;
-836                        break;
-837                    }
-838                }
-839                if self.q[4] < x {
-840                    self.q[4] = x;
-841                }
-842            };
-843
-844            for i in k..5 {
-845                self.n[i] += 1;
-846            }
-847            for i in 0..5 {
-848                self.m[i] += self.dm[i];
-849            }
-850
-851            for i in 1..4 {
-852                let d = self.m[i] - self.n[i].to_f64().unwrap();
-853                if d >= 1. && self.n[i + 1] - self.n[i] > 1
-854                    || d <= -1. && self.n[i - 1] - self.n[i] < -1
-855                {
-856                    let d = Float::signum(d);
-857                    let q_new = self.parabolic(i, d);
-858                    if self.q[i - 1] < q_new && q_new < self.q[i + 1] {
-859                        self.q[i] = q_new;
-860                    } else {
-861                        self.q[i] = self.linear(i, d);
-862                    }
-863                    let delta = d.round() as i64;
-864                    debug_assert_eq!(delta.abs(), 1);
-865                    self.n[i] += delta;
-866                }
-867            }
-868        }
-869
-870        pub fn with_samples(mut self, samples: impl IntoIterator<Item = f64>) -> Self {
-871            for sample in samples {
-872                self.add(sample);
-873            }
-874
-875            self
-876        }
-877    }
-878
-879    fn sort_floats(v: &mut [f64]) {
-880        v.sort_unstable_by(|a, b| a.total_cmp(b));
-881    }
-882}
-883
-884mod linalg {
-885    use candle::{IndexOp, Result, Shape, Tensor};
-886
-887    pub fn inverse(m: &Tensor) -> Result<Tensor> {
-888        adjoint(m)? / determinant(m)?.to_scalar::<f64>()?
-889    }
-890
-891    pub fn adjoint(m: &Tensor) -> Result<Tensor> {
-892        cofactor(m)?.transpose(0, 1)
-893    }
-894
-895    pub fn cofactor(m: &Tensor) -> Result<Tensor> {
-896        let s = m.shape().dim(0)?;
-897        if s == 2 {
-898            let mut v = vec![];
-899            for i in 0..2 {
-900                let mut x = vec![];
-901                for j in 0..2 {
-902                    x.push((m.i((i, j))? * (-1.0f64).powi(i as i32 + j as i32))?)
-903                }
-904                v.push(Tensor::stack(&x, 0)?.unsqueeze(0)?);
-905            }
-906            return Tensor::stack(&v, 1)?.squeeze(0);
-907        }
-908
-909        let minors = minors(m)?;
-910        let mut v = vec![];
-911        for i in 0..s {
-912            let mut x = vec![];
-913            for j in 0..s {
-914                let det = (determinant(&minors.i((i, j))?)?
-915                    * ((-1.0f64).powi(i as i32) * (-1.0f64).powi(j as i32)))?;
-916                x.push(det);
-917            }
-918            v.push(Tensor::stack(&x, 0)?.unsqueeze(0)?);
-919        }
-920
-921        Tensor::stack(&v, 1)?.squeeze(0)
-922    }
-923
-924    pub fn determinant(m: &Tensor) -> Result<Tensor> {
-925        let s = m.shape().dim(0)?;
-926        if s == 2 {
-927            return (m.i((0, 0))? * m.i((1, 1))?)? - (m.i((0, 1))? * m.i((1, 0))?);
-928        }
-929
-930        let cofactor = cofactor(m)?;
-931        let m0 = m.i((0, 0))?;
-932        let det = (0..s)
-933            .map(|i| (m.i((0, i))? * cofactor.i((0, i))?))
-934            .try_fold(m0.zeros_like()?, |acc, cur| (acc + cur?))?;
-935
-936        Ok(det)
-937    }
-938
-939    pub fn minors(m: &Tensor) -> Result<Tensor> {
-940        let s = m.shape().dim(0)?;
-941        if s == 1 {
-942            return m.i((0, 0));
-943        }
-944
-945        let mut v = vec![];
-946        for i in 0..s {
-947            let msub = Tensor::cat(&[m.i((..i, ..))?, m.i(((i + 1).., ..))?], 0)?;
-948            let mut x = vec![];
-949            for j in 0..s {
-950                let t = Tensor::cat(&[msub.i((.., ..j))?, msub.i((.., (j + 1)..))?], 1)?;
-951                x.push(t);
-952            }
-953            v.push(Tensor::stack(&x, 0)?.unsqueeze(0)?);
-954        }
-955
-956        Tensor::stack(&v, 1)?.squeeze(0)
-957    }
-958
-959    #[derive(Debug)]
-960    pub struct TensordotGeneral {
-961        pub lhs_permutation: Permutation,
-962        pub rhs_permutation: Permutation,
-963        pub tensordot_fixed_position: TensordotFixedPosition,
-964        pub output_permutation: Permutation,
-965    }
-966
-967    impl TensordotGeneral {
-968        pub fn eval(&self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor> {
-969            let permuted_lhs = self.lhs_permutation.eval(lhs)?;
-970            let permuted_rhs = self.rhs_permutation.eval(rhs)?;
-971            let tensordotted = self
-972                .tensordot_fixed_position
-973                .eval(&permuted_lhs, &permuted_rhs)?;
-974            self.output_permutation.eval(&tensordotted)
-975        }
-976    }
-977
-978    #[derive(Debug)]
-979    pub struct TensordotFixedPosition {
-980        pub len_uncontracted_lhs: usize,
-981        pub len_uncontracted_rhs: usize,
-982        pub len_contracted_axes: usize,
-983        pub output_shape: Shape,
-984    }
-985
-986    impl TensordotFixedPosition {
-987        fn eval(&self, lhs: &Tensor, rhs: &Tensor) -> Result<Tensor> {
-988            let lhs_view = lhs.reshape((self.len_uncontracted_lhs, self.len_contracted_axes))?;
-989            let rhs_view = rhs.reshape((self.len_contracted_axes, self.len_uncontracted_rhs))?;
-990
-991            lhs_view.matmul(&rhs_view)?.reshape(&self.output_shape)
-992        }
-993    }
-994
-995    #[derive(Debug)]
-996    pub struct Permutation {
-997        pub dims: Vec<usize>,
-998    }
-999
-1000    impl Permutation {
-1001        fn eval(&self, tensor: &Tensor) -> Result<Tensor> {
-1002            tensor.permute(self.dims.as_slice())
-1003        }
-1004    }
-1005}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/utils.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/utils.rs.html deleted file mode 100644 index 39bb69e..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/utils.rs.html +++ /dev/null @@ -1,62 +0,0 @@ -utils.rs - source

candle_transformers/models/stable_diffusion/
utils.rs

1use candle::{Device, Result, Tensor};
-2
-3pub fn linspace(start: f64, stop: f64, steps: usize) -> Result<Tensor> {
-4    if steps == 0 {
-5        Tensor::from_vec(Vec::<f64>::new(), steps, &Device::Cpu)
-6    } else if steps == 1 {
-7        Tensor::from_vec(vec![start], steps, &Device::Cpu)
-8    } else {
-9        let delta = (stop - start) / (steps - 1) as f64;
-10        let vs = (0..steps)
-11            .map(|step| start + step as f64 * delta)
-12            .collect::<Vec<_>>();
-13        Tensor::from_vec(vs, steps, &Device::Cpu)
-14    }
-15}
-16
-17/// A linear interpolator for a sorted array of x and y values.
-18struct LinearInterpolator<'x, 'y> {
-19    xp: &'x [f64],
-20    fp: &'y [f64],
-21    cache: usize,
-22}
-23
-24impl LinearInterpolator<'_, '_> {
-25    fn accel_find(&mut self, x: f64) -> usize {
-26        let xidx = self.cache;
-27        if x < self.xp[xidx] {
-28            self.cache = self.xp[0..xidx].partition_point(|o| *o < x);
-29            self.cache = self.cache.saturating_sub(1);
-30        } else if x >= self.xp[xidx + 1] {
-31            self.cache = self.xp[xidx..self.xp.len()].partition_point(|o| *o < x) + xidx;
-32            self.cache = self.cache.saturating_sub(1);
-33        }
-34
-35        self.cache
-36    }
-37
-38    fn eval(&mut self, x: f64) -> f64 {
-39        if x < self.xp[0] || x > self.xp[self.xp.len() - 1] {
-40            return f64::NAN;
-41        }
-42
-43        let idx = self.accel_find(x);
-44
-45        let x_l = self.xp[idx];
-46        let x_h = self.xp[idx + 1];
-47        let y_l = self.fp[idx];
-48        let y_h = self.fp[idx + 1];
-49        let dx = x_h - x_l;
-50        if dx > 0.0 {
-51            y_l + (x - x_l) / dx * (y_h - y_l)
-52        } else {
-53            f64::NAN
-54        }
-55    }
-56}
-57
-58pub fn interp(x: &[f64], xp: &[f64], fp: &[f64]) -> Vec<f64> {
-59    let mut interpolator = LinearInterpolator { xp, fp, cache: 0 };
-60    x.iter().map(|&x| interpolator.eval(x)).collect()
-61}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/vae.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/vae.rs.html deleted file mode 100644 index c289eec..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stable_diffusion/vae.rs.html +++ /dev/null @@ -1,404 +0,0 @@ -vae.rs - source

candle_transformers/models/stable_diffusion/
vae.rs

1#![allow(dead_code)]
-2//! # Variational Auto-Encoder (VAE) Models.
-3//!
-4//! Auto-encoder models compress their input to a usually smaller latent space
-5//! before expanding it back to its original shape. This results in the latent values
-6//! compressing the original information.
-7use super::unet_2d_blocks::{
-8    DownEncoderBlock2D, DownEncoderBlock2DConfig, UNetMidBlock2D, UNetMidBlock2DConfig,
-9    UpDecoderBlock2D, UpDecoderBlock2DConfig,
-10};
-11use candle::{Result, Tensor};
-12use candle_nn as nn;
-13use candle_nn::Module;
-14
-15#[derive(Debug, Clone)]
-16struct EncoderConfig {
-17    // down_block_types: DownEncoderBlock2D
-18    block_out_channels: Vec<usize>,
-19    layers_per_block: usize,
-20    norm_num_groups: usize,
-21    double_z: bool,
-22}
-23
-24impl Default for EncoderConfig {
-25    fn default() -> Self {
-26        Self {
-27            block_out_channels: vec![64],
-28            layers_per_block: 2,
-29            norm_num_groups: 32,
-30            double_z: true,
-31        }
-32    }
-33}
-34
-35#[derive(Debug)]
-36struct Encoder {
-37    conv_in: nn::Conv2d,
-38    down_blocks: Vec<DownEncoderBlock2D>,
-39    mid_block: UNetMidBlock2D,
-40    conv_norm_out: nn::GroupNorm,
-41    conv_out: nn::Conv2d,
-42    #[allow(dead_code)]
-43    config: EncoderConfig,
-44}
-45
-46impl Encoder {
-47    fn new(
-48        vs: nn::VarBuilder,
-49        in_channels: usize,
-50        out_channels: usize,
-51        config: EncoderConfig,
-52    ) -> Result<Self> {
-53        let conv_cfg = nn::Conv2dConfig {
-54            padding: 1,
-55            ..Default::default()
-56        };
-57        let conv_in = nn::conv2d(
-58            in_channels,
-59            config.block_out_channels[0],
-60            3,
-61            conv_cfg,
-62            vs.pp("conv_in"),
-63        )?;
-64        let mut down_blocks = vec![];
-65        let vs_down_blocks = vs.pp("down_blocks");
-66        for index in 0..config.block_out_channels.len() {
-67            let out_channels = config.block_out_channels[index];
-68            let in_channels = if index > 0 {
-69                config.block_out_channels[index - 1]
-70            } else {
-71                config.block_out_channels[0]
-72            };
-73            let is_final = index + 1 == config.block_out_channels.len();
-74            let cfg = DownEncoderBlock2DConfig {
-75                num_layers: config.layers_per_block,
-76                resnet_eps: 1e-6,
-77                resnet_groups: config.norm_num_groups,
-78                add_downsample: !is_final,
-79                downsample_padding: 0,
-80                ..Default::default()
-81            };
-82            let down_block = DownEncoderBlock2D::new(
-83                vs_down_blocks.pp(index.to_string()),
-84                in_channels,
-85                out_channels,
-86                cfg,
-87            )?;
-88            down_blocks.push(down_block)
-89        }
-90        let last_block_out_channels = *config.block_out_channels.last().unwrap();
-91        let mid_cfg = UNetMidBlock2DConfig {
-92            resnet_eps: 1e-6,
-93            output_scale_factor: 1.,
-94            attn_num_head_channels: None,
-95            resnet_groups: Some(config.norm_num_groups),
-96            ..Default::default()
-97        };
-98        let mid_block =
-99            UNetMidBlock2D::new(vs.pp("mid_block"), last_block_out_channels, None, mid_cfg)?;
-100        let conv_norm_out = nn::group_norm(
-101            config.norm_num_groups,
-102            last_block_out_channels,
-103            1e-6,
-104            vs.pp("conv_norm_out"),
-105        )?;
-106        let conv_out_channels = if config.double_z {
-107            2 * out_channels
-108        } else {
-109            out_channels
-110        };
-111        let conv_cfg = nn::Conv2dConfig {
-112            padding: 1,
-113            ..Default::default()
-114        };
-115        let conv_out = nn::conv2d(
-116            last_block_out_channels,
-117            conv_out_channels,
-118            3,
-119            conv_cfg,
-120            vs.pp("conv_out"),
-121        )?;
-122        Ok(Self {
-123            conv_in,
-124            down_blocks,
-125            mid_block,
-126            conv_norm_out,
-127            conv_out,
-128            config,
-129        })
-130    }
-131}
-132
-133impl Encoder {
-134    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-135        let mut xs = xs.apply(&self.conv_in)?;
-136        for down_block in self.down_blocks.iter() {
-137            xs = xs.apply(down_block)?
-138        }
-139        let xs = self
-140            .mid_block
-141            .forward(&xs, None)?
-142            .apply(&self.conv_norm_out)?;
-143        nn::ops::silu(&xs)?.apply(&self.conv_out)
-144    }
-145}
-146
-147#[derive(Debug, Clone)]
-148struct DecoderConfig {
-149    // up_block_types: UpDecoderBlock2D
-150    block_out_channels: Vec<usize>,
-151    layers_per_block: usize,
-152    norm_num_groups: usize,
-153}
-154
-155impl Default for DecoderConfig {
-156    fn default() -> Self {
-157        Self {
-158            block_out_channels: vec![64],
-159            layers_per_block: 2,
-160            norm_num_groups: 32,
-161        }
-162    }
-163}
-164
-165#[derive(Debug)]
-166struct Decoder {
-167    conv_in: nn::Conv2d,
-168    up_blocks: Vec<UpDecoderBlock2D>,
-169    mid_block: UNetMidBlock2D,
-170    conv_norm_out: nn::GroupNorm,
-171    conv_out: nn::Conv2d,
-172    #[allow(dead_code)]
-173    config: DecoderConfig,
-174}
-175
-176impl Decoder {
-177    fn new(
-178        vs: nn::VarBuilder,
-179        in_channels: usize,
-180        out_channels: usize,
-181        config: DecoderConfig,
-182    ) -> Result<Self> {
-183        let n_block_out_channels = config.block_out_channels.len();
-184        let last_block_out_channels = *config.block_out_channels.last().unwrap();
-185        let conv_cfg = nn::Conv2dConfig {
-186            padding: 1,
-187            ..Default::default()
-188        };
-189        let conv_in = nn::conv2d(
-190            in_channels,
-191            last_block_out_channels,
-192            3,
-193            conv_cfg,
-194            vs.pp("conv_in"),
-195        )?;
-196        let mid_cfg = UNetMidBlock2DConfig {
-197            resnet_eps: 1e-6,
-198            output_scale_factor: 1.,
-199            attn_num_head_channels: None,
-200            resnet_groups: Some(config.norm_num_groups),
-201            ..Default::default()
-202        };
-203        let mid_block =
-204            UNetMidBlock2D::new(vs.pp("mid_block"), last_block_out_channels, None, mid_cfg)?;
-205        let mut up_blocks = vec![];
-206        let vs_up_blocks = vs.pp("up_blocks");
-207        let reversed_block_out_channels: Vec<_> =
-208            config.block_out_channels.iter().copied().rev().collect();
-209        for index in 0..n_block_out_channels {
-210            let out_channels = reversed_block_out_channels[index];
-211            let in_channels = if index > 0 {
-212                reversed_block_out_channels[index - 1]
-213            } else {
-214                reversed_block_out_channels[0]
-215            };
-216            let is_final = index + 1 == n_block_out_channels;
-217            let cfg = UpDecoderBlock2DConfig {
-218                num_layers: config.layers_per_block + 1,
-219                resnet_eps: 1e-6,
-220                resnet_groups: config.norm_num_groups,
-221                add_upsample: !is_final,
-222                ..Default::default()
-223            };
-224            let up_block = UpDecoderBlock2D::new(
-225                vs_up_blocks.pp(index.to_string()),
-226                in_channels,
-227                out_channels,
-228                cfg,
-229            )?;
-230            up_blocks.push(up_block)
-231        }
-232        let conv_norm_out = nn::group_norm(
-233            config.norm_num_groups,
-234            config.block_out_channels[0],
-235            1e-6,
-236            vs.pp("conv_norm_out"),
-237        )?;
-238        let conv_cfg = nn::Conv2dConfig {
-239            padding: 1,
-240            ..Default::default()
-241        };
-242        let conv_out = nn::conv2d(
-243            config.block_out_channels[0],
-244            out_channels,
-245            3,
-246            conv_cfg,
-247            vs.pp("conv_out"),
-248        )?;
-249        Ok(Self {
-250            conv_in,
-251            up_blocks,
-252            mid_block,
-253            conv_norm_out,
-254            conv_out,
-255            config,
-256        })
-257    }
-258}
-259
-260impl Decoder {
-261    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-262        let mut xs = self.mid_block.forward(&self.conv_in.forward(xs)?, None)?;
-263        for up_block in self.up_blocks.iter() {
-264            xs = up_block.forward(&xs)?
-265        }
-266        let xs = self.conv_norm_out.forward(&xs)?;
-267        let xs = nn::ops::silu(&xs)?;
-268        self.conv_out.forward(&xs)
-269    }
-270}
-271
-272#[derive(Debug, Clone)]
-273pub struct AutoEncoderKLConfig {
-274    pub block_out_channels: Vec<usize>,
-275    pub layers_per_block: usize,
-276    pub latent_channels: usize,
-277    pub norm_num_groups: usize,
-278    pub use_quant_conv: bool,
-279    pub use_post_quant_conv: bool,
-280}
-281
-282impl Default for AutoEncoderKLConfig {
-283    fn default() -> Self {
-284        Self {
-285            block_out_channels: vec![64],
-286            layers_per_block: 1,
-287            latent_channels: 4,
-288            norm_num_groups: 32,
-289            use_quant_conv: true,
-290            use_post_quant_conv: true,
-291        }
-292    }
-293}
-294
-295pub struct DiagonalGaussianDistribution {
-296    mean: Tensor,
-297    std: Tensor,
-298}
-299
-300impl DiagonalGaussianDistribution {
-301    pub fn new(parameters: &Tensor) -> Result<Self> {
-302        let mut parameters = parameters.chunk(2, 1)?.into_iter();
-303        let mean = parameters.next().unwrap();
-304        let logvar = parameters.next().unwrap();
-305        let std = (logvar * 0.5)?.exp()?;
-306        Ok(DiagonalGaussianDistribution { mean, std })
-307    }
-308
-309    pub fn sample(&self) -> Result<Tensor> {
-310        let sample = self.mean.randn_like(0., 1.);
-311        &self.mean + &self.std * sample
-312    }
-313}
-314
-315// https://github.com/huggingface/diffusers/blob/970e30606c2944e3286f56e8eb6d3dc6d1eb85f7/src/diffusers/models/vae.py#L485
-316// This implementation is specific to the config used in stable-diffusion-v1-5
-317// https://huggingface.co/runwayml/stable-diffusion-v1-5/blob/main/vae/config.json
-318#[derive(Debug)]
-319pub struct AutoEncoderKL {
-320    encoder: Encoder,
-321    decoder: Decoder,
-322    quant_conv: Option<nn::Conv2d>,
-323    post_quant_conv: Option<nn::Conv2d>,
-324    pub config: AutoEncoderKLConfig,
-325}
-326
-327impl AutoEncoderKL {
-328    pub fn new(
-329        vs: nn::VarBuilder,
-330        in_channels: usize,
-331        out_channels: usize,
-332        config: AutoEncoderKLConfig,
-333    ) -> Result<Self> {
-334        let latent_channels = config.latent_channels;
-335        let encoder_cfg = EncoderConfig {
-336            block_out_channels: config.block_out_channels.clone(),
-337            layers_per_block: config.layers_per_block,
-338            norm_num_groups: config.norm_num_groups,
-339            double_z: true,
-340        };
-341        let encoder = Encoder::new(vs.pp("encoder"), in_channels, latent_channels, encoder_cfg)?;
-342        let decoder_cfg = DecoderConfig {
-343            block_out_channels: config.block_out_channels.clone(),
-344            layers_per_block: config.layers_per_block,
-345            norm_num_groups: config.norm_num_groups,
-346        };
-347        let decoder = Decoder::new(vs.pp("decoder"), latent_channels, out_channels, decoder_cfg)?;
-348        let conv_cfg = Default::default();
-349
-350        let quant_conv = {
-351            if config.use_quant_conv {
-352                Some(nn::conv2d(
-353                    2 * latent_channels,
-354                    2 * latent_channels,
-355                    1,
-356                    conv_cfg,
-357                    vs.pp("quant_conv"),
-358                )?)
-359            } else {
-360                None
-361            }
-362        };
-363        let post_quant_conv = {
-364            if config.use_post_quant_conv {
-365                Some(nn::conv2d(
-366                    latent_channels,
-367                    latent_channels,
-368                    1,
-369                    conv_cfg,
-370                    vs.pp("post_quant_conv"),
-371                )?)
-372            } else {
-373                None
-374            }
-375        };
-376        Ok(Self {
-377            encoder,
-378            decoder,
-379            quant_conv,
-380            post_quant_conv,
-381            config,
-382        })
-383    }
-384
-385    /// Returns the distribution in the latent space.
-386    pub fn encode(&self, xs: &Tensor) -> Result<DiagonalGaussianDistribution> {
-387        let xs = self.encoder.forward(xs)?;
-388        let parameters = match &self.quant_conv {
-389            None => xs,
-390            Some(quant_conv) => quant_conv.forward(&xs)?,
-391        };
-392        DiagonalGaussianDistribution::new(&parameters)
-393    }
-394
-395    /// Takes as input some sampled values.
-396    pub fn decode(&self, xs: &Tensor) -> Result<Tensor> {
-397        let xs = match &self.post_quant_conv {
-398            None => xs,
-399            Some(post_quant_conv) => &post_quant_conv.forward(xs)?,
-400        };
-401        self.decoder.forward(xs)
-402    }
-403}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stable_lm.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stable_lm.rs.html deleted file mode 100644 index 3bc6cbd..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stable_lm.rs.html +++ /dev/null @@ -1,434 +0,0 @@ -stable_lm.rs - source

candle_transformers/models/
stable_lm.rs

1//! StableLM model implementation.
-2//!
-3//! StableLM is a family of language models trained by Stability AI.
-4//! This implementation supports the StableLM architecture.
-5//!
-6//! Key characteristics:
-7//! - Grouped query attention (GQA)
-8//! - Layer normalization
-9//! - Rotary positional embeddings (RoPE)
-10//! - Support for different model sizes (3B, 7B)
-11//!
-12//! References:
-13//! - 🤗 [Model Card](https://huggingface.co/stabilityai/stablelm-3b-4e1t)
-14//!
-15
-16use crate::models::with_tracing::{linear, linear_no_bias, Linear};
-17use candle::{DType, Device, Module, Result, Tensor, D};
-18use candle_nn::{Activation, LayerNorm, VarBuilder};
-19use serde::Deserialize;
-20use std::sync::Arc;
-21
-22// https://huggingface.co/stabilityai/stablelm-3b-4e1t/blob/main/configuration_stablelm.py
-23#[derive(Debug, Clone, PartialEq, Deserialize)]
-24pub struct Config {
-25    pub(crate) vocab_size: usize,
-26    pub(crate) intermediate_size: usize,
-27    pub(crate) hidden_size: usize,
-28    pub(crate) num_hidden_layers: usize,
-29    pub(crate) num_attention_heads: usize,
-30    pub(crate) num_key_value_heads: usize,
-31    pub(crate) hidden_act: Activation,
-32    pub(crate) partial_rotary_factor: f64,
-33    pub(crate) rope_theta: f64,
-34    pub(crate) max_position_embeddings: usize,
-35    pub(crate) layer_norm_eps: f64,
-36    pub(crate) use_cache: bool,
-37    #[serde(default)]
-38    pub(crate) use_qkv_bias: bool, // Used in StableLM-2
-39    #[serde(default)]
-40    pub(crate) use_flash_attn: bool, // Not in config.json
-41}
-42
-43impl Config {
-44    pub fn stablelm_3b_4e1t(use_flash_attn: bool) -> Self {
-45        Self {
-46            vocab_size: 50304,
-47            intermediate_size: 6912,
-48            hidden_size: 2560,
-49            num_hidden_layers: 32,
-50            num_attention_heads: 32,
-51            num_key_value_heads: 32,
-52            hidden_act: Activation::Silu,
-53            partial_rotary_factor: 0.25,
-54            rope_theta: 10_000.,
-55            max_position_embeddings: 4096,
-56            layer_norm_eps: 1e-5,
-57            use_qkv_bias: false,
-58            use_cache: true,
-59            use_flash_attn,
-60        }
-61    }
-62
-63    pub fn head_dim(&self) -> usize {
-64        self.hidden_size / self.num_attention_heads
-65    }
-66
-67    pub fn rotary_ndims(&self) -> usize {
-68        (self.head_dim() as f64 * self.partial_rotary_factor) as usize
-69    }
-70
-71    pub fn num_kv_groups(&self) -> usize {
-72        self.num_attention_heads / self.num_key_value_heads
-73    }
-74
-75    pub fn set_use_flash_attn(&mut self, use_flash_attn: bool) {
-76        self.use_flash_attn = use_flash_attn
-77    }
-78}
-79
-80#[derive(Debug)]
-81pub(crate) struct RotaryEmbedding {
-82    sin: Tensor,
-83    cos: Tensor,
-84}
-85
-86fn rotate_half(xs: &Tensor) -> Result<Tensor> {
-87    let xs = xs.chunk(2, D::Minus1)?;
-88    Tensor::cat(&[&xs[1].neg()?, &xs[0]], D::Minus1)
-89}
-90
-91impl RotaryEmbedding {
-92    pub(crate) fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-93        let dim = cfg.rotary_ndims();
-94        let max_seq_len = cfg.max_position_embeddings;
-95        let inv_freq: Vec<_> = (0..dim)
-96            .step_by(2)
-97            .map(|i| 1f32 / cfg.rope_theta.powf(i as f64 / dim as f64) as f32)
-98            .collect();
-99        let inv_freq_len = inv_freq.len();
-100        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-101        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-102            .to_dtype(dtype)?
-103            .reshape((max_seq_len, 1))?;
-104        let freqs = t.matmul(&inv_freq)?;
-105        let freqs = Tensor::cat(&[&freqs, &freqs], D::Minus1)?;
-106        Ok(Self {
-107            sin: freqs.sin()?,
-108            cos: freqs.cos()?,
-109        })
-110    }
-111
-112    pub(crate) fn apply_rotary_emb_qkv(
-113        &self,
-114        q: &Tensor,
-115        k: &Tensor,
-116        seqlen_offset: usize,
-117    ) -> Result<(Tensor, Tensor)> {
-118        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-119        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-120        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-121        let cos = cos.unsqueeze(0)?.unsqueeze(0)?; // (1, 1, seq_len, dim)
-122        let sin = sin.unsqueeze(0)?.unsqueeze(0)?; // (1, 1, seq_len, dim)
-123        let q_embed = (q.broadcast_mul(&cos)? + rotate_half(q)?.broadcast_mul(&sin))?;
-124        let k_embed = (k.broadcast_mul(&cos)? + rotate_half(k)?.broadcast_mul(&sin))?;
-125        Ok((q_embed, k_embed))
-126    }
-127}
-128
-129#[derive(Debug)]
-130#[allow(clippy::upper_case_acronyms)]
-131struct MLP {
-132    gate_proj: Linear,
-133    up_proj: Linear,
-134    down_proj: Linear,
-135    act_fn: Activation,
-136    span: tracing::Span,
-137}
-138
-139impl MLP {
-140    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-141        let hidden_sz = cfg.hidden_size;
-142        let intermediate_sz = cfg.intermediate_size;
-143        let gate_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("gate_proj"))?;
-144        let up_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("up_proj"))?;
-145        let down_proj = linear_no_bias(intermediate_sz, hidden_sz, vb.pp("down_proj"))?;
-146        Ok(Self {
-147            gate_proj,
-148            up_proj,
-149            down_proj,
-150            act_fn: cfg.hidden_act,
-151            span: tracing::span!(tracing::Level::TRACE, "mlp"),
-152        })
-153    }
-154}
-155
-156impl Module for MLP {
-157    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-158        let _enter = self.span.enter();
-159        let lhs = xs.apply(&self.gate_proj)?.apply(&self.act_fn)?;
-160        let rhs = xs.apply(&self.up_proj)?;
-161        (lhs * rhs)?.apply(&self.down_proj)
-162    }
-163}
-164
-165#[cfg(feature = "flash-attn")]
-166fn flash_attn(
-167    q: &Tensor,
-168    k: &Tensor,
-169    v: &Tensor,
-170    softmax_scale: f32,
-171    causal: bool,
-172) -> Result<Tensor> {
-173    candle_flash_attn::flash_attn(q, k, v, softmax_scale, causal)
-174}
-175
-176#[cfg(not(feature = "flash-attn"))]
-177fn flash_attn(_: &Tensor, _: &Tensor, _: &Tensor, _: f32, _: bool) -> Result<Tensor> {
-178    unimplemented!("compile with '--features flash-attn'")
-179}
-180
-181#[derive(Debug)]
-182struct Attention {
-183    q_proj: Linear,
-184    k_proj: Linear,
-185    v_proj: Linear,
-186    o_proj: Linear,
-187    num_heads: usize,
-188    num_kv_heads: usize,
-189    num_kv_groups: usize,
-190    head_dim: usize,
-191    hidden_size: usize,
-192    rotary_emb: Arc<RotaryEmbedding>,
-193    kv_cache: Option<(Tensor, Tensor)>,
-194    use_cache: bool,
-195    rotary_ndims: usize,
-196    use_flash_attn: bool,
-197    span: tracing::Span,
-198}
-199
-200impl Attention {
-201    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-202        let hidden_sz = cfg.hidden_size;
-203        let head_dim = cfg.head_dim();
-204        let num_heads = cfg.num_attention_heads;
-205        let num_kv_heads = cfg.num_key_value_heads;
-206        let linear_layer = if cfg.use_qkv_bias {
-207            linear
-208        } else {
-209            linear_no_bias
-210        };
-211
-212        let q_proj = linear_layer(hidden_sz, num_heads * head_dim, vb.pp("q_proj"))?;
-213        let k_proj = linear_layer(hidden_sz, num_kv_heads * head_dim, vb.pp("k_proj"))?;
-214        let v_proj = linear_layer(hidden_sz, num_kv_heads * head_dim, vb.pp("v_proj"))?;
-215        let o_proj = linear_no_bias(num_heads * head_dim, hidden_sz, vb.pp("o_proj"))?;
-216        Ok(Self {
-217            q_proj,
-218            k_proj,
-219            v_proj,
-220            o_proj,
-221            num_heads,
-222            num_kv_heads,
-223            num_kv_groups: cfg.num_kv_groups(),
-224            head_dim,
-225            hidden_size: hidden_sz,
-226            rotary_emb,
-227            kv_cache: None,
-228            use_cache: cfg.use_cache,
-229            rotary_ndims: cfg.rotary_ndims(),
-230            use_flash_attn: cfg.use_flash_attn,
-231            span: tracing::span!(tracing::Level::TRACE, "attn"),
-232        })
-233    }
-234
-235    fn forward(
-236        &mut self,
-237        xs: &Tensor,
-238        attention_mask: Option<&Tensor>,
-239        seqlen_offset: usize,
-240    ) -> Result<Tensor> {
-241        let _enter = self.span.enter();
-242        let (b_sz, q_len, _) = xs.dims3()?;
-243
-244        let query_states = self.q_proj.forward(xs)?;
-245        let key_states = self.k_proj.forward(xs)?;
-246        let value_states = self.v_proj.forward(xs)?;
-247
-248        let query_states = query_states
-249            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-250            .transpose(1, 2)?;
-251        let key_states = key_states
-252            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-253            .transpose(1, 2)?;
-254        let value_states = value_states
-255            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-256            .transpose(1, 2)?;
-257
-258        let (rot_ndims, pass_ndims) = (self.rotary_ndims, self.head_dim - self.rotary_ndims);
-259        let query_rot = query_states.narrow(D::Minus1, 0, rot_ndims)?;
-260        let query_pass = query_states.narrow(D::Minus1, rot_ndims, pass_ndims)?;
-261        let key_rot = key_states.narrow(D::Minus1, 0, rot_ndims)?;
-262        let key_pass = key_states.narrow(D::Minus1, rot_ndims, pass_ndims)?;
-263        let (query_rot, key_rot) =
-264            self.rotary_emb
-265                .apply_rotary_emb_qkv(&query_rot, &key_rot, seqlen_offset)?;
-266        let query_states = Tensor::cat(&[query_rot, query_pass], D::Minus1)?.contiguous()?;
-267        let key_states = Tensor::cat(&[key_rot, key_pass], D::Minus1)?.contiguous()?;
-268
-269        let (key_states, value_states) = match &self.kv_cache {
-270            None => (key_states, value_states),
-271            Some((prev_k, prev_v)) => {
-272                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-273                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-274                (key_states, value_states)
-275            }
-276        };
-277        if self.use_cache {
-278            self.kv_cache = Some((key_states.clone(), value_states.clone()));
-279        }
-280
-281        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?.contiguous()?;
-282        let value_states =
-283            crate::utils::repeat_kv(value_states, self.num_kv_groups)?.contiguous()?;
-284
-285        let attn_output = if self.use_flash_attn {
-286            // flash-attn expects (b_sz, seq_len, nheads, head_dim)
-287            let q = query_states.transpose(1, 2)?;
-288            let k = key_states.transpose(1, 2)?;
-289            let v = value_states.transpose(1, 2)?;
-290            let softmax_scale = 1f32 / (self.head_dim as f32).sqrt();
-291            flash_attn(&q, &k, &v, softmax_scale, q_len > 1)?.transpose(1, 2)?
-292        } else {
-293            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-294            let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-295
-296            let attn_weights = match attention_mask {
-297                None => attn_weights,
-298                Some(mask) => attn_weights.broadcast_add(mask)?,
-299            };
-300            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-301            attn_weights.matmul(&value_states)?
-302        };
-303        attn_output
-304            .transpose(1, 2)?
-305            .reshape((b_sz, q_len, self.hidden_size))?
-306            .apply(&self.o_proj)
-307    }
-308}
-309
-310#[derive(Debug)]
-311struct DecoderLayer {
-312    self_attn: Attention,
-313    mlp: MLP,
-314    input_layernorm: LayerNorm,
-315    post_attention_layernorm: LayerNorm,
-316    span: tracing::Span,
-317}
-318
-319impl DecoderLayer {
-320    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-321        let self_attn = Attention::new(rotary_emb, cfg, vb.pp("self_attn"))?;
-322        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-323        let input_layernorm = candle_nn::layer_norm(
-324            cfg.hidden_size,
-325            cfg.layer_norm_eps,
-326            vb.pp("input_layernorm"),
-327        )?;
-328        let post_attention_layernorm = candle_nn::layer_norm(
-329            cfg.hidden_size,
-330            cfg.layer_norm_eps,
-331            vb.pp("post_attention_layernorm"),
-332        )?;
-333        Ok(Self {
-334            self_attn,
-335            mlp,
-336            input_layernorm,
-337            post_attention_layernorm,
-338            span: tracing::span!(tracing::Level::TRACE, "layer"),
-339        })
-340    }
-341
-342    fn forward(
-343        &mut self,
-344        xs: &Tensor,
-345        attention_mask: Option<&Tensor>,
-346        seqlen_offset: usize,
-347    ) -> Result<Tensor> {
-348        let _enter = self.span.enter();
-349        let residual = xs;
-350        let xs = self.input_layernorm.forward(xs)?;
-351        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-352        let xs = (xs + residual)?;
-353        let residual = &xs;
-354        let xs = xs.apply(&self.post_attention_layernorm)?.apply(&self.mlp)?;
-355        residual + xs
-356    }
-357}
-358
-359#[derive(Debug)]
-360pub struct Model {
-361    embed_tokens: candle_nn::Embedding,
-362    layers: Vec<DecoderLayer>,
-363    norm: LayerNorm,
-364    lm_head: Linear,
-365    device: Device,
-366    dtype: DType,
-367    span: tracing::Span,
-368}
-369
-370impl Model {
-371    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-372        let vb_m = vb.pp("model");
-373        let embed_tokens =
-374            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-375        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb_m.device())?);
-376        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-377        let vb_l = vb_m.pp("layers");
-378        for layer_idx in 0..cfg.num_hidden_layers {
-379            let layer = DecoderLayer::new(rotary_emb.clone(), cfg, vb_l.pp(layer_idx))?;
-380            layers.push(layer)
-381        }
-382        let norm = candle_nn::layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb_m.pp("norm"))?;
-383        let lm_head = linear_no_bias(cfg.hidden_size, cfg.vocab_size, vb.pp("lm_head"))?;
-384        Ok(Self {
-385            embed_tokens,
-386            layers,
-387            norm,
-388            lm_head,
-389            device: vb.device().clone(),
-390            dtype: vb.dtype(),
-391            span: tracing::span!(tracing::Level::TRACE, "model"),
-392        })
-393    }
-394
-395    fn prepare_decoder_attention_mask(
-396        &self,
-397        b_size: usize,
-398        tgt_len: usize,
-399        seqlen_offset: usize,
-400    ) -> Result<Tensor> {
-401        // Sliding window mask?
-402        let mask: Vec<_> = (0..tgt_len)
-403            .flat_map(|i| (0..tgt_len).map(move |j| if i < j { f32::NEG_INFINITY } else { 0. }))
-404            .collect();
-405        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-406        let mask = if seqlen_offset > 0 {
-407            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-408            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-409        } else {
-410            mask
-411        };
-412        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-413            .to_dtype(self.dtype)
-414    }
-415
-416    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-417        let _enter = self.span.enter();
-418        let (b_size, seq_len) = input_ids.dims2()?;
-419        let attention_mask = if seq_len <= 1 {
-420            None
-421        } else {
-422            let mask = self.prepare_decoder_attention_mask(b_size, seq_len, seqlen_offset)?;
-423            Some(mask)
-424        };
-425        let mut xs = self.embed_tokens.forward(input_ids)?;
-426        for layer in self.layers.iter_mut() {
-427            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-428        }
-429        xs.narrow(1, seq_len - 1, 1)?
-430            .apply(&self.norm)?
-431            .apply(&self.lm_head)
-432    }
-433}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/starcoder2.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/starcoder2.rs.html deleted file mode 100644 index 5c9b334..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/starcoder2.rs.html +++ /dev/null @@ -1,352 +0,0 @@ -starcoder2.rs - source

candle_transformers/models/
starcoder2.rs

1//! StarCoder model implementation with quantization support.
-2//!
-3//! StarCoder is a large language model optimized for code generation.
-4//! This implementation provides quantization for reduced memory and compute.
-5//!
-6//! Key characteristics:
-7//! - Causal self-attention mechanism
-8//! - Multi-query attention (MQA)
-9//! - LayerNorm for normalization
-10//! - Absolute positional embeddings
-11//! - Support for 8-bit quantization
-12//!
-13//! References:
-14//! - 📝 [StarCoder Paper](https://arxiv.org/abs/2305.06161)
-15//! - 🤗 [Model Card](https://huggingface.co/bigcode/starcoder)
-16//!
-17
-18use candle::{DType, Device, Module, Result, Tensor, D};
-19use candle_nn::{layer_norm, linear_b, LayerNorm, Linear, VarBuilder};
-20use std::sync::Arc;
-21
-22#[derive(Debug, Clone, serde::Deserialize)]
-23pub struct Config {
-24    vocab_size: usize,
-25    hidden_size: usize,
-26    intermediate_size: usize,
-27    num_hidden_layers: usize,
-28    num_attention_heads: usize,
-29    num_key_value_heads: usize,
-30    hidden_act: candle_nn::Activation,
-31    max_position_embeddings: usize,
-32    norm_epsilon: f64,
-33    rope_theta: f64,
-34    use_bias: bool,
-35    sliding_window: Option<usize>,
-36}
-37
-38#[derive(Debug, Clone)]
-39struct RotaryEmbedding {
-40    sin: Tensor,
-41    cos: Tensor,
-42}
-43
-44fn rotate_half(xs: &Tensor) -> Result<Tensor> {
-45    let last_dim = xs.dim(D::Minus1)?;
-46    let xs1 = xs.narrow(D::Minus1, 0, last_dim / 2)?;
-47    let xs2 = xs.narrow(D::Minus1, last_dim / 2, last_dim - last_dim / 2)?;
-48    Tensor::cat(&[&xs2.neg()?, &xs1], D::Minus1)
-49}
-50
-51impl RotaryEmbedding {
-52    fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-53        let dim = cfg.hidden_size / cfg.num_attention_heads;
-54        let max_seq_len = cfg.max_position_embeddings;
-55        let inv_freq: Vec<_> = (0..dim)
-56            .step_by(2)
-57            .map(|i| 1f32 / cfg.rope_theta.powf(i as f64 / dim as f64) as f32)
-58            .collect();
-59        let inv_freq_len = inv_freq.len();
-60        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-61        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-62            .to_dtype(dtype)?
-63            .reshape((max_seq_len, 1))?;
-64        let freqs = t.matmul(&inv_freq)?;
-65        let freqs = Tensor::cat(&[&freqs, &freqs], D::Minus1)?;
-66        Ok(Self {
-67            sin: freqs.sin()?,
-68            cos: freqs.cos()?,
-69        })
-70    }
-71
-72    fn apply_rotary_emb_qkv(
-73        &self,
-74        q: &Tensor,
-75        k: &Tensor,
-76        seqlen_offset: usize,
-77    ) -> Result<(Tensor, Tensor)> {
-78        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-79        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-80        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-81        let cos = cos.unsqueeze(0)?.unsqueeze(0)?; // (1, 1, seq_len, dim)
-82        let sin = sin.unsqueeze(0)?.unsqueeze(0)?; // (1, 1, seq_len, dim)
-83        let q_embed = (q.broadcast_mul(&cos)? + rotate_half(q)?.broadcast_mul(&sin))?;
-84        let k_embed = (k.broadcast_mul(&cos)? + rotate_half(k)?.broadcast_mul(&sin))?;
-85        Ok((q_embed, k_embed))
-86    }
-87}
-88
-89#[derive(Debug, Clone)]
-90#[allow(clippy::upper_case_acronyms)]
-91struct MLP {
-92    c_fc: Linear,
-93    c_proj: Linear,
-94    act: candle_nn::Activation,
-95}
-96
-97impl MLP {
-98    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-99        let (h_size, i_size) = (cfg.hidden_size, cfg.intermediate_size);
-100        let c_fc = linear_b(h_size, i_size, cfg.use_bias, vb.pp("c_fc"))?;
-101        let c_proj = linear_b(i_size, h_size, cfg.use_bias, vb.pp("c_proj"))?;
-102        Ok(Self {
-103            c_fc,
-104            c_proj,
-105            act: cfg.hidden_act,
-106        })
-107    }
-108}
-109
-110impl Module for MLP {
-111    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-112        xs.apply(&self.c_fc)?.apply(&self.act)?.apply(&self.c_proj)
-113    }
-114}
-115
-116#[derive(Debug, Clone)]
-117struct Attention {
-118    q_proj: Linear,
-119    k_proj: Linear,
-120    v_proj: Linear,
-121    o_proj: Linear,
-122    num_heads: usize,
-123    num_kv_heads: usize,
-124    num_kv_groups: usize,
-125    head_dim: usize,
-126    hidden_size: usize,
-127    rotary_emb: Arc<RotaryEmbedding>,
-128    kv_cache: Option<(Tensor, Tensor)>,
-129}
-130
-131impl Attention {
-132    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-133        let hidden_sz = cfg.hidden_size;
-134        let num_heads = cfg.num_attention_heads;
-135        let num_kv_heads = cfg.num_key_value_heads;
-136        let num_kv_groups = num_heads / num_kv_heads;
-137        let head_dim = hidden_sz / num_heads;
-138        let b = cfg.use_bias;
-139        let q_proj = linear_b(hidden_sz, num_heads * head_dim, b, vb.pp("q_proj"))?;
-140        let k_proj = linear_b(hidden_sz, num_kv_heads * head_dim, b, vb.pp("k_proj"))?;
-141        let v_proj = linear_b(hidden_sz, num_kv_heads * head_dim, b, vb.pp("v_proj"))?;
-142        let o_proj = linear_b(num_heads * head_dim, hidden_sz, b, vb.pp("o_proj"))?;
-143        Ok(Self {
-144            q_proj,
-145            k_proj,
-146            v_proj,
-147            o_proj,
-148            num_heads,
-149            num_kv_heads,
-150            num_kv_groups,
-151            head_dim,
-152            hidden_size: hidden_sz,
-153            rotary_emb,
-154            kv_cache: None,
-155        })
-156    }
-157
-158    fn forward(
-159        &mut self,
-160        xs: &Tensor,
-161        attention_mask: Option<&Tensor>,
-162        seqlen_offset: usize,
-163    ) -> Result<Tensor> {
-164        let (b_sz, q_len, _) = xs.dims3()?;
-165
-166        let query_states = self.q_proj.forward(xs)?;
-167        let key_states = self.k_proj.forward(xs)?;
-168        let value_states = self.v_proj.forward(xs)?;
-169
-170        let query_states = query_states
-171            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-172            .transpose(1, 2)?;
-173        let key_states = key_states
-174            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-175            .transpose(1, 2)?;
-176        let value_states = value_states
-177            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-178            .transpose(1, 2)?;
-179
-180        let (query_states, key_states) =
-181            self.rotary_emb
-182                .apply_rotary_emb_qkv(&query_states, &key_states, seqlen_offset)?;
-183
-184        let (key_states, value_states) = match &self.kv_cache {
-185            None => (key_states, value_states),
-186            Some((prev_k, prev_v)) => {
-187                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-188                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-189                (key_states, value_states)
-190            }
-191        };
-192        self.kv_cache = Some((key_states.clone(), value_states.clone()));
-193
-194        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?;
-195        let value_states = crate::utils::repeat_kv(value_states, self.num_kv_groups)?;
-196
-197        let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-198        let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-199
-200        let attn_weights = match attention_mask {
-201            None => attn_weights,
-202            Some(mask) => attn_weights.broadcast_add(mask)?,
-203        };
-204        let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-205        let attn_output = attn_weights.matmul(&value_states)?;
-206        attn_output
-207            .transpose(1, 2)?
-208            .reshape((b_sz, q_len, self.hidden_size))?
-209            .apply(&self.o_proj)
-210    }
-211
-212    fn clear_kv_cache(&mut self) {
-213        self.kv_cache = None
-214    }
-215}
-216
-217#[derive(Debug, Clone)]
-218struct DecoderLayer {
-219    self_attn: Attention,
-220    mlp: MLP,
-221    input_layernorm: LayerNorm,
-222    post_attention_layernorm: LayerNorm,
-223}
-224
-225impl DecoderLayer {
-226    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-227        let self_attn = Attention::new(rotary_emb, cfg, vb.pp("self_attn"))?;
-228        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-229        let input_layernorm =
-230            layer_norm(cfg.hidden_size, cfg.norm_epsilon, vb.pp("input_layernorm"))?;
-231        let post_attention_layernorm = layer_norm(
-232            cfg.hidden_size,
-233            cfg.norm_epsilon,
-234            vb.pp("post_attention_layernorm"),
-235        )?;
-236        Ok(Self {
-237            self_attn,
-238            mlp,
-239            input_layernorm,
-240            post_attention_layernorm,
-241        })
-242    }
-243
-244    fn forward(
-245        &mut self,
-246        xs: &Tensor,
-247        attention_mask: Option<&Tensor>,
-248        seqlen_offset: usize,
-249    ) -> Result<Tensor> {
-250        let residual = xs;
-251        let xs = self.input_layernorm.forward(xs)?;
-252        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-253        let xs = (xs + residual)?;
-254        let residual = &xs;
-255        let xs = xs.apply(&self.post_attention_layernorm)?.apply(&self.mlp)?;
-256        residual + xs
-257    }
-258
-259    fn clear_kv_cache(&mut self) {
-260        self.self_attn.clear_kv_cache()
-261    }
-262}
-263
-264#[derive(Debug, Clone)]
-265pub struct Model {
-266    embed_tokens: candle_nn::Embedding,
-267    layers: Vec<DecoderLayer>,
-268    norm: LayerNorm,
-269    lm_head: Linear,
-270    sliding_window: Option<usize>,
-271    device: Device,
-272    dtype: DType,
-273}
-274
-275impl Model {
-276    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-277        let vb_m = vb.pp("model");
-278        let embed_tokens =
-279            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-280        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb_m.device())?);
-281        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-282        let vb_l = vb_m.pp("layers");
-283        for layer_idx in 0..cfg.num_hidden_layers {
-284            let layer = DecoderLayer::new(rotary_emb.clone(), cfg, vb_l.pp(layer_idx))?;
-285            layers.push(layer)
-286        }
-287        let norm = layer_norm(cfg.hidden_size, cfg.norm_epsilon, vb_m.pp("norm"))?;
-288        let lm_head = candle_nn::Linear::new(embed_tokens.embeddings().clone(), None);
-289        Ok(Self {
-290            embed_tokens,
-291            layers,
-292            norm,
-293            lm_head,
-294            sliding_window: cfg.sliding_window,
-295            device: vb.device().clone(),
-296            dtype: vb.dtype(),
-297        })
-298    }
-299
-300    fn prepare_decoder_attention_mask(
-301        &self,
-302        b_size: usize,
-303        tgt_len: usize,
-304        seqlen_offset: usize,
-305    ) -> Result<Tensor> {
-306        let sliding_window = self.sliding_window.unwrap_or(tgt_len + 42);
-307        let mask: Vec<_> = (0..tgt_len)
-308            .flat_map(|i| {
-309                (0..tgt_len).map(move |j| {
-310                    if i < j || j + sliding_window < i {
-311                        f32::NEG_INFINITY
-312                    } else {
-313                        0.
-314                    }
-315                })
-316            })
-317            .collect();
-318        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-319        let mask = if seqlen_offset > 0 {
-320            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-321            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-322        } else {
-323            mask
-324        };
-325        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-326            .to_dtype(self.dtype)
-327    }
-328
-329    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-330        let (b_size, seq_len) = input_ids.dims2()?;
-331        let attention_mask = if seq_len <= 1 {
-332            None
-333        } else {
-334            let mask = self.prepare_decoder_attention_mask(b_size, seq_len, seqlen_offset)?;
-335            Some(mask)
-336        };
-337        let mut xs = self.embed_tokens.forward(input_ids)?;
-338        for layer in self.layers.iter_mut() {
-339            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-340        }
-341        xs.narrow(1, seq_len - 1, 1)?
-342            .apply(&self.norm)?
-343            .apply(&self.lm_head)
-344    }
-345
-346    pub fn clear_kv_cache(&mut self) {
-347        for layer in self.layers.iter_mut() {
-348            layer.clear_kv_cache()
-349        }
-350    }
-351}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/stella_en_v5.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/stella_en_v5.rs.html deleted file mode 100644 index 60f06e2..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/stella_en_v5.rs.html +++ /dev/null @@ -1,812 +0,0 @@ -stella_en_v5.rs - source

candle_transformers/models/
stella_en_v5.rs

1//! Stella v5 model implementation.
-2//!
-3//! Stella is a dense text embedding model optimized for retrieval and similarity tasks.
-4//! This implementation provides support for multiple embedding dimensions.
-5//!
-6//! Key characteristics:
-7//! - Dense text embeddings optimized for similarity search
-8//! - Multiple output dimension support (256 to 8192)
-9//! - Grouped query attention (GQA)
-10//! - RMSNorm for layer normalization
-11//! - Rotary positional embeddings (RoPE)
-12//!
-13//! References:
-14//! - [MRL Framework](https://arxiv.org/abs/2205.13147)
-15//! - [Model Card](https://huggingface.co/dunzhang/stella_en_1.5B_v5)
-16//!
-17
-18use crate::models::with_tracing::{linear, linear_no_bias, Linear, RmsNorm};
-19use candle::{DType, Device, Error, IndexOp, Module, Result, Tensor, D};
-20use candle_nn::{layer_norm, Activation, LayerNorm, VarBuilder};
-21use std::sync::Arc;
-22
-23// internal representation for identifying which model is being used
-24#[derive(Debug, Copy, Clone, PartialEq, serde::Deserialize)]
-25pub enum ModelVariant {
-26    Large, // 1.5B
-27    Small, // 400M
-28}
-29
-30impl Default for ModelVariant {
-31    fn default() -> Self {
-32        Self::Large
-33    }
-34}
-35
-36// Same as `qwen2` family of models with the exception being the `embed_head`
-37// The final `output` causal modelling head is swapped with a learned `dense` layer, `embed_head`
-38#[derive(Debug, Default, Clone, PartialEq, serde::Deserialize)]
-39pub struct Config {
-40    pub variant: ModelVariant,
-41    pub vocab_size: usize,
-42    pub hidden_size: usize,
-43    pub intermediate_size: usize,
-44    pub num_hidden_layers: usize,
-45    pub num_attention_heads: usize,
-46    pub max_position_embeddings: usize,
-47    pub rope_theta: f64,
-48    pub embed_head: EmbedHead,
-49    pub norm_eps: f64,             // RMSNorm for 1.5B || LayerNorm for 400M
-50    pub activation_fn: Activation, // Silu for 1.5B || Gelu for 400M
-51    // Unique to 1.5B
-52    pub num_key_value_heads: usize,
-53    // Unique to 400M
-54    pub type_vocab_size: usize,
-55    pub scaling_factor: f64,
-56}
-57
-58// Excerpt from `stella` model card:
-59// `Stella_en_1.5B_v5` models have been trained on [MRL](https://arxiv.org/abs/2205.13147) enabling multiple output dimensions
-60// Embed head represents the config for various embedding dims supported
-61#[derive(Debug, Default, Clone, PartialEq, serde::Deserialize)]
-62pub struct EmbedHead {
-63    pub in_features: usize,
-64    pub out_features: usize,
-65}
-66
-67/// An enum variant representing the Embedding head dimensions `stella` is trained on
-68/// As the [model-card](https://huggingface.co/dunzhang/stella_en_1.5B_v5#introduction) suggests, D1024 is good enough for most cases
-69#[derive(Debug, Clone, Copy)]
-70pub enum EmbedDim {
-71    Dim256,
-72    Dim768,
-73    Dim1024,
-74    Dim2048,
-75    Dim4096,
-76    Dim6144,
-77    Dim8192,
-78}
-79
-80impl Default for EmbedDim {
-81    fn default() -> Self {
-82        Self::Dim1024
-83    }
-84}
-85
-86impl EmbedDim {
-87    pub fn config(&self, in_features: usize) -> EmbedHead {
-88        EmbedHead {
-89            in_features,
-90            out_features: match &self {
-91                Self::Dim256 => 256,
-92                Self::Dim768 => 768,
-93                Self::Dim1024 => 1024,
-94                Self::Dim2048 => 2048,
-95                Self::Dim4096 => 4096,
-96                Self::Dim6144 => 6144,
-97                Self::Dim8192 => 8192,
-98            },
-99        }
-100    }
-101}
-102
-103// Initialize a new `stella_en` model - with 400M variant or 1.5B variant
-104impl Config {
-105    /// Initialize a new `stella_en_1.5B_v5`` model with given embedding dim
-106    pub fn new_1_5_b_v5(embed_dim: EmbedDim) -> Self {
-107        // Representing config.json at https://huggingface.co/dunzhang/stella_en_1.5B_v5/blob/main/config.json
-108        // Removed `sliding_window` related config which is basically being carried forward from `qwen2` but not used here
-109        Self {
-110            variant: ModelVariant::Large,
-111            activation_fn: candle_nn::Activation::Silu,
-112            vocab_size: 151646,
-113            hidden_size: 1536,
-114            intermediate_size: 8960,
-115            num_hidden_layers: 28,
-116            num_attention_heads: 12,
-117            num_key_value_heads: 2,
-118            max_position_embeddings: 131072,
-119            rope_theta: 1000000.,
-120            norm_eps: 1e-06,
-121            embed_head: embed_dim.config(1536),
-122            ..Default::default()
-123        }
-124    }
-125
-126    /// Initialize new `stella_en_400M_v5`
-127    pub fn new_400_m_v5(embed_dim: EmbedDim) -> Self {
-128        Self {
-129            variant: ModelVariant::Small,
-130            vocab_size: 30528,
-131            hidden_size: 1024,
-132            intermediate_size: 4096,
-133            num_hidden_layers: 24,
-134            num_attention_heads: 16,
-135            max_position_embeddings: 8192,
-136            type_vocab_size: 2,
-137            norm_eps: 1e-12,
-138            scaling_factor: 2.0,
-139            rope_theta: 160000.0,
-140            activation_fn: Activation::Gelu,
-141            embed_head: embed_dim.config(1024),
-142            ..Default::default()
-143        }
-144    }
-145}
-146
-147#[derive(Debug, Clone)]
-148struct RotaryEmbedding {
-149    sin: Tensor,
-150    cos: Tensor,
-151}
-152
-153impl RotaryEmbedding {
-154    fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-155        let dim = cfg.hidden_size / cfg.num_attention_heads;
-156        // Factoring in `scaling factor` for `400M` variant
-157        let max_seq_len = if cfg.scaling_factor == 0. {
-158            cfg.max_position_embeddings
-159        } else {
-160            ((cfg.max_position_embeddings as f64) * cfg.scaling_factor) as usize
-161        };
-162
-163        // let rot_dim = if cfg.variant == ModelVariant::Small { dim / 2 } else { dim };
-164        let inv_freq: Vec<_> = (0..dim)
-165            .step_by(2)
-166            .map(|i| {
-167                // Scaled rope_theta for 400M variant
-168                let rope_theta = if cfg.scaling_factor == 0. {
-169                    cfg.rope_theta
-170                } else {
-171                    cfg.rope_theta * cfg.scaling_factor
-172                };
-173                let mut freq = 1. / rope_theta.powf(i as f64 / dim as f64);
-174
-175                if cfg.scaling_factor != 0. {
-176                    freq /= cfg.scaling_factor.powf(2.0 / (dim as f64))
-177                }
-178
-179                freq as f32
-180            })
-181            .collect();
-182
-183        let inv_freq_len = inv_freq.len();
-184        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-185
-186        // Calculate position embeddings with scaled sequence length
-187        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-188            .to_dtype(dtype)?
-189            .reshape((max_seq_len, 1))?;
-190        let freqs = t.matmul(&inv_freq)?;
-191        // if cfg.variant == ModelVariant::Small {
-192        //     freqs = Tensor::cat(&[&freqs, &freqs], 1)?
-193        // }
-194
-195        Ok(Self {
-196            sin: freqs.sin()?,
-197            cos: freqs.cos()?,
-198        })
-199    }
-200
-201    // TODO: re-visit this
-202    fn apply_rotary_emb_qkv(&self, q: &Tensor, k: &Tensor) -> Result<(Tensor, Tensor)> {
-203        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-204        let cos = self.cos.narrow(0, 0, seq_len)?;
-205        let sin = self.sin.narrow(0, 0, seq_len)?;
-206
-207        let q_embed = candle_nn::rotary_emb::rope(&q.contiguous()?, &cos, &sin)?;
-208        let k_embed = candle_nn::rotary_emb::rope(&k.contiguous()?, &cos, &sin)?;
-209        Ok((q_embed, k_embed))
-210    }
-211}
-212
-213#[derive(Debug, Clone)]
-214#[allow(clippy::upper_case_acronyms)]
-215struct MLP {
-216    variant: ModelVariant,
-217    gate_proj: Linear,
-218    up_proj: Option<Linear>, // `up_proj` only for 1.5B variant
-219    down_proj: Linear,
-220    act_fn: Activation,
-221}
-222
-223impl MLP {
-224    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-225        let hidden_sz = cfg.hidden_size;
-226        let intermediate_sz = cfg.intermediate_size;
-227
-228        let (gate_proj, up_proj, down_proj) = match cfg.variant {
-229            ModelVariant::Large => (
-230                linear_no_bias(hidden_sz, intermediate_sz, vb.pp("gate_proj"))?,
-231                Some(linear_no_bias(
-232                    hidden_sz,
-233                    intermediate_sz,
-234                    vb.pp("up_proj"),
-235                )?),
-236                linear_no_bias(intermediate_sz, hidden_sz, vb.pp("down_proj"))?,
-237            ),
-238            ModelVariant::Small => (
-239                linear_no_bias(hidden_sz, intermediate_sz * 2, vb.pp("up_gate_proj"))?,
-240                None,
-241                linear(intermediate_sz, hidden_sz, vb.pp("down_proj"))?,
-242            ),
-243        };
-244
-245        Ok(Self {
-246            variant: cfg.variant,
-247            gate_proj,
-248            up_proj,
-249            down_proj,
-250            act_fn: cfg.activation_fn,
-251        })
-252    }
-253}
-254
-255impl Module for MLP {
-256    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-257        let up = self.gate_proj.forward(xs)?;
-258
-259        let (lhs, rhs) = match self.variant {
-260            ModelVariant::Large => {
-261                let lhs = up.apply(&self.act_fn)?;
-262                let rhs = xs.apply(self.up_proj.as_ref().unwrap())?;
-263
-264                (lhs, rhs)
-265            }
-266            ModelVariant::Small => {
-267                // Get the dimensions
-268                let (_batch_size, _seq_len, hidden_dim) = up.dims3()?;
-269                let split_size = hidden_dim / 2;
-270
-271                // Split along the last dimension (hidden_dim)
-272                let up_states = up.narrow(2, 0, split_size)?;
-273                let gate = up.narrow(2, split_size, split_size)?.apply(&self.act_fn)?;
-274
-275                (up_states, gate)
-276            }
-277        };
-278
-279        (lhs * rhs)?.apply(&self.down_proj)
-280    }
-281}
-282
-283#[derive(Debug, Clone)]
-284struct Attention {
-285    qkv_proj: Linear,
-286    o_proj: Linear,
-287    num_heads: usize,
-288    num_kv_heads: usize,
-289    num_kv_groups: usize,
-290    head_dim: usize,
-291    hidden_size: usize,
-292    rotary_emb: Arc<RotaryEmbedding>,
-293    variant: ModelVariant,
-294}
-295
-296impl Attention {
-297    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-298        let hidden_sz = cfg.hidden_size;
-299        let num_heads = cfg.num_attention_heads;
-300        let num_kv_heads = cfg.num_key_value_heads;
-301        let num_kv_groups = if num_kv_heads > 0 {
-302            num_heads / num_kv_heads
-303        } else {
-304            0
-305        };
-306        let head_dim = hidden_sz / num_heads;
-307
-308        let (qkv_proj, o_proj) = match cfg.variant {
-309            ModelVariant::Large => {
-310                // The 1.5B variant comes with separate `q, k, v` layers, let's merge it and standardize
-311                // Weights
-312                let q_w = vb
-313                    .pp("q_proj")
-314                    .get((num_heads * head_dim, hidden_sz), "weight")?;
-315                let k_w = vb
-316                    .pp("k_proj")
-317                    .get((num_kv_heads * head_dim, hidden_sz), "weight")?;
-318                let v_w = vb
-319                    .pp("v_proj")
-320                    .get((num_kv_heads * head_dim, hidden_sz), "weight")?;
-321                // Biases
-322                let q_b = vb.pp("q_proj").get(num_heads * head_dim, "bias")?;
-323                let k_b = vb.pp("k_proj").get(num_kv_heads * head_dim, "bias")?;
-324                let v_b = vb.pp("v_proj").get(num_kv_heads * head_dim, "bias")?;
-325
-326                let qkv_w = Tensor::cat(&[&q_w, &k_w, &v_w], 0)?;
-327                let qkv_b = Tensor::cat(&[&q_b, &k_b, &v_b], 0)?;
-328
-329                (
-330                    Linear::from_weights(qkv_w, Some(qkv_b)),
-331                    linear_no_bias(num_heads * head_dim, hidden_sz, vb.pp("o_proj"))?,
-332                )
-333            }
-334            ModelVariant::Small => (
-335                linear(hidden_sz, 3 * num_heads * head_dim, vb.pp("qkv_proj"))?,
-336                linear(num_heads * head_dim, hidden_sz, vb.pp("o_proj"))?,
-337            ),
-338        };
-339
-340        Ok(Self {
-341            qkv_proj,
-342            o_proj,
-343            num_heads,
-344            num_kv_heads,
-345            num_kv_groups,
-346            head_dim,
-347            hidden_size: hidden_sz,
-348            rotary_emb,
-349            variant: cfg.variant,
-350        })
-351    }
-352
-353    fn forward(&mut self, xs: &Tensor, attention_mask: Option<&Tensor>) -> Result<Tensor> {
-354        let (b_sz, q_len, _) = xs.dims3()?;
-355
-356        let qkv = self.qkv_proj.forward(xs)?;
-357
-358        let n_kv_heads = match self.variant {
-359            ModelVariant::Large => self.num_kv_heads,
-360            ModelVariant::Small => self.num_heads,
-361        };
-362
-363        let (query_states, key_states, value_states) = match self.variant {
-364            ModelVariant::Large => {
-365                let q_sz = self.num_heads * self.head_dim;
-366                let kv_sz = n_kv_heads * self.head_dim;
-367
-368                let q = qkv.narrow(D::Minus1, 0, q_sz)?.reshape((
-369                    b_sz,
-370                    q_len,
-371                    self.num_heads,
-372                    self.head_dim,
-373                ))?;
-374                let k = qkv.narrow(D::Minus1, q_sz, kv_sz)?.reshape((
-375                    b_sz,
-376                    q_len,
-377                    n_kv_heads,
-378                    self.head_dim,
-379                ))?;
-380                let v = qkv.narrow(D::Minus1, q_sz + kv_sz, kv_sz)?.reshape((
-381                    b_sz,
-382                    q_len,
-383                    n_kv_heads,
-384                    self.head_dim,
-385                ))?;
-386
-387                (q, k, v)
-388            }
-389            ModelVariant::Small => {
-390                // Split into Q, K, V and reshape to match PyTorch shapes
-391                let qkv = qkv.reshape((b_sz, q_len, 3, self.num_heads, self.head_dim))?;
-392
-393                (
-394                    qkv.i((.., .., 0, .., ..))?,
-395                    qkv.i((.., .., 1, .., ..))?,
-396                    qkv.i((.., .., 2, .., ..))?,
-397                )
-398            }
-399        };
-400
-401        let query_states = query_states.transpose(1, 2)?.contiguous()?;
-402        let key_states = key_states.transpose(1, 2)?.contiguous()?;
-403        let value_states = value_states.transpose(1, 2)?.contiguous()?;
-404
-405        let (query_states, key_states) = self
-406            .rotary_emb
-407            .apply_rotary_emb_qkv(&query_states, &key_states)?;
-408
-409        // The 1.5B is expected to have grouped query attention
-410        let (key_states, value_states) = if self.variant == ModelVariant::Large {
-411            (
-412                crate::utils::repeat_kv(key_states, self.num_kv_groups)?.contiguous()?,
-413                crate::utils::repeat_kv(value_states, self.num_kv_groups)?.contiguous()?,
-414            )
-415        } else {
-416            (key_states, value_states)
-417        };
-418
-419        let attn_output = {
-420            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-421            let attn_weights = query_states.matmul(&key_states.transpose(2, 3)?)?;
-422            let attn_weights = (attn_weights * scale)?;
-423
-424            let attn_weights = match attention_mask {
-425                None => attn_weights,
-426                Some(mask) => attn_weights.broadcast_add(mask)?,
-427            };
-428            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-429
-430            attn_weights.matmul(&value_states)?
-431        };
-432
-433        attn_output
-434            .transpose(1, 2)?
-435            .reshape((b_sz, q_len, self.hidden_size))?
-436            .apply(&self.o_proj)
-437    }
-438}
-439
-440#[derive(Debug, Clone)]
-441enum NormType {
-442    Layer(LayerNorm),
-443    Rms(RmsNorm),
-444}
-445
-446#[derive(Debug, Clone)]
-447struct Layer {
-448    variant: ModelVariant,
-449    attention: Attention,
-450    mlp: MLP,
-451    // For 1.5B: this is `input_layernorm`
-452    // For 400M: this is `output_layernorm`
-453    layernorm: NormType,
-454    post_attention_layernorm: NormType,
-455}
-456
-457impl Layer {
-458    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-459        let attention = Attention::new(
-460            rotary_emb,
-461            cfg,
-462            vb.pp(if cfg.variant == ModelVariant::Large {
-463                "self_attn"
-464            } else {
-465                "attention"
-466            }),
-467        )?;
-468        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-469        let (layernorm, post_attention_layernorm) = match cfg.variant {
-470            ModelVariant::Large => (
-471                NormType::Rms(RmsNorm::new(
-472                    cfg.hidden_size,
-473                    cfg.norm_eps,
-474                    vb.pp("input_layernorm"),
-475                )?),
-476                NormType::Rms(RmsNorm::new(
-477                    cfg.hidden_size,
-478                    cfg.norm_eps,
-479                    vb.pp("post_attention_layernorm"),
-480                )?),
-481            ),
-482            ModelVariant::Small => (
-483                NormType::Layer(layer_norm(
-484                    cfg.hidden_size,
-485                    candle_nn::LayerNormConfig {
-486                        eps: cfg.norm_eps,
-487                        ..Default::default()
-488                    },
-489                    vb.pp("mlp_ln"),
-490                )?),
-491                NormType::Layer(layer_norm(
-492                    cfg.hidden_size,
-493                    candle_nn::LayerNormConfig {
-494                        eps: cfg.norm_eps,
-495                        ..Default::default()
-496                    },
-497                    vb.pp("attn_ln"),
-498                )?),
-499            ),
-500        };
-501
-502        Ok(Self {
-503            variant: cfg.variant,
-504            attention,
-505            mlp,
-506            layernorm,
-507            post_attention_layernorm,
-508        })
-509    }
-510
-511    fn forward(&mut self, xs: &Tensor, attention_mask: Option<&Tensor>) -> Result<Tensor> {
-512        // Here, the application of normalizations and activation calculations differ
-513        // For Large [1.5B]:
-514        //  residual = x
-515        //  state = other_layernorm(xs)
-516        //  state = attention(state)
-517        //  state += residual
-518        //  residual = state
-519        //  state = mlp(attention_layernorm(state))
-520        //  -> residual + state
-521        // For Small [400M]:
-522        //  residual = x;
-523        //  state = attention(x)
-524        //  state += residual
-525        //  state = attention_layernorm(state)
-526        //  residual = state
-527        //  state = mlp(state)
-528        //  state += residual
-529        //  -> other_layernorm(state)
-530        let residual = xs;
-531
-532        match self.variant {
-533            ModelVariant::Large => {
-534                let (attn_ln, input_ln) = if let (NormType::Rms(attn_ln), NormType::Rms(input_ln)) =
-535                    (&self.post_attention_layernorm, &self.layernorm)
-536                {
-537                    (attn_ln, input_ln)
-538                } else {
-539                    return Err(candle::error::Error::Msg(
-540                        "Stella 1.5B expects RMSNorm".to_string(),
-541                    ));
-542                };
-543
-544                let xs = input_ln.forward(xs)?;
-545                let xs = (self.attention.forward(&xs, attention_mask)? + residual)?;
-546
-547                let residual = &xs;
-548                let xs = xs.apply(attn_ln)?.apply(&self.mlp)?;
-549
-550                residual + xs
-551            }
-552            ModelVariant::Small => {
-553                let (attn_ln, output_ln) =
-554                    if let (NormType::Layer(attn_ln), NormType::Layer(input_ln)) =
-555                        (&self.post_attention_layernorm, &self.layernorm)
-556                    {
-557                        (attn_ln, input_ln)
-558                    } else {
-559                        return Err(candle::error::Error::Msg(
-560                            "Stella 400M expects RMSNorm".to_string(),
-561                        ));
-562                    };
-563
-564                let xs = (self.attention.forward(xs, attention_mask)? + residual)?;
-565                let xs = attn_ln.forward(&xs)?;
-566
-567                let residual = &xs;
-568                let xs = (self.mlp.forward(&xs)? + residual)?;
-569
-570                output_ln.forward(&xs)
-571            }
-572        }
-573    }
-574}
-575
-576#[derive(Debug, Clone)]
-577pub struct Embeddings {
-578    variant: ModelVariant,
-579    // For 1.5B: this is the `embed_tokens`
-580    // For 400M: this is the `word_embeddings`
-581    embeddings: candle_nn::Embedding,
-582    // folloing are specifically for 400M
-583    token_type_embeddings: Option<candle_nn::Embedding>,
-584    layer_norm: Option<LayerNorm>,
-585    position_ids: Option<Tensor>,
-586}
-587
-588impl Embeddings {
-589    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-590        let (embeddings, token_type_embeddings, layer_norm, position_ids) = match cfg.variant {
-591            ModelVariant::Large => (
-592                candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb.pp("embed_tokens"))?,
-593                None,
-594                None,
-595                None,
-596            ),
-597            ModelVariant::Small => {
-598                let vb = vb.pp("embeddings");
-599                let weight = vb.pp("LayerNorm").get_with_hints(
-600                    cfg.hidden_size,
-601                    "weight",
-602                    candle_nn::Init::Const(1.0),
-603                )?;
-604                let bias = vb.pp("LayerNorm").get_with_hints(
-605                    cfg.hidden_size,
-606                    "bias",
-607                    candle_nn::Init::Const(0.0),
-608                )?;
-609                let dev = bias.device().clone();
-610
-611                let layer_norm = candle_nn::LayerNorm::new(weight, bias, cfg.norm_eps);
-612
-613                (
-614                    candle_nn::embedding(
-615                        cfg.vocab_size,
-616                        cfg.hidden_size,
-617                        vb.pp("word_embeddings"),
-618                    )?,
-619                    Some(candle_nn::embedding(
-620                        cfg.type_vocab_size,
-621                        cfg.hidden_size,
-622                        vb.pp("token_type_embeddings"),
-623                    )?),
-624                    Some(layer_norm),
-625                    Some(Tensor::arange(
-626                        0u32,
-627                        cfg.max_position_embeddings as u32,
-628                        &dev,
-629                    )?),
-630                )
-631            }
-632        };
-633
-634        Ok(Self {
-635            variant: cfg.variant,
-636            embeddings,
-637            token_type_embeddings,
-638            layer_norm,
-639            position_ids,
-640        })
-641    }
-642}
-643
-644impl Module for Embeddings {
-645    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-646        let embd = self.embeddings.forward(xs)?;
-647        // For 1.5B just forward the embeddings
-648        if self.variant == ModelVariant::Large {
-649            return Ok(embd);
-650        }
-651
-652        let (token_type_embed, layer_norm, pos_ids) =
-653            if let (Some(token_type_embd), Some(layer_norm), Some(position_ids)) = (
-654                &self.token_type_embeddings,
-655                &self.layer_norm,
-656                &self.position_ids,
-657            ) {
-658                (token_type_embd, layer_norm, position_ids)
-659            } else {
-660                return Err(Error::Msg(
-661                    "Stella 400M requires `token_type_embeddings`, `layer_norm` and `position_ids`"
-662                        .to_string(),
-663                ));
-664            };
-665
-666        let (batch_size, seq_length) = xs.dims2()?;
-667
-668        let pos_ids = pos_ids
-669            .as_ref()
-670            .narrow(0, 0, seq_length)?
-671            .expand((batch_size, seq_length))?;
-672
-673        layer_norm.forward(&embd.add(&token_type_embed.forward(&pos_ids.zeros_like()?)?)?)
-674    }
-675}
-676
-677#[derive(Debug, Clone)]
-678pub struct Model {
-679    embeddings: Embeddings,
-680    layers: Vec<Layer>,
-681    norm: Option<RmsNorm>,
-682    device: Device,
-683    dtype: DType,
-684}
-685
-686impl Model {
-687    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-688        let vb_m = match cfg.variant {
-689            ModelVariant::Large => vb.pp("model"),
-690            ModelVariant::Small => vb.pp("new"),
-691        };
-692        // let embed_tokens =
-693        //     candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-694        let embeddings = Embeddings::new(cfg, vb_m.clone())?;
-695        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb_m.device())?);
-696        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-697        let vb_l = match cfg.variant {
-698            ModelVariant::Large => vb_m.pp("layers"),
-699            ModelVariant::Small => vb_m.pp("encoder").pp("layer"),
-700        };
-701        for layer_idx in 0..cfg.num_hidden_layers {
-702            let layer = Layer::new(rotary_emb.clone(), cfg, vb_l.pp(layer_idx))?;
-703            layers.push(layer)
-704        }
-705        let norm = match cfg.variant {
-706            ModelVariant::Large => Some(RmsNorm::new(
-707                cfg.hidden_size,
-708                cfg.norm_eps,
-709                vb_m.pp("norm"),
-710            )?),
-711            ModelVariant::Small => None,
-712        };
-713        Ok(Self {
-714            embeddings,
-715            layers,
-716            norm,
-717            device: vb.device().clone(),
-718            dtype: vb.dtype(),
-719        })
-720    }
-721
-722    fn prepare_attention_mask(&self, attn_mask: &Tensor) -> Result<Tensor> {
-723        let (b_sz, sql_len) = attn_mask.dims2()?;
-724        let mut mask: Vec<Tensor> = vec![];
-725        for b in 0..b_sz {
-726            mask.push(attn_mask.i((b, ..))?.expand((1, 1, sql_len, sql_len))?);
-727        }
-728        let mask = Tensor::cat(&mask, 0)?;
-729        let on_true = mask.zeros_like()?.to_dtype(self.dtype)?;
-730        let on_false = Tensor::new(f32::NEG_INFINITY, &self.device)?
-731            .broadcast_as(mask.shape())?
-732            .to_dtype(self.dtype)?;
-733        mask.where_cond(&on_true, &on_false)
-734    }
-735
-736    pub fn forward(&mut self, input_ids: &Tensor, mask: &Tensor) -> Result<Tensor> {
-737        let (_, seq_len) = input_ids.dims2()?;
-738        let attention_mask = if seq_len <= 1 {
-739            None
-740        } else {
-741            // This is not a `causal language modelling` task, we'll need to prepare a `non-causal` attention
-742            Some(self.prepare_attention_mask(mask)?)
-743        };
-744
-745        let mut xs = self.embeddings.forward(input_ids)?;
-746        for layer in self.layers.iter_mut() {
-747            xs = layer.forward(&xs, attention_mask.as_ref())?
-748        }
-749
-750        if let Some(n) = &self.norm {
-751            xs.apply(n)
-752        } else {
-753            Ok(xs)
-754        }
-755    }
-756}
-757
-758#[derive(Debug)]
-759pub struct EmbeddingModel {
-760    base_model: Model,
-761    lm_head: Linear,
-762}
-763
-764impl EmbeddingModel {
-765    pub fn new(cfg: &Config, base_vb: VarBuilder, embed_vb: VarBuilder) -> Result<Self> {
-766        let base_model = Model::new(cfg, base_vb.clone())?;
-767        let lm_head = linear(
-768            cfg.embed_head.in_features,
-769            cfg.embed_head.out_features,
-770            embed_vb.pp("linear"),
-771        )?;
-772
-773        Ok(Self {
-774            base_model,
-775            lm_head,
-776        })
-777    }
-778
-779    pub fn forward(&mut self, input_ids: &Tensor, mask: &Tensor) -> Result<Tensor> {
-780        let x = self.base_model.forward(input_ids, mask)?;
-781        let x = self.pool(&x, mask)?;
-782
-783        // No matter what keeping the final activations as F32 helps with the accuracy
-784        self.lm_head.forward(&x.to_dtype(DType::F32)?) // [B_sz, dim_size]
-785    }
-786
-787    /// Same as forward pass but normalizes the output
-788    pub fn forward_norm(&mut self, input_ids: &Tensor, mask: &Tensor) -> Result<Tensor> {
-789        let x = self.forward(input_ids, mask)?;
-790        // Normalize
-791        x.broadcast_div(&x.sqr()?.sum_keepdim(1)?.sqrt()?)
-792    }
-793
-794    fn pool(&self, x: &Tensor, mask: &Tensor) -> Result<Tensor> {
-795        let mask = mask.to_dtype(x.dtype())?; // [B_Sz, Seq_len]
-796        let (batch_size, seq_len, hidden_dim) = x.dims3()?;
-797        // expanding the shape of the mask from [B_Sz, Seq_len] -> [B_Sz, Seq_len, Hidden_size]
-798        let mask_expanded = mask
-799            .unsqueeze(2)?
-800            .broadcast_as((batch_size, seq_len, hidden_dim))?; // [B_Sz, Seq_len, Hidden_dim]
-801
-802        let x = (x * &mask_expanded)?;
-803
-804        // Sum
-805        let sum_mask = mask
-806            .sum(1)?
-807            .unsqueeze(1)?
-808            .expand((batch_size, hidden_dim))?;
-809        x.sum(1)? / sum_mask
-810    }
-811}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/t5.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/t5.rs.html deleted file mode 100644 index cad906d..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/t5.rs.html +++ /dev/null @@ -1,954 +0,0 @@ -t5.rs - source

candle_transformers/models/
t5.rs

1//! T5 model implementation.
-2//!
-3//! T5 (Text-to-Text Transfer Transformer) is a unified text-to-text transformer model.
-4//! This implementation follows the original model architecture.
-5//!
-6//! Key characteristics:
-7//! - Text-to-text framework
-8//! - Relative positional embeddings
-9//! - T5-specific layer normalization
-10//! - Encoder-decoder architecture
-11//! - Support for sequence-to-sequence tasks
-12//!
-13//! References:
-14//! - ⚡ [Interactive Wasm Example](https://huggingface.co/spaces/radames/Candle-T5-Generation-Wasm)
-15//! - 💻[GH Model](https://github.com/huggingface/transformers/blob/main/src/transformers/models/t5/modeling_t5.py)
-16//! - 🤗 [HF Link](https://huggingface.co/docs/transformers/model_doc/t5)
-17//! - 📝 [T5 Paper](https://arxiv.org/abs/1910.10683)
-18//!
-19//! # Encoder-decoder example:
-20//!
-21//! ```bash
-22//! cargo run --example t5 --release -- \
-23//!   --model-id "t5-small" \
-24//!   --prompt "translate to German: A beautiful candle." \
-25//!   --decode
-26//! > ...
-27//! >  Eine schöne Kerze.
-28//! > 9 tokens generated (2.42 token/s)
-29//! ```
-30//!
-31//! Variants such as [flan-t5](https://huggingface.co/google/flan-t5-small), [flan-ul2](https://huggingface.co/google/flan-ul2) (with `--revision "refs/pr/25"`), and [Co-EdIT](https://huggingface.co/grammarly/coedit-large) are also supported.
-32//!
-33//! # Translation with MADLAD
-34//!
-35//!
-36//! [MADLAD-400](https://arxiv.org/abs/2309.04662) is a series of multilingual machine translation T5 models trained on 250 billion tokens covering over 450 languages using publicly available data. These models are competitive with significantly larger models.
-37//!
-38//! ```bash
-39//! cargo run --example t5 --release  -- \
-40//!   --model-id "jbochi/madlad400-3b-mt" \
-41//!   --prompt "<2de> How are you, my friend?" \
-42//!   --decode --temperature 0
-43//! ...
-44//!  Wie geht es dir, mein Freund?
-45//! ```
-46//!
-47//! ## Sentence embedding example
-48//!
-49//! ```bash
-50//! cargo run --example t5 --release -- \
-51//!   --model-id "t5-small" --prompt "A beautiful candle."
-52//! ...
-53//! [[[ 0.0515, -0.0541, -0.0761, ..., -0.0392,  0.1511, -0.0265],
-54//!   [-0.0974,  0.0998, -0.1659, ..., -0.2450,  0.1738, -0.0164],
-55//!   [ 0.0624, -0.1024,  0.0430, ..., -0.1388,  0.0564, -0.2962],
-56//!   [-0.0389, -0.1173,  0.0026, ...,  0.1064, -0.1065,  0.0990],
-57//!   [ 0.1300,  0.0027, -0.0326, ...,  0.0026, -0.0317,  0.0851]]]
-58//! Tensor[[1, 5, 512], f32]
-59//! Took 303.766583ms
-60//! ```
-61
-62use crate::models::with_tracing::Embedding;
-63use candle::{DType, Device, Module, Result, Tensor, D};
-64use candle_nn::{Activation, VarBuilder};
-65use serde::Deserialize;
-66use std::sync::Arc;
-67
-68#[derive(Debug, Clone)]
-69pub struct Linear {
-70    weight: Tensor,
-71    span: tracing::Span,
-72}
-73
-74pub fn linear_no_bias(d1: usize, d2: usize, vb: VarBuilder) -> Result<Linear> {
-75    let init_ws = candle_nn::init::DEFAULT_KAIMING_NORMAL;
-76    let weight = vb.get_with_hints((d2, d1), "weight", init_ws)?;
-77    let span = tracing::span!(tracing::Level::TRACE, "linear");
-78    Ok(Linear { weight, span })
-79}
-80
-81impl Module for Linear {
-82    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-83        let _enter = self.span.enter();
-84        let weight = self.weight.to_dtype(xs.dtype())?;
-85        let w = match *xs.dims() {
-86            [b1, b2, _, _] => weight.broadcast_left((b1, b2))?.t()?,
-87            [bsize, _, _] => weight.broadcast_left(bsize)?.t()?,
-88            _ => weight.t()?,
-89        };
-90        xs.matmul(&w)
-91    }
-92}
-93
-94fn default_relative_attention_max_distance() -> usize {
-95    128
-96}
-97
-98fn default_is_decoder() -> bool {
-99    false
-100}
-101
-102fn default_use_cache() -> bool {
-103    true
-104}
-105
-106fn default_tie_word_embeddings() -> bool {
-107    true
-108}
-109
-110fn get_mask(size: usize, device: &Device) -> Result<Tensor> {
-111    let mask: Vec<_> = (0..size)
-112        .flat_map(|i| (0..size).map(move |j| u8::from(j > i)))
-113        .collect();
-114    Tensor::from_slice(&mask, (size, size), device)
-115}
-116
-117fn masked_fill(on_false: &Tensor, mask: &Tensor, on_true: f32) -> Result<Tensor> {
-118    let shape = mask.shape();
-119    let on_true = Tensor::new(on_true, on_false.device())?.broadcast_as(shape.dims())?;
-120    let m = mask.where_cond(&on_true, on_false)?;
-121    Ok(m)
-122}
-123
-124#[derive(Debug, Deserialize, Default, Clone, PartialEq)]
-125pub struct ActivationWithOptionalGating {
-126    pub gated: bool,
-127    pub activation: candle_nn::Activation,
-128}
-129
-130pub fn deserialize_feed_forward_proj_activation<'de, D>(
-131    deserializer: D,
-132) -> std::result::Result<ActivationWithOptionalGating, D::Error>
-133where
-134    D: serde::de::Deserializer<'de>,
-135{
-136    match String::deserialize(deserializer)?.as_str() {
-137        "gated-gelu" => Ok(ActivationWithOptionalGating {
-138            gated: true,
-139            activation: candle_nn::Activation::NewGelu,
-140        }),
-141        "gated-silu" => Ok(ActivationWithOptionalGating {
-142            gated: true,
-143            activation: candle_nn::Activation::Silu,
-144        }),
-145        buf => {
-146            let activation = serde_plain::from_str(buf).map_err(serde::de::Error::custom)?;
-147            Ok(ActivationWithOptionalGating {
-148                gated: false,
-149                activation,
-150            })
-151        }
-152    }
-153}
-154
-155#[derive(Debug, Clone, PartialEq, Deserialize)]
-156pub struct Config {
-157    pub vocab_size: usize,
-158    pub d_model: usize,
-159    pub d_kv: usize,
-160    pub d_ff: usize,
-161    pub num_layers: usize,
-162    pub num_decoder_layers: Option<usize>,
-163    pub num_heads: usize,
-164    pub relative_attention_num_buckets: usize,
-165    #[serde(default = "default_relative_attention_max_distance")]
-166    pub relative_attention_max_distance: usize,
-167    pub dropout_rate: f64,
-168    pub layer_norm_epsilon: f64,
-169    pub initializer_factor: f64,
-170    #[serde(default, deserialize_with = "deserialize_feed_forward_proj_activation")]
-171    pub feed_forward_proj: ActivationWithOptionalGating,
-172    #[serde(default = "default_tie_word_embeddings")]
-173    pub tie_word_embeddings: bool,
-174    #[serde(default = "default_is_decoder")]
-175    pub is_decoder: bool,
-176    pub is_encoder_decoder: bool,
-177    #[serde(default = "default_use_cache")]
-178    pub use_cache: bool,
-179    pub pad_token_id: usize,
-180    pub eos_token_id: usize,
-181    pub decoder_start_token_id: Option<usize>,
-182}
-183
-184impl Default for Config {
-185    fn default() -> Self {
-186        Self {
-187            vocab_size: 32128,
-188            d_model: 512,
-189            d_kv: 64,
-190            d_ff: 2048,
-191            num_layers: 6,
-192            num_decoder_layers: None,
-193            num_heads: 8,
-194            relative_attention_num_buckets: 32,
-195            relative_attention_max_distance: 128,
-196            dropout_rate: 0.1,
-197            layer_norm_epsilon: 1e-6,
-198            initializer_factor: 1.0,
-199            feed_forward_proj: ActivationWithOptionalGating {
-200                gated: false,
-201                activation: Activation::Relu,
-202            },
-203            tie_word_embeddings: true,
-204            is_decoder: false,
-205            is_encoder_decoder: true,
-206            use_cache: true,
-207            pad_token_id: 0,
-208            eos_token_id: 1,
-209            decoder_start_token_id: Some(0),
-210        }
-211    }
-212}
-213
-214impl Config {
-215    // https://huggingface.co/facebook/musicgen-small/blob/495da4ad086b3416a27c6187f9239f9fd96f3962/config.json#L184
-216    pub fn musicgen_small() -> Self {
-217        Self {
-218            d_ff: 3072,
-219            d_kv: 64,
-220            d_model: 768,
-221            dropout_rate: 0.1,
-222            eos_token_id: 1,
-223            feed_forward_proj: ActivationWithOptionalGating {
-224                gated: false,
-225                activation: Activation::Relu,
-226            },
-227            tie_word_embeddings: true,
-228            initializer_factor: 1.0,
-229            is_decoder: false,
-230            is_encoder_decoder: true,
-231            layer_norm_epsilon: 1e-6,
-232            num_decoder_layers: Some(12),
-233            num_heads: 12,
-234            num_layers: 12,
-235            pad_token_id: 0,
-236            decoder_start_token_id: Some(0),
-237            relative_attention_max_distance: 128,
-238            relative_attention_num_buckets: 32,
-239            use_cache: true,
-240            vocab_size: 32128,
-241        }
-242    }
-243}
-244
-245#[derive(Debug, Clone)]
-246struct T5LayerNorm {
-247    weight: Tensor,
-248    variance_epsilon: f64,
-249    span: tracing::Span,
-250}
-251
-252impl T5LayerNorm {
-253    fn load(h: usize, eps: f64, vb: VarBuilder) -> Result<Self> {
-254        let weight = vb.get(h, "weight")?;
-255        Ok(Self {
-256            weight,
-257            variance_epsilon: eps,
-258            span: tracing::span!(tracing::Level::TRACE, "layer-norm"),
-259        })
-260    }
-261}
-262
-263impl Module for T5LayerNorm {
-264    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-265        let _enter = self.span.enter();
-266        let dtype = xs.dtype();
-267        let xs_f32 = xs.to_dtype(DType::F32)?;
-268        // variance = hidden_states.to(torch.float32).pow(2).mean(-1, keepdim=True)
-269        let variance = xs_f32.sqr()?.mean_keepdim(D::Minus1)?;
-270        let xs = xs_f32.broadcast_div(&(variance + self.variance_epsilon)?.sqrt()?)?;
-271        let xs = xs.to_dtype(dtype)?;
-272        let xs = xs.broadcast_mul(&self.weight.to_dtype(dtype)?)?;
-273        Ok(xs)
-274    }
-275}
-276
-277#[derive(Debug, Clone)]
-278struct T5DenseActDense {
-279    wi: Linear,
-280    wo: Linear,
-281    act: Activation,
-282    span: tracing::Span,
-283}
-284
-285impl T5DenseActDense {
-286    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-287        let wi = linear_no_bias(cfg.d_model, cfg.d_ff, vb.pp("wi"))?;
-288        let wo = linear_no_bias(cfg.d_ff, cfg.d_model, vb.pp("wo"))?;
-289        Ok(Self {
-290            wi,
-291            wo,
-292            act: Activation::Relu,
-293            span: tracing::span!(tracing::Level::TRACE, "dense-act-dense"),
-294        })
-295    }
-296}
-297
-298impl Module for T5DenseActDense {
-299    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-300        let _enter = self.span.enter();
-301        let xs = self.wi.forward(xs)?;
-302        let xs = self.act.forward(&xs)?;
-303        let xs = self.wo.forward(&xs)?;
-304        Ok(xs)
-305    }
-306}
-307
-308#[derive(Debug, Clone)]
-309struct T5DenseGatedActDense {
-310    wi_0: Linear,
-311    wi_1: Linear,
-312    wo: Linear,
-313    act: Activation,
-314    span: tracing::Span,
-315}
-316
-317impl T5DenseGatedActDense {
-318    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-319        let wi_0 = linear_no_bias(cfg.d_model, cfg.d_ff, vb.pp("wi_0"))?;
-320        let wi_1 = linear_no_bias(cfg.d_model, cfg.d_ff, vb.pp("wi_1"))?;
-321        let wo = linear_no_bias(cfg.d_ff, cfg.d_model, vb.pp("wo"))?;
-322        Ok(Self {
-323            wi_0,
-324            wi_1,
-325            wo,
-326            act: cfg.feed_forward_proj.activation,
-327            span: tracing::span!(tracing::Level::TRACE, "dense-gated-act-dense"),
-328        })
-329    }
-330}
-331
-332impl Module for T5DenseGatedActDense {
-333    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-334        let _enter = self.span.enter();
-335        let hidden_gelu = self.act.forward(&self.wi_0.forward(xs)?)?;
-336        let hidden_linear = self.wi_1.forward(xs)?;
-337        let xs = hidden_gelu.broadcast_mul(&hidden_linear)?;
-338        let xs = self.wo.forward(&xs)?;
-339        Ok(xs)
-340    }
-341}
-342
-343#[derive(Debug, Clone)]
-344struct T5LayerFF {
-345    dense_act: Option<T5DenseActDense>,
-346    gated_dense_act: Option<T5DenseGatedActDense>,
-347    layer_norm: T5LayerNorm,
-348    span: tracing::Span,
-349}
-350
-351impl T5LayerFF {
-352    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-353        let layer_norm =
-354            T5LayerNorm::load(cfg.d_model, cfg.layer_norm_epsilon, vb.pp("layer_norm"))?;
-355        let (dense_act, gated_dense_act) = if cfg.feed_forward_proj.gated {
-356            (
-357                None,
-358                Some(T5DenseGatedActDense::load(vb.pp("DenseReluDense"), cfg)?),
-359            )
-360        } else {
-361            (
-362                Some(T5DenseActDense::load(vb.pp("DenseReluDense"), cfg)?),
-363                None,
-364            )
-365        };
-366        Ok(Self {
-367            dense_act,
-368            gated_dense_act,
-369            layer_norm,
-370            span: tracing::span!(tracing::Level::TRACE, "layer-ff"),
-371        })
-372    }
-373}
-374
-375impl Module for T5LayerFF {
-376    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-377        let _enter = self.span.enter();
-378        let ys = self.layer_norm.forward(xs)?;
-379        let ys = match &self.dense_act {
-380            Some(dense_act) => dense_act.forward(&ys)?,
-381            None => self.gated_dense_act.as_ref().unwrap().forward(&ys)?,
-382        };
-383        let xs = (xs + ys)?;
-384        Ok(xs)
-385    }
-386}
-387
-388#[derive(Debug, Clone)]
-389struct T5Attention {
-390    q: Linear,
-391    k: Linear,
-392    v: Linear,
-393    o: Linear,
-394    n_heads: usize,
-395    d_kv: usize,
-396    relative_attention_bias: Option<Embedding>,
-397    relative_attention_num_buckets: usize,
-398    relative_attention_max_distance: usize,
-399    inner_dim: usize,
-400    use_cache: bool,
-401    kv_cache: Option<(Tensor, Tensor)>,
-402    span: tracing::Span,
-403    span_cache: tracing::Span,
-404    span_mm: tracing::Span,
-405    span_sm: tracing::Span,
-406}
-407
-408impl T5Attention {
-409    fn load(
-410        has_relative_attention_bias: bool,
-411        decoder: bool,
-412        vb: VarBuilder,
-413        cfg: &Config,
-414    ) -> Result<Self> {
-415        let inner_dim = cfg.num_heads * cfg.d_kv;
-416        let q = linear_no_bias(cfg.d_model, inner_dim, vb.pp("q"))?;
-417        let k = linear_no_bias(cfg.d_model, inner_dim, vb.pp("k"))?;
-418        let v = linear_no_bias(cfg.d_model, inner_dim, vb.pp("v"))?;
-419        let o = linear_no_bias(inner_dim, cfg.d_model, vb.pp("o"))?;
-420        let relative_attention_bias = if has_relative_attention_bias {
-421            let emb = Embedding::new(
-422                cfg.relative_attention_num_buckets,
-423                cfg.num_heads,
-424                vb.pp("relative_attention_bias"),
-425            )?;
-426            Some(emb)
-427        } else {
-428            None
-429        };
-430        Ok(Self {
-431            q,
-432            k,
-433            v,
-434            o,
-435            n_heads: cfg.num_heads,
-436            d_kv: cfg.d_kv,
-437            relative_attention_bias,
-438            relative_attention_num_buckets: cfg.relative_attention_num_buckets,
-439            relative_attention_max_distance: cfg.relative_attention_max_distance,
-440            inner_dim,
-441            use_cache: cfg.use_cache && decoder,
-442            kv_cache: None,
-443            span: tracing::span!(tracing::Level::TRACE, "attention"),
-444            span_cache: tracing::span!(tracing::Level::TRACE, "attention-cache"),
-445            span_mm: tracing::span!(tracing::Level::TRACE, "attention-mm"),
-446            span_sm: tracing::span!(tracing::Level::TRACE, "attention-sm"),
-447        })
-448    }
-449
-450    fn forward(
-451        &mut self,
-452        xs: &Tensor,
-453        position_bias: Option<&Tensor>,
-454        key_value_states: Option<&Tensor>,
-455        mask: Option<&Tensor>,
-456    ) -> Result<(Tensor, Option<Tensor>)> {
-457        // Performs Self-attention (if key_value_states is None) or attention
-458        // over source sentence (provided by key_value_states).
-459        let _enter = self.span.enter();
-460        let kv_input = match key_value_states {
-461            None => xs,
-462            Some(key_value_states) => key_value_states,
-463        };
-464        let (b_sz, q_len) = (xs.dim(0)?, xs.dim(1)?);
-465        let kv_len = kv_input.dim(1)?;
-466        let q = self.q.forward(xs)?;
-467        let k = self.k.forward(kv_input)?;
-468        let v = self.v.forward(kv_input)?;
-469        let q = q
-470            .reshape((b_sz, q_len, self.n_heads, self.d_kv))?
-471            .transpose(1, 2)?
-472            .contiguous()?;
-473        let mut k = k
-474            .reshape((b_sz, kv_len, self.n_heads, self.d_kv))?
-475            .transpose(1, 2)?;
-476        let mut v = v
-477            .reshape((b_sz, kv_len, self.n_heads, self.d_kv))?
-478            .transpose(1, 2)?;
-479
-480        if self.use_cache && key_value_states.is_none() {
-481            let _enter = self.span_cache.enter();
-482            if let Some((kv_cache_k, kv_cache_v)) = &self.kv_cache {
-483                k = Tensor::cat(&[kv_cache_k, &k], 2)?;
-484                v = Tensor::cat(&[kv_cache_v, &v], 2)?;
-485            };
-486            self.kv_cache = Some((k.clone(), v.clone()));
-487        };
-488        let k = k.contiguous()?;
-489        let v = v.contiguous()?;
-490        // TODO: Use flash_attn.
-491        let scores = {
-492            let _enter = self.span_mm.enter();
-493            q.matmul(&k.t()?)?
-494        };
-495        let scores = match mask {
-496            None => scores,
-497            Some(mask) => masked_fill(
-498                &scores,
-499                &mask
-500                    .unsqueeze(0)?
-501                    .unsqueeze(0)?
-502                    .repeat((b_sz, self.n_heads))?,
-503                f32::NEG_INFINITY,
-504            )?,
-505        };
-506
-507        let (scores, position_bias) = match position_bias {
-508            Some(position_bias) => (
-509                scores.broadcast_add(position_bias)?,
-510                Some(position_bias.clone()),
-511            ),
-512            None => match &self.relative_attention_bias {
-513                None => (scores, None),
-514                Some(relative_attention_bias) => {
-515                    // This only handles the bidirectional case.
-516                    let kv_len = k.dim(2)?;
-517                    let (q_start, q_end) = match self.use_cache {
-518                        true => ((kv_len - q_len) as u32, kv_len as u32),
-519                        false => (0_u32, kv_len as u32),
-520                    };
-521                    let num_buckets = self.relative_attention_num_buckets as u32 / 2;
-522                    let max_exact = num_buckets / 2;
-523                    let relative_position = (q_start..q_end)
-524                        .map(|i| {
-525                            (0..kv_len as u32)
-526                                .map(|j| {
-527                                    if i < j {
-528                                        if j - i < max_exact {
-529                                            j - i + num_buckets
-530                                        } else {
-531                                            let b = f32::log(
-532                                                (j - i) as f32 / max_exact as f32,
-533                                                self.relative_attention_max_distance as f32
-534                                                    / max_exact as f32,
-535                                            ) * (num_buckets - max_exact) as f32;
-536                                            u32::min(
-537                                                max_exact + num_buckets + b as u32,
-538                                                self.relative_attention_num_buckets as u32 - 1,
-539                                            )
-540                                        }
-541                                    } else if i - j < max_exact {
-542                                        i - j
-543                                    } else {
-544                                        let b = f32::log(
-545                                            (i - j) as f32 / max_exact as f32,
-546                                            self.relative_attention_max_distance as f32
-547                                                / max_exact as f32,
-548                                        ) * (num_buckets - max_exact) as f32;
-549                                        u32::min(max_exact + b as u32, num_buckets - 1)
-550                                    }
-551                                })
-552                                .collect::<Vec<u32>>()
-553                        })
-554                        .collect::<Vec<Vec<_>>>();
-555                    let relative_buckets = Tensor::new(relative_position, q.device())?;
-556                    let position_bias = relative_attention_bias
-557                        .forward(&relative_buckets)?
-558                        .permute((2, 0, 1))?
-559                        .unsqueeze(0)?
-560                        .to_dtype(scores.dtype())?;
-561                    (scores.broadcast_add(&position_bias)?, Some(position_bias))
-562                    // TODO: position_bias_masked?
-563                }
-564            },
-565        };
-566
-567        let attn_weights = {
-568            let _enter = self.span_sm.enter();
-569            candle_nn::ops::softmax_last_dim(&scores)?
-570        };
-571        let attn_output = attn_weights.matmul(&v)?;
-572        let attn_output = attn_output
-573            .transpose(1, 2)?
-574            .reshape((b_sz, q_len, self.inner_dim))?;
-575        let attn_output = self.o.forward(&attn_output)?;
-576        Ok((attn_output, position_bias))
-577    }
-578
-579    fn clear_kv_cache(&mut self) {
-580        self.kv_cache = None
-581    }
-582}
-583
-584#[derive(Debug, Clone)]
-585struct T5LayerSelfAttention {
-586    self_attention: T5Attention,
-587    layer_norm: T5LayerNorm,
-588    span: tracing::Span,
-589}
-590
-591impl T5LayerSelfAttention {
-592    fn load(h: bool, d: bool, vb: VarBuilder, cfg: &Config) -> Result<Self> {
-593        let self_attention = T5Attention::load(h, d, vb.pp("SelfAttention"), cfg)?;
-594        let layer_norm =
-595            T5LayerNorm::load(cfg.d_model, cfg.layer_norm_epsilon, vb.pp("layer_norm"))?;
-596        Ok(Self {
-597            self_attention,
-598            layer_norm,
-599            span: tracing::span!(tracing::Level::TRACE, "self-attn"),
-600        })
-601    }
-602
-603    fn forward(
-604        &mut self,
-605        xs: &Tensor,
-606        position_bias: Option<&Tensor>,
-607        mask: Option<&Tensor>,
-608    ) -> Result<(Tensor, Option<Tensor>)> {
-609        let _enter = self.span.enter();
-610        let normed_xs = self.layer_norm.forward(xs)?;
-611        let (ys, position_bias) =
-612            self.self_attention
-613                .forward(&normed_xs, position_bias, None, mask)?;
-614        let ys = (xs + ys)?;
-615        Ok((ys, position_bias))
-616    }
-617
-618    fn clear_kv_cache(&mut self) {
-619        self.self_attention.clear_kv_cache()
-620    }
-621}
-622
-623#[derive(Debug, Clone)]
-624struct T5LayerCrossAttention {
-625    cross_attention: T5Attention,
-626    layer_norm: T5LayerNorm,
-627    span: tracing::Span,
-628}
-629
-630impl T5LayerCrossAttention {
-631    fn load(decoder: bool, vb: VarBuilder, cfg: &Config) -> Result<Self> {
-632        let cross_attention = T5Attention::load(false, decoder, vb.pp("EncDecAttention"), cfg)?;
-633        let layer_norm =
-634            T5LayerNorm::load(cfg.d_model, cfg.layer_norm_epsilon, vb.pp("layer_norm"))?;
-635        Ok(Self {
-636            cross_attention,
-637            layer_norm,
-638            span: tracing::span!(tracing::Level::TRACE, "cross-attn"),
-639        })
-640    }
-641
-642    fn forward(
-643        &mut self,
-644        hidden_states: &Tensor,
-645        position_bias: Option<&Tensor>,
-646        key_value_states: &Tensor,
-647    ) -> Result<(Tensor, Option<Tensor>)> {
-648        let _enter = self.span.enter();
-649        let normed_hidden_states = self.layer_norm.forward(hidden_states)?;
-650        let (ys, position_bias) = self.cross_attention.forward(
-651            &normed_hidden_states,
-652            position_bias,
-653            Some(key_value_states),
-654            None,
-655        )?;
-656        let ys = (hidden_states + ys)?;
-657        Ok((ys, position_bias))
-658    }
-659
-660    fn clear_kv_cache(&mut self) {
-661        self.cross_attention.clear_kv_cache()
-662    }
-663}
-664
-665#[derive(Debug, Clone)]
-666struct T5Block {
-667    self_attn: T5LayerSelfAttention,
-668    cross_attn: Option<T5LayerCrossAttention>,
-669    ff: T5LayerFF,
-670    span: tracing::Span,
-671}
-672
-673impl T5Block {
-674    fn load(
-675        has_relative_attention_bias: bool,
-676        decoder: bool,
-677        vb: VarBuilder,
-678        cfg: &Config,
-679    ) -> Result<Self> {
-680        let vb = vb.pp("layer");
-681        let self_attn =
-682            T5LayerSelfAttention::load(has_relative_attention_bias, decoder, vb.pp("0"), cfg)?;
-683        let cross_attn = if cfg.is_decoder {
-684            Some(T5LayerCrossAttention::load(decoder, vb.pp("1"), cfg)?)
-685        } else {
-686            None
-687        };
-688        let ff_i = if cross_attn.is_some() { 2 } else { 1 };
-689        let ff = T5LayerFF::load(vb.pp(ff_i.to_string()), cfg)?;
-690        Ok(Self {
-691            self_attn,
-692            cross_attn,
-693            ff,
-694            span: tracing::span!(tracing::Level::TRACE, "block"),
-695        })
-696    }
-697
-698    fn forward(
-699        &mut self,
-700        xs: &Tensor,
-701        position_bias: Option<&Tensor>,
-702        encoder_hidden_states: Option<&Tensor>,
-703    ) -> Result<(Tensor, Option<Tensor>)> {
-704        let _enter = self.span.enter();
-705        // TODO: Cache masks
-706        let mask = match self.cross_attn.is_some() {
-707            true => {
-708                let mask_len = xs.dim(1)?;
-709                // If the input seq length is 1, no need for a mask, this is also helpful to avoid shape
-710                // issues when using the KV cache in the decoder.
-711                if mask_len <= 1 {
-712                    None
-713                } else {
-714                    Some(get_mask(mask_len, xs.device())?)
-715                }
-716            }
-717            false => None,
-718        };
-719        let (mut xs, position_bias) = self.self_attn.forward(xs, position_bias, mask.as_ref())?;
-720        // TODO: clamp for f16?
-721        if let Some(cross_attn) = &mut self.cross_attn {
-722            (xs, _) = cross_attn.forward(&xs, None, encoder_hidden_states.unwrap())?;
-723            // TODO: clamp for f16?
-724        }
-725        let xs = self.ff.forward(&xs)?;
-726        // TODO: clamp for f16?
-727        Ok((xs, position_bias))
-728    }
-729
-730    fn clear_kv_cache(&mut self) {
-731        self.self_attn.clear_kv_cache();
-732        self.cross_attn.iter_mut().for_each(|c| c.clear_kv_cache());
-733    }
-734}
-735
-736#[derive(Debug, Clone)]
-737struct T5Stack {
-738    block: Vec<T5Block>,
-739    shared: Arc<Embedding>,
-740    final_layer_norm: T5LayerNorm,
-741    span: tracing::Span,
-742}
-743
-744impl T5Stack {
-745    fn load(decoder: bool, vb: VarBuilder, shared: &Arc<Embedding>, cfg: &Config) -> Result<Self> {
-746        let block = (0..cfg.num_layers)
-747            .map(|i| T5Block::load(i == 0, decoder, vb.pp(format!("block.{i}")), cfg))
-748            .collect::<Result<Vec<_>>>()?;
-749        let final_layer_norm = T5LayerNorm::load(
-750            cfg.d_model,
-751            cfg.layer_norm_epsilon,
-752            vb.pp("final_layer_norm"),
-753        )?;
-754        Ok(Self {
-755            block,
-756            shared: shared.clone(),
-757            final_layer_norm,
-758            span: tracing::span!(tracing::Level::TRACE, "stack"),
-759        })
-760    }
-761
-762    fn forward(
-763        &mut self,
-764        input_ids: &Tensor,
-765        encoder_hidden_states: Option<&Tensor>,
-766    ) -> Result<Tensor> {
-767        self.forward_dt(input_ids, encoder_hidden_states, None)
-768    }
-769
-770    fn forward_dt(
-771        &mut self,
-772        input_ids: &Tensor,
-773        encoder_hidden_states: Option<&Tensor>,
-774        dtype: Option<DType>,
-775    ) -> Result<Tensor> {
-776        let _enter = self.span.enter();
-777        let input_embeds = self.shared.as_ref().forward(input_ids)?;
-778        let input_embeds = match dtype {
-779            None => input_embeds,
-780            Some(dtype) => input_embeds.to_dtype(dtype)?,
-781        };
-782        let mut hidden_states = input_embeds;
-783        let mut position_bias = None;
-784        for block in self.block.iter_mut() {
-785            (hidden_states, position_bias) = block.forward(
-786                &hidden_states,
-787                position_bias.as_ref(),
-788                encoder_hidden_states,
-789            )?
-790        }
-791        self.final_layer_norm.forward(&hidden_states)
-792    }
-793
-794    fn clear_kv_cache(&mut self) {
-795        self.block.iter_mut().for_each(|b| b.clear_kv_cache())
-796    }
-797}
-798
-799#[derive(Debug, Clone)]
-800pub struct T5EncoderModel {
-801    encoder: T5Stack,
-802    device: Device,
-803    span: tracing::Span,
-804}
-805
-806impl T5EncoderModel {
-807    pub fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-808        let shared_vb = if vb.contains_tensor("shared.weight") {
-809            vb.pp("shared")
-810        } else if vb.contains_tensor("decoder.embed_tokens") {
-811            vb.pp("decoder").pp("embed_tokens")
-812        } else {
-813            vb.pp("encoder").pp("embed_tokens")
-814        };
-815        let shared = Embedding::new(cfg.vocab_size, cfg.d_model, shared_vb)?;
-816        let shared = Arc::new(shared);
-817        let encoder = T5Stack::load(false, vb.pp("encoder"), &shared, cfg)?;
-818        Ok(Self {
-819            encoder,
-820            device: vb.device().clone(),
-821            span: tracing::span!(tracing::Level::TRACE, "encoder"),
-822        })
-823    }
-824
-825    pub fn forward(&mut self, input_ids: &Tensor) -> Result<Tensor> {
-826        let _enter = self.span.enter();
-827        self.encoder.forward(input_ids, None)
-828    }
-829
-830    pub fn forward_dt(&mut self, input_ids: &Tensor, dtype: Option<DType>) -> Result<Tensor> {
-831        let _enter = self.span.enter();
-832        self.encoder.forward_dt(input_ids, None, dtype)
-833    }
-834
-835    pub fn device(&self) -> &Device {
-836        &self.device
-837    }
-838
-839    pub fn clear_kv_cache(&mut self) {
-840        self.encoder.clear_kv_cache()
-841    }
-842}
-843
-844#[derive(Debug, Clone)]
-845pub struct T5ForConditionalGeneration {
-846    encoder: T5Stack,
-847    decoder: T5Stack,
-848    d_model: usize,
-849    tie_word_embeddings: bool,
-850    lm_head: Option<Linear>,
-851    shared: Arc<Embedding>,
-852    device: Device,
-853    span_decode: tracing::Span,
-854    span_decode_head: tracing::Span,
-855}
-856
-857impl T5ForConditionalGeneration {
-858    pub fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-859        assert!(cfg.is_encoder_decoder);
-860        let d_model = cfg.d_model;
-861        let shared_vb = if vb.contains_tensor("shared.weight") {
-862            vb.pp("shared")
-863        } else {
-864            vb.pp("decoder").pp("embed_tokens")
-865        };
-866        let shared = Embedding::new(cfg.vocab_size, cfg.d_model, shared_vb)?;
-867        let shared = Arc::new(shared);
-868
-869        let mut encoder_cfg = cfg.clone();
-870        encoder_cfg.is_decoder = false;
-871        encoder_cfg.use_cache = false;
-872        encoder_cfg.is_encoder_decoder = false;
-873        let encoder = T5Stack::load(false, vb.pp("encoder"), &shared, &encoder_cfg)?;
-874
-875        let mut decoder_cfg = cfg.clone();
-876        decoder_cfg.is_decoder = true;
-877        decoder_cfg.is_encoder_decoder = false;
-878        decoder_cfg.num_layers = cfg.num_decoder_layers.unwrap_or(cfg.num_layers);
-879        let decoder = T5Stack::load(true, vb.pp("decoder"), &shared, &decoder_cfg)?;
-880
-881        let tie_word_embeddings = cfg.tie_word_embeddings;
-882        let lm_head = if tie_word_embeddings {
-883            None
-884        } else {
-885            Some(linear_no_bias(
-886                cfg.d_model,
-887                cfg.vocab_size,
-888                vb.pp("lm_head"),
-889            )?)
-890        };
-891
-892        Ok(Self {
-893            encoder,
-894            decoder,
-895            d_model,
-896            tie_word_embeddings,
-897            lm_head,
-898            shared,
-899            device: vb.device().clone(),
-900            span_decode: tracing::span!(tracing::Level::TRACE, "decode"),
-901            span_decode_head: tracing::span!(tracing::Level::TRACE, "decode-head"),
-902        })
-903    }
-904
-905    pub fn encode(&mut self, input_ids: &Tensor) -> Result<Tensor> {
-906        self.encoder.forward(input_ids, None)
-907    }
-908
-909    pub fn decode(
-910        &mut self,
-911        decoder_input_ids: &Tensor,
-912        encoder_output: &Tensor,
-913    ) -> Result<Tensor> {
-914        let _enter = self.span_decode.enter();
-915        let decoder_output = self
-916            .decoder
-917            .forward(decoder_input_ids, Some(encoder_output))?;
-918
-919        let scaling_factor = if self.tie_word_embeddings {
-920            // Rescale output before projecting on vocab
-921            // See https://github.com/tensorflow/mesh/blob/fa19d69eafc9a482aff0b59ddd96b025c0cb207d/mesh_tensorflow/transformer/transformer.py#L586
-922            (self.d_model as f64).sqrt()
-923        } else {
-924            1.0
-925        };
-926        let sequence_output = ((decoder_output
-927            .narrow(1, decoder_output.dim(1)? - 1, 1)?
-928            .squeeze(1)?)
-929            * scaling_factor)?;
-930        let output = {
-931            let _enter = self.span_decode_head.enter();
-932            match self.lm_head {
-933                None => sequence_output.matmul(&self.shared.embeddings().t()?)?,
-934                Some(ref lm_head) => lm_head.forward(&sequence_output)?,
-935            }
-936        };
-937        Ok(output)
-938    }
-939
-940    pub fn forward(&mut self, input_ids: &Tensor, decoder_input_ids: &Tensor) -> Result<Tensor> {
-941        let encoder_output = self.encode(input_ids)?;
-942        self.decode(decoder_input_ids, &encoder_output)
-943    }
-944
-945    pub fn device(&self) -> &Device {
-946        &self.device
-947    }
-948
-949    pub fn clear_kv_cache(&mut self) {
-950        self.encoder.clear_kv_cache();
-951        self.decoder.clear_kv_cache();
-952    }
-953}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/trocr.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/trocr.rs.html deleted file mode 100644 index 8d088a7..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/trocr.rs.html +++ /dev/null @@ -1,518 +0,0 @@ -trocr.rs - source

candle_transformers/models/
trocr.rs

1//! TrOCR model implementation.
-2//!
-3//! TrOCR is a Transformer-based OCR model that uses a Vision Transformer encoder
-4//! and a BART-like decoder for optical character recognition.
-5//!
-6//! Key characteristics:
-7//! - Vision Transformer encoder for image processing
-8//! - BART-style decoder for text generation
-9//! - Learned positional embeddings
-10//! - Layer normalization and self-attention
-11//!
-12//! References:
-13//! - [Paper](https://arxiv.org/abs/2109.10282)
-14//! - [Model Card](https://huggingface.co/microsoft/trocr-base-handwritten)
-15//!
-16
-17use crate::models::vit::{Config, Embeddings, Encoder};
-18use candle::{DType, Result, Tensor};
-19use candle_nn::{
-20    embedding, layer_norm, linear_no_bias, Embedding, LayerNorm, Linear, Module, VarBuilder,
-21};
-22
-23fn default_tie_word_embeddings() -> bool {
-24    true
-25}
-26fn default_use_learned_position_embeddings() -> bool {
-27    true
-28}
-29
-30#[derive(Debug, Clone, PartialEq, serde::Deserialize)]
-31pub struct TrOCRConfig {
-32    pub vocab_size: usize,
-33    pub d_model: usize,
-34    pub cross_attention_hidden_size: usize,
-35    pub decoder_layers: usize,
-36    pub decoder_attention_heads: usize,
-37    pub decoder_ffn_dim: usize,
-38    pub activation_function: candle_nn::Activation,
-39    pub max_position_embeddings: usize,
-40    pub dropout: f64,
-41    pub attention_dropout: f64,
-42    pub activation_dropout: f64,
-43    pub decoder_start_token_id: u32,
-44    pub init_std: f64,
-45    pub decoder_layerdrop: f64,
-46    pub use_cache: bool,
-47    pub scale_embedding: bool,
-48    pub pad_token_id: usize,
-49    pub bos_token_id: usize,
-50    pub eos_token_id: u32,
-51    pub decoder_vocab_size: Option<usize>,
-52    #[serde(default = "default_use_learned_position_embeddings")]
-53    pub use_learned_position_embeddings: bool,
-54    #[serde(default = "default_tie_word_embeddings")]
-55    pub tie_word_embeddings: bool,
-56}
-57
-58impl Default for TrOCRConfig {
-59    fn default() -> Self {
-60        Self {
-61            vocab_size: 50265,
-62            d_model: 1024,
-63            cross_attention_hidden_size: 768,
-64            decoder_layers: 12,
-65            decoder_attention_heads: 16,
-66            decoder_ffn_dim: 4096,
-67            activation_function: candle_nn::Activation::Gelu,
-68            max_position_embeddings: 512,
-69            dropout: 0.1,
-70            attention_dropout: 0.0,
-71            activation_dropout: 0.0,
-72            decoder_start_token_id: 2,
-73            init_std: 0.02,
-74            decoder_layerdrop: 0.0,
-75            use_cache: true,
-76            scale_embedding: false,
-77            pad_token_id: 1,
-78            bos_token_id: 0,
-79            eos_token_id: 2,
-80            decoder_vocab_size: Some(50265),
-81            use_learned_position_embeddings: true,
-82            tie_word_embeddings: true,
-83        }
-84    }
-85}
-86
-87#[derive(Debug, Clone)]
-88struct TrOCRLearnedPositionalEmbedding {
-89    offset: usize,
-90    weights: Embedding,
-91}
-92
-93impl TrOCRLearnedPositionalEmbedding {
-94    fn load(vb: VarBuilder, cfg: &TrOCRConfig) -> Result<Self> {
-95        let offset: usize = 2;
-96        let num_embeddings = cfg.max_position_embeddings;
-97        let embedding_dim = cfg.d_model;
-98        let weights = embedding(num_embeddings + offset, embedding_dim, vb)?;
-99
-100        Ok(Self { offset, weights })
-101    }
-102
-103    fn new_sinusoidal(vb: VarBuilder, cfg: &TrOCRConfig) -> Result<Self> {
-104        // https://github.com/huggingface/transformers/blob/58e3d23e97078f361a533b9ec4a6a2de674ea52a/src/transformers/models/trocr/modeling_trocr.py#L81
-105        let embedding_dim = cfg.d_model;
-106        let half_dim = embedding_dim / 2;
-107        let num_positions = cfg.max_position_embeddings + cfg.pad_token_id + 1;
-108        let dev = vb.device();
-109        let inv_freq: Vec<_> = (0..half_dim)
-110            .map(|i| 1f32 / 10000f32.powf(i as f32 / (half_dim - 1) as f32))
-111            .collect();
-112        let inv_freq_len = inv_freq.len();
-113        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?;
-114        let t = Tensor::arange(0u32, num_positions as u32, dev)?
-115            .to_dtype(DType::F32)?
-116            .reshape((num_positions, 1))?;
-117        let freqs = t.matmul(&inv_freq)?;
-118        let emb = Tensor::cat(&[freqs.sin()?, freqs.cos()?], 1)?;
-119        let emb = Tensor::cat(
-120            &[
-121                emb.narrow(0, 0, cfg.pad_token_id)?,
-122                Tensor::zeros((1, embedding_dim), DType::F32, dev)?,
-123                emb.narrow(0, cfg.pad_token_id + 1, cfg.max_position_embeddings)?,
-124            ],
-125            0,
-126        )?
-127        .contiguous()?;
-128        let emb = Embedding::new(emb, embedding_dim);
-129        Ok(Self {
-130            offset: cfg.pad_token_id + 1,
-131            weights: emb,
-132        })
-133    }
-134
-135    fn forward(&mut self, input_ids: &Tensor, past_key_values_length: u32) -> Result<Tensor> {
-136        let (b_sz, seq_len) = input_ids.dims2()?;
-137
-138        let positions = Tensor::arange(
-139            past_key_values_length,
-140            seq_len as u32 + past_key_values_length,
-141            input_ids.device(),
-142        )?
-143        .expand((b_sz, seq_len))?;
-144
-145        let positions =
-146            positions.broadcast_add(&Tensor::new(self.offset as u32, input_ids.device())?)?;
-147        self.weights.forward(&positions)
-148    }
-149}
-150
-151#[derive(Debug, Clone)]
-152struct TrOCRAttention {
-153    head_dim: usize,
-154    num_heads: usize,
-155    is_decoder: bool,
-156    scaling: f64,
-157    k_proj: Linear,
-158    v_proj: Linear,
-159    q_proj: Linear,
-160    out_proj: Linear,
-161    kv_cache: Option<(Tensor, Tensor)>,
-162}
-163
-164impl TrOCRAttention {
-165    fn load(
-166        vb: VarBuilder,
-167        cfg: &TrOCRConfig,
-168        kdim: Option<usize>,
-169        vdim: Option<usize>,
-170    ) -> Result<Self> {
-171        let embed_dim = cfg.d_model;
-172        let num_heads = cfg.decoder_attention_heads;
-173        let head_dim = embed_dim / num_heads;
-174        let kdim = kdim.unwrap_or(embed_dim);
-175        let vdim = vdim.unwrap_or(embed_dim);
-176
-177        let k_proj = linear_no_bias(kdim, embed_dim, vb.pp("k_proj"))?;
-178        let v_proj = linear_no_bias(vdim, embed_dim, vb.pp("v_proj"))?;
-179        let q_proj = linear_no_bias(embed_dim, embed_dim, vb.pp("q_proj"))?;
-180
-181        let out_proj = linear_no_bias(embed_dim, embed_dim, vb.pp("out_proj"))?;
-182        Ok(Self {
-183            head_dim,
-184            num_heads,
-185            is_decoder: true,
-186            scaling: 1. / (head_dim as f64).sqrt(),
-187            k_proj,
-188            v_proj,
-189            q_proj,
-190            out_proj,
-191            kv_cache: None,
-192        })
-193    }
-194
-195    fn reset_kv_cache(&mut self) {
-196        self.kv_cache = None
-197    }
-198
-199    fn _shape(&self, tensor: &Tensor, bsz: usize) -> Result<Tensor> {
-200        tensor
-201            .reshape((bsz, (), self.num_heads, self.head_dim))?
-202            .transpose(1, 2)?
-203            .contiguous()
-204    }
-205
-206    fn forward(
-207        &mut self,
-208        xs: &Tensor,
-209        kv_states: Option<&Tensor>,
-210        attn_mask: Option<&Tensor>,
-211    ) -> Result<Tensor> {
-212        let (b_sz, tgt_len, _) = xs.dims3()?;
-213        let query_states = (xs.apply(&self.q_proj)? * self.scaling)?;
-214        let (key_states, value_states) = match kv_states {
-215            None => {
-216                let key_states = self._shape(&xs.apply(&self.k_proj)?, b_sz)?;
-217                let value_states = self._shape(&xs.apply(&self.v_proj)?, b_sz)?;
-218                if self.is_decoder {
-219                    let kv_states = match &self.kv_cache {
-220                        None => (key_states, value_states),
-221                        Some((p_key_states, p_value_states)) => {
-222                            let key_states = Tensor::cat(&[p_key_states, &key_states], 2)?;
-223                            let value_states = Tensor::cat(&[p_value_states, &value_states], 2)?;
-224                            (key_states, value_states)
-225                        }
-226                    };
-227                    self.kv_cache = Some(kv_states.clone());
-228                    kv_states
-229                } else {
-230                    (key_states, value_states)
-231                }
-232            }
-233            Some(kv_states) => {
-234                let key_states = self._shape(&kv_states.apply(&self.k_proj)?, b_sz)?;
-235                let value_states = self._shape(&kv_states.apply(&self.v_proj)?, b_sz)?;
-236                (key_states, value_states)
-237            }
-238        };
-239        let proj_shape = (b_sz * self.num_heads, (), self.head_dim);
-240        let query_states = self._shape(&query_states, b_sz)?.reshape(proj_shape)?;
-241        let key_states = key_states.reshape(proj_shape)?;
-242        let value_states = value_states.reshape(proj_shape)?;
-243        let attn_weights = query_states.matmul(&key_states.transpose(1, 2)?)?;
-244        let attn_weights = match attn_mask {
-245            None => attn_weights,
-246            Some(attn_mask) => attn_weights.broadcast_add(attn_mask)?,
-247        };
-248        let attn_probs = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-249        let attn_output = attn_probs.matmul(&value_states)?;
-250        attn_output
-251            .reshape((b_sz, self.num_heads, tgt_len, self.head_dim))?
-252            .transpose(1, 2)?
-253            .reshape((b_sz, tgt_len, self.head_dim * self.num_heads))?
-254            .apply(&self.out_proj)
-255    }
-256}
-257
-258#[derive(Debug, Clone)]
-259struct TrOCRDecoderLayer {
-260    self_attn: TrOCRAttention,
-261    activation_fn: candle_nn::Activation,
-262    self_attn_layer_norm: LayerNorm,
-263    encoder_attn: TrOCRAttention,
-264    encoder_attn_layer_norm: LayerNorm,
-265    fc1: Linear,
-266    fc2: Linear,
-267    final_layer_norm: LayerNorm,
-268}
-269
-270impl TrOCRDecoderLayer {
-271    fn load(vb: VarBuilder, cfg: &TrOCRConfig) -> Result<Self> {
-272        let embed_dim = cfg.d_model;
-273        let self_attn = TrOCRAttention::load(vb.pp("self_attn"), cfg, None, None)?;
-274        let self_attn_layer_norm = layer_norm(embed_dim, 1e-5, vb.pp("self_attn_layer_norm"))?;
-275        let encoder_attn = TrOCRAttention::load(
-276            vb.pp("encoder_attn"),
-277            cfg,
-278            Some(cfg.cross_attention_hidden_size),
-279            Some(cfg.cross_attention_hidden_size),
-280        )?;
-281        let encoder_attn_layer_norm =
-282            layer_norm(embed_dim, 1e-5, vb.pp("encoder_attn_layer_norm"))?;
-283        let fc1 = linear_no_bias(embed_dim, cfg.decoder_ffn_dim, vb.pp("fc1"))?;
-284        let fc2 = linear_no_bias(cfg.decoder_ffn_dim, embed_dim, vb.pp("fc2"))?;
-285        let final_layer_norm = layer_norm(embed_dim, 1e-5, vb.pp("final_layer_norm"))?;
-286        Ok(Self {
-287            self_attn,
-288            activation_fn: cfg.activation_function,
-289            self_attn_layer_norm,
-290            encoder_attn,
-291            encoder_attn_layer_norm,
-292            fc1,
-293            fc2,
-294            final_layer_norm,
-295        })
-296    }
-297
-298    fn reset_kv_cache(&mut self) {
-299        self.self_attn.reset_kv_cache();
-300    }
-301
-302    fn forward(
-303        &mut self,
-304        xs: &Tensor,
-305        attention_mask: &Tensor,
-306        encoder_hidden_states: Option<&Tensor>,
-307    ) -> Result<Tensor> {
-308        let residual = xs.clone();
-309        let xs = self.self_attn.forward(xs, None, Some(attention_mask))?;
-310        let xs = (xs + residual)?;
-311        let mut xs = self.self_attn_layer_norm.forward(&xs)?;
-312
-313        if let Some(encoder_hidden_states) = &encoder_hidden_states {
-314            let residual = xs.clone();
-315            let encoder_attention_mask = attention_mask.clone(); // TODO
-316            xs = self.encoder_attn.forward(
-317                &xs,
-318                Some(encoder_hidden_states),
-319                Some(&encoder_attention_mask),
-320            )?;
-321            xs = (xs + residual)?;
-322            xs = self.encoder_attn_layer_norm.forward(&xs)?
-323        }
-324
-325        let residual = xs.clone();
-326        let xs = self.fc1.forward(&xs)?;
-327        let xs = self.activation_fn.forward(&xs)?;
-328        let xs = self.fc2.forward(&xs)?;
-329        let xs = (xs + residual)?;
-330        let xs = self.final_layer_norm.forward(&xs)?;
-331
-332        Ok(xs)
-333    }
-334}
-335
-336#[derive(Debug, Clone)]
-337pub struct TrOCRDecoder {
-338    layers: Vec<TrOCRDecoderLayer>,
-339    embed_scale: Option<f64>,
-340    embed_tokens: Embedding,
-341    embed_positions: TrOCRLearnedPositionalEmbedding,
-342}
-343
-344impl TrOCRDecoder {
-345    fn new(cfg: &TrOCRConfig, vb: VarBuilder) -> Result<Self> {
-346        let vb = vb.pp("decoder.model.decoder");
-347
-348        let embed_tokens = embedding(cfg.vocab_size, cfg.d_model, vb.pp("embed_tokens"))?;
-349        let embed_positions = if cfg.use_learned_position_embeddings {
-350            TrOCRLearnedPositionalEmbedding::load(vb.pp("embed_positions"), cfg)?
-351        } else {
-352            TrOCRLearnedPositionalEmbedding::new_sinusoidal(vb.pp("embed_positions"), cfg)?
-353        };
-354        let mut layers = Vec::with_capacity(cfg.decoder_layers);
-355        let vb_l = vb.pp("layers");
-356        for idx in 0..cfg.decoder_layers {
-357            let layer = TrOCRDecoderLayer::load(vb_l.pp(idx), cfg)?;
-358            layers.push(layer)
-359        }
-360        let embed_scale = if cfg.scale_embedding {
-361            Some((cfg.d_model as f64).sqrt())
-362        } else {
-363            None
-364        };
-365
-366        Ok(Self {
-367            layers,
-368            embed_scale,
-369            embed_tokens,
-370            embed_positions,
-371        })
-372    }
-373
-374    fn reset_kv_cache(&mut self) {
-375        self.layers.iter_mut().for_each(|l| l.reset_kv_cache())
-376    }
-377
-378    pub fn forward(
-379        &mut self,
-380        xs: &Tensor,
-381        encoder_xs: Option<&Tensor>,
-382        past_kv_len: usize,
-383        attn_mask: &Tensor,
-384    ) -> Result<Tensor> {
-385        let embed_pos = self.embed_positions.forward(xs, past_kv_len as u32)?;
-386        let xs = xs.apply(&self.embed_tokens)?;
-387
-388        let xs = match self.embed_scale {
-389            None => xs,
-390            Some(scale) => (xs * scale)?,
-391        };
-392
-393        let mut xs = xs.broadcast_add(&embed_pos)?;
-394
-395        for layer in self.layers.iter_mut() {
-396            xs = layer.forward(&xs, attn_mask, encoder_xs)?;
-397        }
-398        Ok(xs)
-399    }
-400}
-401
-402#[derive(Debug, Clone)]
-403pub struct TrOCREncoder {
-404    embeddings: Embeddings,
-405    encoder: Encoder,
-406    layernorm: LayerNorm,
-407}
-408
-409impl TrOCREncoder {
-410    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-411        let vb_v = vb.pp("encoder");
-412
-413        let embeddings = Embeddings::new(cfg, false, vb_v.pp("embeddings"))?;
-414
-415        let encoder = Encoder::new(cfg, vb_v.pp("encoder"))?;
-416        let layernorm = layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb_v.pp("layernorm"))?;
-417
-418        Ok(Self {
-419            embeddings,
-420            encoder,
-421            layernorm,
-422        })
-423    }
-424
-425    pub fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-426        let embedding_output = self.embeddings.forward(xs, None, false)?;
-427        let encoder_outputs = self.encoder.forward(&embedding_output)?;
-428
-429        self.layernorm.forward(&encoder_outputs)
-430    }
-431}
-432
-433#[derive(Debug, Clone)]
-434pub struct TrOCRForCausalLM {
-435    decoder: TrOCRDecoder,
-436    output_projection: Linear,
-437}
-438
-439impl TrOCRForCausalLM {
-440    pub fn new(decoder_cfg: &TrOCRConfig, vb: VarBuilder) -> Result<Self> {
-441        let decoder = TrOCRDecoder::new(decoder_cfg, vb.clone())?;
-442        let output_projection = if decoder_cfg.tie_word_embeddings {
-443            candle_nn::Linear::new(decoder.embed_tokens.embeddings().clone(), None)
-444        } else {
-445            candle_nn::linear_no_bias(
-446                decoder_cfg.d_model,
-447                decoder_cfg.vocab_size,
-448                vb.pp("decoder.output_projection"),
-449            )?
-450        };
-451        Ok(Self {
-452            decoder,
-453            output_projection,
-454        })
-455    }
-456
-457    pub fn forward(
-458        &mut self,
-459        xs: &Tensor,
-460        encoder_xs: Option<&Tensor>,
-461        past_kv_len: usize,
-462        attn_mask: &Tensor,
-463    ) -> Result<Tensor> {
-464        let xs = self
-465            .decoder
-466            .forward(xs, encoder_xs, past_kv_len, attn_mask)?;
-467        let xs = xs.apply(&self.output_projection)?;
-468
-469        Ok(xs)
-470    }
-471
-472    fn reset_kv_cache(&mut self) {
-473        self.decoder.reset_kv_cache();
-474    }
-475}
-476
-477#[derive(Debug, Clone)]
-478pub struct TrOCRModel {
-479    encoder: TrOCREncoder,
-480    decoder: TrOCRForCausalLM,
-481}
-482
-483impl TrOCRModel {
-484    pub fn new(encoder_cfg: &Config, decoder_cfg: &TrOCRConfig, vb: VarBuilder) -> Result<Self> {
-485        let encoder = TrOCREncoder::new(encoder_cfg, vb.clone())?;
-486        let decoder = TrOCRForCausalLM::new(decoder_cfg, vb)?;
-487        Ok(Self { encoder, decoder })
-488    }
-489
-490    pub fn encoder(&mut self) -> &mut TrOCREncoder {
-491        &mut self.encoder
-492    }
-493
-494    pub fn decoder(&mut self) -> &mut TrOCRForCausalLM {
-495        &mut self.decoder
-496    }
-497
-498    pub fn decode(
-499        &mut self,
-500        xs: &Tensor,
-501        encoder_xs: &Tensor,
-502        past_kv_len: usize,
-503    ) -> Result<Tensor> {
-504        let seq_len = xs.dim(1)?;
-505        let mask: Vec<_> = (0..seq_len)
-506            .flat_map(|i| (0..seq_len).map(move |j| if j > i { f32::NEG_INFINITY } else { 0f32 }))
-507            .collect();
-508        let mask = Tensor::from_vec(mask, (seq_len, seq_len), xs.device())?;
-509
-510        self.decoder
-511            .forward(xs, Some(encoder_xs), past_kv_len, &mask)
-512    }
-513
-514    pub fn reset_kv_cache(&mut self) {
-515        self.decoder.reset_kv_cache();
-516    }
-517}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/vgg.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/vgg.rs.html deleted file mode 100644 index 19b4fea..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/vgg.rs.html +++ /dev/null @@ -1,268 +0,0 @@ -vgg.rs - source

candle_transformers/models/
vgg.rs

1//! VGG-16 model implementation.
-2//!
-3//! VGG-16 is a convolutional neural network architecture. It consists of 13
-4//! convolutional layers followed by 3 fully connected layers.
-5//!
-6//! Key characteristics:
-7//! - Conv layers with 3x3 filters
-8//! - Max pooling after every 2-3 conv layers
-9//! - Three fully connected layers of 4096, 4096, 1000 units
-10//! - ReLU activation and dropout
-11//!
-12//! References:
-13//! - [Very Deep Convolutional Networks for Large-Scale Image Recognition](https://arxiv.org/abs/1409.1556)
-14//!
-15
-16use candle::{ModuleT, Result, Tensor};
-17use candle_nn::{FuncT, VarBuilder};
-18
-19// Enum representing the different VGG models
-20pub enum Models {
-21    Vgg13,
-22    Vgg16,
-23    Vgg19,
-24}
-25
-26// Struct representing a VGG model
-27#[derive(Debug)]
-28pub struct Vgg<'a> {
-29    blocks: Vec<FuncT<'a>>,
-30}
-31
-32// Struct representing the configuration for the pre-logit layer
-33struct PreLogitConfig {
-34    in_dim: (usize, usize, usize, usize),
-35    target_in: usize,
-36    target_out: usize,
-37}
-38
-39// Implementation of the VGG model
-40impl<'a> Vgg<'a> {
-41    // Function to create a new VGG model
-42    pub fn new(vb: VarBuilder<'a>, model: Models) -> Result<Self> {
-43        let blocks = match model {
-44            Models::Vgg13 => vgg13_blocks(vb)?,
-45            Models::Vgg16 => vgg16_blocks(vb)?,
-46            Models::Vgg19 => vgg19_blocks(vb)?,
-47        };
-48        Ok(Self { blocks })
-49    }
-50}
-51
-52// Implementation of the forward pass for the VGG model
-53impl ModuleT for Vgg<'_> {
-54    fn forward_t(&self, xs: &Tensor, train: bool) -> Result<Tensor> {
-55        let mut xs = xs.unsqueeze(0)?;
-56        for block in self.blocks.iter() {
-57            xs = xs.apply_t(block, train)?;
-58        }
-59        Ok(xs)
-60    }
-61}
-62
-63// Function to create a conv2d block
-64// The block is composed of two conv2d layers followed by a max pool layer
-65fn conv2d_block(convs: &[(usize, usize, &str)], vb: &VarBuilder) -> Result<FuncT<'static>> {
-66    let layers = convs
-67        .iter()
-68        .map(|&(in_c, out_c, name)| {
-69            candle_nn::conv2d(
-70                in_c,
-71                out_c,
-72                3,
-73                candle_nn::Conv2dConfig {
-74                    stride: 1,
-75                    padding: 1,
-76                    ..Default::default()
-77                },
-78                vb.pp(name),
-79            )
-80        })
-81        .collect::<Result<Vec<_>>>()?;
-82
-83    Ok(FuncT::new(move |xs, _train| {
-84        let mut xs = xs.clone();
-85        for layer in layers.iter() {
-86            xs = xs.apply(layer)?.relu()?
-87        }
-88        xs = xs.max_pool2d_with_stride(2, 2)?;
-89        Ok(xs)
-90    }))
-91}
-92
-93// Function to create a fully connected layer
-94// The layer is composed of two linear layers followed by a dropout layer
-95fn fully_connected(
-96    num_classes: usize,
-97    pre_logit_1: PreLogitConfig,
-98    pre_logit_2: PreLogitConfig,
-99    vb: VarBuilder,
-100) -> Result<FuncT> {
-101    let lin = get_weights_and_biases(
-102        &vb.pp("pre_logits.fc1"),
-103        pre_logit_1.in_dim,
-104        pre_logit_1.target_in,
-105        pre_logit_1.target_out,
-106    )?;
-107    let lin2 = get_weights_and_biases(
-108        &vb.pp("pre_logits.fc2"),
-109        pre_logit_2.in_dim,
-110        pre_logit_2.target_in,
-111        pre_logit_2.target_out,
-112    )?;
-113    let dropout1 = candle_nn::Dropout::new(0.5);
-114    let dropout2 = candle_nn::Dropout::new(0.5);
-115    let dropout3 = candle_nn::Dropout::new(0.5);
-116    Ok(FuncT::new(move |xs, train| {
-117        let xs = xs.reshape((1, pre_logit_1.target_out))?;
-118        let xs = xs.apply_t(&dropout1, train)?.apply(&lin)?.relu()?;
-119        let xs = xs.apply_t(&dropout2, train)?.apply(&lin2)?.relu()?;
-120        let lin3 = candle_nn::linear(4096, num_classes, vb.pp("head.fc"))?;
-121        let xs = xs.apply_t(&dropout3, train)?.apply(&lin3)?.relu()?;
-122        Ok(xs)
-123    }))
-124}
-125
-126// Function to get the weights and biases for a layer
-127// This is required because the weights and biases are stored in different format than our linear layer expects
-128fn get_weights_and_biases(
-129    vs: &VarBuilder,
-130    in_dim: (usize, usize, usize, usize),
-131    target_in: usize,
-132    target_out: usize,
-133) -> Result<candle_nn::Linear> {
-134    let init_ws = candle_nn::init::DEFAULT_KAIMING_NORMAL;
-135    let ws = vs.get_with_hints(in_dim, "weight", init_ws)?;
-136    let ws = ws.reshape((target_in, target_out))?;
-137    let bound = 1. / (target_out as f64).sqrt();
-138    let init_bs = candle_nn::Init::Uniform {
-139        lo: -bound,
-140        up: bound,
-141    };
-142    let bs = vs.get_with_hints(target_in, "bias", init_bs)?;
-143    Ok(candle_nn::Linear::new(ws, Some(bs)))
-144}
-145
-146fn vgg13_blocks(vb: VarBuilder) -> Result<Vec<FuncT>> {
-147    let num_classes = 1000;
-148    let blocks = vec![
-149        conv2d_block(&[(3, 64, "features.0"), (64, 64, "features.2")], &vb)?,
-150        conv2d_block(&[(64, 128, "features.5"), (128, 128, "features.7")], &vb)?,
-151        conv2d_block(&[(128, 256, "features.10"), (256, 256, "features.12")], &vb)?,
-152        conv2d_block(&[(256, 512, "features.15"), (512, 512, "features.17")], &vb)?,
-153        conv2d_block(&[(512, 512, "features.20"), (512, 512, "features.22")], &vb)?,
-154        fully_connected(
-155            num_classes,
-156            PreLogitConfig {
-157                in_dim: (4096, 512, 7, 7),
-158                target_in: 4096,
-159                target_out: 512 * 7 * 7,
-160            },
-161            PreLogitConfig {
-162                in_dim: (4096, 4096, 1, 1),
-163                target_in: 4096,
-164                target_out: 4096,
-165            },
-166            vb.clone(),
-167        )?,
-168    ];
-169    Ok(blocks)
-170}
-171
-172fn vgg16_blocks(vb: VarBuilder) -> Result<Vec<FuncT>> {
-173    let num_classes = 1000;
-174    let blocks = vec![
-175        conv2d_block(&[(3, 64, "features.0"), (64, 64, "features.2")], &vb)?,
-176        conv2d_block(&[(64, 128, "features.5"), (128, 128, "features.7")], &vb)?,
-177        conv2d_block(
-178            &[
-179                (128, 256, "features.10"),
-180                (256, 256, "features.12"),
-181                (256, 256, "features.14"),
-182            ],
-183            &vb,
-184        )?,
-185        conv2d_block(
-186            &[
-187                (256, 512, "features.17"),
-188                (512, 512, "features.19"),
-189                (512, 512, "features.21"),
-190            ],
-191            &vb,
-192        )?,
-193        conv2d_block(
-194            &[
-195                (512, 512, "features.24"),
-196                (512, 512, "features.26"),
-197                (512, 512, "features.28"),
-198            ],
-199            &vb,
-200        )?,
-201        fully_connected(
-202            num_classes,
-203            PreLogitConfig {
-204                in_dim: (4096, 512, 7, 7),
-205                target_in: 4096,
-206                target_out: 512 * 7 * 7,
-207            },
-208            PreLogitConfig {
-209                in_dim: (4096, 4096, 1, 1),
-210                target_in: 4096,
-211                target_out: 4096,
-212            },
-213            vb.clone(),
-214        )?,
-215    ];
-216    Ok(blocks)
-217}
-218
-219fn vgg19_blocks(vb: VarBuilder) -> Result<Vec<FuncT>> {
-220    let num_classes = 1000;
-221    let blocks = vec![
-222        conv2d_block(&[(3, 64, "features.0"), (64, 64, "features.2")], &vb)?,
-223        conv2d_block(&[(64, 128, "features.5"), (128, 128, "features.7")], &vb)?,
-224        conv2d_block(
-225            &[
-226                (128, 256, "features.10"),
-227                (256, 256, "features.12"),
-228                (256, 256, "features.14"),
-229                (256, 256, "features.16"),
-230            ],
-231            &vb,
-232        )?,
-233        conv2d_block(
-234            &[
-235                (256, 512, "features.19"),
-236                (512, 512, "features.21"),
-237                (512, 512, "features.23"),
-238                (512, 512, "features.25"),
-239            ],
-240            &vb,
-241        )?,
-242        conv2d_block(
-243            &[
-244                (512, 512, "features.28"),
-245                (512, 512, "features.30"),
-246                (512, 512, "features.32"),
-247                (512, 512, "features.34"),
-248            ],
-249            &vb,
-250        )?,
-251        fully_connected(
-252            num_classes,
-253            PreLogitConfig {
-254                in_dim: (4096, 512, 7, 7),
-255                target_in: 4096,
-256                target_out: 512 * 7 * 7,
-257            },
-258            PreLogitConfig {
-259                in_dim: (4096, 4096, 1, 1),
-260                target_in: 4096,
-261                target_out: 4096,
-262            },
-263            vb.clone(),
-264        )?,
-265    ];
-266    Ok(blocks)
-267}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/vit.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/vit.rs.html deleted file mode 100644 index 8c4ef44..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/vit.rs.html +++ /dev/null @@ -1,417 +0,0 @@ -vit.rs - source

candle_transformers/models/
vit.rs

1//! Vision Transformer (ViT) implementation.
-2//!
-3//! Vision Transformer applies transformer architecture to image classification
-4//! by splitting images into patches and processing them as a sequence.
-5//!
-6//! Key characteristics:
-7//! - Image patches as sequence tokens
-8//! - Self-attention between patches
-9//! - Position embeddings
-10//! - CLS token for classification
-11//! - Layer normalization
-12//!
-13//! References:
-14//! - [ViT Paper](https://arxiv.org/abs/2010.11929)
-15//! - [Model Card](https://huggingface.co/google/vit-base-patch16-224)
-16//!
-17
-18use crate::models::with_tracing::{conv2d, linear, linear_no_bias, Conv2d, Linear};
-19use candle::{IndexOp, Module, Result, Tensor, D};
-20use candle_nn::{layer_norm, LayerNorm, VarBuilder};
-21
-22// https://github.com/huggingface/transformers/blob/main/src/transformers/models/vit/configuration_vit.py
-23#[derive(Debug, Clone, serde::Deserialize)]
-24pub struct Config {
-25    pub hidden_size: usize,
-26    pub num_hidden_layers: usize,
-27    pub num_attention_heads: usize,
-28    pub intermediate_size: usize,
-29    pub hidden_act: candle_nn::Activation,
-30    pub layer_norm_eps: f64,
-31    pub image_size: usize,
-32    pub patch_size: usize,
-33    pub num_channels: usize,
-34    pub qkv_bias: bool,
-35}
-36
-37impl Config {
-38    // https://huggingface.co/google/vit-base-patch16-224/blob/main/config.json
-39    pub fn vit_base_patch16_224() -> Self {
-40        Self {
-41            hidden_size: 768,
-42            num_hidden_layers: 12,
-43            num_attention_heads: 12,
-44            intermediate_size: 3072,
-45            hidden_act: candle_nn::Activation::Gelu,
-46            layer_norm_eps: 1e-12,
-47            image_size: 224,
-48            patch_size: 16,
-49            num_channels: 3,
-50            qkv_bias: true,
-51        }
-52    }
-53
-54    pub fn microsoft_trocr_base_handwritten() -> Self {
-55        Self {
-56            hidden_size: 768,
-57            num_hidden_layers: 12,
-58            num_attention_heads: 12,
-59            intermediate_size: 3072,
-60            hidden_act: candle_nn::Activation::Gelu,
-61            layer_norm_eps: 1e-12,
-62            image_size: 384,
-63            patch_size: 16,
-64            num_channels: 3,
-65            qkv_bias: false,
-66        }
-67    }
-68}
-69
-70#[derive(Debug, Clone)]
-71struct PatchEmbeddings {
-72    num_patches: usize,
-73    projection: Conv2d,
-74}
-75
-76impl PatchEmbeddings {
-77    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-78        let image_size = cfg.image_size;
-79        let patch_size = cfg.patch_size;
-80        let num_patches = (image_size / patch_size) * (image_size / patch_size);
-81        let conv_cfg = candle_nn::Conv2dConfig {
-82            stride: patch_size,
-83            ..Default::default()
-84        };
-85        let projection = conv2d(
-86            cfg.num_channels,
-87            cfg.hidden_size,
-88            patch_size,
-89            conv_cfg,
-90            vb.pp("projection"),
-91        )?;
-92        Ok(Self {
-93            num_patches,
-94            projection,
-95        })
-96    }
-97}
-98
-99impl Module for PatchEmbeddings {
-100    fn forward(&self, pixel_values: &Tensor) -> Result<Tensor> {
-101        let (_b_size, _num_channels, _height, _width) = pixel_values.dims4()?;
-102        self.projection
-103            .forward(pixel_values)?
-104            .flatten_from(2)?
-105            .transpose(1, 2)
-106    }
-107}
-108
-109#[derive(Debug, Clone)]
-110pub struct Embeddings {
-111    cls_token: Tensor,
-112    mask_token: Option<Tensor>,
-113    patch_embeddings: PatchEmbeddings,
-114    position_embeddings: Tensor,
-115    hidden_size: usize,
-116}
-117
-118impl Embeddings {
-119    pub fn new(cfg: &Config, use_mask_token: bool, vb: VarBuilder) -> Result<Self> {
-120        let hidden_size = cfg.hidden_size;
-121        let cls_token = vb.get((1, 1, hidden_size), "cls_token")?;
-122        let mask_token = if use_mask_token {
-123            Some(vb.get((1, 1, hidden_size), "mask_token")?)
-124        } else {
-125            None
-126        };
-127        let patch_embeddings = PatchEmbeddings::new(cfg, vb.pp("patch_embeddings"))?;
-128        let num_patches = patch_embeddings.num_patches;
-129        let position_embeddings =
-130            vb.get((1, num_patches + 1, hidden_size), "position_embeddings")?;
-131        Ok(Self {
-132            cls_token,
-133            mask_token,
-134            patch_embeddings,
-135            position_embeddings,
-136            hidden_size,
-137        })
-138    }
-139
-140    fn interpolate_pos_encoding(
-141        &self,
-142        _embeddings: &Tensor,
-143        _height: usize,
-144        _width: usize,
-145    ) -> Result<Tensor> {
-146        todo!()
-147    }
-148
-149    pub fn forward(
-150        &self,
-151        pixel_values: &Tensor,
-152        bool_masked_pos: Option<&Tensor>,
-153        interpolate_pos_encoding: bool,
-154    ) -> Result<Tensor> {
-155        let (b_size, _num_channels, height, width) = pixel_values.dims4()?;
-156        let embeddings = self.patch_embeddings.forward(pixel_values)?;
-157        let embeddings = match (bool_masked_pos, &self.mask_token) {
-158            (None, _) => embeddings,
-159            (Some(_), None) => candle::bail!("bool_masked_pos set without mask_token"),
-160            (Some(bool_masked_pos), Some(mask_tokens)) => {
-161                let seq_len = embeddings.dim(1)?;
-162                let mask_tokens = mask_tokens.broadcast_as((b_size, seq_len, self.hidden_size))?;
-163                let mask = bool_masked_pos
-164                    .unsqueeze(D::Minus1)?
-165                    .to_dtype(mask_tokens.dtype())?;
-166                ((mask_tokens * &mask)? - (embeddings * (mask - 1.)?)?)?
-167            }
-168        };
-169        let cls_tokens = self.cls_token.broadcast_as((b_size, 1, self.hidden_size))?;
-170        let embeddings = Tensor::cat(&[&cls_tokens, &embeddings], 1)?;
-171        if interpolate_pos_encoding {
-172            let pos = self.interpolate_pos_encoding(&embeddings, height, width)?;
-173            embeddings.broadcast_add(&pos)
-174        } else {
-175            embeddings.broadcast_add(&self.position_embeddings)
-176        }
-177    }
-178}
-179
-180#[derive(Debug, Clone)]
-181struct SelfAttention {
-182    query: Linear,
-183    key: Linear,
-184    value: Linear,
-185    num_attention_heads: usize,
-186    attention_head_size: usize,
-187}
-188
-189impl SelfAttention {
-190    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-191        let attention_head_size = cfg.hidden_size / cfg.num_attention_heads;
-192        let num_attention_heads = cfg.num_attention_heads;
-193        let all_head_size = num_attention_heads * attention_head_size;
-194        let linear = |name| {
-195            if cfg.qkv_bias {
-196                linear(cfg.hidden_size, all_head_size, vb.pp(name))
-197            } else {
-198                linear_no_bias(cfg.hidden_size, all_head_size, vb.pp(name))
-199            }
-200        };
-201        let query = linear("query")?;
-202        let key = linear("key")?;
-203        let value = linear("value")?;
-204        Ok(Self {
-205            query,
-206            key,
-207            value,
-208            num_attention_heads,
-209            attention_head_size,
-210        })
-211    }
-212
-213    fn transpose_for_scores(&self, xs: &Tensor) -> Result<Tensor> {
-214        let (b_size, seq_len, _) = xs.dims3()?;
-215        xs.reshape((
-216            b_size,
-217            seq_len,
-218            self.num_attention_heads,
-219            self.attention_head_size,
-220        ))?
-221        .permute((0, 2, 1, 3))
-222    }
-223}
-224
-225impl Module for SelfAttention {
-226    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-227        let query = self.query.forward(xs)?;
-228        let key = self.key.forward(xs)?;
-229        let value = self.value.forward(xs)?;
-230
-231        let query = self.transpose_for_scores(&query)?.contiguous()?;
-232        let key = self.transpose_for_scores(&key)?.contiguous()?;
-233        let value = self.transpose_for_scores(&value)?.contiguous()?;
-234
-235        let attention_scores =
-236            (query.matmul(&key.t()?)? / f64::sqrt(self.attention_head_size as f64))?;
-237        let attention_probs = candle_nn::ops::softmax_last_dim(&attention_scores)?;
-238        attention_probs
-239            .matmul(&value)?
-240            .permute((0, 2, 1, 3))?
-241            .contiguous()?
-242            .flatten_from(D::Minus2)
-243    }
-244}
-245
-246#[derive(Debug, Clone)]
-247struct SelfOutput {
-248    dense: Linear,
-249}
-250
-251impl SelfOutput {
-252    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-253        let dense = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("dense"))?;
-254        Ok(Self { dense })
-255    }
-256}
-257
-258impl Module for SelfOutput {
-259    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-260        xs.apply(&self.dense)
-261    }
-262}
-263
-264#[derive(Debug, Clone)]
-265struct Attention {
-266    attention: SelfAttention,
-267    output: SelfOutput,
-268}
-269
-270impl Attention {
-271    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-272        let attention = SelfAttention::new(cfg, vb.pp("attention"))?;
-273        let output = SelfOutput::new(cfg, vb.pp("output"))?;
-274        Ok(Self { attention, output })
-275    }
-276}
-277
-278impl Module for Attention {
-279    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-280        xs.apply(&self.attention)?.apply(&self.output)
-281    }
-282}
-283
-284#[derive(Debug, Clone)]
-285struct Intermediate {
-286    dense: Linear,
-287    intermediate_act_fn: candle_nn::Activation,
-288}
-289
-290impl Intermediate {
-291    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-292        let dense = linear(cfg.hidden_size, cfg.intermediate_size, vb.pp("dense"))?;
-293        Ok(Self {
-294            dense,
-295            intermediate_act_fn: cfg.hidden_act,
-296        })
-297    }
-298}
-299
-300impl Module for Intermediate {
-301    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-302        xs.apply(&self.dense)?.apply(&self.intermediate_act_fn)
-303    }
-304}
-305
-306#[derive(Debug, Clone)]
-307struct Output {
-308    dense: Linear,
-309}
-310
-311impl Output {
-312    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-313        let dense = linear(cfg.intermediate_size, cfg.hidden_size, vb.pp("dense"))?;
-314        Ok(Self { dense })
-315    }
-316
-317    fn forward(&self, xs: &Tensor, input_tensor: &Tensor) -> Result<Tensor> {
-318        xs.apply(&self.dense)? + input_tensor
-319    }
-320}
-321
-322#[derive(Debug, Clone)]
-323struct Layer {
-324    attention: Attention,
-325    intermediate: Intermediate,
-326    output: Output,
-327    layernorm_before: LayerNorm,
-328    layernorm_after: LayerNorm,
-329}
-330
-331impl Layer {
-332    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-333        let attention = Attention::new(cfg, vb.pp("attention"))?;
-334        let intermediate = Intermediate::new(cfg, vb.pp("intermediate"))?;
-335        let output = Output::new(cfg, vb.pp("output"))?;
-336        let h_sz = cfg.hidden_size;
-337        let layernorm_before = layer_norm(h_sz, cfg.layer_norm_eps, vb.pp("layernorm_before"))?;
-338        let layernorm_after = layer_norm(h_sz, cfg.layer_norm_eps, vb.pp("layernorm_after"))?;
-339        Ok(Self {
-340            attention,
-341            intermediate,
-342            output,
-343            layernorm_after,
-344            layernorm_before,
-345        })
-346    }
-347}
-348
-349impl Module for Layer {
-350    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-351        let xs = (xs.apply(&self.layernorm_before)?.apply(&self.attention)? + xs)?;
-352        let ys = xs.apply(&self.layernorm_after)?.apply(&self.intermediate)?;
-353        self.output.forward(&ys, &xs)
-354    }
-355}
-356
-357#[derive(Debug, Clone)]
-358pub struct Encoder {
-359    layers: Vec<Layer>,
-360}
-361
-362impl Encoder {
-363    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-364        let vb = vb.pp("layer");
-365        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-366        for i in 0..cfg.num_hidden_layers {
-367            let layer = Layer::new(cfg, vb.pp(i))?;
-368            layers.push(layer)
-369        }
-370        Ok(Self { layers })
-371    }
-372}
-373
-374impl Module for Encoder {
-375    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-376        let mut xs = xs.clone();
-377        for layer in self.layers.iter() {
-378            xs = xs.apply(layer)?
-379        }
-380        Ok(xs)
-381    }
-382}
-383
-384#[derive(Debug, Clone)]
-385pub struct Model {
-386    embeddings: Embeddings,
-387    encoder: Encoder,
-388    layernorm: LayerNorm,
-389    // no need for pooling layer for image classification
-390    classifier: Linear,
-391}
-392
-393impl Model {
-394    pub fn new(cfg: &Config, num_labels: usize, vb: VarBuilder) -> Result<Self> {
-395        let vb_v = vb.pp("vit");
-396        let embeddings = Embeddings::new(cfg, false, vb_v.pp("embeddings"))?;
-397        let encoder = Encoder::new(cfg, vb_v.pp("encoder"))?;
-398        let layernorm = layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb_v.pp("layernorm"))?;
-399        let classifier = linear(cfg.hidden_size, num_labels, vb.pp("classifier"))?;
-400        Ok(Self {
-401            embeddings,
-402            encoder,
-403            layernorm,
-404            classifier,
-405        })
-406    }
-407
-408    pub fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-409        let embedding_output = self.embeddings.forward(xs, None, false)?;
-410        let encoder_outputs = self.encoder.forward(&embedding_output)?;
-411        encoder_outputs
-412            .i((.., 0, ..))?
-413            .apply(&self.layernorm)?
-414            .apply(&self.classifier)
-415    }
-416}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/whisper/audio.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/whisper/audio.rs.html deleted file mode 100644 index 955d4a1..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/whisper/audio.rs.html +++ /dev/null @@ -1,337 +0,0 @@ -audio.rs - source

candle_transformers/models/whisper/
audio.rs

1// Audio processing code, adapted from whisper.cpp
-2// https://github.com/ggerganov/whisper.cpp
-3
-4use candle::utils::get_num_threads;
-5use std::sync::Arc;
-6use std::thread;
-7
-8pub trait Float:
-9    num_traits::Float + num_traits::FloatConst + num_traits::NumAssign + Send + Sync
-10{
-11}
-12
-13impl Float for f32 {}
-14impl Float for f64 {}
-15
-16// https://github.com/ggerganov/whisper.cpp/blob/4774d2feb01a772a15de81ffc34b34a1f294f020/whisper.cpp#L2357
-17fn fft<T: Float>(inp: &[T]) -> Vec<T> {
-18    let n = inp.len();
-19    let zero = T::zero();
-20    if n == 1 {
-21        return vec![inp[0], zero];
-22    }
-23    if n % 2 == 1 {
-24        return dft(inp);
-25    }
-26    let mut out = vec![zero; n * 2];
-27
-28    let mut even = Vec::with_capacity(n / 2);
-29    let mut odd = Vec::with_capacity(n / 2);
-30
-31    for (i, &inp) in inp.iter().enumerate() {
-32        if i % 2 == 0 {
-33            even.push(inp)
-34        } else {
-35            odd.push(inp);
-36        }
-37    }
-38
-39    let even_fft = fft(&even);
-40    let odd_fft = fft(&odd);
-41
-42    let two_pi = T::PI() + T::PI();
-43    let n_t = T::from(n).unwrap();
-44    for k in 0..n / 2 {
-45        let k_t = T::from(k).unwrap();
-46        let theta = two_pi * k_t / n_t;
-47        let re = theta.cos();
-48        let im = -theta.sin();
-49
-50        let re_odd = odd_fft[2 * k];
-51        let im_odd = odd_fft[2 * k + 1];
-52
-53        out[2 * k] = even_fft[2 * k] + re * re_odd - im * im_odd;
-54        out[2 * k + 1] = even_fft[2 * k + 1] + re * im_odd + im * re_odd;
-55
-56        out[2 * (k + n / 2)] = even_fft[2 * k] - re * re_odd + im * im_odd;
-57        out[2 * (k + n / 2) + 1] = even_fft[2 * k + 1] - re * im_odd - im * re_odd;
-58    }
-59    out
-60}
-61
-62// https://github.com/ggerganov/whisper.cpp/blob/4774d2feb01a772a15de81ffc34b34a1f294f020/whisper.cpp#L2337
-63fn dft<T: Float>(inp: &[T]) -> Vec<T> {
-64    let zero = T::zero();
-65    let n = inp.len();
-66    let two_pi = T::PI() + T::PI();
-67
-68    let mut out = Vec::with_capacity(2 * n);
-69    let n_t = T::from(n).unwrap();
-70    for k in 0..n {
-71        let k_t = T::from(k).unwrap();
-72        let mut re = zero;
-73        let mut im = zero;
-74
-75        for (j, &inp) in inp.iter().enumerate() {
-76            let j_t = T::from(j).unwrap();
-77            let angle = two_pi * k_t * j_t / n_t;
-78            re += inp * angle.cos();
-79            im -= inp * angle.sin();
-80        }
-81
-82        out.push(re);
-83        out.push(im);
-84    }
-85    out
-86}
-87
-88#[allow(clippy::too_many_arguments)]
-89// https://github.com/ggerganov/whisper.cpp/blob/4774d2feb01a772a15de81ffc34b34a1f294f020/whisper.cpp#L2414
-90fn log_mel_spectrogram_w<T: Float>(
-91    ith: usize,
-92    hann: &[T],
-93    samples: &[T],
-94    filters: &[T],
-95    fft_size: usize,
-96    fft_step: usize,
-97    speed_up: bool,
-98    n_len: usize,
-99    n_mel: usize,
-100    n_threads: usize,
-101) -> Vec<T> {
-102    let n_fft = if speed_up {
-103        1 + fft_size / 4
-104    } else {
-105        1 + fft_size / 2
-106    };
-107
-108    let zero = T::zero();
-109    let half = T::from(0.5).unwrap();
-110    let mut fft_in = vec![zero; fft_size];
-111    let mut mel = vec![zero; n_len * n_mel];
-112    let n_samples = samples.len();
-113    let end = std::cmp::min(n_samples / fft_step + 1, n_len);
-114
-115    for i in (ith..end).step_by(n_threads) {
-116        let offset = i * fft_step;
-117
-118        // apply Hanning window
-119        for j in 0..std::cmp::min(fft_size, n_samples - offset) {
-120            fft_in[j] = hann[j] * samples[offset + j];
-121        }
-122
-123        // fill the rest with zeros
-124        if n_samples - offset < fft_size {
-125            fft_in[n_samples - offset..].fill(zero);
-126        }
-127
-128        // FFT
-129        let mut fft_out: Vec<T> = fft(&fft_in);
-130
-131        // Calculate modulus^2 of complex numbers
-132        for j in 0..fft_size {
-133            fft_out[j] = fft_out[2 * j] * fft_out[2 * j] + fft_out[2 * j + 1] * fft_out[2 * j + 1];
-134        }
-135        for j in 1..fft_size / 2 {
-136            let v = fft_out[fft_size - j];
-137            fft_out[j] += v;
-138        }
-139
-140        if speed_up {
-141            // scale down in the frequency domain results in a speed up in the time domain
-142            for j in 0..n_fft {
-143                fft_out[j] = half * (fft_out[2 * j] + fft_out[2 * j + 1]);
-144            }
-145        }
-146
-147        // mel spectrogram
-148        for j in 0..n_mel {
-149            let mut sum = zero;
-150            let mut k = 0;
-151            // Unroll loop
-152            while k < n_fft.saturating_sub(3) {
-153                sum += fft_out[k] * filters[j * n_fft + k]
-154                    + fft_out[k + 1] * filters[j * n_fft + k + 1]
-155                    + fft_out[k + 2] * filters[j * n_fft + k + 2]
-156                    + fft_out[k + 3] * filters[j * n_fft + k + 3];
-157                k += 4;
-158            }
-159            // Handle remainder
-160            while k < n_fft {
-161                sum += fft_out[k] * filters[j * n_fft + k];
-162                k += 1;
-163            }
-164            mel[j * n_len + i] = T::max(sum, T::from(1e-10).unwrap()).log10();
-165        }
-166    }
-167    mel
-168}
-169
-170pub fn log_mel_spectrogram_<T: Float>(
-171    samples: &[T],
-172    filters: &[T],
-173    fft_size: usize,
-174    fft_step: usize,
-175    n_mel: usize,
-176    speed_up: bool,
-177) -> Vec<T> {
-178    let zero = T::zero();
-179    let two_pi = T::PI() + T::PI();
-180    let half = T::from(0.5).unwrap();
-181    let one = T::from(1.0).unwrap();
-182    let four = T::from(4.0).unwrap();
-183    let fft_size_t = T::from(fft_size).unwrap();
-184
-185    let hann: Vec<T> = (0..fft_size)
-186        .map(|i| half * (one - ((two_pi * T::from(i).unwrap()) / fft_size_t).cos()))
-187        .collect();
-188    let n_len = samples.len() / fft_step;
-189
-190    // pad audio with at least one extra chunk of zeros
-191    let pad = 100 * super::CHUNK_LENGTH / 2;
-192    let n_len = if n_len % pad != 0 {
-193        (n_len / pad + 1) * pad
-194    } else {
-195        n_len
-196    };
-197    let n_len = n_len + pad;
-198    let samples = {
-199        let mut samples_padded = samples.to_vec();
-200        let to_add = n_len * fft_step - samples.len();
-201        samples_padded.extend(std::iter::repeat(zero).take(to_add));
-202        samples_padded
-203    };
-204
-205    // ensure that the number of threads is even and less than 12
-206    let n_threads = std::cmp::min(get_num_threads() - get_num_threads() % 2, 12);
-207    let n_threads = std::cmp::max(n_threads, 2);
-208
-209    let hann = Arc::new(hann);
-210    let samples = Arc::new(samples);
-211    let filters = Arc::new(filters);
-212
-213    // use scope to allow for non static references to be passed to the threads
-214    // and directly collect the results into a single vector
-215    let all_outputs = thread::scope(|s| {
-216        (0..n_threads)
-217            // create threads and return their handles
-218            .map(|thread_id| {
-219                let hann = Arc::clone(&hann);
-220                let samples = Arc::clone(&samples);
-221                let filters = Arc::clone(&filters);
-222                // spawn new thread and start work
-223                s.spawn(move || {
-224                    log_mel_spectrogram_w(
-225                        thread_id, &hann, &samples, &filters, fft_size, fft_step, speed_up, n_len,
-226                        n_mel, n_threads,
-227                    )
-228                })
-229            })
-230            .collect::<Vec<_>>()
-231            .into_iter()
-232            // wait for each thread to finish and collect their results
-233            .map(|handle| handle.join().expect("Thread failed"))
-234            .collect::<Vec<_>>()
-235    });
-236
-237    let l = all_outputs[0].len();
-238    let mut mel = vec![zero; l];
-239
-240    // iterate over mel spectrogram segments, dividing work by threads.
-241    for segment_start in (0..l).step_by(n_threads) {
-242        // go through each thread's output.
-243        for thread_output in all_outputs.iter() {
-244            // add each thread's piece to our mel spectrogram.
-245            for offset in 0..n_threads {
-246                let mel_index = segment_start + offset; // find location in mel.
-247                if mel_index < mel.len() {
-248                    // Make sure we don't go out of bounds.
-249                    mel[mel_index] += thread_output[mel_index];
-250                }
-251            }
-252        }
-253    }
-254
-255    let mmax = mel
-256        .iter()
-257        .max_by(|&u, &v| u.partial_cmp(v).unwrap_or(std::cmp::Ordering::Greater))
-258        .copied()
-259        .unwrap_or(zero)
-260        - T::from(8).unwrap();
-261    for m in mel.iter_mut() {
-262        let v = T::max(*m, mmax);
-263        *m = v / four + one
-264    }
-265    mel
-266}
-267
-268pub fn pcm_to_mel<T: Float>(cfg: &super::Config, samples: &[T], filters: &[T]) -> Vec<T> {
-269    log_mel_spectrogram_(
-270        samples,
-271        filters,
-272        super::N_FFT,
-273        super::HOP_LENGTH,
-274        cfg.num_mel_bins,
-275        false,
-276    )
-277}
-278
-279#[cfg(test)]
-280mod tests {
-281    use super::*;
-282
-283    #[test]
-284    fn test_fft() {
-285        let input = vec![0.0, 1.0, 0.0, 0.0];
-286        let output = fft(&input);
-287        assert_eq!(
-288            output,
-289            vec![
-290                1.0,
-291                0.0,
-292                6.123233995736766e-17,
-293                -1.0,
-294                -1.0,
-295                0.0,
-296                -6.123233995736766e-17,
-297                1.0
-298            ]
-299        );
-300    }
-301
-302    #[test]
-303    fn test_dft() {
-304        let input = vec![0.0, 1.0, 0.0, 0.0];
-305        let output = dft(&input);
-306        assert_eq!(
-307            output,
-308            vec![
-309                1.0,
-310                0.0,
-311                6.123233995736766e-17,
-312                -1.0,
-313                -1.0,
-314                -1.2246467991473532e-16,
-315                -1.8369701987210297e-16,
-316                1.0
-317            ]
-318        );
-319    }
-320
-321    #[test]
-322    fn test_log_mel_spectrogram() {
-323        let samples = vec![0.0; 1000];
-324        let filters = vec![0.0; 1000];
-325        let output = log_mel_spectrogram_(&samples, &filters, 100, 10, 10, false);
-326        assert_eq!(output.len(), 30_000);
-327    }
-328
-329    #[test]
-330    fn test_tiny_log_mel_spectrogram() {
-331        let samples = vec![0.0; 100];
-332        let filters = vec![0.0; 100];
-333        let output = log_mel_spectrogram_(&samples, &filters, 20, 2, 2, false);
-334        assert_eq!(output.len(), 6_000);
-335    }
-336}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/whisper/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/whisper/mod.rs.html deleted file mode 100644 index 72eb1ef..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/whisper/mod.rs.html +++ /dev/null @@ -1,59 +0,0 @@ -mod.rs - source

candle_transformers/models/whisper/
mod.rs

1//! Whisper Model Implementation
-2//!
-3//! Whisper is an automatic speech recognition (ASR) system trained on large amounts
-4//! of multilingual and multitask supervised data collected from the web. It can be used to
-5//! convert audio files (in the `.wav` format) to text. Supported features include
-6//! language detection as well as multilingual speech recognition.
-7//!
-8//! - ⚡ [Interactive Wasm Example](https://huggingface.co/spaces/lmz/candle-whisper)
-9//! - 💻 [GH Link](https://github.com/openai/whisper)
-10//! - 💻 Transformers Python [reference implementation](https://github.com/huggingface/transformers/blob/main/src/transformers/models/whisper/modeling_whisper.py)
-11//!
-12//!
-13pub mod audio;
-14pub mod model;
-15pub mod quantized_model;
-16
-17use serde::Deserialize;
-18
-19// The names in comments correspond to the original implementation:
-20// https://github.com/openai/whisper/blob/f572f2161ba831bae131364c3bffdead7af6d210/whisper/model.py#L17
-21#[derive(Debug, Clone, PartialEq, Deserialize)]
-22pub struct Config {
-23    pub num_mel_bins: usize,            // n_mels
-24    pub max_source_positions: usize,    // n_audio_ctx
-25    pub d_model: usize,                 // n_audio_state
-26    pub encoder_attention_heads: usize, // n_audio_head
-27    pub encoder_layers: usize,          // n_audio_layer
-28    pub vocab_size: usize,              // n_vocab
-29    pub max_target_positions: usize,    //  n_text_ctx
-30    // pub n_text_state: usize,
-31    pub decoder_attention_heads: usize, // n_text_head
-32    pub decoder_layers: usize,          // n_text_layer
-33    #[serde(default)]
-34    pub suppress_tokens: Vec<u32>,
-35}
-36
-37pub const DTYPE: candle::DType = candle::DType::F32;
-38
-39// Audio parameters.
-40pub const SAMPLE_RATE: usize = 16000;
-41pub const N_FFT: usize = 400;
-42pub const HOP_LENGTH: usize = 160;
-43pub const CHUNK_LENGTH: usize = 30;
-44pub const N_SAMPLES: usize = CHUNK_LENGTH * SAMPLE_RATE; // 480000 samples in a 30-second chunk
-45pub const N_FRAMES: usize = N_SAMPLES / HOP_LENGTH; // 3000 frames in a mel spectrogram input
-46
-47pub const NO_SPEECH_THRESHOLD: f64 = 0.6;
-48pub const LOGPROB_THRESHOLD: f64 = -1.0;
-49pub const TEMPERATURES: [f64; 6] = [0.0, 0.2, 0.4, 0.6, 0.8, 1.0];
-50pub const COMPRESSION_RATIO_THRESHOLD: f64 = 2.4;
-51
-52// Tokenizer dependent bits.
-53pub const SOT_TOKEN: &str = "<|startoftranscript|>";
-54pub const TRANSCRIBE_TOKEN: &str = "<|transcribe|>";
-55pub const TRANSLATE_TOKEN: &str = "<|translate|>";
-56pub const NO_TIMESTAMPS_TOKEN: &str = "<|notimestamps|>";
-57pub const EOT_TOKEN: &str = "<|endoftext|>";
-58pub const NO_SPEECH_TOKENS: [&str; 2] = ["<|nocaptions|>", "<|nospeech|>"];
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/whisper/model.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/whisper/model.rs.html deleted file mode 100644 index 1cd9c15..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/whisper/model.rs.html +++ /dev/null @@ -1,399 +0,0 @@ -model.rs - source

candle_transformers/models/whisper/
model.rs

1use super::Config;
-2use crate::models::with_tracing::{linear, linear_no_bias, Linear};
-3use candle::{Device, IndexOp, Result, Tensor, D};
-4use candle_nn::{embedding, Conv1d, Conv1dConfig, Embedding, LayerNorm, Module, VarBuilder};
-5
-6fn conv1d(
-7    in_channels: usize,
-8    out_channels: usize,
-9    kernel_size: usize,
-10    config: Conv1dConfig,
-11    vb: VarBuilder,
-12) -> Result<Conv1d> {
-13    let weight = vb.get((out_channels, in_channels, kernel_size), "weight")?;
-14    let bias = vb.get(out_channels, "bias")?;
-15    Ok(Conv1d::new(weight, Some(bias), config))
-16}
-17
-18fn layer_norm(size: usize, vb: VarBuilder) -> Result<LayerNorm> {
-19    let weight = vb.get(size, "weight")?;
-20    let bias = vb.get(size, "bias")?;
-21    Ok(LayerNorm::new(weight, bias, 1e-5))
-22}
-23
-24// https://github.com/openai/whisper/blob/f572f2161ba831bae131364c3bffdead7af6d210/whisper/model.py#L62
-25#[derive(Debug, Clone)]
-26struct MultiHeadAttention {
-27    query: Linear,
-28    key: Linear,
-29    value: Linear,
-30    out: Linear,
-31    n_head: usize,
-32    span: tracing::Span,
-33    softmax_span: tracing::Span,
-34    matmul_span: tracing::Span,
-35    kv_cache: Option<(Tensor, Tensor)>,
-36}
-37
-38impl MultiHeadAttention {
-39    fn load(n_state: usize, n_head: usize, vb: VarBuilder) -> Result<Self> {
-40        let span = tracing::span!(tracing::Level::TRACE, "multi-head-attn");
-41        let softmax_span = tracing::span!(tracing::Level::TRACE, "multi-head-attn-softmax");
-42        let matmul_span = tracing::span!(tracing::Level::TRACE, "multi-head-attn-matmul");
-43        let query = linear(n_state, n_state, vb.pp("q_proj"))?;
-44        let value = linear(n_state, n_state, vb.pp("v_proj"))?;
-45        let key = linear_no_bias(n_state, n_state, vb.pp("k_proj"))?;
-46        let out = linear(n_state, n_state, vb.pp("out_proj"))?;
-47        Ok(Self {
-48            query,
-49            key,
-50            value,
-51            out,
-52            n_head,
-53            span,
-54            softmax_span,
-55            matmul_span,
-56            kv_cache: None,
-57        })
-58    }
-59
-60    fn forward(
-61        &mut self,
-62        x: &Tensor,
-63        xa: Option<&Tensor>,
-64        mask: Option<&Tensor>,
-65        flush_cache: bool,
-66    ) -> Result<Tensor> {
-67        let _enter = self.span.enter();
-68        let q = self.query.forward(x)?;
-69        let (k, v) = match xa {
-70            None => {
-71                let k = self.key.forward(x)?;
-72                let v = self.value.forward(x)?;
-73                (k, v)
-74            }
-75            Some(x) => {
-76                if flush_cache {
-77                    self.kv_cache = None;
-78                }
-79                if let Some((k, v)) = &self.kv_cache {
-80                    (k.clone(), v.clone())
-81                } else {
-82                    let k = self.key.forward(x)?;
-83                    let v = self.value.forward(x)?;
-84                    self.kv_cache = Some((k.clone(), v.clone()));
-85                    (k, v)
-86                }
-87            }
-88        };
-89        let wv = self.qkv_attention(&q, &k, &v, mask)?;
-90        let out = self.out.forward(&wv)?;
-91        Ok(out)
-92    }
-93
-94    fn reshape_head(&self, x: &Tensor) -> Result<Tensor> {
-95        let (n_batch, n_ctx, n_state) = x.dims3()?;
-96        let target_dims = &[n_batch, n_ctx, self.n_head, n_state / self.n_head];
-97        x.reshape(target_dims)?.transpose(1, 2)
-98    }
-99
-100    fn qkv_attention(
-101        &self,
-102        q: &Tensor,
-103        k: &Tensor,
-104        v: &Tensor,
-105        mask: Option<&Tensor>,
-106    ) -> Result<Tensor> {
-107        let (_, n_ctx, n_state) = q.dims3()?;
-108        let scale = ((n_state / self.n_head) as f64).powf(-0.25);
-109        let q = (self.reshape_head(q)? * scale)?;
-110        let k = (self.reshape_head(k)?.transpose(2, 3)? * scale)?;
-111        let v = self.reshape_head(v)?.contiguous()?;
-112        let mut qk = {
-113            let _enter = self.matmul_span.enter();
-114            q.matmul(&k)?
-115        };
-116        if let Some(mask) = mask {
-117            let mask = mask.i((0..n_ctx, 0..n_ctx))?;
-118            qk = qk.broadcast_add(&mask)?
-119        }
-120        let w = {
-121            let _enter = self.softmax_span.enter();
-122            candle_nn::ops::softmax_last_dim(&qk)?
-123        };
-124        let wv = {
-125            let _enter = self.matmul_span.enter();
-126            w.matmul(&v)?
-127        }
-128        .transpose(1, 2)?
-129        .flatten_from(2)?;
-130        Ok(wv)
-131    }
-132
-133    fn reset_kv_cache(&mut self) {
-134        self.kv_cache = None;
-135    }
-136}
-137
-138// https://github.com/openai/whisper/blob/f572f2161ba831bae131364c3bffdead7af6d210/whisper/model.py#L111
-139#[derive(Debug, Clone)]
-140struct ResidualAttentionBlock {
-141    attn: MultiHeadAttention,
-142    attn_ln: LayerNorm,
-143    cross_attn: Option<(MultiHeadAttention, LayerNorm)>,
-144    mlp_linear1: Linear,
-145    mlp_linear2: Linear,
-146    mlp_ln: LayerNorm,
-147    span: tracing::Span,
-148}
-149
-150impl ResidualAttentionBlock {
-151    fn load(n_state: usize, n_head: usize, ca: bool, vb: VarBuilder) -> Result<Self> {
-152        let span = tracing::span!(tracing::Level::TRACE, "residual-attn");
-153        let attn = MultiHeadAttention::load(n_state, n_head, vb.pp("self_attn"))?;
-154        let attn_ln = layer_norm(n_state, vb.pp("self_attn_layer_norm"))?;
-155        let cross_attn = if ca {
-156            let cross_attn = MultiHeadAttention::load(n_state, n_head, vb.pp("encoder_attn"))?;
-157            let cross_attn_ln = layer_norm(n_state, vb.pp("encoder_attn_layer_norm"))?;
-158            Some((cross_attn, cross_attn_ln))
-159        } else {
-160            None
-161        };
-162        let n_mlp = n_state * 4;
-163        let mlp_linear1 = linear(n_state, n_mlp, vb.pp("fc1"))?;
-164        let mlp_linear2 = linear(n_mlp, n_state, vb.pp("fc2"))?;
-165        let mlp_ln = layer_norm(n_state, vb.pp("final_layer_norm"))?;
-166        Ok(Self {
-167            attn,
-168            attn_ln,
-169            cross_attn,
-170            mlp_linear1,
-171            mlp_linear2,
-172            mlp_ln,
-173            span,
-174        })
-175    }
-176
-177    fn forward(
-178        &mut self,
-179        x: &Tensor,
-180        xa: Option<&Tensor>,
-181        mask: Option<&Tensor>,
-182        flush_kv_cache: bool,
-183    ) -> Result<Tensor> {
-184        let _enter = self.span.enter();
-185        let attn = self
-186            .attn
-187            .forward(&self.attn_ln.forward(x)?, None, mask, flush_kv_cache)?;
-188        let mut x = (x + attn)?;
-189        if let Some((attn, ln)) = &mut self.cross_attn {
-190            x = (&x + attn.forward(&ln.forward(&x)?, xa, None, flush_kv_cache)?)?;
-191        }
-192        let mlp = self.mlp_linear2.forward(
-193            &self
-194                .mlp_linear1
-195                .forward(&self.mlp_ln.forward(&x)?)?
-196                .gelu()?,
-197        )?;
-198        x + mlp
-199    }
-200
-201    fn reset_kv_cache(&mut self) {
-202        self.attn.reset_kv_cache();
-203        if let Some((attn, _)) = &mut self.cross_attn {
-204            attn.reset_kv_cache();
-205        }
-206    }
-207}
-208
-209fn sinusoids(length: usize, channels: usize, device: &Device) -> Result<Tensor> {
-210    let max_timescale = 10000f32;
-211    let log_timescale_increment = max_timescale.ln() / (channels / 2 - 1) as f32;
-212    let inv_timescales: Vec<_> = (0..channels / 2)
-213        .map(|i| (i as f32 * (-log_timescale_increment)).exp())
-214        .collect();
-215    let inv_timescales = Tensor::new(inv_timescales.as_slice(), device)?.unsqueeze(0)?;
-216    let arange = Tensor::arange(0, length as u32, device)?
-217        .to_dtype(candle::DType::F32)?
-218        .unsqueeze(1)?;
-219    let sh = (length, channels / 2);
-220    let scaled_time = (arange.broadcast_as(sh)? * inv_timescales.broadcast_as(sh)?)?;
-221    let sincos = Tensor::cat(&[scaled_time.sin()?, scaled_time.cos()?], 1)?;
-222    Ok(sincos)
-223}
-224
-225// https://github.com/openai/whisper/blob/f572f2161ba831bae131364c3bffdead7af6d210/whisper/model.py#L143
-226#[derive(Debug, Clone)]
-227pub struct AudioEncoder {
-228    conv1: Conv1d,
-229    conv2: Conv1d,
-230    positional_embedding: Tensor,
-231    blocks: Vec<ResidualAttentionBlock>,
-232    ln_post: LayerNorm,
-233    span: tracing::Span,
-234    conv1_span: tracing::Span,
-235    conv2_span: tracing::Span,
-236}
-237
-238impl AudioEncoder {
-239    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-240        let span = tracing::span!(tracing::Level::TRACE, "audio-encoder");
-241        let conv1_span = tracing::span!(tracing::Level::TRACE, "conv1");
-242        let conv2_span = tracing::span!(tracing::Level::TRACE, "conv2");
-243        let n_state = cfg.d_model;
-244        let n_head = cfg.encoder_attention_heads;
-245        let n_ctx = cfg.max_source_positions;
-246        let cfg1 = Conv1dConfig {
-247            padding: 1,
-248            stride: 1,
-249            groups: 1,
-250            dilation: 1,
-251        };
-252        let cfg2 = Conv1dConfig {
-253            padding: 1,
-254            stride: 2,
-255            groups: 1,
-256            dilation: 1,
-257        };
-258        let conv1 = conv1d(cfg.num_mel_bins, n_state, 3, cfg1, vb.pp("conv1"))?;
-259        let conv2 = conv1d(n_state, n_state, 3, cfg2, vb.pp("conv2"))?;
-260        let positional_embedding = sinusoids(n_ctx, n_state, vb.device())?;
-261        let blocks = (0..cfg.encoder_layers)
-262            .map(|i| {
-263                ResidualAttentionBlock::load(n_state, n_head, false, vb.pp(format!("layers.{i}")))
-264            })
-265            .collect::<Result<Vec<_>>>()?;
-266        let ln_post = layer_norm(n_state, vb.pp("layer_norm"))?;
-267        Ok(Self {
-268            conv1,
-269            conv2,
-270            positional_embedding,
-271            blocks,
-272            ln_post,
-273            conv1_span,
-274            conv2_span,
-275            span,
-276        })
-277    }
-278
-279    pub fn forward(&mut self, x: &Tensor, flush_kv_cache: bool) -> Result<Tensor> {
-280        let _enter = self.span.enter();
-281        let x = {
-282            let _enter = self.conv1_span.enter();
-283            self.conv1.forward(x)?.gelu()?
-284        };
-285        let x = {
-286            let _enter = self.conv2_span.enter();
-287            self.conv2.forward(&x)?.gelu()?
-288        };
-289        let x = x.transpose(1, 2)?;
-290        let (_bsize, seq_len, _hidden) = x.dims3()?;
-291        let positional_embedding = self.positional_embedding.narrow(0, 0, seq_len)?;
-292        let mut x = x.broadcast_add(&positional_embedding)?;
-293        for block in self.blocks.iter_mut() {
-294            x = block.forward(&x, None, None, flush_kv_cache)?
-295        }
-296        let x = self.ln_post.forward(&x)?;
-297        Ok(x)
-298    }
-299}
-300
-301// https://github.com/openai/whisper/blob/f572f2161ba831bae131364c3bffdead7af6d210/whisper/model.py#L176
-302#[derive(Debug, Clone)]
-303pub struct TextDecoder {
-304    token_embedding: Embedding,
-305    positional_embedding: Tensor,
-306    blocks: Vec<ResidualAttentionBlock>,
-307    ln: LayerNorm,
-308    mask: Tensor,
-309    span: tracing::Span,
-310    span_final: tracing::Span,
-311}
-312
-313impl TextDecoder {
-314    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-315        let span = tracing::span!(tracing::Level::TRACE, "text-decoder");
-316        let span_final = tracing::span!(tracing::Level::TRACE, "text-decoder-final");
-317        let n_state = cfg.d_model;
-318        let n_head = cfg.decoder_attention_heads;
-319        let n_ctx = cfg.max_target_positions;
-320        let token_embedding = embedding(cfg.vocab_size, n_state, vb.pp("embed_tokens"))?;
-321        let positional_embedding = vb.get((n_ctx, n_state), "embed_positions.weight")?;
-322        let blocks = (0..cfg.decoder_layers)
-323            .map(|i| {
-324                ResidualAttentionBlock::load(n_state, n_head, true, vb.pp(format!("layers.{i}")))
-325            })
-326            .collect::<Result<Vec<_>>>()?;
-327        let ln = layer_norm(n_state, vb.pp("layer_norm"))?;
-328        let mask: Vec<_> = (0..n_ctx)
-329            .flat_map(|i| (0..n_ctx).map(move |j| if j > i { f32::NEG_INFINITY } else { 0f32 }))
-330            .collect();
-331        let mask = Tensor::from_vec(mask, (n_ctx, n_ctx), vb.device())?;
-332        Ok(Self {
-333            token_embedding,
-334            positional_embedding,
-335            blocks,
-336            ln,
-337            mask,
-338            span,
-339            span_final,
-340        })
-341    }
-342
-343    pub fn forward(&mut self, x: &Tensor, xa: &Tensor, flush_kv_cache: bool) -> Result<Tensor> {
-344        let _enter = self.span.enter();
-345        let last = x.dim(D::Minus1)?;
-346        let token_embedding = self.token_embedding.forward(x)?;
-347        let positional_embedding = self.positional_embedding.narrow(0, 0, last)?;
-348        let mut x = token_embedding.broadcast_add(&positional_embedding)?;
-349        for block in self.blocks.iter_mut() {
-350            x = block.forward(&x, Some(xa), Some(&self.mask), flush_kv_cache)?;
-351        }
-352        self.ln.forward(&x)
-353    }
-354
-355    pub fn final_linear(&self, x: &Tensor) -> Result<Tensor> {
-356        let b_size = x.dim(0)?;
-357        let w = self.token_embedding.embeddings().broadcast_left(b_size)?;
-358        let logits = {
-359            let _enter = self.span_final.enter();
-360            x.matmul(&w.t()?)?
-361        };
-362        Ok(logits)
-363    }
-364
-365    pub fn reset_kv_cache(&mut self) {
-366        for block in self.blocks.iter_mut() {
-367            block.reset_kv_cache();
-368        }
-369    }
-370}
-371
-372// https://github.com/openai/whisper/blob/f572f2161ba831bae131364c3bffdead7af6d210/whisper/model.py#L221
-373#[derive(Debug, Clone)]
-374pub struct Whisper {
-375    pub encoder: AudioEncoder,
-376    pub decoder: TextDecoder,
-377    pub config: Config,
-378}
-379
-380impl Whisper {
-381    pub fn load(vb: &VarBuilder, config: Config) -> Result<Self> {
-382        let encoder = AudioEncoder::load(vb.pp("model.encoder"), &config)?;
-383        let decoder = TextDecoder::load(vb.pp("model.decoder"), &config)?;
-384        Ok(Self {
-385            encoder,
-386            decoder,
-387            config,
-388        })
-389    }
-390
-391    pub fn reset_kv_cache(&mut self) {
-392        self.encoder
-393            .blocks
-394            .iter_mut()
-395            .for_each(|b| b.reset_kv_cache());
-396        self.decoder.reset_kv_cache();
-397    }
-398}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/whisper/quantized_model.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/whisper/quantized_model.rs.html deleted file mode 100644 index b10184d..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/whisper/quantized_model.rs.html +++ /dev/null @@ -1,400 +0,0 @@ -quantized_model.rs - source

candle_transformers/models/whisper/
quantized_model.rs

1use super::Config;
-2use crate::quantized_nn::{layer_norm, linear, linear_no_bias, Embedding, Linear};
-3pub use crate::quantized_var_builder::VarBuilder;
-4use candle::{Device, IndexOp, Result, Tensor, D};
-5use candle_nn::{Conv1d, Conv1dConfig, LayerNorm, Module};
-6
-7fn conv1d(
-8    in_channels: usize,
-9    out_channels: usize,
-10    kernel_size: usize,
-11    config: Conv1dConfig,
-12    vb: VarBuilder,
-13) -> Result<Conv1d> {
-14    let weight = vb
-15        .get((out_channels, in_channels, kernel_size), "weight")?
-16        .dequantize(vb.device())?;
-17    let bias = vb.get(out_channels, "bias")?.dequantize(vb.device())?;
-18    Ok(Conv1d::new(weight, Some(bias), config))
-19}
-20
-21// https://github.com/openai/whisper/blob/f572f2161ba831bae131364c3bffdead7af6d210/whisper/model.py#L62
-22#[derive(Debug, Clone)]
-23struct MultiHeadAttention {
-24    query: Linear,
-25    key: Linear,
-26    value: Linear,
-27    out: Linear,
-28    n_head: usize,
-29    span: tracing::Span,
-30    softmax_span: tracing::Span,
-31    matmul_span: tracing::Span,
-32    kv_cache: Option<(Tensor, Tensor)>,
-33}
-34
-35impl MultiHeadAttention {
-36    fn load(n_state: usize, n_head: usize, vb: VarBuilder) -> Result<Self> {
-37        let span = tracing::span!(tracing::Level::TRACE, "multi-head-attn");
-38        let softmax_span = tracing::span!(tracing::Level::TRACE, "multi-head-attn-softmax");
-39        let matmul_span = tracing::span!(tracing::Level::TRACE, "multi-head-attn-matmul");
-40        let query = linear(n_state, n_state, vb.pp("q_proj"))?;
-41        let value = linear(n_state, n_state, vb.pp("v_proj"))?;
-42        let key = linear_no_bias(n_state, n_state, vb.pp("k_proj"))?;
-43        let out = linear(n_state, n_state, vb.pp("out_proj"))?;
-44        Ok(Self {
-45            query,
-46            key,
-47            value,
-48            out,
-49            n_head,
-50            span,
-51            softmax_span,
-52            matmul_span,
-53            kv_cache: None,
-54        })
-55    }
-56
-57    fn forward(
-58        &mut self,
-59        x: &Tensor,
-60        xa: Option<&Tensor>,
-61        mask: Option<&Tensor>,
-62        flush_cache: bool,
-63    ) -> Result<Tensor> {
-64        let _enter = self.span.enter();
-65        let q = self.query.forward(x)?;
-66        let (k, v) = match xa {
-67            None => {
-68                let k = self.key.forward(x)?;
-69                let v = self.value.forward(x)?;
-70                (k, v)
-71            }
-72            Some(x) => {
-73                if flush_cache {
-74                    self.kv_cache = None;
-75                }
-76                if let Some((k, v)) = &self.kv_cache {
-77                    (k.clone(), v.clone())
-78                } else {
-79                    let k = self.key.forward(x)?;
-80                    let v = self.value.forward(x)?;
-81                    self.kv_cache = Some((k.clone(), v.clone()));
-82                    (k, v)
-83                }
-84            }
-85        };
-86        let wv = self.qkv_attention(&q, &k, &v, mask)?;
-87        let out = self.out.forward(&wv)?;
-88        Ok(out)
-89    }
-90
-91    fn reshape_head(&self, x: &Tensor) -> Result<Tensor> {
-92        let (n_batch, n_ctx, n_state) = x.dims3()?;
-93        let target_dims = &[n_batch, n_ctx, self.n_head, n_state / self.n_head];
-94        x.reshape(target_dims)?.transpose(1, 2)
-95    }
-96
-97    fn qkv_attention(
-98        &self,
-99        q: &Tensor,
-100        k: &Tensor,
-101        v: &Tensor,
-102        mask: Option<&Tensor>,
-103    ) -> Result<Tensor> {
-104        let (_, n_ctx, n_state) = q.dims3()?;
-105        let scale = ((n_state / self.n_head) as f64).powf(-0.25);
-106        let q = (self.reshape_head(q)? * scale)?;
-107        let k = (self.reshape_head(k)?.transpose(2, 3)? * scale)?;
-108        let v = self.reshape_head(v)?.contiguous()?;
-109        let mut qk = {
-110            let _enter = self.matmul_span.enter();
-111            q.matmul(&k)?
-112        };
-113        if let Some(mask) = mask {
-114            let mask = mask.i((0..n_ctx, 0..n_ctx))?;
-115            qk = qk.broadcast_add(&mask)?
-116        }
-117        let w = {
-118            let _enter = self.softmax_span.enter();
-119            candle_nn::ops::softmax_last_dim(&qk)?
-120        };
-121        let wv = {
-122            let _enter = self.matmul_span.enter();
-123            w.matmul(&v)?
-124        }
-125        .transpose(1, 2)?
-126        .flatten_from(2)?;
-127        Ok(wv)
-128    }
-129
-130    fn reset_kv_cache(&mut self) {
-131        self.kv_cache = None;
-132    }
-133}
-134
-135// https://github.com/openai/whisper/blob/f572f2161ba831bae131364c3bffdead7af6d210/whisper/model.py#L111
-136#[derive(Debug, Clone)]
-137struct ResidualAttentionBlock {
-138    attn: MultiHeadAttention,
-139    attn_ln: LayerNorm,
-140    cross_attn: Option<(MultiHeadAttention, LayerNorm)>,
-141    mlp_linear1: Linear,
-142    mlp_linear2: Linear,
-143    mlp_ln: LayerNorm,
-144    span: tracing::Span,
-145}
-146
-147impl ResidualAttentionBlock {
-148    fn load(n_state: usize, n_head: usize, ca: bool, vb: VarBuilder) -> Result<Self> {
-149        let span = tracing::span!(tracing::Level::TRACE, "residual-attn");
-150        let attn = MultiHeadAttention::load(n_state, n_head, vb.pp("self_attn"))?;
-151        let attn_ln = layer_norm(n_state, 1e-5, vb.pp("self_attn_layer_norm"))?;
-152        let cross_attn = if ca {
-153            let cross_attn = MultiHeadAttention::load(n_state, n_head, vb.pp("encoder_attn"))?;
-154            let cross_attn_ln = layer_norm(n_state, 1e-5, vb.pp("encoder_attn_layer_norm"))?;
-155            Some((cross_attn, cross_attn_ln))
-156        } else {
-157            None
-158        };
-159        let n_mlp = n_state * 4;
-160        let mlp_linear1 = linear(n_state, n_mlp, vb.pp("fc1"))?;
-161        let mlp_linear2 = linear(n_mlp, n_state, vb.pp("fc2"))?;
-162        let mlp_ln = layer_norm(n_state, 1e-5, vb.pp("final_layer_norm"))?;
-163        Ok(Self {
-164            attn,
-165            attn_ln,
-166            cross_attn,
-167            mlp_linear1,
-168            mlp_linear2,
-169            mlp_ln,
-170            span,
-171        })
-172    }
-173
-174    fn forward(
-175        &mut self,
-176        x: &Tensor,
-177        xa: Option<&Tensor>,
-178        mask: Option<&Tensor>,
-179        flush_kv_cache: bool,
-180    ) -> Result<Tensor> {
-181        let _enter = self.span.enter();
-182        let attn = self
-183            .attn
-184            .forward(&self.attn_ln.forward(x)?, None, mask, flush_kv_cache)?;
-185        let mut x = (x + attn)?;
-186        if let Some((attn, ln)) = &mut self.cross_attn {
-187            x = (&x + attn.forward(&ln.forward(&x)?, xa, None, flush_kv_cache)?)?;
-188        }
-189        let mlp = x
-190            .apply(&self.mlp_ln)?
-191            .apply(&self.mlp_linear1)?
-192            .gelu()?
-193            .apply(&self.mlp_linear2)?;
-194        x + mlp
-195    }
-196
-197    fn reset_kv_cache(&mut self) {
-198        self.attn.reset_kv_cache();
-199        if let Some((attn, _)) = &mut self.cross_attn {
-200            attn.reset_kv_cache();
-201        }
-202    }
-203}
-204
-205fn sinusoids(length: usize, channels: usize, device: &Device) -> Result<Tensor> {
-206    let max_timescale = 10000f32;
-207    let log_timescale_increment = max_timescale.ln() / (channels / 2 - 1) as f32;
-208    let inv_timescales: Vec<_> = (0..channels / 2)
-209        .map(|i| (i as f32 * (-log_timescale_increment)).exp())
-210        .collect();
-211    let inv_timescales = Tensor::new(inv_timescales.as_slice(), device)?.unsqueeze(0)?;
-212    let arange = Tensor::arange(0, length as u32, device)?
-213        .to_dtype(candle::DType::F32)?
-214        .unsqueeze(1)?;
-215    let sh = (length, channels / 2);
-216    let scaled_time = (arange.broadcast_as(sh)? * inv_timescales.broadcast_as(sh)?)?;
-217    let sincos = Tensor::cat(&[scaled_time.sin()?, scaled_time.cos()?], 1)?;
-218    Ok(sincos)
-219}
-220
-221// https://github.com/openai/whisper/blob/f572f2161ba831bae131364c3bffdead7af6d210/whisper/model.py#L143
-222#[derive(Debug, Clone)]
-223pub struct AudioEncoder {
-224    conv1: Conv1d,
-225    conv2: Conv1d,
-226    positional_embedding: Tensor,
-227    blocks: Vec<ResidualAttentionBlock>,
-228    ln_post: LayerNorm,
-229    span: tracing::Span,
-230    conv1_span: tracing::Span,
-231    conv2_span: tracing::Span,
-232}
-233
-234impl AudioEncoder {
-235    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-236        let span = tracing::span!(tracing::Level::TRACE, "audio-encoder");
-237        let conv1_span = tracing::span!(tracing::Level::TRACE, "conv1");
-238        let conv2_span = tracing::span!(tracing::Level::TRACE, "conv2");
-239        let n_state = cfg.d_model;
-240        let n_head = cfg.encoder_attention_heads;
-241        let n_ctx = cfg.max_source_positions;
-242        let cfg1 = Conv1dConfig {
-243            padding: 1,
-244            stride: 1,
-245            groups: 1,
-246            dilation: 1,
-247        };
-248        let cfg2 = Conv1dConfig {
-249            padding: 1,
-250            stride: 2,
-251            groups: 1,
-252            dilation: 1,
-253        };
-254        let conv1 = conv1d(cfg.num_mel_bins, n_state, 3, cfg1, vb.pp("conv1"))?;
-255        let conv2 = conv1d(n_state, n_state, 3, cfg2, vb.pp("conv2"))?;
-256        let positional_embedding = sinusoids(n_ctx, n_state, vb.device())?;
-257        let blocks = (0..cfg.encoder_layers)
-258            .map(|i| {
-259                ResidualAttentionBlock::load(n_state, n_head, false, vb.pp(format!("layers.{i}")))
-260            })
-261            .collect::<Result<Vec<_>>>()?;
-262        let ln_post = layer_norm(n_state, 1e-5, vb.pp("layer_norm"))?;
-263        Ok(Self {
-264            conv1,
-265            conv2,
-266            positional_embedding,
-267            blocks,
-268            ln_post,
-269            conv1_span,
-270            conv2_span,
-271            span,
-272        })
-273    }
-274
-275    pub fn forward(&mut self, x: &Tensor, flush_kv_cache: bool) -> Result<Tensor> {
-276        let _enter = self.span.enter();
-277        let x = {
-278            let _enter = self.conv1_span.enter();
-279            self.conv1.forward(x)?.gelu()?
-280        };
-281        let x = {
-282            let _enter = self.conv2_span.enter();
-283            self.conv2.forward(&x)?.gelu()?
-284        };
-285        let x = x.transpose(1, 2)?;
-286        let (_bsize, seq_len, _hidden) = x.dims3()?;
-287        let positional_embedding = self.positional_embedding.narrow(0, 0, seq_len)?;
-288        let mut x = x.broadcast_add(&positional_embedding)?;
-289        for block in self.blocks.iter_mut() {
-290            x = block.forward(&x, None, None, flush_kv_cache)?
-291        }
-292        let x = self.ln_post.forward(&x)?;
-293        Ok(x)
-294    }
-295
-296    pub fn reset_kv_cache(&mut self) {
-297        for block in self.blocks.iter_mut() {
-298            block.reset_kv_cache();
-299        }
-300    }
-301}
-302
-303// https://github.com/openai/whisper/blob/f572f2161ba831bae131364c3bffdead7af6d210/whisper/model.py#L176
-304#[derive(Debug, Clone)]
-305pub struct TextDecoder {
-306    token_embedding: Embedding,
-307    positional_embedding: Tensor,
-308    blocks: Vec<ResidualAttentionBlock>,
-309    ln: LayerNorm,
-310    mask: Tensor,
-311    span: tracing::Span,
-312    span_final: tracing::Span,
-313}
-314
-315impl TextDecoder {
-316    fn load(vb: VarBuilder, cfg: &Config) -> Result<Self> {
-317        let span = tracing::span!(tracing::Level::TRACE, "text-decoder");
-318        let span_final = tracing::span!(tracing::Level::TRACE, "text-decoder-final");
-319        let n_state = cfg.d_model;
-320        let n_head = cfg.decoder_attention_heads;
-321        let n_ctx = cfg.max_target_positions;
-322        let token_embedding = Embedding::new(cfg.vocab_size, n_state, vb.pp("embed_tokens"))?;
-323        let positional_embedding = vb
-324            .get((n_ctx, n_state), "embed_positions.weight")?
-325            .dequantize(vb.device())?;
-326        let blocks = (0..cfg.decoder_layers)
-327            .map(|i| {
-328                ResidualAttentionBlock::load(n_state, n_head, true, vb.pp(format!("layers.{i}")))
-329            })
-330            .collect::<Result<Vec<_>>>()?;
-331        let ln = layer_norm(n_state, 1e-5, vb.pp("layer_norm"))?;
-332        let mask: Vec<_> = (0..n_ctx)
-333            .flat_map(|i| (0..n_ctx).map(move |j| if j > i { f32::NEG_INFINITY } else { 0f32 }))
-334            .collect();
-335        let mask = Tensor::from_vec(mask, (n_ctx, n_ctx), vb.device())?;
-336        Ok(Self {
-337            token_embedding,
-338            positional_embedding,
-339            blocks,
-340            ln,
-341            mask,
-342            span,
-343            span_final,
-344        })
-345    }
-346
-347    pub fn forward(&mut self, x: &Tensor, xa: &Tensor, flush_kv_cache: bool) -> Result<Tensor> {
-348        let _enter = self.span.enter();
-349        let last = x.dim(D::Minus1)?;
-350        let token_embedding = self.token_embedding.forward(x)?;
-351        let positional_embedding = self.positional_embedding.narrow(0, 0, last)?;
-352        let mut x = token_embedding.broadcast_add(&positional_embedding)?;
-353        for block in self.blocks.iter_mut() {
-354            x = block.forward(&x, Some(xa), Some(&self.mask), flush_kv_cache)?;
-355        }
-356        self.ln.forward(&x)
-357    }
-358
-359    pub fn final_linear(&self, x: &Tensor) -> Result<Tensor> {
-360        let b_size = x.dim(0)?;
-361        let w = self.token_embedding.embeddings().broadcast_left(b_size)?;
-362        let logits = {
-363            let _enter = self.span_final.enter();
-364            x.matmul(&w.t()?)?
-365        };
-366        Ok(logits)
-367    }
-368
-369    pub fn reset_kv_cache(&mut self) {
-370        for block in self.blocks.iter_mut() {
-371            block.reset_kv_cache();
-372        }
-373    }
-374}
-375
-376// https://github.com/openai/whisper/blob/f572f2161ba831bae131364c3bffdead7af6d210/whisper/model.py#L221
-377#[derive(Debug, Clone)]
-378pub struct Whisper {
-379    pub encoder: AudioEncoder,
-380    pub decoder: TextDecoder,
-381    pub config: Config,
-382}
-383
-384impl Whisper {
-385    pub fn load(vb: &VarBuilder, config: Config) -> Result<Self> {
-386        let encoder = AudioEncoder::load(vb.pp("model.encoder"), &config)?;
-387        let decoder = TextDecoder::load(vb.pp("model.decoder"), &config)?;
-388        Ok(Self {
-389            encoder,
-390            decoder,
-391            config,
-392        })
-393    }
-394
-395    pub fn reset_kv_cache(&mut self) {
-396        self.encoder.reset_kv_cache();
-397        self.decoder.reset_kv_cache();
-398    }
-399}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/with_tracing.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/with_tracing.rs.html deleted file mode 100644 index fa5d74a..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/with_tracing.rs.html +++ /dev/null @@ -1,196 +0,0 @@ -with_tracing.rs - source

candle_transformers/models/
with_tracing.rs

1use candle::{Module, Result, Tensor};
-2use candle_nn::VarBuilder;
-3
-4#[derive(Debug, Clone)]
-5pub struct Embedding {
-6    inner: candle_nn::Embedding,
-7    span: tracing::Span,
-8}
-9
-10impl Embedding {
-11    pub fn new(d1: usize, d2: usize, vb: VarBuilder) -> Result<Self> {
-12        let inner = candle_nn::embedding(d1, d2, vb)?;
-13        let span = tracing::span!(tracing::Level::TRACE, "embedding");
-14        Ok(Self { inner, span })
-15    }
-16
-17    pub fn from_weights(weights: Tensor) -> Result<Self> {
-18        let (_in_size, out_size) = weights.dims2()?;
-19        let inner = candle_nn::Embedding::new(weights, out_size);
-20        let span = tracing::span!(tracing::Level::TRACE, "embedding");
-21        Ok(Self { inner, span })
-22    }
-23
-24    pub fn embeddings(&self) -> &Tensor {
-25        self.inner.embeddings()
-26    }
-27}
-28
-29impl Module for Embedding {
-30    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-31        let _enter = self.span.enter();
-32        self.inner.forward(xs)
-33    }
-34}
-35
-36#[derive(Debug, Clone)]
-37pub struct Linear {
-38    inner: candle_nn::Linear,
-39    span: tracing::Span,
-40}
-41
-42impl Linear {
-43    pub fn from_weights(weights: Tensor, bias: Option<Tensor>) -> Self {
-44        let inner = candle_nn::Linear::new(weights, bias);
-45        let span = tracing::span!(tracing::Level::TRACE, "linear");
-46        Self { inner, span }
-47    }
-48}
-49
-50pub fn linear_b(d1: usize, d2: usize, b: bool, vb: VarBuilder) -> Result<Linear> {
-51    let inner = candle_nn::linear_b(d1, d2, b, vb)?;
-52    let span = tracing::span!(tracing::Level::TRACE, "linear");
-53    Ok(Linear { inner, span })
-54}
-55
-56pub fn linear(d1: usize, d2: usize, vb: VarBuilder) -> Result<Linear> {
-57    let inner = candle_nn::linear(d1, d2, vb)?;
-58    let span = tracing::span!(tracing::Level::TRACE, "linear");
-59    Ok(Linear { inner, span })
-60}
-61
-62pub fn linear_no_bias(d1: usize, d2: usize, vb: VarBuilder) -> Result<Linear> {
-63    let inner = candle_nn::linear_no_bias(d1, d2, vb)?;
-64    let span = tracing::span!(tracing::Level::TRACE, "linear");
-65    Ok(Linear { inner, span })
-66}
-67
-68impl Module for Linear {
-69    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-70        let _enter = self.span.enter();
-71        self.inner.forward(xs)
-72    }
-73}
-74
-75// Wrap the conv2d op to provide some tracing.
-76#[derive(Debug, Clone)]
-77pub struct Conv2d {
-78    inner: candle_nn::Conv2d,
-79    span: tracing::Span,
-80}
-81
-82impl Module for Conv2d {
-83    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-84        let _enter = self.span.enter();
-85        self.inner.forward(x)
-86    }
-87}
-88
-89pub fn conv2d(
-90    in_channels: usize,
-91    out_channels: usize,
-92    kernel_size: usize,
-93    cfg: candle_nn::Conv2dConfig,
-94    vs: candle_nn::VarBuilder,
-95) -> Result<Conv2d> {
-96    let span = tracing::span!(tracing::Level::TRACE, "conv2d");
-97    let inner = candle_nn::conv2d(in_channels, out_channels, kernel_size, cfg, vs)?;
-98    Ok(Conv2d { inner, span })
-99}
-100
-101// QMatMul wrapper adding some tracing.
-102#[derive(Clone)]
-103pub struct QMatMul {
-104    inner: candle::quantized::QMatMul,
-105    span: tracing::Span,
-106}
-107
-108impl QMatMul {
-109    pub fn new(
-110        out_dim: usize,
-111        in_dim: usize,
-112        vb: crate::quantized_var_builder::VarBuilder,
-113    ) -> Result<Self> {
-114        let ws = vb.get((in_dim, out_dim), "weight")?;
-115        let inner = candle::quantized::QMatMul::from_arc(ws)?;
-116        let span = tracing::span!(tracing::Level::TRACE, "qmatmul");
-117        Ok(Self { inner, span })
-118    }
-119
-120    pub fn from_weights(ws: std::sync::Arc<candle::quantized::QTensor>) -> Result<Self> {
-121        let inner = candle::quantized::QMatMul::from_arc(ws)?;
-122        let span = tracing::span!(tracing::Level::TRACE, "qmatmul");
-123        Ok(Self { inner, span })
-124    }
-125}
-126
-127impl Module for QMatMul {
-128    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-129        let _enter = self.span.enter();
-130        self.inner.forward(xs)
-131    }
-132}
-133
-134impl std::fmt::Debug for QMatMul {
-135    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-136        write!(f, "QMatMul")
-137    }
-138}
-139
-140#[derive(Clone, Debug)]
-141pub struct LayerNorm {
-142    inner: candle_nn::LayerNorm,
-143    span: tracing::Span,
-144}
-145
-146impl LayerNorm {
-147    pub fn new(weight: Tensor, bias: Tensor, eps: f64) -> Self {
-148        let inner = candle_nn::LayerNorm::new(weight, bias, eps);
-149        let span = tracing::span!(tracing::Level::TRACE, "layer-norm");
-150        Self { inner, span }
-151    }
-152}
-153
-154impl Module for LayerNorm {
-155    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-156        let _enter = self.span.enter();
-157        self.inner.forward(xs)
-158    }
-159}
-160
-161pub fn layer_norm<C: Into<candle_nn::LayerNormConfig>>(
-162    size: usize,
-163    c: C,
-164    vb: VarBuilder,
-165) -> Result<LayerNorm> {
-166    let inner = candle_nn::layer_norm(size, c, vb)?;
-167    let span = tracing::span!(tracing::Level::TRACE, "layer-norm");
-168    Ok(LayerNorm { inner, span })
-169}
-170
-171#[derive(Debug, Clone)]
-172pub struct RmsNorm {
-173    inner: candle_nn::RmsNorm,
-174    span: tracing::Span,
-175}
-176
-177impl RmsNorm {
-178    pub fn new(size: usize, eps: f64, vb: VarBuilder) -> Result<Self> {
-179        let span = tracing::span!(tracing::Level::TRACE, "rms-norm");
-180        let inner = candle_nn::rms_norm(size, eps, vb)?;
-181        Ok(Self { inner, span })
-182    }
-183
-184    pub fn forward_diff(&self, x: &Tensor) -> Result<Tensor> {
-185        let _enter = self.span.enter();
-186        self.inner.forward_diff(x)
-187    }
-188}
-189
-190impl Module for RmsNorm {
-191    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-192        let _enter = self.span.enter();
-193        self.inner.forward(x)
-194    }
-195}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/attention_processor.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/attention_processor.rs.html deleted file mode 100644 index 7244d06..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/attention_processor.rs.html +++ /dev/null @@ -1,119 +0,0 @@ -attention_processor.rs - source

candle_transformers/models/wuerstchen/
attention_processor.rs

1use candle::{Module, Result, Tensor};
-2use candle_nn::{linear, Linear, VarBuilder};
-3
-4// A simplified version of:
-5// https://github.com/huggingface/diffusers/blob/119ad2c3dc8a8fb8446a83f4bf6f20929487b47f/src/diffusers/models/attention_processor.py#L38
-6#[derive(Debug)]
-7pub struct Attention {
-8    to_q: Linear,
-9    to_k: Linear,
-10    to_v: Linear,
-11    to_out: Linear,
-12    heads: usize,
-13    scale: f64,
-14    use_flash_attn: bool,
-15}
-16
-17#[cfg(feature = "flash-attn")]
-18fn flash_attn(
-19    q: &Tensor,
-20    k: &Tensor,
-21    v: &Tensor,
-22    softmax_scale: f32,
-23    causal: bool,
-24) -> Result<Tensor> {
-25    candle_flash_attn::flash_attn(q, k, v, softmax_scale, causal)
-26}
-27
-28#[cfg(not(feature = "flash-attn"))]
-29fn flash_attn(_: &Tensor, _: &Tensor, _: &Tensor, _: f32, _: bool) -> Result<Tensor> {
-30    unimplemented!("compile with '--features flash-attn'")
-31}
-32
-33impl Attention {
-34    pub fn new(
-35        query_dim: usize,
-36        heads: usize,
-37        dim_head: usize,
-38        use_flash_attn: bool,
-39        vb: VarBuilder,
-40    ) -> Result<Self> {
-41        let inner_dim = dim_head * heads;
-42        let scale = 1.0 / f64::sqrt(dim_head as f64);
-43        let to_q = linear(query_dim, inner_dim, vb.pp("to_q"))?;
-44        let to_k = linear(query_dim, inner_dim, vb.pp("to_k"))?;
-45        let to_v = linear(query_dim, inner_dim, vb.pp("to_v"))?;
-46        let to_out = linear(inner_dim, query_dim, vb.pp("to_out.0"))?;
-47        Ok(Self {
-48            to_q,
-49            to_k,
-50            to_v,
-51            to_out,
-52            scale,
-53            heads,
-54            use_flash_attn,
-55        })
-56    }
-57
-58    fn batch_to_head_dim(&self, xs: &Tensor) -> Result<Tensor> {
-59        let (b_size, seq_len, dim) = xs.dims3()?;
-60        xs.reshape((b_size / self.heads, self.heads, seq_len, dim))?
-61            .permute((0, 2, 1, 3))?
-62            .reshape((b_size / self.heads, seq_len, dim * self.heads))
-63    }
-64
-65    fn head_to_batch_dim(&self, xs: &Tensor) -> Result<Tensor> {
-66        let (b_size, seq_len, dim) = xs.dims3()?;
-67        xs.reshape((b_size, seq_len, self.heads, dim / self.heads))?
-68            .permute((0, 2, 1, 3))?
-69            .reshape((b_size * self.heads, seq_len, dim / self.heads))
-70    }
-71
-72    fn get_attention_scores(&self, query: &Tensor, key: &Tensor) -> Result<Tensor> {
-73        let attn_probs = (query.matmul(&key.t()?)? * self.scale)?;
-74        candle_nn::ops::softmax_last_dim(&attn_probs)
-75    }
-76
-77    pub fn forward(&self, xs: &Tensor, encoder_hidden_states: &Tensor) -> Result<Tensor> {
-78        let (b_size, channel, h, w) = xs.dims4()?;
-79        let xs = xs.reshape((b_size, channel, h * w))?.t()?;
-80
-81        let query = self.to_q.forward(&xs)?;
-82        let key = self.to_k.forward(encoder_hidden_states)?;
-83        let value = self.to_v.forward(encoder_hidden_states)?;
-84
-85        let query = self.head_to_batch_dim(&query)?;
-86        let key = self.head_to_batch_dim(&key)?;
-87        let value = self.head_to_batch_dim(&value)?;
-88
-89        let xs = if self.use_flash_attn {
-90            let init_dtype = query.dtype();
-91            let q = query
-92                .to_dtype(candle::DType::F16)?
-93                .unsqueeze(0)?
-94                .transpose(1, 2)?;
-95            let k = key
-96                .to_dtype(candle::DType::F16)?
-97                .unsqueeze(0)?
-98                .transpose(1, 2)?;
-99            let v = value
-100                .to_dtype(candle::DType::F16)?
-101                .unsqueeze(0)?
-102                .transpose(1, 2)?;
-103            flash_attn(&q, &k, &v, self.scale as f32, false)?
-104                .transpose(1, 2)?
-105                .squeeze(0)?
-106                .to_dtype(init_dtype)?
-107        } else {
-108            let attn_prs = self.get_attention_scores(&query, &key)?;
-109            attn_prs.matmul(&value)?
-110        };
-111        let xs = self.batch_to_head_dim(&xs)?;
-112
-113        self.to_out
-114            .forward(&xs)?
-115            .t()?
-116            .reshape((b_size, channel, h, w))
-117    }
-118}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/common.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/common.rs.html deleted file mode 100644 index cac73f0..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/common.rs.html +++ /dev/null @@ -1,204 +0,0 @@ -common.rs - source

candle_transformers/models/wuerstchen/
common.rs

1use candle::{DType, Module, Result, Tensor, D};
-2use candle_nn::VarBuilder;
-3
-4// https://github.com/huggingface/diffusers/blob/19edca82f1ff194c07317369a92b470dbae97f34/src/diffusers/pipelines/wuerstchen/modeling_wuerstchen_common.py#L22
-5#[derive(Debug)]
-6pub struct WLayerNorm {
-7    eps: f64,
-8}
-9
-10impl WLayerNorm {
-11    pub fn new(_size: usize) -> Result<Self> {
-12        Ok(Self { eps: 1e-6 })
-13    }
-14}
-15
-16impl Module for WLayerNorm {
-17    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-18        let xs = xs.permute((0, 2, 3, 1))?;
-19
-20        let x_dtype = xs.dtype();
-21        let internal_dtype = match x_dtype {
-22            DType::F16 | DType::BF16 => DType::F32,
-23            d => d,
-24        };
-25
-26        let hidden_size = xs.dim(D::Minus1)?;
-27        let xs = xs.to_dtype(internal_dtype)?;
-28        let mean_x = (xs.sum_keepdim(D::Minus1)? / hidden_size as f64)?;
-29        let xs = xs.broadcast_sub(&mean_x)?;
-30        let norm_x = (xs.sqr()?.sum_keepdim(D::Minus1)? / hidden_size as f64)?;
-31        xs.broadcast_div(&(norm_x + self.eps)?.sqrt()?)?
-32            .to_dtype(x_dtype)?
-33            .permute((0, 3, 1, 2))
-34    }
-35}
-36
-37#[derive(Debug)]
-38pub struct LayerNormNoWeights {
-39    eps: f64,
-40}
-41
-42impl LayerNormNoWeights {
-43    pub fn new(_size: usize) -> Result<Self> {
-44        Ok(Self { eps: 1e-6 })
-45    }
-46}
-47
-48impl Module for LayerNormNoWeights {
-49    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-50        let x_dtype = xs.dtype();
-51        let internal_dtype = match x_dtype {
-52            DType::F16 | DType::BF16 => DType::F32,
-53            d => d,
-54        };
-55        let hidden_size = xs.dim(D::Minus1)?;
-56        let xs = xs.to_dtype(internal_dtype)?;
-57        let mean_x = (xs.sum_keepdim(D::Minus1)? / hidden_size as f64)?;
-58        let xs = xs.broadcast_sub(&mean_x)?;
-59        let norm_x = (xs.sqr()?.sum_keepdim(D::Minus1)? / hidden_size as f64)?;
-60        xs.broadcast_div(&(norm_x + self.eps)?.sqrt()?)?
-61            .to_dtype(x_dtype)
-62    }
-63}
-64
-65#[derive(Debug)]
-66pub struct TimestepBlock {
-67    mapper: candle_nn::Linear,
-68}
-69
-70impl TimestepBlock {
-71    pub fn new(c: usize, c_timestep: usize, vb: VarBuilder) -> Result<Self> {
-72        let mapper = candle_nn::linear(c_timestep, c * 2, vb.pp("mapper"))?;
-73        Ok(Self { mapper })
-74    }
-75
-76    pub fn forward(&self, xs: &Tensor, t: &Tensor) -> Result<Tensor> {
-77        let ab = self
-78            .mapper
-79            .forward(t)?
-80            .unsqueeze(2)?
-81            .unsqueeze(3)?
-82            .chunk(2, 1)?;
-83        xs.broadcast_mul(&(&ab[0] + 1.)?)?.broadcast_add(&ab[1])
-84    }
-85}
-86
-87#[derive(Debug)]
-88pub struct GlobalResponseNorm {
-89    gamma: Tensor,
-90    beta: Tensor,
-91}
-92
-93impl GlobalResponseNorm {
-94    pub fn new(dim: usize, vb: VarBuilder) -> Result<Self> {
-95        let gamma = vb.get((1, 1, 1, dim), "gamma")?;
-96        let beta = vb.get((1, 1, 1, dim), "beta")?;
-97        Ok(Self { gamma, beta })
-98    }
-99}
-100
-101impl Module for GlobalResponseNorm {
-102    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-103        let agg_norm = xs.sqr()?.sum_keepdim((1, 2))?.sqrt()?;
-104        let stand_div_norm =
-105            agg_norm.broadcast_div(&(agg_norm.mean_keepdim(D::Minus1)? + 1e-6)?)?;
-106        xs.broadcast_mul(&stand_div_norm)?
-107            .broadcast_mul(&self.gamma)?
-108            .broadcast_add(&self.beta)?
-109            + xs
-110    }
-111}
-112
-113#[derive(Debug)]
-114pub struct ResBlock {
-115    depthwise: candle_nn::Conv2d,
-116    norm: WLayerNorm,
-117    channelwise_lin1: candle_nn::Linear,
-118    channelwise_grn: GlobalResponseNorm,
-119    channelwise_lin2: candle_nn::Linear,
-120}
-121
-122impl ResBlock {
-123    pub fn new(c: usize, c_skip: usize, ksize: usize, vb: VarBuilder) -> Result<Self> {
-124        let cfg = candle_nn::Conv2dConfig {
-125            padding: ksize / 2,
-126            groups: c,
-127            ..Default::default()
-128        };
-129        let depthwise = candle_nn::conv2d(c + c_skip, c, ksize, cfg, vb.pp("depthwise"))?;
-130        let norm = WLayerNorm::new(c)?;
-131        let channelwise_lin1 = candle_nn::linear(c, c * 4, vb.pp("channelwise.0"))?;
-132        let channelwise_grn = GlobalResponseNorm::new(c * 4, vb.pp("channelwise.2"))?;
-133        let channelwise_lin2 = candle_nn::linear(c * 4, c, vb.pp("channelwise.4"))?;
-134        Ok(Self {
-135            depthwise,
-136            norm,
-137            channelwise_lin1,
-138            channelwise_grn,
-139            channelwise_lin2,
-140        })
-141    }
-142
-143    pub fn forward(&self, xs: &Tensor, x_skip: Option<&Tensor>) -> Result<Tensor> {
-144        let x_res = xs;
-145        let xs = match x_skip {
-146            None => xs.clone(),
-147            Some(x_skip) => Tensor::cat(&[xs, x_skip], 1)?,
-148        };
-149        let xs = xs
-150            .apply(&self.depthwise)?
-151            .apply(&self.norm)?
-152            .permute((0, 2, 3, 1))?;
-153        let xs = xs
-154            .apply(&self.channelwise_lin1)?
-155            .gelu_erf()?
-156            .apply(&self.channelwise_grn)?
-157            .apply(&self.channelwise_lin2)?
-158            .permute((0, 3, 1, 2))?;
-159        xs + x_res
-160    }
-161}
-162use super::attention_processor::Attention;
-163#[derive(Debug)]
-164pub struct AttnBlock {
-165    self_attn: bool,
-166    norm: WLayerNorm,
-167    attention: Attention,
-168    kv_mapper_lin: candle_nn::Linear,
-169}
-170
-171impl AttnBlock {
-172    pub fn new(
-173        c: usize,
-174        c_cond: usize,
-175        nhead: usize,
-176        self_attn: bool,
-177        use_flash_attn: bool,
-178        vb: VarBuilder,
-179    ) -> Result<Self> {
-180        let norm = WLayerNorm::new(c)?;
-181        let attention = Attention::new(c, nhead, c / nhead, use_flash_attn, vb.pp("attention"))?;
-182        let kv_mapper_lin = candle_nn::linear(c_cond, c, vb.pp("kv_mapper.1"))?;
-183        Ok(Self {
-184            self_attn,
-185            norm,
-186            attention,
-187            kv_mapper_lin,
-188        })
-189    }
-190
-191    pub fn forward(&self, xs: &Tensor, kv: &Tensor) -> Result<Tensor> {
-192        let kv = candle_nn::ops::silu(kv)?.apply(&self.kv_mapper_lin)?;
-193        let norm_xs = self.norm.forward(xs)?;
-194        let kv = if self.self_attn {
-195            let (b_size, channel, _, _) = xs.dims4()?;
-196            let norm_xs = norm_xs.reshape((b_size, channel, ()))?.transpose(1, 2)?;
-197            Tensor::cat(&[&norm_xs, &kv], 1)?.contiguous()?
-198        } else {
-199            kv
-200        };
-201        xs + self.attention.forward(&norm_xs, &kv)
-202    }
-203}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/ddpm.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/ddpm.rs.html deleted file mode 100644 index b1a4683..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/ddpm.rs.html +++ /dev/null @@ -1,104 +0,0 @@ -ddpm.rs - source

candle_transformers/models/wuerstchen/
ddpm.rs

1use candle::{Result, Tensor};
-2
-3#[derive(Debug, Clone)]
-4pub struct DDPMWSchedulerConfig {
-5    scaler: f64,
-6    s: f64,
-7}
-8
-9impl Default for DDPMWSchedulerConfig {
-10    fn default() -> Self {
-11        Self {
-12            scaler: 1f64,
-13            s: 0.008f64,
-14        }
-15    }
-16}
-17
-18pub struct DDPMWScheduler {
-19    init_alpha_cumprod: f64,
-20    init_noise_sigma: f64,
-21    timesteps: Vec<f64>,
-22    pub config: DDPMWSchedulerConfig,
-23}
-24
-25impl DDPMWScheduler {
-26    pub fn new(inference_steps: usize, config: DDPMWSchedulerConfig) -> Result<Self> {
-27        let init_alpha_cumprod = (config.s / (1. + config.s) * std::f64::consts::PI)
-28            .cos()
-29            .powi(2);
-30        let timesteps = (0..=inference_steps)
-31            .map(|i| 1. - i as f64 / inference_steps as f64)
-32            .collect::<Vec<_>>();
-33        Ok(Self {
-34            init_alpha_cumprod,
-35            init_noise_sigma: 1.0,
-36            timesteps,
-37            config,
-38        })
-39    }
-40
-41    pub fn timesteps(&self) -> &[f64] {
-42        &self.timesteps
-43    }
-44
-45    fn alpha_cumprod(&self, t: f64) -> f64 {
-46        let scaler = self.config.scaler;
-47        let s = self.config.s;
-48        let t = if scaler > 1. {
-49            1. - (1. - t).powf(scaler)
-50        } else if scaler < 1. {
-51            t.powf(scaler)
-52        } else {
-53            t
-54        };
-55        let alpha_cumprod = ((t + s) / (1. + s) * std::f64::consts::PI * 0.5)
-56            .cos()
-57            .powi(2)
-58            / self.init_alpha_cumprod;
-59        alpha_cumprod.clamp(0.0001, 0.9999)
-60    }
-61
-62    fn previous_timestep(&self, ts: f64) -> f64 {
-63        let index = self
-64            .timesteps
-65            .iter()
-66            .enumerate()
-67            .map(|(idx, v)| (idx, (v - ts).abs()))
-68            .min_by(|x, y| x.1.total_cmp(&y.1))
-69            .unwrap()
-70            .0;
-71        self.timesteps[index + 1]
-72    }
-73
-74    ///  Ensures interchangeability with schedulers that need to scale the denoising model input
-75    /// depending on the current timestep.
-76    pub fn scale_model_input(&self, sample: Tensor, _timestep: usize) -> Tensor {
-77        sample
-78    }
-79
-80    pub fn step(&self, model_output: &Tensor, ts: f64, sample: &Tensor) -> Result<Tensor> {
-81        let prev_t = self.previous_timestep(ts);
-82
-83        let alpha_cumprod = self.alpha_cumprod(ts);
-84        let alpha_cumprod_prev = self.alpha_cumprod(prev_t);
-85        let alpha = alpha_cumprod / alpha_cumprod_prev;
-86
-87        let mu = (sample - model_output * ((1. - alpha) / (1. - alpha_cumprod).sqrt()))?;
-88        let mu = (mu * (1. / alpha).sqrt())?;
-89
-90        let std_noise = mu.randn_like(0., 1.)?;
-91        let std =
-92            std_noise * ((1. - alpha) * (1. - alpha_cumprod_prev) / (1. - alpha_cumprod)).sqrt();
-93        if prev_t == 0. {
-94            Ok(mu)
-95        } else {
-96            mu + std
-97        }
-98    }
-99
-100    pub fn init_noise_sigma(&self) -> f64 {
-101        self.init_noise_sigma
-102    }
-103}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/diffnext.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/diffnext.rs.html deleted file mode 100644 index 0eb93f0..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/diffnext.rs.html +++ /dev/null @@ -1,397 +0,0 @@ -diffnext.rs - source

candle_transformers/models/wuerstchen/
diffnext.rs

1use super::common::{AttnBlock, GlobalResponseNorm, LayerNormNoWeights, TimestepBlock, WLayerNorm};
-2use candle::{DType, Module, Result, Tensor, D};
-3use candle_nn::VarBuilder;
-4
-5#[derive(Debug)]
-6pub struct ResBlockStageB {
-7    depthwise: candle_nn::Conv2d,
-8    norm: WLayerNorm,
-9    channelwise_lin1: candle_nn::Linear,
-10    channelwise_grn: GlobalResponseNorm,
-11    channelwise_lin2: candle_nn::Linear,
-12}
-13
-14impl ResBlockStageB {
-15    pub fn new(c: usize, c_skip: usize, ksize: usize, vb: VarBuilder) -> Result<Self> {
-16        let cfg = candle_nn::Conv2dConfig {
-17            groups: c,
-18            padding: ksize / 2,
-19            ..Default::default()
-20        };
-21        let depthwise = candle_nn::conv2d(c, c, ksize, cfg, vb.pp("depthwise"))?;
-22        let norm = WLayerNorm::new(c)?;
-23        let channelwise_lin1 = candle_nn::linear(c + c_skip, c * 4, vb.pp("channelwise.0"))?;
-24        let channelwise_grn = GlobalResponseNorm::new(4 * c, vb.pp("channelwise.2"))?;
-25        let channelwise_lin2 = candle_nn::linear(c * 4, c, vb.pp("channelwise.4"))?;
-26        Ok(Self {
-27            depthwise,
-28            norm,
-29            channelwise_lin1,
-30            channelwise_grn,
-31            channelwise_lin2,
-32        })
-33    }
-34
-35    pub fn forward(&self, xs: &Tensor, x_skip: Option<&Tensor>) -> Result<Tensor> {
-36        let x_res = xs;
-37        let xs = xs.apply(&self.depthwise)?.apply(&self.norm)?;
-38        let xs = match x_skip {
-39            None => xs.clone(),
-40            Some(x_skip) => Tensor::cat(&[&xs, x_skip], 1)?,
-41        };
-42        let xs = xs
-43            .permute((0, 2, 3, 1))?
-44            .contiguous()?
-45            .apply(&self.channelwise_lin1)?
-46            .gelu()?
-47            .apply(&self.channelwise_grn)?
-48            .apply(&self.channelwise_lin2)?
-49            .permute((0, 3, 1, 2))?;
-50        xs + x_res
-51    }
-52}
-53
-54#[derive(Debug)]
-55struct SubBlock {
-56    res_block: ResBlockStageB,
-57    ts_block: TimestepBlock,
-58    attn_block: Option<AttnBlock>,
-59}
-60
-61#[derive(Debug)]
-62struct DownBlock {
-63    layer_norm: Option<WLayerNorm>,
-64    conv: Option<candle_nn::Conv2d>,
-65    sub_blocks: Vec<SubBlock>,
-66}
-67
-68#[derive(Debug)]
-69struct UpBlock {
-70    sub_blocks: Vec<SubBlock>,
-71    layer_norm: Option<WLayerNorm>,
-72    conv: Option<candle_nn::ConvTranspose2d>,
-73}
-74
-75#[derive(Debug)]
-76pub struct WDiffNeXt {
-77    clip_mapper: candle_nn::Linear,
-78    effnet_mappers: Vec<Option<candle_nn::Conv2d>>,
-79    seq_norm: LayerNormNoWeights,
-80    embedding_conv: candle_nn::Conv2d,
-81    embedding_ln: WLayerNorm,
-82    down_blocks: Vec<DownBlock>,
-83    up_blocks: Vec<UpBlock>,
-84    clf_ln: WLayerNorm,
-85    clf_conv: candle_nn::Conv2d,
-86    c_r: usize,
-87    patch_size: usize,
-88}
-89
-90impl WDiffNeXt {
-91    #[allow(clippy::too_many_arguments)]
-92    pub fn new(
-93        c_in: usize,
-94        c_out: usize,
-95        c_r: usize,
-96        c_cond: usize,
-97        clip_embd: usize,
-98        patch_size: usize,
-99        use_flash_attn: bool,
-100        vb: VarBuilder,
-101    ) -> Result<Self> {
-102        const C_HIDDEN: [usize; 4] = [320, 640, 1280, 1280];
-103        const BLOCKS: [usize; 4] = [4, 4, 14, 4];
-104        const NHEAD: [usize; 4] = [1, 10, 20, 20];
-105        const INJECT_EFFNET: [bool; 4] = [false, true, true, true];
-106        const EFFNET_EMBD: usize = 16;
-107
-108        let clip_mapper = candle_nn::linear(clip_embd, c_cond, vb.pp("clip_mapper"))?;
-109        let mut effnet_mappers = Vec::with_capacity(2 * INJECT_EFFNET.len());
-110        let vb_e = vb.pp("effnet_mappers");
-111        for (i, &inject) in INJECT_EFFNET.iter().enumerate() {
-112            let c = if inject {
-113                Some(candle_nn::conv2d(
-114                    EFFNET_EMBD,
-115                    c_cond,
-116                    1,
-117                    Default::default(),
-118                    vb_e.pp(i),
-119                )?)
-120            } else {
-121                None
-122            };
-123            effnet_mappers.push(c)
-124        }
-125        for (i, &inject) in INJECT_EFFNET.iter().rev().enumerate() {
-126            let c = if inject {
-127                Some(candle_nn::conv2d(
-128                    EFFNET_EMBD,
-129                    c_cond,
-130                    1,
-131                    Default::default(),
-132                    vb_e.pp(i + INJECT_EFFNET.len()),
-133                )?)
-134            } else {
-135                None
-136            };
-137            effnet_mappers.push(c)
-138        }
-139        let seq_norm = LayerNormNoWeights::new(c_cond)?;
-140        let embedding_ln = WLayerNorm::new(C_HIDDEN[0])?;
-141        let embedding_conv = candle_nn::conv2d(
-142            c_in * patch_size * patch_size,
-143            C_HIDDEN[0],
-144            1,
-145            Default::default(),
-146            vb.pp("embedding.1"),
-147        )?;
-148
-149        let mut down_blocks = Vec::with_capacity(C_HIDDEN.len());
-150        for (i, &c_hidden) in C_HIDDEN.iter().enumerate() {
-151            let vb = vb.pp("down_blocks").pp(i);
-152            let (layer_norm, conv, start_layer_i) = if i > 0 {
-153                let layer_norm = WLayerNorm::new(C_HIDDEN[i - 1])?;
-154                let cfg = candle_nn::Conv2dConfig {
-155                    stride: 2,
-156                    ..Default::default()
-157                };
-158                let conv = candle_nn::conv2d(C_HIDDEN[i - 1], c_hidden, 2, cfg, vb.pp("0.1"))?;
-159                (Some(layer_norm), Some(conv), 1)
-160            } else {
-161                (None, None, 0)
-162            };
-163            let mut sub_blocks = Vec::with_capacity(BLOCKS[i]);
-164            let mut layer_i = start_layer_i;
-165            for _j in 0..BLOCKS[i] {
-166                let c_skip = if INJECT_EFFNET[i] { c_cond } else { 0 };
-167                let res_block = ResBlockStageB::new(c_hidden, c_skip, 3, vb.pp(layer_i))?;
-168                layer_i += 1;
-169                let ts_block = TimestepBlock::new(c_hidden, c_r, vb.pp(layer_i))?;
-170                layer_i += 1;
-171                let attn_block = if i == 0 {
-172                    None
-173                } else {
-174                    let attn_block = AttnBlock::new(
-175                        c_hidden,
-176                        c_cond,
-177                        NHEAD[i],
-178                        true,
-179                        use_flash_attn,
-180                        vb.pp(layer_i),
-181                    )?;
-182                    layer_i += 1;
-183                    Some(attn_block)
-184                };
-185                let sub_block = SubBlock {
-186                    res_block,
-187                    ts_block,
-188                    attn_block,
-189                };
-190                sub_blocks.push(sub_block)
-191            }
-192            let down_block = DownBlock {
-193                layer_norm,
-194                conv,
-195                sub_blocks,
-196            };
-197            down_blocks.push(down_block)
-198        }
-199
-200        let mut up_blocks = Vec::with_capacity(C_HIDDEN.len());
-201        for (i, &c_hidden) in C_HIDDEN.iter().enumerate().rev() {
-202            let vb = vb.pp("up_blocks").pp(C_HIDDEN.len() - 1 - i);
-203            let mut sub_blocks = Vec::with_capacity(BLOCKS[i]);
-204            let mut layer_i = 0;
-205            for j in 0..BLOCKS[i] {
-206                let c_skip = if INJECT_EFFNET[i] { c_cond } else { 0 };
-207                let c_skip_res = if i < BLOCKS.len() - 1 && j == 0 {
-208                    c_hidden + c_skip
-209                } else {
-210                    c_skip
-211                };
-212                let res_block = ResBlockStageB::new(c_hidden, c_skip_res, 3, vb.pp(layer_i))?;
-213                layer_i += 1;
-214                let ts_block = TimestepBlock::new(c_hidden, c_r, vb.pp(layer_i))?;
-215                layer_i += 1;
-216                let attn_block = if i == 0 {
-217                    None
-218                } else {
-219                    let attn_block = AttnBlock::new(
-220                        c_hidden,
-221                        c_cond,
-222                        NHEAD[i],
-223                        true,
-224                        use_flash_attn,
-225                        vb.pp(layer_i),
-226                    )?;
-227                    layer_i += 1;
-228                    Some(attn_block)
-229                };
-230                let sub_block = SubBlock {
-231                    res_block,
-232                    ts_block,
-233                    attn_block,
-234                };
-235                sub_blocks.push(sub_block)
-236            }
-237            let (layer_norm, conv) = if i > 0 {
-238                let layer_norm = WLayerNorm::new(C_HIDDEN[i - 1])?;
-239                let cfg = candle_nn::ConvTranspose2dConfig {
-240                    stride: 2,
-241                    ..Default::default()
-242                };
-243                let conv = candle_nn::conv_transpose2d(
-244                    c_hidden,
-245                    C_HIDDEN[i - 1],
-246                    2,
-247                    cfg,
-248                    vb.pp(layer_i).pp(1),
-249                )?;
-250                (Some(layer_norm), Some(conv))
-251            } else {
-252                (None, None)
-253            };
-254            let up_block = UpBlock {
-255                layer_norm,
-256                conv,
-257                sub_blocks,
-258            };
-259            up_blocks.push(up_block)
-260        }
-261
-262        let clf_ln = WLayerNorm::new(C_HIDDEN[0])?;
-263        let clf_conv = candle_nn::conv2d(
-264            C_HIDDEN[0],
-265            2 * c_out * patch_size * patch_size,
-266            1,
-267            Default::default(),
-268            vb.pp("clf.1"),
-269        )?;
-270        Ok(Self {
-271            clip_mapper,
-272            effnet_mappers,
-273            seq_norm,
-274            embedding_conv,
-275            embedding_ln,
-276            down_blocks,
-277            up_blocks,
-278            clf_ln,
-279            clf_conv,
-280            c_r,
-281            patch_size,
-282        })
-283    }
-284
-285    fn gen_r_embedding(&self, r: &Tensor) -> Result<Tensor> {
-286        const MAX_POSITIONS: usize = 10000;
-287        let r = (r * MAX_POSITIONS as f64)?;
-288        let half_dim = self.c_r / 2;
-289        let emb = (MAX_POSITIONS as f64).ln() / (half_dim - 1) as f64;
-290        let emb = (Tensor::arange(0u32, half_dim as u32, r.device())?.to_dtype(DType::F32)?
-291            * -emb)?
-292            .exp()?;
-293        let emb = r.unsqueeze(1)?.broadcast_mul(&emb.unsqueeze(0)?)?;
-294        let emb = Tensor::cat(&[emb.sin()?, emb.cos()?], 1)?;
-295        let emb = if self.c_r % 2 == 1 {
-296            emb.pad_with_zeros(D::Minus1, 0, 1)?
-297        } else {
-298            emb
-299        };
-300        emb.to_dtype(r.dtype())
-301    }
-302
-303    fn gen_c_embeddings(&self, clip: &Tensor) -> Result<Tensor> {
-304        clip.apply(&self.clip_mapper)?.apply(&self.seq_norm)
-305    }
-306
-307    pub fn forward(
-308        &self,
-309        xs: &Tensor,
-310        r: &Tensor,
-311        effnet: &Tensor,
-312        clip: Option<&Tensor>,
-313    ) -> Result<Tensor> {
-314        const EPS: f64 = 1e-3;
-315
-316        let r_embed = self.gen_r_embedding(r)?;
-317        let clip = match clip {
-318            None => None,
-319            Some(clip) => Some(self.gen_c_embeddings(clip)?),
-320        };
-321        let x_in = xs;
-322
-323        let mut xs = xs
-324            .apply(&|xs: &_| candle_nn::ops::pixel_unshuffle(xs, self.patch_size))?
-325            .apply(&self.embedding_conv)?
-326            .apply(&self.embedding_ln)?;
-327
-328        let mut level_outputs = Vec::new();
-329        for (i, down_block) in self.down_blocks.iter().enumerate() {
-330            if let Some(ln) = &down_block.layer_norm {
-331                xs = xs.apply(ln)?
-332            }
-333            if let Some(conv) = &down_block.conv {
-334                xs = xs.apply(conv)?
-335            }
-336            let skip = match &self.effnet_mappers[i] {
-337                None => None,
-338                Some(m) => {
-339                    let effnet = effnet.interpolate2d(xs.dim(D::Minus2)?, xs.dim(D::Minus1)?)?;
-340                    Some(m.forward(&effnet)?)
-341                }
-342            };
-343            for block in down_block.sub_blocks.iter() {
-344                xs = block.res_block.forward(&xs, skip.as_ref())?;
-345                xs = block.ts_block.forward(&xs, &r_embed)?;
-346                if let Some(attn_block) = &block.attn_block {
-347                    xs = attn_block.forward(&xs, clip.as_ref().unwrap())?;
-348                }
-349            }
-350            level_outputs.push(xs.clone())
-351        }
-352        level_outputs.reverse();
-353        let mut xs = level_outputs[0].clone();
-354
-355        for (i, up_block) in self.up_blocks.iter().enumerate() {
-356            let effnet_c = match &self.effnet_mappers[self.down_blocks.len() + i] {
-357                None => None,
-358                Some(m) => {
-359                    let effnet = effnet.interpolate2d(xs.dim(D::Minus2)?, xs.dim(D::Minus1)?)?;
-360                    Some(m.forward(&effnet)?)
-361                }
-362            };
-363            for (j, block) in up_block.sub_blocks.iter().enumerate() {
-364                let skip = if j == 0 && i > 0 {
-365                    Some(&level_outputs[i])
-366                } else {
-367                    None
-368                };
-369                let skip = match (skip, effnet_c.as_ref()) {
-370                    (Some(skip), Some(effnet_c)) => Some(Tensor::cat(&[skip, effnet_c], 1)?),
-371                    (None, Some(skip)) | (Some(skip), None) => Some(skip.clone()),
-372                    (None, None) => None,
-373                };
-374                xs = block.res_block.forward(&xs, skip.as_ref())?;
-375                xs = block.ts_block.forward(&xs, &r_embed)?;
-376                if let Some(attn_block) = &block.attn_block {
-377                    xs = attn_block.forward(&xs, clip.as_ref().unwrap())?;
-378                }
-379            }
-380            if let Some(ln) = &up_block.layer_norm {
-381                xs = xs.apply(ln)?
-382            }
-383            if let Some(conv) = &up_block.conv {
-384                xs = xs.apply(conv)?
-385            }
-386        }
-387
-388        let ab = xs
-389            .apply(&self.clf_ln)?
-390            .apply(&self.clf_conv)?
-391            .apply(&|xs: &_| candle_nn::ops::pixel_shuffle(xs, self.patch_size))?
-392            .chunk(2, 1)?;
-393        let b = ((candle_nn::ops::sigmoid(&ab[1])? * (1. - EPS * 2.))? + EPS)?;
-394        (x_in - &ab[0])? / b
-395    }
-396}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/mod.rs.html deleted file mode 100644 index dcccb03..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/mod.rs.html +++ /dev/null @@ -1,23 +0,0 @@ -mod.rs - source

candle_transformers/models/wuerstchen/
mod.rs

1//! Würstchen Efficient Diffusion Model
-2//!
-3//! Würstchen is an efficient diffusion model architecture for generating images using
-4//! a two-stage approach with a small decoder and prior network.
-5//!
-6//! - 💻 [GH Link](https://github.com/dome272/Wuerstchen)
-7//! - 🤗 [HF Link](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/wuerstchen/pipeline_wuerstchen.py)
-8//! - 📝 [Paper](https://openreview.net/pdf?id=gU58AyJlYz)
-9//!
-10//! ## Example
-11//!
-12//! <div align=center>
-13//!   <img src="https://github.com/huggingface/candle/raw/main/candle-examples/examples/wuerstchen/assets/cat.jpg" alt="" width=320>
-14//!   <p>"Anthropomorphic cat dressed as a fire fighter"</p>
-15//! </div>
-16
-17pub mod attention_processor;
-18pub mod common;
-19pub mod ddpm;
-20pub mod diffnext;
-21pub mod paella_vq;
-22pub mod prior;
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/paella_vq.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/paella_vq.rs.html deleted file mode 100644 index da39532..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/paella_vq.rs.html +++ /dev/null @@ -1,212 +0,0 @@ -paella_vq.rs - source

candle_transformers/models/wuerstchen/
paella_vq.rs

1use super::common::LayerNormNoWeights;
-2use candle::{Module, Result, Tensor};
-3use candle_nn::VarBuilder;
-4
-5#[derive(Debug)]
-6pub struct MixingResidualBlock {
-7    norm1: LayerNormNoWeights,
-8    depthwise_conv: candle_nn::Conv2d,
-9    norm2: LayerNormNoWeights,
-10    channelwise_lin1: candle_nn::Linear,
-11    channelwise_lin2: candle_nn::Linear,
-12    gammas: Vec<f32>,
-13}
-14
-15impl MixingResidualBlock {
-16    pub fn new(inp: usize, embed_dim: usize, vb: VarBuilder) -> Result<Self> {
-17        let norm1 = LayerNormNoWeights::new(inp)?;
-18        let norm2 = LayerNormNoWeights::new(inp)?;
-19        let cfg = candle_nn::Conv2dConfig {
-20            groups: inp,
-21            ..Default::default()
-22        };
-23        let depthwise_conv = candle_nn::conv2d(inp, inp, 3, cfg, vb.pp("depthwise.1"))?;
-24        let channelwise_lin1 = candle_nn::linear(inp, embed_dim, vb.pp("channelwise.0"))?;
-25        let channelwise_lin2 = candle_nn::linear(embed_dim, inp, vb.pp("channelwise.2"))?;
-26        let gammas = vb.get(6, "gammas")?.to_vec1::<f32>()?;
-27        Ok(Self {
-28            norm1,
-29            depthwise_conv,
-30            norm2,
-31            channelwise_lin1,
-32            channelwise_lin2,
-33            gammas,
-34        })
-35    }
-36}
-37
-38impl Module for MixingResidualBlock {
-39    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-40        let mods = &self.gammas;
-41        let x_temp = xs
-42            .permute((0, 2, 3, 1))?
-43            .apply(&self.norm1)?
-44            .permute((0, 3, 1, 2))?
-45            .affine(1. + mods[0] as f64, mods[1] as f64)?;
-46        let x_temp = candle_nn::ops::replication_pad2d(&x_temp, 1)?;
-47        let xs = (xs + x_temp.apply(&self.depthwise_conv)? * mods[2] as f64)?;
-48        let x_temp = xs
-49            .permute((0, 2, 3, 1))?
-50            .apply(&self.norm2)?
-51            .permute((0, 3, 1, 2))?
-52            .affine(1. + mods[3] as f64, mods[4] as f64)?;
-53        let x_temp = x_temp
-54            .permute((0, 2, 3, 1))?
-55            .contiguous()?
-56            .apply(&self.channelwise_lin1)?
-57            .gelu()?
-58            .apply(&self.channelwise_lin2)?
-59            .permute((0, 3, 1, 2))?;
-60        xs + x_temp * mods[5] as f64
-61    }
-62}
-63
-64#[derive(Debug)]
-65pub struct PaellaVQ {
-66    in_block_conv: candle_nn::Conv2d,
-67    out_block_conv: candle_nn::Conv2d,
-68    down_blocks: Vec<(Option<candle_nn::Conv2d>, MixingResidualBlock)>,
-69    down_blocks_conv: candle_nn::Conv2d,
-70    down_blocks_bn: candle_nn::BatchNorm,
-71    up_blocks_conv: candle_nn::Conv2d,
-72    up_blocks: Vec<(Vec<MixingResidualBlock>, Option<candle_nn::ConvTranspose2d>)>,
-73}
-74
-75impl PaellaVQ {
-76    pub fn new(vb: VarBuilder) -> Result<Self> {
-77        const IN_CHANNELS: usize = 3;
-78        const OUT_CHANNELS: usize = 3;
-79        const LATENT_CHANNELS: usize = 4;
-80        const EMBED_DIM: usize = 384;
-81        const BOTTLENECK_BLOCKS: usize = 12;
-82        const C_LEVELS: [usize; 2] = [EMBED_DIM / 2, EMBED_DIM];
-83
-84        let in_block_conv = candle_nn::conv2d(
-85            IN_CHANNELS * 4,
-86            C_LEVELS[0],
-87            1,
-88            Default::default(),
-89            vb.pp("in_block.1"),
-90        )?;
-91        let out_block_conv = candle_nn::conv2d(
-92            C_LEVELS[0],
-93            OUT_CHANNELS * 4,
-94            1,
-95            Default::default(),
-96            vb.pp("out_block.0"),
-97        )?;
-98
-99        let mut down_blocks = Vec::new();
-100        let vb_d = vb.pp("down_blocks");
-101        let mut d_idx = 0;
-102        for (i, &c_level) in C_LEVELS.iter().enumerate() {
-103            let conv_block = if i > 0 {
-104                let cfg = candle_nn::Conv2dConfig {
-105                    padding: 1,
-106                    stride: 2,
-107                    ..Default::default()
-108                };
-109                let block = candle_nn::conv2d(C_LEVELS[i - 1], c_level, 4, cfg, vb_d.pp(d_idx))?;
-110                d_idx += 1;
-111                Some(block)
-112            } else {
-113                None
-114            };
-115            let res_block = MixingResidualBlock::new(c_level, c_level * 4, vb_d.pp(d_idx))?;
-116            d_idx += 1;
-117            down_blocks.push((conv_block, res_block))
-118        }
-119        let vb_d = vb_d.pp(d_idx);
-120        let down_blocks_conv = candle_nn::conv2d_no_bias(
-121            C_LEVELS[1],
-122            LATENT_CHANNELS,
-123            1,
-124            Default::default(),
-125            vb_d.pp(0),
-126        )?;
-127        let down_blocks_bn = candle_nn::batch_norm(LATENT_CHANNELS, 1e-5, vb_d.pp(1))?;
-128
-129        let mut up_blocks = Vec::new();
-130        let vb_u = vb.pp("up_blocks");
-131        let mut u_idx = 0;
-132        let up_blocks_conv = candle_nn::conv2d(
-133            LATENT_CHANNELS,
-134            C_LEVELS[1],
-135            1,
-136            Default::default(),
-137            vb_u.pp(u_idx).pp(0),
-138        )?;
-139        u_idx += 1;
-140        for (i, &c_level) in C_LEVELS.iter().rev().enumerate() {
-141            let mut res_blocks = Vec::new();
-142            let n_bottleneck_blocks = if i == 0 { BOTTLENECK_BLOCKS } else { 1 };
-143            for _j in 0..n_bottleneck_blocks {
-144                let res_block = MixingResidualBlock::new(c_level, c_level * 4, vb_u.pp(u_idx))?;
-145                u_idx += 1;
-146                res_blocks.push(res_block)
-147            }
-148            let conv_block = if i < C_LEVELS.len() - 1 {
-149                let cfg = candle_nn::ConvTranspose2dConfig {
-150                    padding: 1,
-151                    stride: 2,
-152                    ..Default::default()
-153                };
-154                let block = candle_nn::conv_transpose2d(
-155                    c_level,
-156                    C_LEVELS[C_LEVELS.len() - i - 2],
-157                    4,
-158                    cfg,
-159                    vb_u.pp(u_idx),
-160                )?;
-161                u_idx += 1;
-162                Some(block)
-163            } else {
-164                None
-165            };
-166            up_blocks.push((res_blocks, conv_block))
-167        }
-168        Ok(Self {
-169            in_block_conv,
-170            down_blocks,
-171            down_blocks_conv,
-172            down_blocks_bn,
-173            up_blocks,
-174            up_blocks_conv,
-175            out_block_conv,
-176        })
-177    }
-178
-179    pub fn encode(&self, xs: &Tensor) -> Result<Tensor> {
-180        let mut xs = candle_nn::ops::pixel_unshuffle(xs, 2)?.apply(&self.in_block_conv)?;
-181        for down_block in self.down_blocks.iter() {
-182            if let Some(conv) = &down_block.0 {
-183                xs = xs.apply(conv)?
-184            }
-185            xs = xs.apply(&down_block.1)?
-186        }
-187        xs.apply(&self.down_blocks_conv)?
-188            .apply_t(&self.down_blocks_bn, false)
-189    }
-190
-191    pub fn decode(&self, xs: &Tensor) -> Result<Tensor> {
-192        // TODO: quantizer if we want to support `force_not_quantize=False`.
-193        let mut xs = xs.apply(&self.up_blocks_conv)?;
-194        for up_block in self.up_blocks.iter() {
-195            for b in up_block.0.iter() {
-196                xs = xs.apply(b)?;
-197            }
-198            if let Some(conv) = &up_block.1 {
-199                xs = xs.apply(conv)?
-200            }
-201        }
-202        xs.apply(&self.out_block_conv)?
-203            .apply(&|xs: &_| candle_nn::ops::pixel_shuffle(xs, 2))
-204    }
-205}
-206
-207impl Module for PaellaVQ {
-208    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-209        self.decode(&self.encode(xs)?)
-210    }
-211}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/prior.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/prior.rs.html deleted file mode 100644 index 3986122..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/wuerstchen/prior.rs.html +++ /dev/null @@ -1,104 +0,0 @@ -prior.rs - source

candle_transformers/models/wuerstchen/
prior.rs

1use super::common::{AttnBlock, ResBlock, TimestepBlock};
-2use candle::{DType, Result, Tensor, D};
-3use candle_nn::VarBuilder;
-4
-5#[derive(Debug)]
-6struct Block {
-7    res_block: ResBlock,
-8    ts_block: TimestepBlock,
-9    attn_block: AttnBlock,
-10}
-11
-12#[derive(Debug)]
-13pub struct WPrior {
-14    projection: candle_nn::Conv2d,
-15    cond_mapper_lin1: candle_nn::Linear,
-16    cond_mapper_lin2: candle_nn::Linear,
-17    blocks: Vec<Block>,
-18    out_ln: super::common::WLayerNorm,
-19    out_conv: candle_nn::Conv2d,
-20    c_r: usize,
-21}
-22
-23impl WPrior {
-24    #[allow(clippy::too_many_arguments)]
-25    pub fn new(
-26        c_in: usize,
-27        c: usize,
-28        c_cond: usize,
-29        c_r: usize,
-30        depth: usize,
-31        nhead: usize,
-32        use_flash_attn: bool,
-33        vb: VarBuilder,
-34    ) -> Result<Self> {
-35        let projection = candle_nn::conv2d(c_in, c, 1, Default::default(), vb.pp("projection"))?;
-36        let cond_mapper_lin1 = candle_nn::linear(c_cond, c, vb.pp("cond_mapper.0"))?;
-37        let cond_mapper_lin2 = candle_nn::linear(c, c, vb.pp("cond_mapper.2"))?;
-38        let out_ln = super::common::WLayerNorm::new(c)?;
-39        let out_conv = candle_nn::conv2d(c, c_in * 2, 1, Default::default(), vb.pp("out.1"))?;
-40        let mut blocks = Vec::with_capacity(depth);
-41        for index in 0..depth {
-42            let res_block = ResBlock::new(c, 0, 3, vb.pp(format!("blocks.{}", 3 * index)))?;
-43            let ts_block = TimestepBlock::new(c, c_r, vb.pp(format!("blocks.{}", 3 * index + 1)))?;
-44            let attn_block = AttnBlock::new(
-45                c,
-46                c,
-47                nhead,
-48                true,
-49                use_flash_attn,
-50                vb.pp(format!("blocks.{}", 3 * index + 2)),
-51            )?;
-52            blocks.push(Block {
-53                res_block,
-54                ts_block,
-55                attn_block,
-56            })
-57        }
-58        Ok(Self {
-59            projection,
-60            cond_mapper_lin1,
-61            cond_mapper_lin2,
-62            blocks,
-63            out_ln,
-64            out_conv,
-65            c_r,
-66        })
-67    }
-68
-69    pub fn gen_r_embedding(&self, r: &Tensor) -> Result<Tensor> {
-70        const MAX_POSITIONS: usize = 10000;
-71        let r = (r * MAX_POSITIONS as f64)?;
-72        let half_dim = self.c_r / 2;
-73        let emb = (MAX_POSITIONS as f64).ln() / (half_dim - 1) as f64;
-74        let emb = (Tensor::arange(0u32, half_dim as u32, r.device())?.to_dtype(DType::F32)?
-75            * -emb)?
-76            .exp()?;
-77        let emb = r.unsqueeze(1)?.broadcast_mul(&emb.unsqueeze(0)?)?;
-78        let emb = Tensor::cat(&[emb.sin()?, emb.cos()?], 1)?;
-79        let emb = if self.c_r % 2 == 1 {
-80            emb.pad_with_zeros(D::Minus1, 0, 1)?
-81        } else {
-82            emb
-83        };
-84        emb.to_dtype(r.dtype())
-85    }
-86
-87    pub fn forward(&self, xs: &Tensor, r: &Tensor, c: &Tensor) -> Result<Tensor> {
-88        let x_in = xs;
-89        let mut xs = xs.apply(&self.projection)?;
-90        let c_embed = c
-91            .apply(&self.cond_mapper_lin1)?
-92            .apply(&|xs: &_| candle_nn::ops::leaky_relu(xs, 0.2))?
-93            .apply(&self.cond_mapper_lin2)?;
-94        let r_embed = self.gen_r_embedding(r)?;
-95        for block in self.blocks.iter() {
-96            xs = block.res_block.forward(&xs, None)?;
-97            xs = block.ts_block.forward(&xs, &r_embed)?;
-98            xs = block.attn_block.forward(&xs, &c_embed)?;
-99        }
-100        let ab = xs.apply(&self.out_ln)?.apply(&self.out_conv)?.chunk(2, 1)?;
-101        (x_in - &ab[0])? / ((&ab[1] - 1.)?.abs()? + 1e-5)
-102    }
-103}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/xlm_roberta.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/xlm_roberta.rs.html deleted file mode 100644 index 4a91721..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/xlm_roberta.rs.html +++ /dev/null @@ -1,546 +0,0 @@ -xlm_roberta.rs - source

candle_transformers/models/
xlm_roberta.rs

1use crate::models::with_tracing::{linear, Linear};
-2use candle::{DType, Module, Result, Tensor};
-3use candle_nn::{
-4    embedding, layer_norm, ops::softmax_last_dim, Activation, Embedding, LayerNorm, VarBuilder,
-5};
-6
-7#[derive(Debug, Clone, serde::Deserialize)]
-8pub struct Config {
-9    pub hidden_size: usize,
-10    pub layer_norm_eps: f64,
-11    pub attention_probs_dropout_prob: f32,
-12    pub hidden_dropout_prob: f32,
-13    pub num_attention_heads: usize,
-14    pub position_embedding_type: String,
-15    pub intermediate_size: usize,
-16    pub hidden_act: Activation,
-17    pub num_hidden_layers: usize,
-18    pub vocab_size: usize,
-19    pub max_position_embeddings: usize,
-20    pub type_vocab_size: usize,
-21    pub pad_token_id: u32,
-22}
-23
-24struct XLMRobertaEmbeddings {
-25    word_embeddings: Embedding,
-26    position_embeddings: Option<Embedding>,
-27    token_type_embeddings: Embedding,
-28    layer_norm: LayerNorm,
-29    padding_idx: u32,
-30    span: tracing::Span,
-31}
-32
-33impl XLMRobertaEmbeddings {
-34    fn load(vb: VarBuilder, config: &Config) -> Result<Self> {
-35        let word_embeddings = embedding(
-36            config.vocab_size,
-37            config.hidden_size,
-38            vb.pp("word_embeddings"),
-39        )?;
-40        let position_embeddings = embedding(
-41            config.max_position_embeddings,
-42            config.hidden_size,
-43            vb.pp("position_embeddings"),
-44        )?;
-45        let token_type_embeddings = embedding(
-46            config.type_vocab_size,
-47            config.hidden_size,
-48            vb.pp("token_type_embeddings"),
-49        )?;
-50        let layer_norm = layer_norm(
-51            config.hidden_size,
-52            config.layer_norm_eps,
-53            vb.pp("LayerNorm"),
-54        )?;
-55        Ok(Self {
-56            word_embeddings,
-57            position_embeddings: Some(position_embeddings),
-58            token_type_embeddings,
-59            layer_norm,
-60            padding_idx: config.pad_token_id,
-61            span: tracing::span!(tracing::Level::TRACE, "embeddings"),
-62        })
-63    }
-64
-65    fn forward(&self, input_ids: &Tensor, token_type_ids: &Tensor) -> Result<Tensor> {
-66        let _enter = self.span.enter();
-67        let (_bsize, _) = input_ids.dims2()?;
-68        let input_embeddings = self.word_embeddings.forward(input_ids)?;
-69        let token_type_embeddings = self.token_type_embeddings.forward(token_type_ids)?;
-70        let mut embeddings = (&input_embeddings + token_type_embeddings)?;
-71        if let Some(position_embeddings) = &self.position_embeddings {
-72            let mask = input_ids
-73                .ne(self.padding_idx)?
-74                .to_dtype(input_embeddings.dtype())?;
-75            let cumsum = mask.cumsum(1)?;
-76            let position_ids = (cumsum * mask)?
-77                .broadcast_add(
-78                    &Tensor::try_from(self.padding_idx)?
-79                        .to_dtype(input_embeddings.dtype())?
-80                        .to_device(input_embeddings.device())?,
-81                )?
-82                .to_dtype(candle::DType::U32)?;
-83            embeddings = embeddings.broadcast_add(&position_embeddings.forward(&position_ids)?)?;
-84        }
-85        let embeddings = self.layer_norm.forward(&embeddings)?;
-86        Ok(embeddings)
-87    }
-88}
-89
-90struct XLMRobertaSelfAttention {
-91    num_attention_heads: usize,
-92    attention_head_size: usize,
-93    all_head_size: usize,
-94    query: Linear,
-95    key: Linear,
-96    value: Linear,
-97}
-98
-99impl XLMRobertaSelfAttention {
-100    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-101        let attention_head_size = cfg.hidden_size / cfg.num_attention_heads;
-102        let all_head_size = cfg.num_attention_heads * attention_head_size;
-103        Ok(Self {
-104            num_attention_heads: cfg.num_attention_heads,
-105            attention_head_size,
-106            all_head_size,
-107            query: linear(cfg.hidden_size, all_head_size, vb.pp("query"))?,
-108            key: linear(cfg.hidden_size, all_head_size, vb.pp("key"))?,
-109            value: linear(cfg.hidden_size, all_head_size, vb.pp("value"))?,
-110        })
-111    }
-112
-113    fn transpose_for_scores(&self, x: &Tensor) -> Result<Tensor> {
-114        let mut new_x_shape = x.dims().to_vec();
-115        new_x_shape[2] = self.num_attention_heads;
-116        new_x_shape.push(self.attention_head_size);
-117        let x = x.reshape(new_x_shape)?;
-118        x.permute((0, 2, 1, 3))?.contiguous()
-119    }
-120
-121    fn forward(
-122        &self,
-123        hidden_states: &Tensor,
-124        encoder_hidden_states: Option<&Tensor>,
-125        attention_mask: &Tensor,
-126        past_key_value: Option<(&Tensor, &Tensor)>,
-127        encoder_attention_mask: Option<&Tensor>,
-128    ) -> Result<Tensor> {
-129        let mixed_query_layer = self.query.forward(hidden_states)?;
-130        let is_cross_attention = encoder_hidden_states.is_some();
-131        let (key_layer, value_layer, attention_mask) = if is_cross_attention
-132            && past_key_value.is_some()
-133        {
-134            let key_layer = past_key_value.unwrap().0.clone();
-135            let value_layer = past_key_value.unwrap().1.clone();
-136            let attention_mask = encoder_attention_mask.unwrap().clone();
-137            (key_layer, value_layer, Some(attention_mask))
-138        } else if is_cross_attention {
-139            let key_layer =
-140                self.transpose_for_scores(&self.key.forward(encoder_hidden_states.unwrap())?)?;
-141            let value_layer =
-142                self.transpose_for_scores(&self.value.forward(encoder_hidden_states.unwrap())?)?;
-143            let attention_mask = encoder_attention_mask.unwrap();
-144            (key_layer, value_layer, Some(attention_mask.clone()))
-145        } else if past_key_value.is_some() {
-146            let mut key_layer = self.transpose_for_scores(&self.key.forward(hidden_states)?)?;
-147            let mut value_layer = self.transpose_for_scores(&self.value.forward(hidden_states)?)?;
-148            key_layer = Tensor::cat(
-149                &[
-150                    past_key_value.clone().as_ref().unwrap().0.clone(),
-151                    key_layer,
-152                ],
-153                2,
-154            )?;
-155            value_layer = Tensor::cat(
-156                &[past_key_value.as_ref().unwrap().1.clone(), value_layer],
-157                2,
-158            )?;
-159            (key_layer, value_layer, Some(attention_mask.clone()))
-160        } else {
-161            let key_layer = self.transpose_for_scores(&self.key.forward(hidden_states)?)?;
-162            let value_layer = self.transpose_for_scores(&self.value.forward(hidden_states)?)?;
-163            (key_layer, value_layer, Some(attention_mask.clone()))
-164        };
-165
-166        let query_layer = self.transpose_for_scores(&mixed_query_layer)?;
-167        let mut attention_scores = query_layer.matmul(&key_layer.transpose(2, 3)?)?;
-168        let scale = 1f64 / f64::sqrt(self.attention_head_size as f64);
-169
-170        attention_scores = (attention_scores * scale)?;
-171        attention_scores = match attention_mask {
-172            None => attention_scores,
-173            Some(mask) => {
-174                attention_scores.broadcast_add(&mask.to_dtype(attention_scores.dtype())?)?
-175            }
-176        };
-177        let attention_probs = softmax_last_dim(&attention_scores)?;
-178
-179        let context_layer = attention_probs
-180            .matmul(&value_layer)?
-181            .permute((0, 2, 1, 3))?
-182            .contiguous()?;
-183        let mut new_context_layer_shape =
-184            context_layer.dims()[..context_layer.dims().len() - 2].to_vec();
-185        new_context_layer_shape.push(self.all_head_size);
-186        let context_layer = context_layer.reshape(new_context_layer_shape)?;
-187
-188        Ok(context_layer)
-189    }
-190}
-191
-192struct XLMRobertaSelfOutput {
-193    dense: Linear,
-194    layernorm: LayerNorm,
-195}
-196
-197impl XLMRobertaSelfOutput {
-198    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-199        let dense = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("dense"))?;
-200        let layernorm =
-201            candle_nn::layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("LayerNorm"))?;
-202        Ok(Self { dense, layernorm })
-203    }
-204
-205    fn forward(&self, hidden_states: &Tensor, input_tensor: &Tensor) -> Result<Tensor> {
-206        let hidden_states = self.dense.forward(hidden_states)?;
-207        let hidden_states = self.layernorm.forward(&(hidden_states + input_tensor)?)?;
-208        Ok(hidden_states)
-209    }
-210}
-211
-212struct XLMRobertaAttention {
-213    output: XLMRobertaSelfOutput,
-214    self_attention: XLMRobertaSelfAttention,
-215}
-216
-217impl XLMRobertaAttention {
-218    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-219        let output = XLMRobertaSelfOutput::new(cfg, vb.pp("output"))?;
-220        let self_attention = XLMRobertaSelfAttention::new(cfg, vb.pp("self"))?;
-221        Ok(Self {
-222            output,
-223            self_attention,
-224        })
-225    }
-226
-227    fn forward(
-228        &self,
-229        hidden_states: &Tensor,
-230        attention_mask: &Tensor,
-231        encoder_hidden_states: Option<&Tensor>,
-232        encoder_attention_mask: Option<&Tensor>,
-233        past_key_value: Option<(&Tensor, &Tensor)>,
-234    ) -> Result<(Tensor, Tensor)> {
-235        let self_outputs = self.self_attention.forward(
-236            hidden_states,
-237            encoder_hidden_states,
-238            attention_mask,
-239            past_key_value,
-240            encoder_attention_mask,
-241        )?;
-242        let attention_output = self.output.forward(&self_outputs, hidden_states)?;
-243        Ok((attention_output, self_outputs))
-244    }
-245}
-246
-247struct XLMRobertaOutput {
-248    dense: Linear,
-249    layernorm: LayerNorm,
-250}
-251
-252impl XLMRobertaOutput {
-253    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-254        let dense = linear(cfg.intermediate_size, cfg.hidden_size, vb.pp("dense"))?;
-255        let layernorm =
-256            candle_nn::layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("LayerNorm"))?;
-257        Ok(Self { dense, layernorm })
-258    }
-259
-260    fn forward(&self, hidden_states: &Tensor, input_tensor: &Tensor) -> Result<Tensor> {
-261        let hidden_states = self.dense.forward(hidden_states)?;
-262        let hidden_states = self.layernorm.forward(&(hidden_states + input_tensor)?)?;
-263        Ok(hidden_states)
-264    }
-265}
-266
-267struct XLMRobertaIntermediate {
-268    dense: Linear,
-269    intermediate_act_fn: Activation,
-270}
-271
-272impl XLMRobertaIntermediate {
-273    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-274        let dense = linear(cfg.hidden_size, cfg.intermediate_size, vb.pp("dense"))?;
-275        let intermediate_act_fn = cfg.hidden_act;
-276        Ok(Self {
-277            dense,
-278            intermediate_act_fn,
-279        })
-280    }
-281
-282    fn forward(&self, hidden_states: &Tensor) -> Result<Tensor> {
-283        let hidden_states = self.dense.forward(hidden_states)?;
-284        let hidden_states = self.intermediate_act_fn.forward(&hidden_states)?;
-285        Ok(hidden_states)
-286    }
-287}
-288
-289struct XLMRobertaLayer {
-290    attention: XLMRobertaAttention,
-291    intermediate: XLMRobertaIntermediate,
-292    output: XLMRobertaOutput,
-293}
-294
-295impl XLMRobertaLayer {
-296    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-297        let attention = XLMRobertaAttention::new(cfg, vb.pp("attention"))?;
-298        let intermediate = XLMRobertaIntermediate::new(cfg, vb.pp("intermediate"))?;
-299        let output = XLMRobertaOutput::new(cfg, vb.pp("output"))?;
-300        Ok(Self {
-301            attention,
-302            intermediate,
-303            output,
-304        })
-305    }
-306
-307    fn forward(
-308        &self,
-309        hidden_states: &Tensor,
-310        attention_mask: &Tensor,
-311        encoder_hidden_states: Option<&Tensor>,
-312        encoder_attention_mask: Option<&Tensor>,
-313        past_key_value: Option<(&Tensor, &Tensor)>,
-314    ) -> Result<(Tensor, Tensor)> {
-315        let self_attention_outputs = self.attention.forward(
-316            hidden_states,
-317            attention_mask,
-318            encoder_hidden_states,
-319            encoder_attention_mask,
-320            past_key_value,
-321        )?;
-322        let attention_output = self_attention_outputs.0;
-323        let outputs = self_attention_outputs.1;
-324        let intermediate_output = self.intermediate.forward(&attention_output)?;
-325        let layer_output = self
-326            .output
-327            .forward(&intermediate_output, &attention_output)?;
-328        Ok((layer_output, outputs))
-329    }
-330}
-331
-332struct XLMRobertaEncoder {
-333    layers: Vec<XLMRobertaLayer>,
-334}
-335
-336impl XLMRobertaEncoder {
-337    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-338        let layers = (0..cfg.num_hidden_layers)
-339            .map(|i| XLMRobertaLayer::new(cfg, vb.pp(format!("layer.{}", i))))
-340            .collect::<Result<Vec<_>>>()?;
-341        Ok(Self { layers })
-342    }
-343
-344    fn forward(
-345        &self,
-346        hidden_states: &Tensor,
-347        attention_mask: &Tensor,
-348        encoder_hidden_states: Option<&Tensor>,
-349        encoder_attention_mask: Option<&Tensor>,
-350        past_key_value: Option<(&Tensor, &Tensor)>,
-351    ) -> Result<Tensor> {
-352        let mut hidden_states = hidden_states.clone();
-353        for layer_module in self.layers.iter() {
-354            let layer_outputs = layer_module.forward(
-355                &hidden_states,
-356                attention_mask,
-357                encoder_hidden_states,
-358                encoder_attention_mask,
-359                past_key_value,
-360            )?;
-361            hidden_states = layer_outputs.0;
-362        }
-363        Ok(hidden_states)
-364    }
-365}
-366
-367pub struct XLMRobertaModel {
-368    encoder: XLMRobertaEncoder,
-369    embeddings: XLMRobertaEmbeddings,
-370}
-371
-372impl XLMRobertaModel {
-373    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-374        let encoder = XLMRobertaEncoder::new(cfg, vb.pp("encoder"))?;
-375        let embeddings = XLMRobertaEmbeddings::load(vb.pp("embeddings"), cfg)?;
-376        Ok(Self {
-377            encoder,
-378            embeddings,
-379        })
-380    }
-381
-382    pub fn forward(
-383        &self,
-384        input_ids: &Tensor,
-385        attention_mask: &Tensor,
-386        token_type_ids: &Tensor,
-387        past_key_value: Option<(&Tensor, &Tensor)>,
-388        encoder_hidden_states: Option<&Tensor>,
-389        encoder_attention_mask: Option<&Tensor>,
-390    ) -> Result<Tensor> {
-391        let hidden_states = self.embeddings.forward(input_ids, token_type_ids)?;
-392        let attention_mask = prepare_4d_attention_mask(attention_mask, DType::F32, None)?
-393            .to_device(hidden_states.device())?;
-394        let hidden_states = self.encoder.forward(
-395            &hidden_states,
-396            &attention_mask,
-397            encoder_hidden_states,
-398            encoder_attention_mask,
-399            past_key_value,
-400        )?;
-401        Ok(hidden_states)
-402    }
-403}
-404
-405struct XLMRobertaLMHead {
-406    dense: Linear,
-407    layer_norm: LayerNorm,
-408}
-409
-410impl XLMRobertaLMHead {
-411    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-412        let dense = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("dense"))?;
-413        let layer_norm =
-414            candle_nn::layer_norm(cfg.hidden_size, cfg.layer_norm_eps, vb.pp("layer_norm"))?;
-415        Ok(Self { dense, layer_norm })
-416    }
-417
-418    fn forward(&self, hidden_states: &Tensor, shared_embeddings: &Tensor) -> Result<Tensor> {
-419        let hidden_states = self.dense.forward(hidden_states)?;
-420        let hidden_states = candle_nn::Activation::Gelu.forward(&hidden_states)?;
-421        let hidden_states = self.layer_norm.forward(&hidden_states)?;
-422        let hidden_states = hidden_states.broadcast_matmul(shared_embeddings)?;
-423        Ok(hidden_states)
-424    }
-425}
-426
-427pub struct XLMRobertaForMaskedLM {
-428    roberta: XLMRobertaModel,
-429    lm_head: XLMRobertaLMHead,
-430}
-431
-432impl XLMRobertaForMaskedLM {
-433    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-434        let roberta = XLMRobertaModel::new(cfg, vb.pp("roberta"))?;
-435        let lm_head = XLMRobertaLMHead::new(cfg, vb.pp("lm_head"))?;
-436        Ok(Self { roberta, lm_head })
-437    }
-438
-439    pub fn forward(
-440        &self,
-441        input_ids: &Tensor,
-442        attention_mask: &Tensor,
-443        token_type_ids: &Tensor,
-444        past_key_value: Option<(&Tensor, &Tensor)>,
-445        encoder_hidden_states: Option<&Tensor>,
-446        encoder_attention_mask: Option<&Tensor>,
-447    ) -> Result<Tensor> {
-448        let hidden_states = self.roberta.forward(
-449            input_ids,
-450            attention_mask,
-451            token_type_ids,
-452            past_key_value,
-453            encoder_hidden_states,
-454            encoder_attention_mask,
-455        )?;
-456        let lm_logits = self.lm_head.forward(
-457            &hidden_states,
-458            &self
-459                .roberta
-460                .embeddings
-461                .word_embeddings
-462                .embeddings()
-463                .t()?
-464                .unsqueeze(0)?,
-465        )?;
-466        Ok(lm_logits)
-467    }
-468}
-469
-470struct XLMRobertaClassificationHead {
-471    dense: Linear,
-472    out_proj: Linear,
-473}
-474
-475impl XLMRobertaClassificationHead {
-476    fn new(num_labels: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-477        let dense = linear(cfg.hidden_size, cfg.hidden_size, vb.pp("dense"))?;
-478        let out_proj = linear(cfg.hidden_size, num_labels, vb.pp("out_proj"))?;
-479        Ok(Self { dense, out_proj })
-480    }
-481
-482    fn forward(&self, hidden_states: &Tensor) -> Result<Tensor> {
-483        let cls_states = hidden_states.get_on_dim(1, 0)?.contiguous()?;
-484        let hidden_states = self.dense.forward(&cls_states)?;
-485        let hidden_states = candle_nn::Activation::GeluPytorchTanh.forward(&hidden_states)?;
-486        let hidden_states = self.out_proj.forward(&hidden_states)?;
-487        Ok(hidden_states)
-488    }
-489}
-490
-491pub struct XLMRobertaForSequenceClassification {
-492    roberta: XLMRobertaModel,
-493    classifier: XLMRobertaClassificationHead,
-494}
-495
-496impl XLMRobertaForSequenceClassification {
-497    pub fn new(num_labels: usize, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-498        let roberta = XLMRobertaModel::new(cfg, vb.pp("roberta"))?;
-499        let classifier = XLMRobertaClassificationHead::new(num_labels, cfg, vb.pp("classifier"))?;
-500        Ok(Self {
-501            roberta,
-502            classifier,
-503        })
-504    }
-505
-506    pub fn forward(
-507        &self,
-508        input_ids: &Tensor,
-509        attention_mask: &Tensor,
-510        token_type_ids: &Tensor,
-511    ) -> Result<Tensor> {
-512        let hidden_states =
-513            self.roberta
-514                .forward(input_ids, attention_mask, token_type_ids, None, None, None)?;
-515        self.classifier.forward(&hidden_states)
-516    }
-517}
-518
-519fn prepare_4d_attention_mask(
-520    mask: &Tensor,
-521    dtype: DType,
-522    tgt_len: Option<usize>,
-523) -> Result<Tensor> {
-524    let bsz = mask.dim(0)?;
-525    let src_len = mask.dim(1)?;
-526    let tgt_len = tgt_len.unwrap_or(src_len);
-527
-528    let expanded_mask = mask
-529        .unsqueeze(1)?
-530        .unsqueeze(2)?
-531        .expand((bsz, 1, tgt_len, src_len))?
-532        .to_dtype(dtype)?;
-533
-534    let inverted_mask = (1.0 - expanded_mask)?;
-535
-536    (inverted_mask * get_dtype_min_val(dtype))?.to_dtype(dtype)
-537}
-538
-539fn get_dtype_min_val(dtype: DType) -> f64 {
-540    match dtype {
-541        DType::F32 => f32::MIN as f64,
-542        DType::F64 => f64::MIN,
-543        _ => panic!("Unsupported data type"),
-544    }
-545}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/models/yi.rs.html b/network-poc/target-native/doc/src/candle_transformers/models/yi.rs.html deleted file mode 100644 index f6f33b4..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/models/yi.rs.html +++ /dev/null @@ -1,365 +0,0 @@ -yi.rs - source

candle_transformers/models/
yi.rs

1//! Yi model implementation.
-2//!
-3//! This candle implementation uses a pre-trained Yi decoder-only large language model for inference.
-4//! The model was trained by 01.AI and follows a standard transformer architecture similar to LLaMA.
-5//!
-6//! Original code:
-7//! - 💻 [Yi Model](https://huggingface.co/01-ai/Yi-6B)
-8//! - 💻 [Yi Modeling Code](https://huggingface.co/01-ai/Yi-6B/blob/main/modeling_yi.py)
-9//! - 📝 [Technical Report](https://arxiv.org/abs/2403.04652) Yi: Open Foundation Models by 01.AI
-10//!
-11//! Key characteristics:
-12//! - Multi-head attention with rotary positional embeddings
-13//! - RMS normalization
-14//! - SwiGLU activation in feed-forward layers
-15//! - Grouped-query attention for efficient inference
-16//!
-17
-18use crate::models::with_tracing::{linear_no_bias, Linear, RmsNorm};
-19use candle::{DType, Device, Module, Result, Tensor, D};
-20use candle_nn::{Activation, VarBuilder};
-21use std::sync::Arc;
-22
-23#[derive(Debug, Clone, PartialEq)]
-24pub struct Config {
-25    pub(crate) vocab_size: usize,
-26    pub(crate) hidden_size: usize,
-27    pub(crate) intermediate_size: usize,
-28    pub(crate) num_hidden_layers: usize,
-29    pub(crate) num_attention_heads: usize,
-30    pub(crate) num_key_value_heads: usize,
-31    pub(crate) hidden_act: Activation,
-32    pub(crate) max_position_embeddings: usize,
-33    pub(crate) rms_norm_eps: f64,
-34    pub(crate) rope_theta: f64,
-35}
-36
-37impl Config {
-38    pub fn config_6b() -> Self {
-39        Self {
-40            vocab_size: 64000,
-41            hidden_size: 4096,
-42            intermediate_size: 11008,
-43            num_hidden_layers: 32,
-44            num_attention_heads: 32,
-45            num_key_value_heads: 4,
-46            hidden_act: Activation::Silu,
-47            max_position_embeddings: 4096,
-48            rms_norm_eps: 1e-5,
-49            rope_theta: 5_000_000.,
-50        }
-51    }
-52
-53    pub fn config_34b() -> Self {
-54        Self {
-55            vocab_size: 64000,
-56            hidden_size: 7168,
-57            intermediate_size: 20480,
-58            num_hidden_layers: 60,
-59            num_attention_heads: 56,
-60            num_key_value_heads: 8,
-61            hidden_act: Activation::Silu,
-62            max_position_embeddings: 4096,
-63            rms_norm_eps: 1e-5,
-64            rope_theta: 5_000_000.,
-65        }
-66    }
-67}
-68
-69#[derive(Debug, Clone)]
-70struct RotaryEmbedding {
-71    sin: Tensor,
-72    cos: Tensor,
-73}
-74
-75fn rotate_half(xs: &Tensor) -> Result<Tensor> {
-76    let last_dim = xs.dim(D::Minus1)?;
-77    let xs1 = xs.narrow(D::Minus1, 0, last_dim / 2)?;
-78    let xs2 = xs.narrow(D::Minus1, last_dim / 2, last_dim - last_dim / 2)?;
-79    Tensor::cat(&[&xs2.neg()?, &xs1], D::Minus1)
-80}
-81
-82impl RotaryEmbedding {
-83    fn new(dtype: DType, cfg: &Config, dev: &Device) -> Result<Self> {
-84        let dim = cfg.hidden_size / cfg.num_attention_heads;
-85        let max_seq_len = cfg.max_position_embeddings;
-86        let inv_freq: Vec<_> = (0..dim)
-87            .step_by(2)
-88            .map(|i| 1f32 / 10000f32.powf(i as f32 / dim as f32))
-89            .collect();
-90        let inv_freq_len = inv_freq.len();
-91        let inv_freq = Tensor::from_vec(inv_freq, (1, inv_freq_len), dev)?.to_dtype(dtype)?;
-92        let t = Tensor::arange(0u32, max_seq_len as u32, dev)?
-93            .to_dtype(dtype)?
-94            .reshape((max_seq_len, 1))?;
-95        let freqs = t.matmul(&inv_freq)?;
-96        let freqs = Tensor::cat(&[&freqs, &freqs], D::Minus1)?;
-97        Ok(Self {
-98            sin: freqs.sin()?,
-99            cos: freqs.cos()?,
-100        })
-101    }
-102
-103    fn apply_rotary_emb_qkv(
-104        &self,
-105        q: &Tensor,
-106        k: &Tensor,
-107        seqlen_offset: usize,
-108    ) -> Result<(Tensor, Tensor)> {
-109        let (_b_sz, _h, seq_len, _n_embd) = q.dims4()?;
-110        let cos = self.cos.narrow(0, seqlen_offset, seq_len)?;
-111        let sin = self.sin.narrow(0, seqlen_offset, seq_len)?;
-112        let cos = cos.unsqueeze(0)?.unsqueeze(0)?; // (1, 1, seq_len, dim)
-113        let sin = sin.unsqueeze(0)?.unsqueeze(0)?; // (1, 1, seq_len, dim)
-114        let q_embed = (q.broadcast_mul(&cos)? + rotate_half(q)?.broadcast_mul(&sin))?;
-115        let k_embed = (k.broadcast_mul(&cos)? + rotate_half(k)?.broadcast_mul(&sin))?;
-116        Ok((q_embed, k_embed))
-117    }
-118}
-119
-120#[derive(Debug, Clone)]
-121#[allow(clippy::upper_case_acronyms)]
-122struct MLP {
-123    gate_proj: Linear,
-124    up_proj: Linear,
-125    down_proj: Linear,
-126    act_fn: Activation,
-127}
-128
-129impl MLP {
-130    fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-131        let hidden_sz = cfg.hidden_size;
-132        let intermediate_sz = cfg.intermediate_size;
-133        let gate_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("gate_proj"))?;
-134        let up_proj = linear_no_bias(hidden_sz, intermediate_sz, vb.pp("up_proj"))?;
-135        let down_proj = linear_no_bias(intermediate_sz, hidden_sz, vb.pp("down_proj"))?;
-136        Ok(Self {
-137            gate_proj,
-138            up_proj,
-139            down_proj,
-140            act_fn: cfg.hidden_act,
-141        })
-142    }
-143}
-144
-145impl Module for MLP {
-146    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-147        let lhs = xs.apply(&self.gate_proj)?.apply(&self.act_fn)?;
-148        let rhs = xs.apply(&self.up_proj)?;
-149        (lhs * rhs)?.apply(&self.down_proj)
-150    }
-151}
-152
-153#[derive(Debug, Clone)]
-154struct Attention {
-155    q_proj: Linear,
-156    k_proj: Linear,
-157    v_proj: Linear,
-158    o_proj: Linear,
-159    num_heads: usize,
-160    num_kv_heads: usize,
-161    num_kv_groups: usize,
-162    head_dim: usize,
-163    hidden_size: usize,
-164    rotary_emb: Arc<RotaryEmbedding>,
-165    kv_cache: Option<(Tensor, Tensor)>,
-166}
-167
-168impl Attention {
-169    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-170        let hidden_sz = cfg.hidden_size;
-171        let num_heads = cfg.num_attention_heads;
-172        let num_kv_heads = cfg.num_key_value_heads;
-173        let num_kv_groups = num_heads / num_kv_heads;
-174        let head_dim = hidden_sz / num_heads;
-175        let q_proj = linear_no_bias(hidden_sz, num_heads * head_dim, vb.pp("q_proj"))?;
-176        let k_proj = linear_no_bias(hidden_sz, num_kv_heads * head_dim, vb.pp("k_proj"))?;
-177        let v_proj = linear_no_bias(hidden_sz, num_kv_heads * head_dim, vb.pp("v_proj"))?;
-178        let o_proj = linear_no_bias(num_heads * head_dim, hidden_sz, vb.pp("o_proj"))?;
-179        Ok(Self {
-180            q_proj,
-181            k_proj,
-182            v_proj,
-183            o_proj,
-184            num_heads,
-185            num_kv_heads,
-186            num_kv_groups,
-187            head_dim,
-188            hidden_size: hidden_sz,
-189            rotary_emb,
-190            kv_cache: None,
-191        })
-192    }
-193
-194    fn forward(
-195        &mut self,
-196        xs: &Tensor,
-197        attention_mask: Option<&Tensor>,
-198        seqlen_offset: usize,
-199    ) -> Result<Tensor> {
-200        let (b_sz, q_len, _) = xs.dims3()?;
-201
-202        let query_states = self.q_proj.forward(xs)?;
-203        let key_states = self.k_proj.forward(xs)?;
-204        let value_states = self.v_proj.forward(xs)?;
-205
-206        let query_states = query_states
-207            .reshape((b_sz, q_len, self.num_heads, self.head_dim))?
-208            .transpose(1, 2)?;
-209        let key_states = key_states
-210            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-211            .transpose(1, 2)?;
-212        let value_states = value_states
-213            .reshape((b_sz, q_len, self.num_kv_heads, self.head_dim))?
-214            .transpose(1, 2)?;
-215
-216        let (query_states, key_states) =
-217            self.rotary_emb
-218                .apply_rotary_emb_qkv(&query_states, &key_states, seqlen_offset)?;
-219
-220        let (key_states, value_states) = match &self.kv_cache {
-221            None => (key_states, value_states),
-222            Some((prev_k, prev_v)) => {
-223                let key_states = Tensor::cat(&[prev_k, &key_states], 2)?;
-224                let value_states = Tensor::cat(&[prev_v, &value_states], 2)?;
-225                (key_states, value_states)
-226            }
-227        };
-228        self.kv_cache = Some((key_states.clone(), value_states.clone()));
-229
-230        let key_states = crate::utils::repeat_kv(key_states, self.num_kv_groups)?;
-231        let value_states = crate::utils::repeat_kv(value_states, self.num_kv_groups)?;
-232
-233        let attn_output = {
-234            let scale = 1f64 / f64::sqrt(self.head_dim as f64);
-235            let attn_weights = (query_states.matmul(&key_states.transpose(2, 3)?)? * scale)?;
-236
-237            let attn_weights = match attention_mask {
-238                None => attn_weights,
-239                Some(mask) => attn_weights.broadcast_add(mask)?,
-240            };
-241            let attn_weights = candle_nn::ops::softmax_last_dim(&attn_weights)?;
-242            attn_weights.matmul(&value_states)?
-243        };
-244        attn_output
-245            .transpose(1, 2)?
-246            .reshape((b_sz, q_len, self.hidden_size))?
-247            .apply(&self.o_proj)
-248    }
-249}
-250
-251#[derive(Debug, Clone)]
-252struct DecoderLayer {
-253    self_attn: Attention,
-254    mlp: MLP,
-255    ln1: RmsNorm,
-256    ln2: RmsNorm,
-257}
-258
-259impl DecoderLayer {
-260    fn new(rotary_emb: Arc<RotaryEmbedding>, cfg: &Config, vb: VarBuilder) -> Result<Self> {
-261        let self_attn = Attention::new(rotary_emb, cfg, vb.pp("self_attn"))?;
-262        let mlp = MLP::new(cfg, vb.pp("mlp"))?;
-263        let ln1 = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb.pp("input_layernorm"))?;
-264        let ln2 = RmsNorm::new(
-265            cfg.hidden_size,
-266            cfg.rms_norm_eps,
-267            vb.pp("post_attention_layernorm"),
-268        )?;
-269        Ok(Self {
-270            self_attn,
-271            mlp,
-272            ln1,
-273            ln2,
-274        })
-275    }
-276
-277    fn forward(
-278        &mut self,
-279        xs: &Tensor,
-280        attention_mask: Option<&Tensor>,
-281        seqlen_offset: usize,
-282    ) -> Result<Tensor> {
-283        let residual = xs;
-284        let xs = self.ln1.forward(xs)?;
-285        let xs = self.self_attn.forward(&xs, attention_mask, seqlen_offset)?;
-286        let xs = (xs + residual)?;
-287        let residual = &xs;
-288        let xs = xs.apply(&self.ln2)?.apply(&self.mlp)?;
-289        residual + xs
-290    }
-291}
-292
-293#[derive(Debug, Clone)]
-294pub struct Model {
-295    embed_tokens: candle_nn::Embedding,
-296    layers: Vec<DecoderLayer>,
-297    norm: RmsNorm,
-298    lm_head: Linear,
-299    device: Device,
-300    dtype: DType,
-301}
-302
-303impl Model {
-304    pub fn new(cfg: &Config, vb: VarBuilder) -> Result<Self> {
-305        let vb_m = vb.pp("model");
-306        let embed_tokens =
-307            candle_nn::embedding(cfg.vocab_size, cfg.hidden_size, vb_m.pp("embed_tokens"))?;
-308        let rotary_emb = Arc::new(RotaryEmbedding::new(vb.dtype(), cfg, vb_m.device())?);
-309        let mut layers = Vec::with_capacity(cfg.num_hidden_layers);
-310        let vb_l = vb_m.pp("layers");
-311        for layer_idx in 0..cfg.num_hidden_layers {
-312            let layer = DecoderLayer::new(rotary_emb.clone(), cfg, vb_l.pp(layer_idx))?;
-313            layers.push(layer)
-314        }
-315        let norm = RmsNorm::new(cfg.hidden_size, cfg.rms_norm_eps, vb_m.pp("norm"))?;
-316        let lm_head = linear_no_bias(cfg.hidden_size, cfg.vocab_size, vb.pp("lm_head"))?;
-317        Ok(Self {
-318            embed_tokens,
-319            layers,
-320            norm,
-321            lm_head,
-322            device: vb.device().clone(),
-323            dtype: vb.dtype(),
-324        })
-325    }
-326
-327    fn prepare_decoder_attention_mask(
-328        &self,
-329        b_size: usize,
-330        tgt_len: usize,
-331        seqlen_offset: usize,
-332    ) -> Result<Tensor> {
-333        // Sliding window mask?
-334        let mask: Vec<_> = (0..tgt_len)
-335            .flat_map(|i| (0..tgt_len).map(move |j| if i < j { f32::NEG_INFINITY } else { 0. }))
-336            .collect();
-337        let mask = Tensor::from_slice(&mask, (tgt_len, tgt_len), &self.device)?;
-338        let mask = if seqlen_offset > 0 {
-339            let mask0 = Tensor::zeros((tgt_len, seqlen_offset), DType::F32, &self.device)?;
-340            Tensor::cat(&[&mask0, &mask], D::Minus1)?
-341        } else {
-342            mask
-343        };
-344        mask.expand((b_size, 1, tgt_len, tgt_len + seqlen_offset))?
-345            .to_dtype(self.dtype)
-346    }
-347
-348    pub fn forward(&mut self, input_ids: &Tensor, seqlen_offset: usize) -> Result<Tensor> {
-349        let (b_size, seq_len) = input_ids.dims2()?;
-350        let attention_mask = if seq_len <= 1 {
-351            None
-352        } else {
-353            let mask = self.prepare_decoder_attention_mask(b_size, seq_len, seqlen_offset)?;
-354            Some(mask)
-355        };
-356        let mut xs = self.embed_tokens.forward(input_ids)?;
-357        for layer in self.layers.iter_mut() {
-358            xs = layer.forward(&xs, attention_mask.as_ref(), seqlen_offset)?
-359        }
-360        xs.narrow(1, seq_len - 1, 1)?
-361            .apply(&self.norm)?
-362            .apply(&self.lm_head)
-363    }
-364}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/object_detection.rs.html b/network-poc/target-native/doc/src/candle_transformers/object_detection.rs.html deleted file mode 100644 index 6850590..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/object_detection.rs.html +++ /dev/null @@ -1,117 +0,0 @@ -object_detection.rs - source

candle_transformers/
object_detection.rs

1//! Bounding Boxes and Intersection
-2//!
-3//! This module provides functionality for handling bounding boxes and their manipulation,
-4//! particularly in the context of object detection. It includes tools for calculating
-5//! intersection over union (IoU) and non-maximum suppression (NMS).
-6
-7/// A bounding box around an object.
-8#[derive(Debug, Clone)]
-9pub struct Bbox<D> {
-10    pub xmin: f32,
-11    pub ymin: f32,
-12    pub xmax: f32,
-13    pub ymax: f32,
-14    pub confidence: f32,
-15    pub data: D,
-16}
-17
-18#[derive(Debug, Clone, Copy, PartialEq)]
-19pub struct KeyPoint {
-20    pub x: f32,
-21    pub y: f32,
-22    pub mask: f32,
-23}
-24
-25/// Intersection over union of two bounding boxes.
-26pub fn iou<D>(b1: &Bbox<D>, b2: &Bbox<D>) -> f32 {
-27    let b1_area = (b1.xmax - b1.xmin + 1.) * (b1.ymax - b1.ymin + 1.);
-28    let b2_area = (b2.xmax - b2.xmin + 1.) * (b2.ymax - b2.ymin + 1.);
-29    let i_xmin = b1.xmin.max(b2.xmin);
-30    let i_xmax = b1.xmax.min(b2.xmax);
-31    let i_ymin = b1.ymin.max(b2.ymin);
-32    let i_ymax = b1.ymax.min(b2.ymax);
-33    let i_area = (i_xmax - i_xmin + 1.).max(0.) * (i_ymax - i_ymin + 1.).max(0.);
-34    i_area / (b1_area + b2_area - i_area)
-35}
-36
-37pub fn non_maximum_suppression<D>(bboxes: &mut [Vec<Bbox<D>>], threshold: f32) {
-38    // Perform non-maximum suppression.
-39    for bboxes_for_class in bboxes.iter_mut() {
-40        bboxes_for_class.sort_by(|b1, b2| b2.confidence.partial_cmp(&b1.confidence).unwrap());
-41        let mut current_index = 0;
-42        for index in 0..bboxes_for_class.len() {
-43            let mut drop = false;
-44            for prev_index in 0..current_index {
-45                let iou = iou(&bboxes_for_class[prev_index], &bboxes_for_class[index]);
-46                if iou > threshold {
-47                    drop = true;
-48                    break;
-49                }
-50            }
-51            if !drop {
-52                bboxes_for_class.swap(current_index, index);
-53                current_index += 1;
-54            }
-55        }
-56        bboxes_for_class.truncate(current_index);
-57    }
-58}
-59
-60// Updates confidences starting at highest and comparing subsequent boxes.
-61fn update_confidences<D>(
-62    bboxes_for_class: &[Bbox<D>],
-63    updated_confidences: &mut [f32],
-64    iou_threshold: f32,
-65    sigma: f32,
-66) {
-67    let len = bboxes_for_class.len();
-68    for current_index in 0..len {
-69        let current_bbox = &bboxes_for_class[current_index];
-70        for index in (current_index + 1)..len {
-71            let iou_val = iou(current_bbox, &bboxes_for_class[index]);
-72            if iou_val > iou_threshold {
-73                // Decay calculation from page 4 of: https://arxiv.org/pdf/1704.04503
-74                let decay = (-iou_val * iou_val / sigma).exp();
-75                let updated_confidence = bboxes_for_class[index].confidence * decay;
-76                updated_confidences[index] = updated_confidence;
-77            }
-78        }
-79    }
-80}
-81
-82// Sorts the bounding boxes by confidence and applies soft non-maximum suppression.
-83// This function is based on the algorithm described in https://arxiv.org/pdf/1704.04503
-84pub fn soft_non_maximum_suppression<D>(
-85    bboxes: &mut [Vec<Bbox<D>>],
-86    iou_threshold: Option<f32>,
-87    confidence_threshold: Option<f32>,
-88    sigma: Option<f32>,
-89) {
-90    let iou_threshold = iou_threshold.unwrap_or(0.5);
-91    let confidence_threshold = confidence_threshold.unwrap_or(0.1);
-92    let sigma = sigma.unwrap_or(0.5);
-93
-94    for bboxes_for_class in bboxes.iter_mut() {
-95        // Sort boxes by confidence in descending order
-96        bboxes_for_class.sort_by(|b1, b2| b2.confidence.partial_cmp(&b1.confidence).unwrap());
-97        let mut updated_confidences = bboxes_for_class
-98            .iter()
-99            .map(|bbox| bbox.confidence)
-100            .collect::<Vec<_>>();
-101        update_confidences(
-102            bboxes_for_class,
-103            &mut updated_confidences,
-104            iou_threshold,
-105            sigma,
-106        );
-107        // Update confidences, set to 0.0 if below threshold
-108        for (i, &confidence) in updated_confidences.iter().enumerate() {
-109            bboxes_for_class[i].confidence = if confidence < confidence_threshold {
-110                0.0
-111            } else {
-112                confidence
-113            };
-114        }
-115    }
-116}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/pipelines/mod.rs.html b/network-poc/target-native/doc/src/candle_transformers/pipelines/mod.rs.html deleted file mode 100644 index 85f9718..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/pipelines/mod.rs.html +++ /dev/null @@ -1,2 +0,0 @@ -mod.rs - source

candle_transformers/pipelines/
mod.rs

1pub mod text_generation;
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/pipelines/text_generation.rs.html b/network-poc/target-native/doc/src/candle_transformers/pipelines/text_generation.rs.html deleted file mode 100644 index 6a5da9a..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/pipelines/text_generation.rs.html +++ /dev/null @@ -1,2 +0,0 @@ -text_generation.rs - source

candle_transformers/pipelines/
text_generation.rs

1
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/quantized_nn.rs.html b/network-poc/target-native/doc/src/candle_transformers/quantized_nn.rs.html deleted file mode 100644 index c39799d..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/quantized_nn.rs.html +++ /dev/null @@ -1,127 +0,0 @@ -quantized_nn.rs - source

candle_transformers/
quantized_nn.rs

1//! Utilities for quanitized network layers
-2//!
-3//! This module contains various implementations of standard neural network layers, modules and
-4//! utilities including embedding, linear layers, and various normalization techniques.
-5//! Most implementations provide quantized weights support.
-6
-7use crate::models::with_tracing::QMatMul;
-8use crate::quantized_var_builder::VarBuilder;
-9use candle::quantized::QTensor;
-10use candle::{Module, Result, Tensor};
-11
-12#[derive(Debug, Clone)]
-13pub struct Embedding {
-14    inner: candle_nn::Embedding,
-15    span: tracing::Span,
-16}
-17
-18impl Embedding {
-19    pub fn new(d1: usize, d2: usize, vb: VarBuilder) -> Result<Self> {
-20        let embeddings = vb.get((d1, d2), "weight")?.dequantize(vb.device())?;
-21        let inner = candle_nn::Embedding::new(embeddings, d2);
-22        let span = tracing::span!(tracing::Level::TRACE, "embedding");
-23        Ok(Self { inner, span })
-24    }
-25
-26    pub fn embeddings(&self) -> &Tensor {
-27        self.inner.embeddings()
-28    }
-29}
-30
-31impl Module for Embedding {
-32    fn forward(&self, xs: &Tensor) -> Result<Tensor> {
-33        let _enter = self.span.enter();
-34        self.inner.forward(xs)
-35    }
-36}
-37
-38#[derive(Debug, Clone)]
-39pub struct Linear {
-40    weight: QMatMul,
-41    bias: Option<Tensor>,
-42}
-43
-44impl Linear {
-45    pub fn from_arc(weight: std::sync::Arc<QTensor>, bias: Option<Tensor>) -> Result<Self> {
-46        let weight = QMatMul::from_weights(weight)?;
-47        Ok(Self { weight, bias })
-48    }
-49
-50    pub fn from_weights(weight: QMatMul, bias: Option<Tensor>) -> Self {
-51        Self { weight, bias }
-52    }
-53}
-54
-55impl Module for Linear {
-56    fn forward(&self, x: &Tensor) -> candle::Result<Tensor> {
-57        let x = x.apply(&self.weight)?;
-58        match &self.bias {
-59            None => Ok(x),
-60            Some(bias) => x.broadcast_add(bias),
-61        }
-62    }
-63}
-64
-65pub fn linear_b(in_dim: usize, out_dim: usize, bias: bool, vb: VarBuilder) -> Result<Linear> {
-66    let bias = if bias {
-67        Some(vb.get(out_dim, "bias")?.dequantize(vb.device())?)
-68    } else {
-69        None
-70    };
-71    let weight = QMatMul::new(in_dim, out_dim, vb)?;
-72    Ok(Linear { weight, bias })
-73}
-74
-75pub fn linear(in_dim: usize, out_dim: usize, vb: VarBuilder) -> Result<Linear> {
-76    let bias = vb.get(out_dim, "bias")?.dequantize(vb.device())?;
-77    let weight = QMatMul::new(in_dim, out_dim, vb)?;
-78    Ok(Linear {
-79        weight,
-80        bias: Some(bias),
-81    })
-82}
-83
-84pub fn layer_norm(size: usize, eps: f64, vb: VarBuilder) -> Result<candle_nn::LayerNorm> {
-85    let weight = vb.get(size, "weight")?.dequantize(vb.device())?;
-86    let bias = vb.get(size, "bias")?.dequantize(vb.device())?;
-87    Ok(candle_nn::LayerNorm::new(weight, bias, eps))
-88}
-89
-90pub fn layer_norm_no_bias(size: usize, eps: f64, vb: VarBuilder) -> Result<candle_nn::LayerNorm> {
-91    let weight = vb.get(size, "weight")?.dequantize(vb.device())?;
-92    Ok(candle_nn::LayerNorm::new_no_bias(weight, eps))
-93}
-94
-95pub fn linear_no_bias(in_dim: usize, out_dim: usize, vb: VarBuilder) -> Result<Linear> {
-96    let weight = QMatMul::new(in_dim, out_dim, vb)?;
-97    Ok(Linear { weight, bias: None })
-98}
-99
-100#[derive(Debug, Clone)]
-101pub struct RmsNorm {
-102    weight: Tensor,
-103    eps: f64,
-104    span: tracing::Span,
-105}
-106
-107impl RmsNorm {
-108    pub fn new(size: usize, eps: f64, vb: VarBuilder) -> Result<Self> {
-109        let span = tracing::span!(tracing::Level::TRACE, "rms-norm");
-110        let weight = vb.get(size, "weight")?.dequantize(vb.device())?;
-111        Ok(Self { weight, eps, span })
-112    }
-113
-114    pub fn from_qtensor(weight: QTensor, eps: f64) -> Result<Self> {
-115        let span = tracing::span!(tracing::Level::TRACE, "rms-norm");
-116        let weight = weight.dequantize(&weight.device())?;
-117        Ok(Self { weight, eps, span })
-118    }
-119}
-120
-121impl Module for RmsNorm {
-122    fn forward(&self, x: &Tensor) -> Result<Tensor> {
-123        let _enter = self.span.enter();
-124        candle_nn::ops::rms_norm(x, &self.weight, self.eps as f32)
-125    }
-126}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/quantized_var_builder.rs.html b/network-poc/target-native/doc/src/candle_transformers/quantized_var_builder.rs.html deleted file mode 100644 index a433f3e..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/quantized_var_builder.rs.html +++ /dev/null @@ -1,105 +0,0 @@ -quantized_var_builder.rs - source

candle_transformers/
quantized_var_builder.rs

1//! Varbuilder for Loading gguf files
-2//!
-3//! VarBuilder is a utility to store quantized tensors from a [GGUF model file](https://huggingface.co/docs/hub/gguf).
-4//! These tensors can be loaded from disk using `from_gguf` or from an in-memory
-5//! buffer using `from_gguf_buffer`.
-6
-7use candle::quantized::QTensor;
-8use candle::{Device, Result, Shape};
-9use std::sync::Arc;
-10
-11// VarBuilder specialized for QTensors
-12#[derive(Clone)]
-13pub struct VarBuilder {
-14    data: Arc<std::collections::HashMap<String, Arc<QTensor>>>,
-15    path: Vec<String>,
-16    device: Device,
-17}
-18
-19impl VarBuilder {
-20    pub fn from_gguf<P: AsRef<std::path::Path>>(p: P, device: &Device) -> Result<Self> {
-21        let mut file = std::fs::File::open(p)?;
-22        let content = candle::quantized::gguf_file::Content::read(&mut file)?;
-23        let mut data = std::collections::HashMap::new();
-24        for tensor_name in content.tensor_infos.keys() {
-25            let tensor = content.tensor(&mut file, tensor_name, device)?;
-26            data.insert(tensor_name.to_string(), Arc::new(tensor));
-27        }
-28        Ok(Self {
-29            data: Arc::new(data),
-30            path: Vec::new(),
-31            device: device.clone(),
-32        })
-33    }
-34
-35    pub fn from_gguf_buffer(buffer: &[u8], device: &Device) -> Result<Self> {
-36        let mut cursor = std::io::Cursor::new(buffer);
-37        let content = candle::quantized::gguf_file::Content::read(&mut cursor)?;
-38        let mut data = std::collections::HashMap::new();
-39        for tensor_name in content.tensor_infos.keys() {
-40            let tensor = content.tensor(&mut cursor, tensor_name, device)?;
-41            data.insert(tensor_name.to_string(), Arc::new(tensor));
-42        }
-43        Ok(Self {
-44            data: Arc::new(data),
-45            path: Vec::new(),
-46            device: device.clone(),
-47        })
-48    }
-49
-50    pub fn pp<S: ToString>(&self, s: S) -> Self {
-51        let mut path = self.path.clone();
-52        path.push(s.to_string());
-53        Self {
-54            data: self.data.clone(),
-55            path,
-56            device: self.device.clone(),
-57        }
-58    }
-59
-60    fn path(&self, tensor_name: &str) -> String {
-61        if self.path.is_empty() {
-62            tensor_name.to_string()
-63        } else {
-64            [&self.path.join("."), tensor_name].join(".")
-65        }
-66    }
-67
-68    pub fn get<S: Into<Shape>>(&self, s: S, name: &str) -> Result<Arc<QTensor>> {
-69        let path = self.path(name);
-70        match self.data.get(&path) {
-71            None => {
-72                candle::bail!("cannot find tensor {path}")
-73            }
-74            Some(qtensor) => {
-75                let shape = s.into();
-76                if qtensor.shape() != &shape {
-77                    candle::bail!(
-78                        "shape mismatch for {name}, got {:?}, expected {shape:?}",
-79                        qtensor.shape()
-80                    )
-81                }
-82                Ok(qtensor.clone())
-83            }
-84        }
-85    }
-86
-87    pub fn get_no_shape(&self, name: &str) -> Result<Arc<QTensor>> {
-88        let path = self.path(name);
-89        match self.data.get(&path) {
-90            None => {
-91                candle::bail!("cannot find tensor {name}")
-92            }
-93            Some(qtensor) => Ok(qtensor.clone()),
-94        }
-95    }
-96
-97    pub fn device(&self) -> &Device {
-98        &self.device
-99    }
-100
-101    pub fn contains_key(&self, key: &str) -> bool {
-102        self.data.contains_key(key)
-103    }
-104}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/src/candle_transformers/utils.rs.html b/network-poc/target-native/doc/src/candle_transformers/utils.rs.html deleted file mode 100644 index c0f9eff..0000000 --- a/network-poc/target-native/doc/src/candle_transformers/utils.rs.html +++ /dev/null @@ -1,39 +0,0 @@ -utils.rs - source

candle_transformers/
utils.rs

1//! Apply penalty and repeat_kv
-2
-3use candle::{Result, Tensor};
-4
-5pub fn apply_repeat_penalty(logits: &Tensor, penalty: f32, context: &[u32]) -> Result<Tensor> {
-6    let device = logits.device();
-7    let mut logits = logits.to_dtype(candle::DType::F32)?.to_vec1::<f32>()?;
-8    let mut already_seen = std::collections::HashSet::new();
-9    for token_id in context {
-10        if already_seen.contains(token_id) {
-11            continue;
-12        }
-13        already_seen.insert(token_id);
-14        if let Some(logit) = logits.get_mut(*token_id as usize) {
-15            if *logit >= 0. {
-16                *logit /= penalty
-17            } else {
-18                *logit *= penalty
-19            }
-20        }
-21    }
-22    let logits_len = logits.len();
-23    Tensor::from_vec(logits, logits_len, device)
-24}
-25
-26/// Repeats a key or value tensor for grouped query attention
-27/// The input tensor should have a shape `(batch, num_kv_heads, seq_len, head_dim)`,
-28pub fn repeat_kv(xs: Tensor, n_rep: usize) -> Result<Tensor> {
-29    if n_rep == 1 {
-30        Ok(xs)
-31    } else {
-32        let (b_sz, n_kv_head, seq_len, head_dim) = xs.dims4()?;
-33        // Using cat is faster than a broadcast as it avoids going through a potentially
-34        // strided copy.
-35        // https://github.com/huggingface/candle/pull/2043
-36        Tensor::cat(&vec![&xs; n_rep], 2)?.reshape((b_sz, n_kv_head * n_rep, seq_len, head_dim))
-37    }
-38}
-
\ No newline at end of file diff --git a/network-poc/target-native/doc/static.files/COPYRIGHT-7fb11f4e.txt b/network-poc/target-native/doc/static.files/COPYRIGHT-7fb11f4e.txt deleted file mode 100644 index 752dab0..0000000 --- a/network-poc/target-native/doc/static.files/COPYRIGHT-7fb11f4e.txt +++ /dev/null @@ -1,71 +0,0 @@ -# REUSE-IgnoreStart - -These documentation pages include resources by third parties. This copyright -file applies only to those resources. The following third party resources are -included, and carry their own copyright notices and license terms: - -* Fira Sans (FiraSans-Regular.woff2, FiraSans-Medium.woff2): - - Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ - with Reserved Font Name Fira Sans. - - Copyright (c) 2014, Telefonica S.A. - - Licensed under the SIL Open Font License, Version 1.1. - See FiraSans-LICENSE.txt. - -* rustdoc.css, main.js, and playpen.js: - - Copyright 2015 The Rust Developers. - Licensed under the Apache License, Version 2.0 (see LICENSE-APACHE.txt) or - the MIT license (LICENSE-MIT.txt) at your option. - -* normalize.css: - - Copyright (c) Nicolas Gallagher and Jonathan Neal. - Licensed under the MIT license (see LICENSE-MIT.txt). - -* Source Code Pro (SourceCodePro-Regular.ttf.woff2, - SourceCodePro-Semibold.ttf.woff2, SourceCodePro-It.ttf.woff2): - - Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), - with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark - of Adobe Systems Incorporated in the United States and/or other countries. - - Licensed under the SIL Open Font License, Version 1.1. - See SourceCodePro-LICENSE.txt. - -* Source Serif 4 (SourceSerif4-Regular.ttf.woff2, SourceSerif4-Bold.ttf.woff2, - SourceSerif4-It.ttf.woff2, SourceSerif4-Semibold.ttf.woff2): - - Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name - 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United - States and/or other countries. - - Licensed under the SIL Open Font License, Version 1.1. - See SourceSerif4-LICENSE.md. - -* Nanum Barun Gothic Font (NanumBarunGothic.woff2) - - Copyright 2010, NAVER Corporation (http://www.nhncorp.com) - with Reserved Font Name Nanum, Naver Nanum, NanumGothic, Naver NanumGothic, - NanumMyeongjo, Naver NanumMyeongjo, NanumBrush, Naver NanumBrush, NanumPen, - Naver NanumPen, Naver NanumGothicEco, NanumGothicEco, - Naver NanumMyeongjoEco, NanumMyeongjoEco, Naver NanumGothicLight, - NanumGothicLight, NanumBarunGothic, Naver NanumBarunGothic. - - https://hangeul.naver.com/2017/nanum - https://github.com/hiun/NanumBarunGothic - - Licensed under the SIL Open Font License, Version 1.1. - See NanumBarunGothic-LICENSE.txt. - -* Rust logos (rust-logo.svg, favicon.svg, favicon-32x32.png) - - Copyright 2025 Rust Foundation. - Licensed under the Creative Commons Attribution license (CC-BY). - https://rustfoundation.org/policy/rust-trademark-policy/ - -This copyright file is intended to be distributed with rustdoc output. - -# REUSE-IgnoreEnd diff --git a/network-poc/target-native/doc/static.files/FiraMono-Medium-86f75c8c.woff2 b/network-poc/target-native/doc/static.files/FiraMono-Medium-86f75c8c.woff2 deleted file mode 100644 index 610e9b2071ec1d6c47a7815010acb20f0abbdd98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64572 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 N?7!cn*`i$bGXP%$q+|d9 diff --git a/network-poc/target-native/doc/static.files/FiraMono-Regular-87c26294.woff2 b/network-poc/target-native/doc/static.files/FiraMono-Regular-87c26294.woff2 deleted file mode 100644 index 9fa44b7cc2d38680bc14df07ddf3f6b320740da5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64868 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

^#>IXLWsI|EZ!SFj*H;jok!m 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 diff --git a/network-poc/target-native/doc/static.files/FiraSans-Italic-81dc35de.woff2 b/network-poc/target-native/doc/static.files/FiraSans-Italic-81dc35de.woff2 deleted file mode 100644 index 3f63664fee6ddf221f71a57461a7f4d1de281177..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136300 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 _HdD`n5<@_AzZ{+=$) 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�e%nZC1!^pP?`Fe-tm;C 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 G0{{TFWc059 diff --git a/network-poc/target-native/doc/static.files/FiraSans-LICENSE-05ab6dbd.txt b/network-poc/target-native/doc/static.files/FiraSans-LICENSE-05ab6dbd.txt deleted file mode 100644 index d7e9c14..0000000 --- a/network-poc/target-native/doc/static.files/FiraSans-LICENSE-05ab6dbd.txt +++ /dev/null @@ -1,98 +0,0 @@ -// REUSE-IgnoreStart - -Digitized data copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A. -with Reserved Font Name < Fira >, - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - -// REUSE-IgnoreEnd diff --git a/network-poc/target-native/doc/static.files/FiraSans-Medium-e1aa3f0a.woff2 b/network-poc/target-native/doc/static.files/FiraSans-Medium-e1aa3f0a.woff2 deleted file mode 100644 index 7a1e5fc548ef28137a32150b6aa50a568cd53d02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132780 zcmV)OK(@bkPew8T0RR910tT!A5dZ)H1}xYB0tQ0>1REj%00000000000000000000 z0000Qg9sah=5QQ=l?Dc20D+=N2!T=wmlqKT3XYIyjJ6g5HUcCA(i{uYAOHj)1&tR6 zf!8YxfjL_}mDK{IL|ch%AbMV-M#7??B zC`?czOpXFm{bNFpGoFCSsqs3IaA>E8vzb{uH{ZmA&=YcDQ8dT^;w6%qWKI?544Pws zWmp1XB)Be!u}G#Ng%xo~mytl%j%&049`tIL$u)AFp`) z)lF;Ofpe(GTEm21fR@c%zaVQ$KZGoc%34*K8JMT=D&5#4g;mdS1t#ZmG+5MN#gfdy zUC<43b_=GmKGcI8GBg2~(XQ<-uY-ki9lLVNWzu+=B(ZY|BS>;NSJ-qNZ1IWd}m+365Np5y>HuxAxUSEw&Q3GRiO zejdA{#D?#cz2zlKW!nE`$%^@6^y8!)+4UrImN0mJfeW{UIE^ z+=+D`=qc67L!oAj;2D^m)zmaFv4WOnbwLgg$L}Y_Br#1JdbdCD9?G!mm90;^6@gQz zkTEUlOn;FHzY-24#A%w|;I;5gWYm0ZA8zaQDy*tUbV)~aq88!3>HwT#8=MQiP$L))~Yow@|Lw74+TKsL1TQ{SZ) zi_+j+V2fG7M8>3W=zf{h9NLsg;m~?uN)$MB8%zq5%%RI#ZLJ}P6l{aRgU5oIUg3u) zlnkVINbvg+QS_go5x78ee+?eSj5TIxGMWLV1eWptogdIx0|&7RZa@;Gjh?hvP{w#J z7vug9iZu{<4004lI%+W}ZJR=pM)E3rJ zNPP@sKJtVq&lnf1sIf(m?X)ls@{`I%cHGcI<|lIZLi*^Z@clRYR(-pF@+xP9oD5Kb zJi0L$Rg- zdSZX=$+=ykBB%4s4%Qc9YVCPD z-T%$>z2kx?Ov)oz0I+~I4p^lkqX=|7tX|=P<*Ef^ZA;B&sa+noLks{ONPp_HV>(@G zRDl#C`T?BEu#Pm(T(4KYA5{in`zj3ZP>qc$agHGbG$x_PYK$PjNu}FK#v6eC`LSPv z*g@PNgJm=%!AmnTZ68#w2%O>5@DE z6@_Vqj*}(VP&iaI-C1RQN}Vue^3!%&k*lQd`r1J72%ZJt@F=3GX~>*4m-~ISm``u! zl-o*kBAcSj+9L)9;2=vnz@02SH=lL2NIDg&%aa7cUQZZVAyxT*WY2c)1K6j~6FC~P zGnkFe=$y%!Y{Avd1*H@gfmq+2gJ=GKl5ENTbbIZrn=(d4|4$9{clN#}NgMkI zw8aYsEm5)?1B=_X2C-g{ZsG&?`y@VrThhzO-!#w(483XaAHa0J`)5QupuKkR*aKf`u%2e5c$wS8Gpy-BdPv+wbL@;Fif1$u<=W)K=klUPDuP z0SFX8075vHg=@MWFh~G0%FKV#75YYqBO2j?w7^IB&78fnxe8I0qDxoV+&X;}=BTIN z<=Yxw>W0Q=;%0Ag?{Jl{(=kKBJmTMNN1%lK71(667>u@LD=!n8IQ?p`6Uw47B04%c zj+w7_=DSmrrL;|HOH0`#)JM56JjxCG%LV;mG9-aOX~C-_x}sm~c;5Gez!z=yS>#C; zIPjFn%cy@e{X%yDP^RenBj{fp3n_!xyFSn_phjJ`-7sj13=56$@v`l4))1_Jf-$=$ z_HS(>A&ag7S-cMZ5uLvINK-jnE~P-63lB$W5{7Bj$$@KGq9YjSTE}lw8p&1HSN%WL zT##f`FVk}G1FB;|q}5>|7;L>@aRHPP1sIctRk#t~OMw6Y3Sex8LKeLTZ;*82tu4X> z{F+(bAL0;g!fjJNlwfz9tQO}(xaq&U3j_(0lon56v<$dHsZgUPOj5Y6Gx=)XuclKr zXWzV9>OA>nJNyCMGR#!K321JMpa2%l$j8aTX;oB-1OEBvWPh-|`vry*4lNMucwmWi znA4JbKg~B#+T~;!(`Az6?|mQ35IfwmF;HL!Mj8raQ$p^Y$2fx2JFER$YX3c8IZ3um zQbY+jpk%i@-dwMknZNpZv0BcpzTJ<1_`llu@6OgbGnzz_K*WK0b~O81!ofryXvtZ^#qW_69M!R_4sJ{aE@MUw^gt55x#quN z777~*T9=)d0Z_2;|DW!E`J&K?r8(guHtFzS^9=ldpFtB1D1G_=LLR#|EB-AK;g`{gbE|Nh)1Q7NZrT%bEe? z$mCsKnXBbqbf7P<)1*~zEeG+EmIFX-W&eFVVsaCn|Nr}x4_J1_7Pu6lqE7Vwv)b*j zJQ&QXNS9BfeHi>$EEW(8&;QS5`nMd_@~v?b>nh}AN|?kHStUhYPy*Eo{o>y8Uv7Co zt}uI6csF{@|Iz!CX0FQ!Au{+*S@g+uaGsGJS zA+ev7fQGwq5Ga3B-z+c&juu!StJ?8 z3WR6l0R{MS{IZNiFl56q{KRI2U$qZ^ zzf>@)5gLVXSUH7b-8PC*vnVWf9nK*XLLb*ZAiiJvpLF;3?%I}+Lt-1)f5-ruGD+u- zw(9nbgYMG@noW5eHO?ZM_sCcdDMFXAnV_K|aTx$){-NKO&C)rQ^5aH$jA?>3+?h5r99atsc}wYJ`cABh zS7pae2e_T*7e9bM|I;+BKfY$)VDBV4v2+MwdUIS|*?IAo#=2r-9u_qzlWgxL)mD%jli#e4arw zckX^kYMOhU=$4L}rg~vlH@0@~2>(dmpPZbDl1M9}aP`O{#Ol*|s8XAXlCFiIT1)+; z+_iiXE=s5V*h|G@Op$b+1A)EnT-cc`AzaIxNL3 zY4L)A;iPmi!w-w95<+X$*y{d)w+}6{hwUGt(@9W8b0N_zG*W>={@@L)!J-a6EK;kw z7`x!dgD?I}pan|6Ap2%M<>+-<@E2>v-aN0r=;wcWM(vYG1j0B1d#mWUuA6wI#7X@B zrs-2D(sh;7biyiZ9rK+x#aYc<_i#9Z=VU`dM;gY`6zW*D6omq(!$h3FTYxZaeCKzLk5JCtcgfOPxb|f$mG&hw0j=#oR zyKmcpNRd!Pju65jeCCgpSH}O{q$wgr=gyq^Jia^iGj}SQG#C*?FhLk$L@?eAazle$$hA<4vQhlo8teL*=kq$@kaauEeC5c#^CYE6s-svAp zvoQI49k#3K3zHtM~5~2!^kFpO5r?L9$7{#u)3n zS~*&2<@wS6#I}0hz*vZ}=%z&sF!VqhD=MJq-TlZP+3df+sazRde>!(6P@zDvKmrL8 zBIf|z-7gR>BlY|>wF?u1i|1LELx@3$sfuv_NAsl^y(ii6ft*>la zlzD$s(&p3k4JG6Oxts3sH_wm>jU&()61n#me=G$av#Cc$sV&{tRURMdiC?1Sxp zgVd$;gw!`G<1Cwrd0AMdm34t4!4!mqQZOOmh(hLPv=urrC@hKdD{PODy2T+$9wo_? zqSA7S9)qJMtJoV$E+5^2JtdUniaj}X7elE??^50)y&o%oIDq_@cKoB;_)lW|zr$+U zZNLV+TY+ngfm~-j)}`h;_nvNi|9)_4j5%@ zg34bv0kSBhf+lb}N3;2&gp5(WqA0C#Bb@oPu$* zYSdSzPs{1K;D&bCF4)qIJM8GEUG@y~9tTF<=g4FSoY?sxSIjF%T(e(2<`svvlYd&1 z*H6!c6?ShoHOYMF7?@btxp?>lg+;|X`GPZ>X+>2{T?3OWW{Zje1VI`<+%31%bk110 zTndT0l~MGd@oJw}do{{@wka66L{LgPW==k9`<*KiuAv6oAIt^{O#tWeyMM>v;@$tQ z_=I5b2_wi?Pl#OPqdXsJqpQBY^qt=fGtM*$)cA`AO$;^d!sPe*_w^rLQtfIkd2z|! z(;D~A9J2gp^W6yK?vDeGL`F-c?w0XgTQdtniN=DDg*4%K2BT=PrvPyzYn8(oKH7J&@BmpyqTeM zc7YaC7WPdO=H)o(oNNUqIbod{Q1Q9}n9Cnw3L;Wtk7all-`kOaQ&|T21|5?xb@V(Z{@Q)BC8`pgfbI z6V|N|>I5lh(7n@o59O*F13yr$=nDeorxs8im#IqB`jRSyN(sMt1wadIpO2UnCrdaU zWu@oY1a224(Zq=COfaPsNfD{vYWqQ{e_6vKJ7j)b5~+{`#4Kg1mfFdk0@Gy^g@+ih z5$3n9&u-8U$4jN!G(3_oem60aSMprp(n|I~j&Lo=Nryjev1@e`ll@F-m00hftRSch zLdQPz;~Q%m2wC;MB1n$gfi#jy^@3zyfe$s9yAj$KzW)|AppOGV;ueKF?J0Om33iZF zH2QESbBeBhr8%;JG&k?G^;uI3LN1^z7@bfffy;zkgc4!qGNjbwxYVvATG_s&ImBv>hcRa@`sN$>ALE{Y5R^Mm2oq{7=g?Xp`(#$S)|+u z3jrcAMTF~KoyZlAN)eS*onfUfq?HSy&Etuwmonp1ZCAdIgO^#Cw%ib4^x;$ipc=$f z1qai_L7W^9EW}Eyp4%AENkS0oi!3^_=pt2i3A>+LKgwV%@3^cbFi=2R^a)KMXqk}~gCGH{ zY0(C0Xrj?iq(-4X88Et&VVc)mFgfd$mQuX3y;=99 z{$KZZ?Oe7-51BQOw`*}CNoH~zJXIS#j}vI|$1Yj*^Xc_bi0Aa086j)E-rU*~?%BOC z)8&r#4OJ+1n+PQd7M=&-%&66revC~7+h`A2xxssk)0P=&qn4;jxF0}~d6LtvGP-Sn zfnmOyY2PTvVL`y0%Zy1L3j^XcyQ8| z%!#RYkY1#=d&h}~W;K)yaCxR?hXU>`2viQY476{69PDP1u`xKYMIVBp=COFjJAwgO zZCZss!%74uy}?9oEoKv#i0tI3jcwxJ1`;~ehbrBI;4p?g!t{`|cr}z!$p~i3;|3(5 zwjgE((_gOpjXIabD-LCcv`InBA(YiR_b;5QqcPTL$>7VkK*XfT{e7-c?hz7+$-LXZ z9g}_n?UxHHhW!?HU%I>GGZ)JWa9xN|TAj)=@UD_Q;eQY3oBEg3$;N9-gN3E~GbNcm z5*Zc03D`agV`kf*^fSiaFIoXvpn1uyJ}kE{JGKiWPe@F<2crJ)?3tVJQ!~7va71ic zL1tu_yNfs%NfKx!eF;_mc_J0KbMrt>(~JrBA(28;390vVBZd7T^kL}RoYgkgyPZ)# zPuLe!hgJilBlJ1nUv;4A@{O-Ioc!Gl^?9sy3YUk&`6 z6w$5AuVtT!yzByK3N6B4l0!=z-=YhY44kLc(oTrAG}rQiFfIB)<=DVDz&niu8DiV4 z=rRV(P%(tPEbMDBd9Y~+g5mC7pqaOP>gP5XxBYc*lsg-pD#Fr+6vQZNXzV7b4d_vj zDOiKaH>rOp^_q7^MV=Dd(qnc__3u%Vg`Gr!77bp6KmcupoT#@32z@TQ<{^lSQ=@(+?5l;2j{uq z4hJ6_r{rdgIZMCMvi#$_??tVbdo25oV3dOo-$O417uyN1+CHxVkt zurJw{r1I<_z(z)!BG-7ajZ!05H{k?~tp@I>0mw^l&6AOU(P8+UuasI4Pwh_(Hk=>> zl@=DnQh;I~rlaDU@JE~wmjVM%FehA@xCYo#ED94!*~dSiJrizY3f0_3Ec=h?+G&R& z&vY9!Zq~BR{fyP$TEG13=C?(G2P*f0FaRY;de<*jPj&#yUz`?HEU+t4PNtpShYz`? z-d;^W7pzjir5DgY!^uXW<7xF&ox(9%-bUHWK`X$}o6E55nKEuCPZeXXT2Qp#e^mEH zrobcrqcX{?&^b@^rLCB3gj+>-L2(BiZ$d+bZbw|ZD*m8tK=)k5`l4!qiRdY377(hcX$q)>8x~Ly$ZwT<27>R- z-HpU!|3~Im+@XgedKCBNX#vCgU3^Tm^kwsh=+}nT>2obs*i8su%!qD%p&jJJq-%H=7gQ(cqhphyOjIL;qvT5)mF6RpjUMZr;0BjVssm!zE*}(Yg)!?d4ezx3fE<)=9P@Z@{x-#e^LdzeBoAaXfw1;nHHh(#2Ec5mLE7DMFv=e+`}qJe96Sb+7K=ia!JquQ>CBLpH9>1 zr&#;1WD|PVA6cCay)S9U7z@@tZ|^_LWepb+K7#m6_G6Z_etQw3(O!;5pw`|e^lA=$ z^3_W6bpl5Kkb-%r^kK`>R?#HIvbsr=d*oZn@|hxzyX!i|Z@K=BAZ6sfUu6ERt88^> zZ-X?M{N*Nz9#cLG3;V4rOy0D!$CS$tOi=>5K zrTmt%&Pf@W^FcC5a5PGQfcPLV1X}QbYFtxBr%`}9TF^5xvvP398>yF&#if4`8sCcW zHyFNXm<%?D*q^6BhszM$A!LYyeTMvCYbwvl66e^Qp0kcQKQ=6Ko{RF!8i8|Fygs)} zoEwNcH){&#-jY9@$La6?M2nu!OZn>x_P6uC%)F2Dwf^V%PD;`!*MG1m;QZM7!3#t` zBtQ0yG>+HS1Y3+qoB# zSR%V{29%?mc&xKr%t0TLPzXBn1;7NsXF>*MA}}VX0H=VOHq$dctji2(1)HZnLc~n3fg#Hj+0Z%^u`=~ zQR-R4a;u75E1Rf<-Nft7_S7hAP1M$%Ddrz+Mig_A6-pqr5-uY*Old#dL}Rn|+rwoEkhU++uQ+YC)&C0!}fCa9pn=IdbCZwhV0wMaW$boN;uWIhC!au=dYAdL9* zI7yL44n>qvwb#*9*+$nt438!(U! zG{dRLy+G{}RKw99rO_T)0#ljkpfwb3df{hCMi`?MZ6s(?%n*5&P+`s5VC#Xz4tp?t z4v{H2esszy<2iauk(c6YrQYjW6Z4q`QHy62Rf-L8*Ugqp5&%N|N-?m{N@0K;&lCo} z8wz`rQYTC3_}r<^b*8V`9>X7~YRe~AsFYI|rRLk&69bpZc8wI!)wOUW*C~3ssp+<_ zJ7pzRft`1(r_{qz*z%$}d92=up7Oe$we)3QDzm89e(*`vo7Q`QGkqvK^QG@=|JS5K zQQmRJInW{OG-UOE#s+(bloFvsSg*0HbSzz|pt_bFr*ZKk^go$DdH+|_m8)%9*K(am(bO?-wu=uuC!d}fn{+=tmvmlzTS-C>vk z*vHet;j_P#9~h;G9Sq9G(K)TmaMU!~(er|FV78ev$1^t8asS|YbN_@qNu-Vwlb9Hh znhaCqr-aJXl7<{l({B;h)^vmobcu1!iKaJw>fw~S`!>CV=CS9^(ygT&_X_$%ey-(S zFq=b|sSejz@UvxL@lStR#!P*=QK%(9m5@pw`^fpk_o>fV1<2>NY3lSz68o&6B^>y( zd*y9!<=(*HtocUUdw<4v&Mw7(Vvz6s096prk9_fm8a3eB^K{X?SKsO}oC0np(IG(!y@I5aS{)^JLeXM)I9ZNlg{_-xLm>2Lq$ z-8s-l!5{#nv5X~2bnm1j~>DxcHamrDmexHYh+wE?{HOfabwW|B^3MtTl*?z0V< z%b=Q{82pkw>?PN8Q0zJQyyq}+(u^rnSFfIF(kymIP(14LK>&hJR!4HwU=Ch@3w0h* z2N=E2NSi?7sl#}mJh#MFu*f9AW#g1A@5QZ3*&`qe%HD4+>Q+4dUiPI~e_wiA>j1KF z>&;Z+sTGarFqOn>L;I0z>PQ*4xFtW~$7<}PJrD;%F8RWc#}QX7W|&f?Sh2!EuG;f& z`gfra>V*>Dd^2Yb0}g0t_MK=J`OC6lyT;$yNz>06R7;E+YoKr-tk(wcqRu*?g%;0w zF3$7O_>Lrz#8?_Tso}*zTvBqWt|PI3L!s{ht-8sp8Vv%~bRe(vg^)&4IVwXEi1Tk# zEMK_>t_Ke24*SyR0FF8XNaZ7t_q3Up#O-K~cl=wNA;YqHrrgrG-JE*6>G%Kj5CRrw|e9e;uy}J%d2O+{CmIgf zeeq@1I01$~g2H4nC3(@mi0qVuQ6IAnf#O4bMqs0M0>Apkpp>nnW8e9P8o7K4zP!nJ z7OO4F>k8U25)c<(Ne3{ZM3q%U6NL{J&PGtMf}!I+%4ZNLL=uHMG=K&WJb0d^XN&x0 zT^clK!g8b^H8ckVs{gMNuiPsHBxl?`j53=1b@@v?NiiqQC?$wHaR(tH2qX{-Enw#+ zZW_x#iEJa6kBZ2T>1lwL0#+hDI2nNGSE4mu@5(-`DN!R13Aboa8(>Tb;834Pyo&#( z4FIHLFi?MQqZGVi=uQj=RB%XV&`OtzAD8J;6L1ykR;Vu4RCK+4|B|W8|L<2Cn zu9P7sCsZ+SBsm!Wh23&!4ZbKP>fI>PXy=Mbf@@w2<);<9wPv&L0=By0!5`pJA|!;_ z0+^pL&>#pW+*Fhb?1N9h24b^}n<)S`ri{CZ+SucBQlIxbyl)gp>!=4SB=l{<*LV`| z?cjEKfs@p+QItzbdD-B>@*07b>teZAq>y!QvetX^1iw^kJK+dGUn=QKr5R|-1<4^x z2^Qho=8?J9GS)Y?C|G8`7dJSvJ8BTbxk^w45|I*nA4~v?%qUI$D`hkypc@#*pMx3^ey0|bzZpk0d7b-pH3Ml}+|PgtdQD)k003n11BivN zV1u%7oK!%Y_NkHUVH{gvg&7XGjTinqLWsy15>y0Ih#Za}bDBDj5-QV84GlWkLNC49 zaYY|PGsg6u&#^>%Qh{WyafQI#V4vh}2-7|RE{Hdr z9NDnJODE8c3s8A!6bvA_dRFD@t{C^)%_jPDJ9jkMDFFBLfX8`~&-2n+*-x+Yb#Czh z-g%|-7KM!8uZ6@P5)ywRB>qB3{0(U{WrwDDy>bF(b%r*lgS2@!dEW9Y^1SC+GRIPJ z!~`m9ptAucTVS^f9{UhHJ_tu?&tb%(F9zA*PJs0=20&!nGjXk?{Cm^ff-h;<}=XCnM z!MhKizV`3(P|&Pn;ovQ{8sLZgh~Apr+pVh{&tAC!Sq1l=((~upBiWbyNGBlh2vjt5 zhLZ*+7IrQkKEYME=Wb*$dT|tBTvA$2QCU@8Q#*A7B)YURJPq37lG1XD%Bt$d*qznj zx4+^#!I7DnN#`QJ8i(D>PRoM4J5xiZv*HZ=o`Ias{{ZRI6SgO&?`v~YQdwQen1@%r zCntFoQ~x?uuXW(?JGyJsKeF^BD=m?)UJjFMH#53v#}jDtK?(91-T3ILvH06gIk@+9 z-33J*=9{&M1QDf(b3*AHdE&KMnDXiJ7A&7T*SmDTe8C=$>Q`a5k||8R>3KWZem$$9 zYVP%@y-Q!1J6fok^2qGwv+keWOixpdvO^0%YecIMf4r|@{mPuPAb4eJ-OoGh&X?0m zD#f*!0ibfdWP!G)FFMe>V1t1+2SID27aibMeW`-asI=<;o!gR8Nw7q+Xw*uwcF-Y+ z^pZl7gwdgcNX4E=LzzA49Z7?j51=BOzaa$J#zYW7w8BM@*{^&DG?4}W{y6+Ag-pKc zCnCs1fJlc{?FJ6zNuFez+s3ht%zQt=<>m&!G?_M3Jx~9G|JiJv0#YsNnlNvZW?b@R zqPOW#0guu+1u*Na*c|O|7PMthR(uYJ9Q!zv4=U>t{P>7diBR@0wS557e$qbG_9x5Z z_c)OTFlQw-QjMAFxbLdJ5vX#2|8ZdA_q=c)cYJb0psCYm_nvI=AVr4=Dl+=!-4w^_|^72x`K8J6}OR&9|cs zrQgm|Ui~h`Acu=2y)0F+ic2tUT`{_{8=~M$s~xd_qqeJsN^mz-;7uw%XgOPravEU{yxvLj$%LR zu~-{H^`h1*<*)j}iAGi^M5vK<$=3OA@{OpJ#UTF9JC`~Df@(pERnDvzuiI z=};wjUe{Td5rlg<6c+T%tw+HkhQ{Mn@%5>Yl}sj`)>pLMlDJw)c*V`cOT|6e2Xx2? zBHk*Ng=g}vjMbK!9~ifC0WWa3(;kKL?}$a?*Re7GX8Cu4MgM%X|MoBusk>@D(I%Um z+Xd>_bO2&53Wyv)DSaJ}!Uf)w;0bJ_5VXle4bc_j7-R{9^ylR@^L2iYnsbkiqlsBc z3s%a(r_q%zA1vQYw3X0h zb|(3rvJSX0obi&p!dnLuksQadI8F%fde%K}`3*5HUX04OG5=o%$_k52Ji5#@oludc za$btt`rEP9|F6MxkVotM1Faq!t2o+;IlZp`)A}}*H&i{>#jb4EgKBWAcjRt((Bth{ ztolCkGQ7E!yPrb!eIE7ek^Bg+{pKV7PK~cW1*)HqvmI^Jl91;)fa+IaEdx0PlrEt9 zHD52^g|_rc3D<8ys(b2A@9=w2`zfkFk+-kcIgwg!oHJ?}g8URlWvCz#Qb$xYbTJ@r zFBKW+uueM;;}ufNMje+9Enx0D9aXhUyqR zrFmHDUo^)>3RKNB)15Ux97xeB?)BD2gS@g?W=ypfUdSKm_KU;TqPQ(&a zHobGtv`%dK{Z0{aDiZrJ69++u%TyM}=)?deVH1qSA&*x(;ew~&n>#ZNYY%6t}4`ofr%d$b5nZu>Mj?gA zEvp^Q*KX_8=pi#X&bMy6y*GgTK17Oe?8?NR+B1~blGO@OLu1<7JK963ALYQq*|AQ6 zd01itkprS=rG8CcWs2A$uEz+XNT`arVP9lPu1b`SK_`6rXJ@j>c7|-CbCL7%7jWPT zUH<%vt|{Qr8_t}yqFYyiIj_9KM3fy0UjKm}>7JhMf5yfEFZ@bx{7xVINnhdHZrY&? z91LyG&Uy}Jt#eS|dF;;Cw-O=l?4=^%&W`l@M?0z=&5n)?Y9d=QI>3I&bxbx{x~HBU z-}ylsu0`pnah)b@T63XV1j?v#eLXr6D67qRwfzKbyU|8_q3HIZuM*hK;8{9?P6V^s zA}8_u1x(t3>9WC8?81yL3WPS@5e8xSw}T-W2E#Ip5TL+WLF$6mlfBU=VSS_YFX;#y z73P|C5F9UVZiD-s-2i*t7WVs)hDg6UY=dK#6SJu^W?bIW_w@*uuwQvAAD3amBt!aK zzvdbk+&S8^E!@iop)VO1>;rb-p^n|d6zQ}CFOjfIGLDY305%Q?xBpFI2M*u_O`Ix= zZ-)Q_3Vc@m0}XH*1R)Irku0hfwH%v`>pHF`+^S5Z3ZOt)DE4KcI8rz@N4EE3^#ZYv zFNW){*PFmy07(t%Lf-|n9R)g&ni|OqHLZUK`cn8+^aQMTI}Z(N^+csy4j#7e0hsS; zVM&CQYHzD`FfA5#8srYN%##N&A*O?*HrztyF*G{US_NYBMxcMD#XLB*fMB!)~R?#7}C?x*Z- z%*5S1T2fT{v&`M34N709-Hx^YBy&%WGm&8^kB2FRxhG-@uG9S6hBCz1_9B7pg9CMf zn@IE!gbOsv&HFy&M*-vmme&t*$|(vJ!h?h&$Sp-R<}q>i=pGj4Uw<8NiV|MA7B*#) z&^}spB%C^qTXZ3!i}BY7bk`@vSyo9i`di?cl*)}A>J~3xO5YqrUp)AAE>_OsT=~{v zEJ}1*>FOQoFcvK^of5E&9}7efux3#2eurx~r!M(@YF%TZYodi|d!O0pLfazS$psJl zC>X+LO8PVU9*=*qJ~DT<*s$uhpzSFC#8=ek77 zvfZN7E(wyot&XQ9C#RlnCsGqchJ=}tukrU46>9>6$S4J+5@O%iQ3~TDLeVSZ(z+Vs z1St>ggRkoQq*L`mJrWo{zh3Xwi|+O0wVtG^7RtI}p_DPK>xpzrluZ1)0e$%^t7S>Q zT0VzMe*P0za*FG43+|0On=xX95(VQyIvg36?$q{X?;ST_*;+iNnYe?et<9FXhZbNd zubRQax3eGAFltd9;?|NAar*82{ah=yGEtq|E~ul4wsvto(FXUVaL|!XCv6rM7?}i6 zL1)IAV#<*Ltbp^LVm`RKrm!Oe0N6l%Xgq)$kf$DDbYxthFzR@qwW3e4cgF*xYED~= z8mcm3NUboAbl~2mc;Kz~lR}6f#tBM=jO|a7FXlCQOb$w$5I2Vk^G@rSqeGAmI#)ip$!aD4W3bX)0*^^0wD&;k zh!%7Ei)*Fjhv?pApsl>r&@LYpypC?*!B%^}?vZa#k^vvmy3f*0LOIdyk4 zxlg#aYS?ucJ}({sce@$Tila$I8aWiXOjWK^liQ*D-AsQGdypMyP9}d1Ffx;a|9bIA zL6TTBxiBoWMM(*zeoNnl(q%�|o|A<_G9#bJ&K$mXTSM@kZfZ^-ZYS)6EG~kHJ{! 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

TIWHPC<_9>em(Cvlhuf-BD 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 diff --git a/network-poc/target-native/doc/static.files/FiraSans-MediumItalic-ccf7e434.woff2 b/network-poc/target-native/doc/static.files/FiraSans-MediumItalic-ccf7e434.woff2 deleted file mode 100644 index 2d08f9f7d45fda39315519c4d6ffce5b84454d70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140588 zcmV)MK)AnmPew8T0RR910wpW}5dZ)H22GFv0wlu#1REj%00000000000000000000 z0000Qg9sah>J%J-i9!Zo0D+=z2!T=wmlqKT3Xa%NjPeEnHUcCA(liUwH~<771&w0| zf!B2mfjL{@ueBabVyj7^EZ$RnG0_>rlI_$|zym<{e>oriV~qL!f!#@9NrhJ1bUMcH zjDdn!ru`Q)L28U`FRCV<0Z^3Au}wKj@*qf~?EnA&|NsC0|NsC0|NsC0?=+dnR!ss- z+9C_9a_(=gpk~g8G&p7fxkFKdXIa5BuZOgeXCY{Z}= zzCPM74j6>@4o=i+o_;=H;zQW*sF}gR#NpBL6m%%|Wm9zJ#1$}Q0Yp#Kb7T&+W|krZ zIFZ4f=%>;mEzL5I)2H*!5ki)op{RDpL3l}WMY^-_;v7;`!F zV6@|#5#WpWamYB>Dlu zmJBbezQ0l=(;yehdj{X^#_L< zvPc!~R=pf$kz?avGyRyVr22rm>C{bKSWvI_J5_aB9Gs3muP?-Qp!4YBC(WscF*5Su zDfMg*bzC3ElEt2WRzH7O(<~$}B>r%_)Y{n&hF?&GYq~`rMmP21*TkRyroPJ)JJQX+ z*2c;Et~(yIWaE;%uTB@UhdDeY`;2c zgNgl3)tJ~nRE;W`xWAqIxGGCt!%qwmq)AFr>?7b4YFZ~sh_sO!Q_uOWhA;M zXCLg)^@_M(C?Z8r9eb?OoZQ6fH z!U2aW>nf0q5xN2aP8DKz&!}fN=Ph=tI)1JXl1y5ATM+M=&=zYEND>m%D-;T{>-axS zEq_o;ILops?vjv27vg%9BxE5g_p<167hUe6R)j1SSrKt6vdAKfF0#=3po=cL=;Dhm zy6B>dF1q;Qi!Qp{#XS3a-Y+L^s|$G!g{l72=W9P+NRN|3TS!VGVf;NL`P}X3*DslL6M9tZGw8dn|W$1nO`=-QauO@HN3qQSNZ7C877{ zJZ26tCpS3?WwNK6=v4~hkrJN%IfCDPGk;wx>~y>xI1a-ol?^bYgjSsZ;Ndr8wVeJp z#@@V(Rz#Yimm7o0S%?-)cIgkH3>f3t(VDrrJ(@X4zQ80LqiPkoN>^or2th!FEm}?g zWg#H}iE=KOaa5E4f+h6(%Kc>^q_5_mjkE>2SB@XGBCrStzjLs$G zXZZzLPt{-@Z>=RM_?L96y}Kf57feFQM|_wT3gABm{HOimcjVg4?iV*y>no9xppgpz znEwBlw*K3DpL6bw2&EJ0P$tGD_;R3UAfK@kcP-2}{9K`kf|5dus&Bemoy?{^88EED ztZgpwv)`lXuvnN50>N-qfC-Xb&44eh&_JdG)PXgww1>Ivtk08o()Jo0Tm-?^etf!5RK^o#mT7OTL2@7{KkykBOvWPwoH=vCCBIP1~a z(v(Ddgu%D`rA61fDXzZS_0?O;Kr)0BAQ|WdNQNJHhV`G3XR~wgK0Wv3$z5eizjO*v ze*n0J2w}eKT@`*iqa;UQOLFKQ02jit>79uyLXF;_Z90v63ciiMH{;y7xR(buOF&NF-tmU%B#FW@+3sU@6-L4x1<(ux0oJ&7~czD|1(>!6=mWym%NBEU3_A!MFpa;yZ;w;ikhxEOq?j&YD^b9f*_nmp~M@4 z;w}vGpr9TK(yiwV{32|8B2HBl@4wm70M2NPZJ=|}rRomQKnD}xJA132@;_Y{QXi!v zYLlXjG_#;v!#=B>LI#;DjgF(3hX9~r;@t2DsA=q*2eeFRiCJcRWss$*9j+?X7$ zeP0VR{cu^C6eqG!nQxcx*#G`BSCwY{z4g!ikF$xL>v zKC}@cs2})M#s10RoIGCgI4>Ht$*jcK7BlLIYOjr;qZJDN|4%KcuHQDzrrq7nB9_t= zfJ)ADgIVkv9`-j(>SHm&EbtT!nQQqX_`UaK`9*t2GBxK015#iB*Z^| zpMnQy1fv+xmZB;B50+YSL#g0-cJa3KTH012Dg6Kcv}Zc&(k6;fkCEVA_M@HT(I(H_ zP(Ln1olx2cgGIW~`d1#U_WYD4xI_q%JjI_oOtXr`RaUkRVPqk`{-(cMJWQGitOsCO zMHL2!&A+Ky?H@o|fz$>-((TfjzDV1Re5u}?%B%KWpDN4@2;$Fx0RYngN&`@P0wGx# zfRqS;zGD(ifx!?M6oW&i_537m!T==20Yw{uHU&W5M}X3aq&AR}H)M)(3QC(os4nED zh(&YdbsJ;ZUUg-0uTRx=*OvG9y{Ua|-^&D;1SS0yHd0&tuQvKsi%r6iZJgQn z9`~GU@H{hLCZNm*BOn1%aAW}qkOhFG?lYNu`4XTKAf*B+shX736D+C?S<-Y!Y9|0B z^+ifmEmNg7emUD&Y*?i+)iqAtW87}T>OXe(XI4GCUiNa9vtRaZIexU(r#&Po8TA>R z-R`P7n*T$vE(k)sdffxv3qcn4RE&#|c6QapxbXbf-kP1WfsmWvX^Eona+`Sf&m%>l znvjgzLMe<*L5;)e_o_Jcr^;!|B=nKThy)wJumGkq*16uL>7LuAKR2aSwkf3v3YyRq zK(R~U`G2))@w~gXgsX63vL5hxvaSDx`L~48+g?nq^M!3qG=&pZZNNuF&YYY>$~4BO z!3IIZrkc)@i=5h~Oe?4?8ncZNKtAuuw|SQ0XKESdbXXJUO6gO#!2k1esyiLGsR*TV z?|DBd1WKd^3Q)~8uAt?J#1rh#8ju2cEwcq^;`92S%YVgJcV^FMUFrhj(s+0bjc5SM z*H!+`KKi`3cp#C1^ctis?vy#lYyu@w} z`>a3#%*3%+Jp9zDNWr}Xx#J+RKYRcQ+JZzM%mNIW7c_un7s}}aNSi!$ZRmMDdB*!V z0BLjbl1^YOGvlVe1>I!>!}j!h=mLxa=>ovS^8KIwjxU8>B=Rc@I|ucLGkxg|Gi6MP z5jYft_1IxpAo>BW0K_ZOj!`_AjI^WQB>pc7;fA9lq80x`?A(iUI;qYS=PQ`n9SS&*5 zR45ewo4u}3DWdz%h$5mPez}a$h~)Wx55_@kwwHVA|bVl zSowqyB()+TgeAV4-}mptztlqt3uhAvA|etlmqCI^{!&!CIkD^{L$>XGukQ;X7-NhO zLJUF}Q^IV}c3Och$p!I>ASBjFFT5o0{aaFX>QtSmIB_B(BGwvfMKl7aY+5{T8A15m z8|_|FSP3djH9`pS6PD!)E2}Gnf0sjkGAvy(-5?@Gq=+0MAxJ55JbK8M|NWt~PxQ>& zEwbz20TPH388|mL<)7#@9F>PlRoelX(rr*jq8Wh%R~2Xb@9rR*QVUYC?XL4W8mt5f;w=yYbSL(I zFH`&fRf4y~&gQlMx7-qg5#SESfCLh#%&5fY9%I_~N7^gN)xKsmiAlFLP*D*EM(@`= z7z9-4Vqf!T4MC6!g_-QNpKr5}R{o9|lib-*6!3u*LEPu{UlULi=LLJCQy6skjRdt9Vtij}mMaxRTb+hl!|4D>@LtFSrQ;N;o0 zFDSyZOR*GZeWS=#+5XhZ-M}aYX;e%h%?`zpbW)r{ARp?9(*%oQ9jqJ?Ml^ZJ2G)GR zwqam*B90Q0f;fALUKs%a=#C#Zj#>QE(fci>zpSm=()ovl`PSV3a<8}SF#y!Z+dUv> zirY;fggo_W3Q;J~FdKKlPj4BkANAfd)<5|)VBCK*9a%$vKU%W+kJIrQ^L3i!o4M{^ z7Q~=P^G9VM4kcR3h6H8W%7G*mQqH?u$i0AHHEbnlmTV14;+eC>D|P(YpKXRl;| z7Esk$zfP7ztpGlLo)5sr-h%-lgj`1stiWw%XqN~51s zrB1-VeF4xD&R!O3Yu)`Z%DzuL!lYeAPbv)ilSCn9rCJ0#qu$ z;+du8V#y1qA$3}!+uwmMl5}s2HSq^w69poP`{j2ub zc65|AU(q`;-j6a&jRz{?w>>YoanWTF^0NSDA^Msc<-5EeB5)r}VC_U=E-QT|0F*LJ z>A*AhQ~VM=Ss-YnGvR0-bc+}rpeZ(?)u&XuH0MNJ-|CYM+r3m6OO#}%Jo1^n00KWdLh{|LJhPf-r!Nv)MB zMpi@57;9jc>>oxid##cZo)$|sylN) zg-*!Ybw+3!-}9pa+74za>Jcq`75mYY7JXCB2)vYf!!8nH>`%xipLJqmif-ZEDMCYK zRa@9@P~cX`4#dV--aXR)K8BZqZ@>-YxmL-?@n4z#n9uNX4 zunqyp7g}G+%d+#6p`W{DCKxbU(;k^kSyA{#d1>GqVO}d4u$yF?>EQ69d_5^AuND3! z1PLgIodt5?BA;VE?99kT_A+wQV-Fl@Jc|5$^%p43G2cjPezj9GA!Gj0ZD3CY`fK|3 zai_(Qb^=Wq-ZdV&%aHnBL;g<`mD9a8u?mBrF2b`|C=g~U{LTao4LGToq(V4a(b{}O z`U|bPucdd1iwgh$2T0<2Vf3nzQ{;^AV%4KgnTObj&7~XF-)boDuGXw%nH|&a^Yz2`#blZl-75yCm9>ND+)~=qbZRyxq|M3}Xb*Yn#3$tguB?&gQ z3`WuM#RoJ{32kQa@zb`x$k($zz^nmR34(~OP`xZbhsa-uI}jFdf0$*7>J26wuVp zZh+O{Ag!O`%E0L1mUJ{FiKjMZjuRedof=LOV#xpXicOTx+Q+}7(s&i|piyCF-}Rbp zJ!m2sNiBB=a6|Ln#NJGB(V6_iXK);lM`IeLnZ+XunsYZa+%jS78fAv2MzU|!^Cmqp zeJ6m1^}v-!<{yyiKo`BnQ=h4}*E(!(3d`^+_PE!lk)B%$HHk{anDY?D2N}ceq61AD z(IM-Y#E&YE88Pu89i!T-X&aL==Anxllm25!ADuq;=n~qR*;vDD31_3%q;d~~%KzI4 z{uvwOGGKv3%UZE&oAsiWs(Iz4zG;MMfU<`X&^p7ShU8SE(&7oKzY$MEdjK`A@1x1L zVh+dn&121}GItlWK2jm_+op2C9^dfFH;h$FW`63hG+7t>8rJ2XyipjzpND^*&)dUH zvypo)$DS+J5{~(YWI@>h_|Uj>=EZkmiiCVc+snEa7@d?1KErSFe5FYrBtEhMBqV*Xp^lV)yt{HWSFimwPt9CJESN>yTW!-SMM z^>%+hDl4i08dNY2Q!pJXVGXROQPX1lnZ@?Kru0K7@YerwhCv&kbc*vR0F93KNJU^| zmSS-+6~5Gn4L(M+ht~Q$#ROOT%L-ta4#;8d840W-N!Xa>GSZaNa5CklyMs(wqD`)* zt|43T?uiNUZ=D2DD7{3I}_C@3fH z>=pM5rU2@Ts}1<={8e8Cckzc~XeiSoocgBiKdbDaT*O$f5FE0Z3 z3tN3sm0-wsfkCB*Q6<97G@n-fU#G7)c6j*h_J`5qs46l*NnC22l0rG4m;AA4iXd~WzR8c9_< z3nWQ~A49%eB6t^GeVF4J+$KNk>g@&z+Fl`JX#)~lMo03e2Qdc&$}T<{S;~W}*Ak03 zLjf(=YJBXbwQ_b=TKh8N2bH2&@gtA-l`p#`_%8hZDhls+o8!Q5VL|n-Q%;|$KBYBS z(qX264JvQItrSPVl9$+xP=ry!#`FYjE$_yig)V&{_%S>!{vGrwTsdFC0s2-v^>FOF zOU~28)Xj=}-H#$02Z;$H;qkAf3lIGY#RHTDdyR>>4LQM9Z0w6 z<6nBxWlAA%tS3iAw&P%#)BAtQ%WR89rwbum}#mrz5qb5N_=>vTwz*`vO-x~pqo zWTL(K(+s|9rJH*ozfAIE1mr6t3Mw>{P&AFjiL_D$%Z5QIZzYj8Ix@qkn#SrFn+rZf z352XJ!}q1WY3MQ4C!JHXE@)v`)|bGtaoId)U$%}{!KH|uh432Eq@QLR^M*}d)Zt-) zIVKE^@66T)Vxnix8Q4%X85Ni5-EeJPaBlKT+pXhl36eX52UZ5+o{glF4g2nz_p_>b z|IodbEk$A-p*DsR<|}dmx=ni9fh_=V=)y-2p_n)-WTb+PDDe|&F|EuS=&n@T7G}c6 z=ZS!b^9iShhfBjgj-Lq$S}bCVJ$X`Djg&-wqTfVEVT-Prf~)V-W*P*b31k z!kc31l$Ao)SkE0}t=JK3fhxUilvAI6>Po;;Yt>A_5g${3uv#GWY$5qVTfy-hL`mVf zktgTbVyP6DoG%X{SinNS352<55k{i;xpb*8y_PgPmoLjGMWGsfgsHypV6k%BYCJwc zZ%ZtdP(rR-yq}4Go`&>rKu+TUf%f$8O@`i} z>;$6=ktPFtKne-3Qp0Hc^}Nn1&j%QCzKpSg-^Ls^#}>B7DR$x-yqDcW@~zm9!yMdn zlR3&U#c58?QOFtTxwrW_bHQ=>4>PWFr8gl-xfO}~+|kgHv}r&esy_~uoTofe@jUl4 zk9X(Fd1-zk7UcI4@-ONvM1x%>ZzUujeN!3jLauyuo*bp>yvnLCSp;}i(OV*@Ky6U?mNJWDKZI^=_5b!u3x*VLu&GF2aiT*;@n;6>sd2Vlpx%7-VzEv}k3b zvsH%P-1vtNX${sa1sCnM7*ac`>_W_M>Ya74_)qQ@?v02CzZ0H(#1BvUGtJ$X3|ib z-k49%AVm#fN@w&|*-eD(^fLqO2fQ9RduFBv$i!@K&*qG?K?Bt5g`YnLIQX+}UQNkU zI(pNO`z1J>YA5YFMyzBVA$a4-DF#T!m0pb5O$Pd$U6FHr+e`$z?F-uei4(|NaOFAvbzGP$@@Taa2AFjgd*OHd%Gz-UTXPQ+DkWy1gCv%S z$Ikp$3xScKiCKi?zi(lxrm%>)#KqS9_iGTU0sF(aLjc}k)lD#4&^)u2Vz?vh`=^ma zNcK7qYEBa6g1e@&vwMh376^$~ho8PpdOQB=8`TkRvuYl5wFp_a#21T%i>nKFuDMKv zB=|1Gkn_vsIFckyIwVCL8%$j7B-m^4L{B-BB<`)7Xy~?FOBz9FB_@{irxhShVb|+WQ04aBxEw}=NT<9c)rk={>`!i(8ok3XZK7lm9 z5FEjSCD(__O--`els9&}a++%cQVnN!oxMd|K5Z>MT1hasBy-RJ1YDx_TnnkQrtRdLgR?7QBj@AGf*{}dUfn6$K7;g zPfP@BvTyLPARoFVUX70D)*D_n8hze@K^SA8;{q3-rF&+|fe@;u)X>C)t6lRx@=FDP zbl+AQuI2%b98M#)p}tT%@tlwhssc~SW0~eA6_!XnDNvAT!O*AWU=A+^%-?$!#;GL6 zByF|{n{@HC<4x@xM;aGS2Fu<_Jjb5Ie(2$CBpXW`bFBv@LeSDgc%&&3CIQ(cz zeuF<{I#$X*$Qt9T|A8yMU?1VjP zzqXb`wrXX_qdCen_v7K3WSOjBS&f`(>vdYacWq?0(AMTsHLk^Wu$z4xFUiJ3;kPNw#y1%Z^ed}lC{ONZ%PuqE z=DC&CPn!8-buEpV2-~W~hhudMc-nY2(3Kl?3aT5e-#}%mQM+dH9Z6$Zx^%DyY_8r@ z<5i|NW7mb4VA|bbO5Pm(RE+z!=e$4n^@V;X%n@hw1d@*!37n2D0}v9h6Rv`uk6n)G z0$!Zy73i=}1N$-mphzJRRu=;$7U^cdA#zzH2U*rAQz zd@V#5de)N!+CSC37L@bh*;Oxa*=~F7rhV_7`}Wj_Mx>7s3%_udcdyXr+thAU{iuF! zzFc(SqHizxsd_QOYjM$)&NZ%Jh!#qqw9-L^R9^aY>sc*iz+gn+TOzoT8Oi>sCufUUpW%ek2WE5^rKv*>1M43dUYKbMIR2#7IXBllpay zujLjy8E$MMV-DaKGp)1mhkT-~LfC(?W;h9im!RQc^7jlA(lZwENa#j8V->;%z84C- zAd1ZEb5gQXoT1`Z4Hacnu#E=QtXV*dICQ8Dg(M89hY5{dn$_PoXuJ^<@t15ZXnu7S zTYzKhF`{5(2C;w!w}1sNkf&(MuNo?PJtf5^T^aUN%M_8QNisS_Iwm=stfp$F?;rnZ z47N4@Tdi@|?$h~i^*n84n#|7#4J@LFk(wYkLuqlOay$U?7W91ce4kQdA=dt}Vro*l zKPW6}+kd((Zbdk_dH4hbg+xTfllWfpQud?~VY9`-&BG@kDBJn-o}*AgtEywL&0m^1 z0irG$0;;~Dv1#U;S~u;w>FPSg6NtKGs(yxb)3@QS&CLiifR!D{3F74kUy$4Wqi*3w zZ{4iNfWZ+ma>&zP-QHWJqs*-)4NaVuwhoD+XK)+!v_mzt`?LS+Zc`12rWOp2K%&EL zrML=&UiV*BgJ^2O;E3=<=Kr?t*zN5v38=XLT5=N9lv1C`MHg1^ObMrKK zKhK3TiAJ9pxuiHFE1k^!eHD!>+t^<9N6uR(>tAc8PtLy;ll<*{YGtO?5NfN;jS^CVAEbE>4lTq^3O47)7 za#Z|r^y|o^T8p|^#}3da^1@`1#t0JCeeqbo`xB)S2{vu2Dq*n()=9kIW+j5M0Y$Xd zKr$F7j5eT%;N~Um8vgm|e=YTxQ382H{1GhDfdu17&<#f-5{d(l@8SbyQMUlGYh)va zfdUw3TrAKAD6@=(Ys=A%0j4l{siZ0*S(1XU9nuegqq33(aR5_BhP%vB8JXrJ(^I#< zJww)lGI(>MlB0^dcVG_sii&o*i0(S+anJ?roR_O+&b-UAFDIawDE-a| z%cmPX&|Xd+Ho81EUCrmsZsBR3GqAH$5v@3q8SSb4F+7j>)#VL^yo|g7m(-*B!AeHE zK>6r`c}o=3P6M)dQax@Qao8NP(R;tn1!9-}DG*!+Axoh-(I^w|HcWVm3C(7D{V*^6 z*`jt6rY<&g;>#3Xj8{fu$VI{1`UM#Db4DqL{5GdXI>OsV1molD`8DalM zvA|L9ZJ{g{_5)ccge9e#U>52FqtSXU96G8vUf*X2DsNgbjbkRqii+?S;6}ap0i7X? zyFdVdTvn-8ufJ0jUj}p(tgU#^G*D|sRtNc&(WJZ!^Gg7k*GsiR0ictrxAS@#kk&{c z@7B5$eGC)45Tb#>X>^#vT+--;@j>Z-4c9>7M`?}bELhKgZ}e+Ei2FyJ6e?b1P*HWP zqQ!+CS4RzdXVb%=`g0ii@K7CXr>du27SPpsYuI3B5OKCtdDr`4me4?z^RVuO8M6y5 zO;3%EI>3-;pGQ6HH~iXA-BGD!qni-7(rl-MlMVT`! zxYgV(wF_U(p=*5Oen@p}t1rOT`S>18-OxrFOOuXj+Hde$?S*4XEEITKgtyBZ*%S_G z>{P#kG~^|liLcR!M{2`@lh=lUo=TLG zZWn5CYC(K{bj#HOzN}2~O{FRw13{aNwiSl{+@^;~ao5t$J6!iKaUv?CNshP_%koO@ zPzf!q6rs<+G?i?8M5Q9U5VxcIZy6=|WJ@nG8Ll+GeWKTKdm3*A~@`(6w%uFY*d2(Zm;2xoo6h_P~o}?&RzWb67eq!LY58N#+K`!FyG(NaKO!;xi10_0vZINA(H5$ z@gyo-(L07z(nB_RP+Bt3OVx&!>U#jg?8FZ$0I{loF3XcD?ZZPF>oj-se$hIWMMu!5 zxxuSZ!K?{@tz-uXCqr{@Vel8s2!$D?Sim5B%8U;Zl>?+H+Eb#+-O3W?T5PPlQh}Qt zXRAe>$J-@&RrW=_Fu-LVy*#O3FUSE7gpdM;f{9W1&l400Akp?HOK}W<;)gCJXs?2b z7)iKl8<3$i)P@piL(pw92xguv!8T4N_pF_Ekw-oU6e4QG-rjF&LLU9yinFf#br-lusF(T};ll#Y! zaW_r^qT`i757n)%3`=Y+=I4S}5p-3irB;~wLl|;myiK>c@+}5`iS<^4w`^2%ZUK;$ z?H>hQ$ChP?o$O_Azfoyc`6|o^`y;b(xL(Jo#x!9BoR1SpaVDvxGIC5(k;_y;4GlDz zo42Uo_Ppbln(`t^m7~+1;-G&$$s?Zd+DzKWHQzHL8BNo&_nV4oz^91^$!R(*uqGO~ zY49jN-9?3}+RG3j8QI~R6jZTJefIfN$@N8tvUTPP3a=zH}xkR;? za9rJUUEVi4ym5X>;m%jm*BRd&``$hmnn5CqY4lYXX6zDMr}q~|`Ccz(juiUtFr9o5 z0)8FEEm0j7f)q9x~I%^T5j6DnZ#AI=v*)t2C)cf1}1WHQ08U6tl zq!lg@+K64{Bp8fG;`ChJCz&B9WGHH>9HENVyf!4=QfA8K*fM_|B@)_39Y|2n<3Sve zld>ce%LX+LJvk{gROr>XrsjgLpA>+tFWX&*f?l1qCY}iGKWH~f>Q{in zgoJQ*isXlVWu0(jCIwtIyO7xYaJtQEdG|STVPOy+h)iUpFIQgdr%}JSw16VNWmwr;&LDRQ zD|=~)sALV<%Pc66s+zGLjjNKDDYe8lIqISw@Rx#h8p099oKV`xth|5j-_gh;bz!V8 zGc68w8gqJieFeDdtIGGgA$k97w(V}QkJvpaT_)d@*?sQTYzty|^@$F!e za2;-5>W7yG@>OTU`uo@scJY2Xg1cKME4U#@zQjrTU47S?nOKz15Fm1wWLBxqLmKPU z$9YF7rd2~HcT)cGN~TvZWHKHF{<8jMW;=nwSs>^ozrp5xNBl_(8)`^+9$P2bx(>yv zGOmPChI2$pS4dW7Rq@tRIK5#_s~IP~AX%H!B~z?pJs!|VC%K#T(zaSQq>!vBZcP~D zTS74+3+_Xr80`(aZd^pNEGbarAD|k!_t^wrXY{sIObV;4L0PS`7WZ^`@v0ZpFqpr_ zG8^#sj08A?Yo7WM4M2#<#8S0tO%ow~Tv?qpu2~ovvTY%ksuoa-y`sdptIm5})*DN+ zk50lbdmBK1cgepM$1Yh(G_R$LWzKc)DZNw48F)2yx{Z4++2xnemC|oy*0@>4`|G9w zaagFXl)tQbcb){7cl;S-kn>!g3>eeAQ5lBLG9!vDC>v+G;})Mo2)?>D-R zq}=QmrbW(YF6Q6fR@_?E*!Q}H{Wz=B0>s=~OFr11aX6{gtRwO{SJj^!_T(4=&qPeQ z@xhFfNbjq-%Yu8^D_%2=PkGZhZ+Y8mrw}ET&xuq4y{gvIKs-8|(+QXjl|M~r*qoD2 z=w?MW0%5FLqN!%9jpqOiZ2x-$FM-Gq?o+T2G6jucSC=&q($1gLJ~TowsK{3t2z;)e3o& zk(YmProS)Ol>`fH*n$J@B~Jz8TOWeg00<(4NF!S7eJ8%eQpEIL%gN?O-d~iR{oki0 zN*+qa(v$kOQ(b*DCSd=YUt!0ODXdS3R0^Wb?i$%nl@2Nz|5%0%XZ&DnItWa?nV-|O zmGxb>-t{aPB6UHHw9F5cQv`AyR;$!5fcM@VX!9$2F?a{R6ILXmVSplLFxgktn&Rq+ zXWN$ZpA~=)k6v*h*O9)e`(^3Hy`qc?YPU4Dyh6l1ETuOqD3^gNiMB9pyCxs({B_!q z9)JH^FMMxyx$lbYJu|TDr5U;3)_H&by_wrvR&N9@@9nb1%wCd|Csr z`+xmDvz7NXE)T(alZ6Hy&dpMFTKC%_e^CPfo68N}Zwfpx=w@$Kj0ZypPX#yIxONZdGxu=jIY11?RAL%i@!akEFvKYAGI76?N8<=! zh`CC_N}s{WoqCVJYjd!-GA6a@2j)abt^%BWBgpI-$8*}113m8@b_ryC=W?&R zTnSAxP|=gvn<~U7&d1MN()+;6fQuRA#fh}uN4R4f-_0RD+t6OjHd2XFSf^UHLkuz@IAAylnV`x%lbbqJozV?u(<|1c!Y3y7*-p8XoJ3 zx-NHYY^q@2Gj8koTfO3aa?^DZP)H=SzLDX3Zc4ZzVYFGY)p7okMMCzExME%#a*`f0s#tZoa&v3Bu4OL= zgw+D;O!MZGnIe3EndW&tq5PtqO0C2t3q^@0N6mV&pjm|YMns}E!1NXlP*KMfb55C6 z5wf;GNVA0A{LthFK|;Cx+#!r&wksZ{WXtz{0h_{ZRJMxA8lzA(<{0Qu%D@&eueun9 z#?~?oXfBt&3pBdB(2`2E^=FG3>isxo-d#wTx4C_6D??ZOx*1V%kKZ0Kv?V1y6nrn3 zvyu9|6RmypY<;+Z%%@BL!Mo zY^1p&=5K(>Bi|`Wu5Sc!X`nLX%}XBvv`8OsO7ycPv_@X~c5Yv)Vd<;V3XXfgT%;$% zuHq!0l12E-G?;omrhH9)q-0EaK$-RJh@j4y3Jtp=XaWA3dO#}>S$+OTk5}um42)X` zKJBO1eYv!;QGs2Ri~AcaXEKD0&zI6U(hsh=)$iIH83TZqEw=^6=fE`|0rI7;HdPnj zbuX~Ey64@U-lnhbj{brHhcQz_rP+Q%TrTCf^5)Rw%e9?Iqc>DEcVY2)ETeLhE9=Yq ziG&?c4O(x4qfr-1!_S2A3pHxY{=YM=qhjnVMVKgOMA{0;(FX};Ks$Hty z_{OM**-v@2Q*3t#XSh_%Ge6bLjW+G-wKfeU^aY!CMT+Qygs7%gcqw2r_6AWaE&J=dW-hdxEWSzE9M;LqE+emfc+g9kej-c>v7 zm%jJ^F61WA$Rnal#q#K!MjMj{_jQzcBKheXcW!E-R*W*r3zVEPezpT6-f5$5>~tbh5gv%;4sGIpZ}n)D*p%*iiIpC9ac2=VbV9fjntd9}>UOXk%^iMW~~7-N_4yzGi}6 zi>pQuSk+-!(QZ65a8(z531n<`B6+eO{$wqyNu93ZoIeC;*h#AAiYePtbXc)VbBu3n zdK#r(sK>q~evVZT zV-oa9#{|v{(BjGZj+@^UhcpQVK$K)}Pfu?BC0i>+muNkoRH>fbFg}Z@nGPt_%0^0B z1S{P?K%=Ws#Jt`w8ZsXjt<0g7EwCIlUfP2Rb<%%*HxdNtOZmen($B2cjGw9x8*kO^ z-~9UOiGx9nLm6UHly4eURO->0svE$_y>n-V0y>hh4pC3ap2F&`qwGTcOgpH=(k-tc z{LnE6Krf&oR^SzYFZHPyy5PR%r5ZZ1fZ7)z`w$IrISQQzy;h3CfD)w7D%5dOLMo1U z0m#?-u?V2UDxc#Ij!fmV%9&3$s~?`Kod(sOiH?2L{rg_nS~;jw!>oom=4C5o7=OvM zOn;+f?07(1=xY=_905O|OT*e8Amc}gT>nr@CfMHF<+0`iG;lck7LMxiB!?4)rh>D^RE_)s#j9xsx~ z@7nAyz_Q9LA>4~dlLsI4QnR9IQDAR%Ny*t! zUc{TMIOb}@EX*WZB|h)?GW;Y~sZSN)y5^Wc5m&k!ao?XMdf-ISG5XAWMZFZEb+IDz|pMvHFWsWCMc z)-+TZBeG$#2sNb`VFeb^CX0Ct2{UPjh~LLt_*2haPtS!pC>B}7h+#GS#PG!#YL|WT zb#wQrdT3}x`}iAgGUgrr3M}dZ;(C-X>!)!jJ|e9vTFfCvJ(uU!df2G3wcqc64s}4x3^1zwFEkvB%s}r5FO*?5@7pqa!?$GgbWfWH9T9N_Z4xrHk zuNVisgJbu7f^YByKj0VO4-f#G0KlFAV1IDvQ}NN@1hDnqO_u{#0oMXIfSbW>I6XQW zE`-~|K$zs%(Y@dS@G#h69RDEzs0l<1VvyOp@`|xyVwD${R{9xdkzFo%=3i*hC6-=R zuXTzsI;-`lE-{h^*btVn1@KSyZ(b_yrGMMMFnt>^99#=-26uu{U_6)#W`hU7Vz3gd z2V21|upc}Ho(C_3H>dpa_rWLN82ASK1pEQ~2f_dm0Fi*mK~x~>kZF+F5F?0%24cy1aK+0z(9dF(}Bm`Gok$eJ;cvP_MMqvdN%)V?kzM_MAh*}ExC z@oAu8yDho zT#K7=C+^3iu-#I-WbaPfRKwTplLKelC@HeI6D0s0{t0X;wp=nOY>ZQL`<|~7qy}k2 zI`Akp0L{R;;9}4kv5Z!pkAOQ%%2sa_C?qatP+n_8yCRFpQ?p54jjTX2!ZmssDH z^m02?Y1K8>Ubiv+vj780uJeGHx7~~pR0l>R?>%`HDx!E6NKS6d)Nij5gb|b&Bo&dE zC%RXMrlyliBwAI(H<0|q8uIgNBTd7CnopXF!dZ`}t9wE4n9?YOE42Rx|t4qe{{$8Kwr(|5MrxqI5_l{H`X zx|gDUr|3T_=3m+m#NzWLLY_=Y(-g{Pm@KPV=F4pfE1_kUtgPj1X(flyDi1v?+lXcd zjCt8XuZ>setq&FZL$Vx~AiT-Whtu@tL@y zYxlj$WL+;O=UtPNch~Gx%nO64s)D@(M9r;`gMOooZGWo^@j$r-4NtuQ>{j;HeL4EYo7xSI^?h;jv8lz z8D@Dwi~26#{Su1sG>(=hys(Jvsm*knVYIJTiAMq*1KTUyB!%WjHt`L$E2wk}3B z)yK5Xb+M=qR*f*HG3K^fn%DXc&F^^MvFVQ~9J=rtCj(Iy+(t=x@EkQ2fzM!?{3aNV z|I}t?=d9)=qfo(t!sqT_tK7@s*34UB>*uGqO$%0f1SnM&wHOV>E=hAK?R7D28IIH# z-L=wF`xEG`b7%B*t^q?$H{(jP&AHY>8*YppDv=JdBCeTr)~(gsuxK{xfD`LCABn4Q#u6x1e&V) zO1BAts5ghAWOBsDAtJ6#k6t5Yk$586o{kSZcF$7?0zJ^I$AA%I*4u2WZ4ib?X(tC> zy!r4KC{C<6X>#N`hlU9wqhsR}lT*_(#M!y| zg~g@i6+GTth?cQ3RaVP-+@yd~zycNcAO<-cj{yS7?PgQ;F2xxXe(yKHXdjS18njOY zt4{&b=YZY63UK=Ba|Uj%IYUj$wDiUMj~ROcPyAr9$1Sb5qi?c4JM3GQ>5OJO zdj}^U>e8)8pMI#@IgBuzASwE@!Ty0{N7EpK6j|huM*&5YP(}q+)Dj~LX?=sncR&gK z{eAqxqMBN|divU5uQ{T+!+)t7=~}hBmm2CKDX6v4w~ye!+yM_A6Y=y}l{k5|}MknhAW2}O~SQYEOpL~H@+1OC8PY; zNtR6Xl(XH)KzrC2J#C{sIJDhM$mmvnpc`%yu5inzy5k=E;`2$}FziP?FzRPL@#3Mw zUb*XucTl_!cf$w2B;YqQ@IS`mU%u)y6EHC&icoTUCmc?==i~c45V1Vsxk%&%377W| zL@KZNBr^GYJ3;(`uett)pF}P{ldyO$q4SRt4*w+K^Ung|B3uJf#dS3kl!3g$O zMg8lVyy^9hd>FjQ2Sow^(A&kpDIg%Br`=H)vk7C&zl9i!iHrT7 zoj+J)$|7k$PsFz1uz#WRKgd_a;1Ge&p#xYP3LnPzHJ8JO?4qu~=ZFXri&kK9L^R5u)@z55ofWz;CBlFJ0AN(AH{aU@=uJnZdb$EfS^0=-DN^WT_JGQp&iG7N0IP?2T_UA=^{oB7p zA~Hb0>L6eUFmmgD=p0j+nOMSVvu)>1*n{Gmf_Z?W8@yJdm=r%M4Cb*KtYc$aJCI$R zT;wLs<2=sm$!4*QzWNmrX1cpBX|XSyQWYS)T4f>%T!H0@y+ndnfAF&}-9QlbROypT01OpYWb_r{r*{r) zUid-^)7}V`pB$Yif&nYRu1^B7V=0ZLz|Mb1>PpA9q=wWv?scK2|8fm zL$dFvi5P|)IwkL&ll}?$7kTA3E|AZYiyY`(wsCQF2l@auumhc79{2#WgRmLcMtM6- z>n58YA5gPJph^X^t*PiSlhbS1;QTQS7f#4wEZI?qsTL^?vtw|ngS_rSrHVd|jKK{9 zPQ^7!RjSnvlB+>%7U@`+OxcMmTM2AQ?5-J@sd6Y;?vkw!X{j>FJk5&WRX{jcG_VRK z0G7%;$z3%PN~_L1$Y@&!wgy-qvH=BQ+qWv&X6Cz;yJSW=h+$!t%KUakELhprc5(fj zu(PF@X}pUWv!wEkyL9e6?8gCnT4Fheb4_n=_!RY!2XWg4rwS>9dtrxBv2bt%Wr#dT z7cC}L?5Tq|PCX8sM7^hgQ>oT0b~@Ex0)9q)W*juil-X(a!F7(D_FmvgfgEE=Ld zrqGLkBv^Cd&nn2Xx{Xijsck|rwF`mNK`9QXj=403DS%_G%IzmTK$RTC9>T8JqIqrn z2#=0#9S6Diqk1y!JRKmVxTN~#+j;sx@_I44u9fh*ma;33DbEcfy$RjA#YWy1ig#IR zv4w;WKt4Ft^AI^4^KD_~%l>k|Vg2#Hdia$q6g?j-;@!w_W%>?c7|c{vhYf*iC@TR> zv`a_gV+v-66f>fjfni|E%%xbB;?+wHru{DNlxh_IVD%zEE0A>d5q6fNv%;?AlzOlh zvL3k_nZo8!Y{l%Sz;)5sQ`}bA{^uqGgJ(Y63Y}9%he#%)ktvyxE-ur_T9GjIVz7;C~92zXbO7?@CJ#iokpD4yy=Gd_b&?G^jZ4is z5V5dcZ!A!{&I4K zWerNX!Rq+8$;ftsP6xxf$?DXyL)fWbvQmim!tb;$<<1XEXB`c8N(*ks-S@%i!mlwq zA*gU~M2i@S=82aS0co;Qrl8g! z9WtHl<7C8=hB0IlH;{PrI1qzvFex2D3nc9|I6d>~1pmzj1egt06+`PRo%v3PPW>t% z4UuF;)EazvCO?ufl)kVc{YhDPrVWD1;D=-?d!}c4s+|5?=>0{)MDeYteA9$h{)i@ zS$&C!JP*YGSNq7iYS7dQoew$?3g4i4MD93t7A|#6Gj)>T{+il6#)@zFPSnM*DbG;nu zD9zK~veKP+B_vxX=rtoD!+@DqNWil^11vKj1AwtUjy_}Axo5_W54|aGCTw%u2iz;7 z+Nm>5r&KIzXKDb>5fpQp>#U_iNL%G9n$s*Mv^MBKv7b5Ml*M=!J1b|kCKR(dG;>G6 zEII?OvswmcWQ$ZvWjRJN5)xXHWFf~wj(Lo>sf}elRSaW93FQRUpDQ{IW>!k#*uzLM zh9wIrmN2$(D`jx0fiXRnEdtmUZKZG3jx;O*mby1iD&Cm8v2_u1p{wOFFPUzEv5pO6 z%-F<}pfK(juuLx>jXSpW@CCXInJFu{WqjE#$igTbSD=*_E8{A&%0wYJX2u;u#mpS* zcHE^_nwri*vpPyck#b58qP8X|m7u8vP=h8YlX)pb5oGikE7UJxN>G_x$jQRgpD{j> z2!TjNgk>62dCHX6G5@f-sv+3e!4IBV+lh1ZGamM;e|rFG*_` zwEySMjW;`2o_+aec2lMLeaSIpfQ9vJMO*{VnONstdSXdrGwjX_stOdlJ*qZ>9|7|bnAs!%NpF5(LqBP z+~5YQV@)S5Pp~WNm2^k9zc6++A#T?sBR&dBE}VA|XC_czAgD@gIDA^qlLF9Y*AxHF761#XqNP2ldn@eF_m>1pch)oY@B7 zB4FGWAtX$UBV6Jnl6ayD;l?M3K^=Engyl;UY+vT%74Rx}4ZIHC&|uS1$?>leFStAI z)b$F4gWvIP`{0)TG6*@vRlFps=u~EsTV}^A9TJs$c&qqZ?@lo7v|zUKOJd^U|9tMW zCby8sALaPFiXYO-O^OGFrG8jEz!YFWG$0g|0CR6r1Kg^p!uh&*Fa`z^h&9;fG{pny z1`=GsfO|r#cwTg(ZzjQ=Dsen3|7-@oil530H!!ju(6S-35%Q5LpPRbVTV6p|!KYEn&Y9`j;#9#UVYA^ij- zriMa2`b{Uu6$P^*n@D{pgI7L=sO@0Zn2Qb>t@&$JFK9QuJ62r$T~cs40n`g*O*gdd_8QTEO&o8 z@XbnfW}V2uCCW(?yt)p)aS5^s)78BR2Ex1|=>8xE8Z-lQ1ji64#v0rZd|(JNu&}eO zVgeJ-UIB7_r$=Q?bVN3}N@Y-~HF75mQkhaJQ*s<@VofTIiZ!t&dEOOq9G5d!Mt4nB zVw7uYYUg{9RRMp3P>fVmYDtx!NK4gv&i2+-@TvHr39vGr)N5R6NOe`q%k z9VVee@jJx5L)JS4-C=k5ilU5)YEDc+%JVudk|2;MP!e$xN!SQ5qoY@)7X*L;Itbh# z*pQ;55uk|&6cva;w^j7k7NY(qyJtRWaZ+Jf~~Q zD6^_^P``lqJlp!Ti75kjb2$NK$NI;NuGQ-i8Hh@-AR;@;ubVPta9W3?(fJX=lBgvP zp2Z)^{XEOL@pTrNWB#%0oJrMoP46w9XoB=dmlK)UjN*A(Nt` z=Zb7UB=;W*Nm|?s8GB)P5&T=j-a5PuEbGk2COg16IzU8R1^Mpt9>_NkkL4Cg@o)p= z8@`Jz$>r%GI1M`i8DfkXp#g}IHa*dhAtr2UY5*wfe%UNYEa(d|Sp|2gtBDH{+K5Qr z=?q88DbH<0MAY@%MoN^T8wrI&8!5c9G#V$v+^mL<<&v<~5}UWx;+lkgdU+|RG4HFT zw0�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

%kIaTch%S18n7|ogN{Ilm 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⪻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

(_VuT5-N!zd8q@AJ44ro;*^XcsH^-RBAu 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 diff --git a/network-poc/target-native/doc/static.files/FiraSans-Regular-0fe48ade.woff2 b/network-poc/target-native/doc/static.files/FiraSans-Regular-0fe48ade.woff2 deleted file mode 100644 index e766e06ccb0d457fcdc8d4428efb796c7772a497..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129188 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

)Thpg9J)x+@B(n?maf9&#`PQNHtKX<@|CQ`> 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 N#!G)s;2JO>~QPMdMZ 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

xz5_8aF@(pQs@zgto+ItjS_s2^}<|M=lFQ2 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,qWUc(1+qXDfx7@=bp~~)(TqS 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 Psah$GwaNdR#Q^{S={DW} diff --git a/network-poc/target-native/doc/static.files/NanumBarunGothic-LICENSE-a37d393b.txt b/network-poc/target-native/doc/static.files/NanumBarunGothic-LICENSE-a37d393b.txt deleted file mode 100644 index 4b3edc2..0000000 --- a/network-poc/target-native/doc/static.files/NanumBarunGothic-LICENSE-a37d393b.txt +++ /dev/null @@ -1,103 +0,0 @@ -// REUSE-IgnoreStart - -Copyright (c) 2010, NAVER Corporation (https://www.navercorp.com/), - -with Reserved Font Name Nanum, Naver Nanum, NanumGothic, Naver NanumGothic, -NanumMyeongjo, Naver NanumMyeongjo, NanumBrush, Naver NanumBrush, NanumPen, -Naver NanumPen, Naver NanumGothicEco, NanumGothicEco, Naver NanumMyeongjoEco, -NanumMyeongjoEco, Naver NanumGothicLight, NanumGothicLight, NanumBarunGothic, -Naver NanumBarunGothic, NanumSquareRound, NanumBarunPen, MaruBuri - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - -// REUSE-IgnoreEnd diff --git a/network-poc/target-native/doc/static.files/SourceCodePro-It-fc8b9304.ttf.woff2 b/network-poc/target-native/doc/static.files/SourceCodePro-It-fc8b9304.ttf.woff2 deleted file mode 100644 index 462c34efcd9d6b70b42359ca1a1d9476efe43eeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44896 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 V7)~)yDZnpu49h_gZvJhn{{a>V-DCg& diff --git a/network-poc/target-native/doc/static.files/SourceCodePro-LICENSE-67f54ca7.txt b/network-poc/target-native/doc/static.files/SourceCodePro-LICENSE-67f54ca7.txt deleted file mode 100644 index 0d2941e..0000000 --- a/network-poc/target-native/doc/static.files/SourceCodePro-LICENSE-67f54ca7.txt +++ /dev/null @@ -1,97 +0,0 @@ -// REUSE-IgnoreStart - -Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. - -This Font Software is licensed under the SIL Open Font License, Version 1.1. - -This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - -// REUSE-IgnoreEnd diff --git a/network-poc/target-native/doc/static.files/SourceCodePro-Regular-8badfe75.ttf.woff2 b/network-poc/target-native/doc/static.files/SourceCodePro-Regular-8badfe75.ttf.woff2 deleted file mode 100644 index 10b558e0b69a74b8329766fffbd5f64356c7230d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52228 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 z z&7BF0Cz9SRS8*G@y#nm5YinGyv$X5k`^*NwZdDv)O2LxNEz6iiMNt60OH~&-fXF zHAyXFj)gP=~`)XmsT zEJ(rtgkHTr+1opg2X|5vLPZM zO7;HQ1r4`L-Gac4Eg)>XDb&e@qkM9p1=+yp4#jB|t@G9L>z*fXzWfCWR$r)ak)p*) zma4gyT5GGlbnms$N~=x$JPWOLlSd{8VjZ+*kKm_5S;DDZs!Z3Fn+}hzXAzogX?;L_ z{m$Nq&`_xOep;S?ZOEHbQ);LK4vP`n3(lH34IF_v&0N5kYoeXfV*{p{%6hn2qpj8Fu)GcLYat zyz|Vrz8qkH6pCq8K(g}Yni-!8W==SM#pYtkI1kn!(MMj?=Hx05NBT$beq z?wuInEYC>8bKPq_ucS2PJ=YyWaI2INl~uWU**PHJ4{blYTI?Sw{#^gydaIoL0#EeB z${tufkDGMsaoY`3o&XoCR--ECbNj5GwX=Ty9oE@A8)xe<&{{WuqC=3zHKx#ksOi~s zwV+QC`&N8;(Hm@{nHaG;2n|Lv_DN0GbkE>S&YYQ^B@;T~^J8KsVUi|w@}^))rhKSF zo5pFI;hE%k+>~L|_z9Dx%oO~s-~JOn`=@_ZbbLWYeW#jhtE-;+8fd67eDoBpWtwO+ zOQbTfuyNL=&xAS4meXHJc9NUqC)Ja}qy|!ww1;$nbb?$!t|Vj0G_rtfAiK#Ca)#VR z9wIL#Zzt~~|3x`Nd57{TpzC3PKj z3-uuNQR)-a!_=p#&r*+4U!oqTo}%T^s%cmnl}4wrX<}LnZ6$3d?Md1PbfAEw=hMsS zRrFdqfli_G=mNTij?mlb9gJK?1%t-g&pOC@nsuCYj&*@`h4l{WW7gN~N_H*V$cET9 zb{jjx?qv6IsySg!mh+7mCuZF`v~e-)vHg26AWurqN~2V}j% z*@U9XhR(IR(;&DWsdS@lpz@Vkb8AN}I*psQgb5N*aOq=5lYfwZk*Q=RSxz>S!_};Q zP3vC&B#IL&#HMLzTAcRqRa7c3p~`t3)tHFb%e~#V{gguRiBby8T!$6cj%NcUMTn=Km2sS`H7q!9xpaF&MBSqGJ-Y3C1}H`)>NHpGR4hV0gM-cw&PThL@y!yMO3YnPyDy~b!2ENcm< zv*~Me4X-v({Oij5^O8{f#rWNMS6sftUtD}XE@vd)^bz>tuK|C9f1Yc6EL_GX`K=)@kmE&2#W8yjap!^p2==HS#0Qlg4;Ddhw;{RX#!9Bw? z_!bTS7`}gQ!S}u@8MsTz1!Y3ZC_$b)iQKhm7JCtQlR>pO4U-j&W0Op zR!$o0h8Iqz8v=04 z)nuz+W|E<&nCauHKTOheZf@U3T~ru2=0EJ;=A$=!jDXDPzR?;v;^ReZRItwd`g{J{ zPi-=kLPh^l&6rnGDm{iT?}s(vsEfX84jX+b$G?`T^|+@EHl!h&jX@ZUA;SZi9%Npu zzhKe+v$yMa=XrGgdO!6naBt*OIMo}}#h^d^2&qt_)Sthrt{-K@mj{g;PhN5*$WU-2 zjjnVS_uiK{|J!5Knxa|I4Ek2cz)G1CRWzD-46*1EF(u2YE0ab9y#kO2)GM=X$d7H?~-u&$e??9Iw>AFK*ZO}`- zAiRebdS$*xmij2QPcr%}tuJ!=Dz{Jth0E)k(xOQErLuUnC95x0LundICoMyBS^6sX zp(;v$SL=I!ed|v@lQ{`nTqsCK1(sC8;hnSCWAB%#rEIO`Xe*bjJT?)H2RYFb4H@j} z3R1<4ug>v4C@ex*(RDQNXFd7;hR8^iF8+z?`jPGvlmDFOg4XA9$I@rX+NUFxzSU|x zIc6eLW(aC5QWu9!nn*Q?sC1E7BE3X})S7!^urB`RR+O=$P1) zNYdBPZ(-pPafvFqX#ji7N>u^Y$Z?eG1mz6vBF|O6n*w(;JQR8=@>1-r#7C*GGC$=G znj}?9snV=kiyEzJwZUkIm4=gnmyLh3)~QI9_73ewG($4M;UUJ_0uT=~S9a5JZ zQJY#z_o{z0yc@qvfw^aySf{p`|5^O4!nMSDQg3Ac_x7;KnCaN;s5+~!n!EO?`^!qjesr9iXV=Aj z_1wI7-;d;H`YZdL|CuGv=Pwp67p?wYFW#h_R^Hnl9nS|{859-M9Jzv8URhn!DZTk);rX3R?=Dki#f?4)5 z1!3KrjH-zKE9-4hpfax@xzhqr_#6OS6Ue_>PZ{n9l;c4_Q@jf(5bFV&5yt?U3-B~x;f7AV=?8Ebc z{e&BE5s5v(#kfCk31JIxDX{_IGGZOT<-|sSEAV3AO1uoXiuedzjmv>+h|vJo;?IEV z2oKLzc&|y=~-T&?qM##b?MPDxU*s0AC;rfG=MSqra+eM&t4= zUQMFEs~<+I^COS|;3p&jetva?{-ypH+2>CXcYwcEt=NCpzoWHuO^qB~1vZC)qp)MT*CkAa*V#=h-aMfb!q|OL6V)~@XD79kRq|HcmV#cHkN4=Oc z=`&V?SUedrS)*7o88bzbSUQ<9O|w`wnKM<3SU6cSQFd&chOp3~v1uB{B8SK3X#|TM z8C#}NERhpCCo8NSeb@(R467U)2T$YRJ3bDbCSc>lIC`4IMkmJ+(-hV@H4dAmvFV)- z-WgOlGme>NVe9NTcAA6TJD07_ixZ~#Y;!@JG%aL@i{iv-G22}dr%zn=x-?Fk{$r2U zarVUHpv&U?X*ow-5$8@TIsC5Tq^qMet)a}damB>voPxM&vf-w}!iABxXD8 z5ATEOh_n9i0jPoar|~=Me^QWOQ+zZvlW2QPm^xsqh^jt$cn7Wh5R znSOA{pV5E%g{Hq_{PYJ)|HeJjKZJVtH8Xe$%pCcFS-=ZmmM8>l4k`z;K1}==ss>y4 zqb9KR*<6a(wou!D)B?7%4k0<%Vblk9^r(OASe^XQ2Qd3w(B!pCJpGim!VyjEbru#=ux54dvF>+d%M39K`2oSTacZ=^&eD;mb*A&Ij zG{IP47>Q+d9A^M934&D=6-iQM*{&!~qumXtW^JT)?IImIly&MdP`7S__2_Siva;cZ z7;eNIg`!WR%Y!v$e`81GH4lv|Z^~%A_m#(d57@%Pv-2<>C3~)?o+|XxOIhA{gY2!h z3cT~qWAD9}?SoIA_~MIaV6f+ih+ZNgN%mDdABoc4ks-rVnKHeQC0CR@c~X$kyh2A8 zsahS9diCNoXppE;lX%UVC27^>yDnXRs;ukPiy)asa3hDBxKTqb+~^_sxiJG*mmX}r zp3>z#wRTMw*$eK!?4#9ihJZOsYv3FazfB85+A&X0(g@E{D=nllMMtA0|+D` zh)4wxMC(9Is(?qd9v+h#;0bMjXi^8n&_;+S4L|~If<)2;{7<%!L|TAkvV)hT4R}SH z;jMC~gA^&Y$dpA_wrpFKE4NLB3i>Kl+O9?o1GQ@HP^XTedi8b!(f~3VG}10;C*wf} z?FI#z3_58Kbdl+xoA$y0nGFVMAABV9!6({}-_}OjIIOV3cq^?k5g*?aHf+owBs9x< z>&;=y)?9WrTWFhY77G?^0x_}4d_+=!$FQ^{G^`*_lodCuBpy^2FRUUyR1rU{CIM8H zC~P4yG!zE5k~~_F66_*nv>_GPNvdc~YOtHs(T+4=4?$>8$KVj@pc@^B!-Pe5(uL!s zhd!haC&&PO$q-JG5&DrSoFOy3K<03kEbt;(!a1_SOJoh_$p&wbEnFZwyh-+OksR=k36GKThc|Qqzw0u*peq=roA8lt zVT^9WC%S{NdI_KD6_$tqUnmGm6%1eLHJ0fOe5bcqAsGIMh;$;sUwy?o3Wb0AhV>K% z{}ql66oIxBiE)Zq{D}k1pm^j}0?edDp>z~f2F#^Q6jBz< zqihsb4$P-q6j2^5ATo+79~M#pim4D5Q4xykH!P-Nln@2hPzfGWDXgV3)KNLCqY6B( zN?1=+#HtE55Dj%jhmBN?da8j<^grsW7B7t$)DBmv1D{bRT%#_0PTg>wdhiAH!VT)fm(&lpXaIvX2)AhnUuzid&&a})ZG3_x*P5TUr6*h(wj=KPX;Rl%x5E#LO z%o>c)6<&UE8AOQ4CQ4K*F=8r-lMqFcq&QNfB#oeN*9Fqn8;lr0VfJAOc-17;<-tb=!zss+@(n6AzeBznKF6HlEqn$ z92b%0^HHdX9}0>~N|f@S6)33703pxOs1yhhk~&4v$QuwNW*i2_6a@+l7 zlT3hsB!UD55h3Cl2@>9rBq@e0Sz+YJ`9__(P!Py3dh{f+XOGB_pAdL>?_6{#KE4#$ z>A*04{JxS7xkUEBg#0fm>W_f@#R3G!1H?sqUWb%og3ZV{oN}G$rb@l&X9Wf^OjU#s zv!W?ctA#>Er-go2|2WK611s#TWI9y*;jN;AU2c2D5RWc#e7Le0gz@Y1 z*LXzKBVXQr1ks56c>jL_(EyMd4nRdNkSJmL1%Qn|Lc`CX)V{KWo2n$r1W?um!FTIug8y3UMP@%{s!>k?lqFP`i2ym?Jq@Dmn4E>VR@cWI;`8;94R=jpuQe8e64#TDBM z4R~YuGdew{sYS5^3pS1MQ({>dAe{K0^$APRdL3)<@dio%i1>PInm^}4+XeysFIGmB zRHIYwhCW{`XJgizR(%T%y8}g3Z6k!S1oMHjKj&y?*U8dB&(lYQUeeJ;bkd=`rp_Pp zV!dV9RmWaT&&QXRc7Ni6kvW@tdTb(rC%scrP=0oJ@6-oeq(gIo{#cbvUB05ij12Yo z-W|^~p1quzkdTon5zVfZLsoY?utU!UvwmY=eK&uQ!yl6z=*~|NyQix<&JX7~My)65 zwJv4fQ(z9i>SLNl^H}|{#L2Da52@+CWy|{x6>FR-}`D?=QE1e7et3-0tcN-HA)nPzr(2gI+Jv z2V=X>@7ihZvr^I_1r{dZEtX(z+m%~0qBBwJnf;FsbxC#D<}Pg67^U<3*EkM0Fy9=c zy~$~4PH!;s+geRwmWINYx0eY=WuBgR0puRv^gZPA*17{*s1Q_G>j21d#pf$yr|dj9 z9P1p(hNusmRh603nuHiZbxQqfR8u7A9ldA%{E@~8=)XrtBc@ST7!9c)id7~^rWWIB z8yrX6n0WhaKiKz{)ep32%tL*pwV7b68XA?l2yI3+_dgeX zIY&d2$wUA|jdtY*FD7CpOBO9@ucz0l)ghv3P>&EJTXde*}mf3P+rd;`_ojnV#uvV!Jp$5uX7cs<7 zL3wQ(i3;y;R4NkZe(B#X2Are}f%y(SA@OzpY z(+D32D%A4iQpjmMh-vFDSJuKDcf&%4EjW3Sl`zBQP;^W!Blbm*EqjroOeG;$ma;Bw zCpq6094l80@9-AK-aBE9`B2;%7@H+bU{L~^$Ln;yYK{cGCMT~6j5{c50;V_bEAannMeux zuInlQ>2Q6veV341$SH_{LaN63gK^06xQ8;R!N2(YsImLurbg#Oy>_VV#+~ z0;C0Vqjy}|NOGPR{@g^#mNiq9;Sz%9gP11?JQML{0qYh_f*QK(*ZKTw{J?S9r~*@? zRjX9nZ0>Fhk^*R3KkZ5$z;xfLGewum2c}O@+h9(8=Yope!b{Zz2zWD7LK04W+t@)` zZ5=WdvAvwj#RC8^Ti2V$+C`7mLS7$MO0DDLXoGMo@(bSV6iY}p{8NjoXtp1fR4P?Y zLj|e~yx9vBC?1TA6iJ#|(RFmh7(Wk2%p(U^fdm*YV^^lyv)C+c$zw!T)w_Y2Qp}UZ zTxox@-quuadOEi3Dm!cM{1wSshcYdV%69N@S>07{BY8ev=NL_;?5fs!-i79?3I-Yt zB+#calHCAQkn=b4#097>Xe z`FO&VYm8;(0bcrRhoTMEIua0tK{Z5C+zkUt%%=J>4|n2>=}8P}uEFSPRs|IE!=(H@ z&*Y$auQ!BsY&J;R(0c9#QMo&=Oabw_+n3Mv@+sk|PcIkim*m%JJ9moXgAYzwqy{la$N(!7SwfpM{+{R? z>PV%m^QX6loWfm9k^*|ytlAYgrk|Gu8onruYIu*zgf@Ed7K#>r?ztWo#-mr&vHNe% z!F?}z{!Dt{VtDVco_1!d`{|v>Tg9X^+nCWetPH=+hr{0uY=!fVuDNmkyalQvO_6PG$j z9&e$`ns!M2q_2>um1+t%%XhH@%HQdfR6cKA?-`hXV!H;LGN;3*QCo+G8P?dZZLYT;x0BeEHY$SrGH@Uw%^bH^p9s8YHTnj)zn;H z@7X#1n^19Uankr<$W=uembEuo?oW-ZoEcUV)^zxmVdl8KCLX{fzt~zJejeGBB{fi& zYDlwsbjWF zEH8vzH#kr!Tr$Zd*TzVG_`@4{(By|OQ!{B$kEbm)lUza&S7KtB zm7?x`L6(tg%}i-dm1vIFm&s=C&)v{t?TvU$kyP%YIz2j#3>Tj(6OabC?20|$jG^u@ z3_Y1}`Wb*6C{FZe{OYJjp9|--GlUwn2Zj^6gJ2fF!H%|ewIZ_1!B&U z9B8|ZO)-cNTOz$3b&56&`)kYU<-t8%j%^}8HDkCjxq&_Uz7|Ix?+`$W&V^Z5PZ`zE_a@R3c;EJXdihEBxHpIeooQg(-mnK#5 zfoHVtpzzLAMCgSLP)Cb2k(`VoZE`%iB@?LQUT;4FC!BM_{o`&~Md&iTKoc6a$ z35Fk?8l|J{1}0AOjOaxQ;Tm{fea20n=-@0LUz+@WVn}e97AwOOTqRb?QC5kVH5vD~ zNYM{FX=f4r88hRh9&5Sh)-ES5Z;{BCVdPUE)TKH{xQ3*heV5y0u=B1-Ik|T$tW}`u zK-P;{CD06JXW9Cl9>pWdC^_tL13BqKIPBRyx4>BC@1dS}S5_`*ufP>(xCOrGP$#`LADqIe6p3yb6@W^5MH{`=m+iYut zr$LXGou`}2k3utG^a)bSl#4+K8a<8pr7_P|>oPG1i{dE$0R`747!bq4(6(jg0F8iE zyTi+>K@Fa57q|l3793Y@??1V&auxjU^Nn|~OZH!J$ArfPAozKpiaJq}0xd^&EP`nc@G zdfgoum=?CUa*l21VVEydGP%MxfVVCZQ{7lWgwP~n&zbHfXbgO$HioiNRr>C2d>6KI z8~TK&(D6ol5^}23M{h7m5nH6%sbL-9(v#ULsQ+@pX*~c2_QGILG{nZK$QA%n%U)VH z=eFL)(7SY8g;LU@iO4!E?DI65=pJ!Kz=HBh7-SfO>})m%pyd$jJt!fcbTxN6d#dx6 z>AjS|L{RVidN6qrI;e|gAk+33fGg$^JIp~(fL0WwercIY9d7gL_pLt;fOdN3Kk*5N zP&bG*q>fXwT64hDceL&_>p~)Gh2+@#?QW7US2`{0H{>#%abnhI>C8{@+J zt%ZCxy5cWbV_7FP=@U154l#d#YR1l3B%U@{ZgRL9ET#ewJriEXW_GMf-JJzzjBnl{ zk3&rIHxCHTParpAuGwo7pvpa?f3Mpl-GTVwN44-3KbQPEXZ}Ja5}%iKJOqW$6+SB{ zuMe?z|`M!53fEjVH`UBr`Sh*A_yq4knLWXLUU!Ff3Y#8zcAM*8~fYJag=n^8V+h^HlvXUmp_ zf_BRBrKlM;C{)poYEHUXWj1sot|;}S2rnImcfu<#e;x(Jg_6ZcPJ`$e2%8Ig=%JrP zGtkgncD^a*B<~R#&5Ae~*+Q`4mhcT5X~2T+6L;i*E*v> zq_O6gZn3Q0Y^g;|EVXzSoyLaG-nCQ8y$BCVYy!S+*%fxUPYQNs_fOsc@I-GTAS9tB`yVJ!C2aKdm(9ZNafXI2MYOF%p7Bv=oj4 zBs;33nx78lXp!oxfuf;~RoGa?1lCzpG9Y2ffVGnwd+_3vV`WIC2})0)g5t=b_plwOET z+h{d-tqrIA^hDOe()g`OnG%ZO!>QS&Eh-<10-b`}ZluD-`f4XFw=u}XUd@m=Rq?zz zrXk-J*h^J@d3(ub#wkwve*|%c`;IzTB?z8R&dHcP&%@@*QkZ1p6$sg^>ltvAayWzI zidw(q7AfOdlW|vR5M;<&*N!i~IGc?Z^<{b)rtu$87jVmwt*$I6b_B52EP~r}3e~r? zS~|)Pzg_X4HP8g- zi`WWv~*kJMm#3(cK8GZqnob9na^ zAWckMZEtV8An%G`2fr)@xqB^~Z5aA@qTc7$ui%&f;^T*Q4MV);X?kr%VV%b$?5|>s zIzrb^M$MmbQrRE zHz(SHaCy$8@1!9goYYEu9hw0?8-6&OKAZp*7}Sk(9-0WSHgzxJ^5`x+eR{gL6 z%)a({8fW!6f`4mT6;xw!uCIC{|*-M*i9?fs%MZO^Zww z!(5;dRVNmmDBG8_Xy=FKVgp=Fgf+~huqC9BqF+1Bw-OY);_ceAsBDe~n;XL<^+4!GFKp#$%Dr+gAwo4s<$Y4?Mr0RB znpQJ}{2tLDebQy|Zm$|G6cJZWX6J$Y^=<)JE7{ODz4%L7fetofvs2j)!TnB_oj`f= zHrc$=E*8YB4=pN|U3o_5?6To=e5)KBmxPoQ5R6=&<~q8^v~G!T&YM^*QTB^VQqew$ zE=z@nN0rgnuZ@+~R$aJ#aI~UY!+O6tV~r^rF=>yG=;O6J^}No5jCvQJV)m6-9m9kr zq#CH#Bk#wDH8?S>@|c_Vw6*Kah_nk9tUJ3>!P@qbJ0h#E55sXQfX=8<00o`7hM-3& zf@qGi?QC}hJdq+hgL$D`0aPA0@G9#e~6k-$j(d z)sepFF7FNF9^88Y8J*i}pf8f;_Wj*Ev)*?ilk87yH;r zc3`61n-o=+#j`ab(zD^p8* z>D5^O-CYdqhmv=Bl`m^*1c0d@}nG3{H#}XE*6t}8F0jC+L;7@cd_tRX`?o&Xpi;Cl;59Uz71Gp7L z%_bBHzv%|TZQjSl49o*0n|bQgRowCgw;x#dCjgg-PE0l$7$8sY#_K^lGSImnNsp?a zL0vTtDPfqnP~iDMnMXv#751A!%5yj4*l-c{NjWvyeLe2XA3$7>Q)V zTXz3QM>(C3&wHMp#Y~J6nMhYWCu5yqdQW({5?;)d=k1x==!EjZ?}ZJkOr7`Y+Q+_p zUY^tDhoreBt5*vA*V`RjKtB#XNxeG9`X?%00lSKU7km5)^y?ZDPTk1 zPYb-F(t)SgRG-*J2FWIy`j9W{z;p#$RoMETFU!_8(9-l13;(XU?|Qnmj;f$(YR0i} z`EsfxlGk#PksGN#7XpNr5axOalZ(-kFMF|ozy|=0Urf$pXe5MP&_URvm%4ApbR6d} z!Y>y8!{vYC2WwRf_nw3#P#XUm_&XZt%ZyezxV-8gbk%k}Y{+V;%8IfM(oJ4P@$$HP zs|Gu#*F#D{uHTTN&$9;j*Yfp9nK+fDzI0?E_sGi_f4ne z^VYNM2SF zb92Q+5qK5Pyty5x)f(k;>U?I(6?Rt6uvjTmDvsUYi0>rZct1@^ASkAopJEaT8Kg)AXC?JS@n3k1p+Q@ zZm3*Hpj{h;Vptl_xUZd|o`4v}7q3IHbM*_fv>b{80W%m__iy5zJ#$9M6lJdO-^}21 zqSkD=y(&EN4R?8H_V8{0b{MEX5G89J5lq(KC%vCD;SIeUgv-u`g#PO)T{I zp3H3Ei?UbZWVyB(M3D=vKUSiUoLlteWCGx;v|;r@(E)3EhtkGTF&412H;08#b8KK8 zYrvNooDl)l6T!cVJDOn)(DQ}US;iH4K(3A7M3^*{q>)Q6gr8qEc_!ZCdo^8D09-6# z5=e)uE@R713jxR@hfo8Jtuk?gp^nwK%de+*+VNf5;*jd7&m(?y@65Xf0T-|o;oUzR zGm#|>#`Ga5;#WLGbQ!+OyZ7OPN@M@P1YQKms56eZSp);>NbPv`LA&&DMg+Ec@I&VB zu~g>zXNqFmD)x`RFQ6Y-*%vHWo*mV-5R+hOKU+}D(&)jbLM6Lf3ZGyBccW0&F@A$orMb7vw{O0$+!{0OF)(zg19c;Hw|C`hs|&yn(jqw@2T^%Fc881=%v-ezCBn2N zeAD>&4x}9x-UoAI@2-U`PsO^^c#^9VIC=Lj?Lycw4DIP&x;_K_@r3bubY!%{jyoRg zjgliYzfgMVC($2RpLf6%RVm&A$$9nFpgFSx(B(D3>2ZY455$j&x9HJfX4$7-Usm*G zh}ti^d$&%N{dBeMSpZQ z<0l6{E+v}~LI??k|E>|+H)N;l< zu$p4WJ~;jTcj=boyuJ3Ju?7!cGuM4~2p=}7e(acjXwhn)$-X`7*SYlHf5I7I8jYu`2X4Z>l;Kb8H(E-GK)@EGn_G0^yl}@hT<0wV{Tf?4COAC(?E&m``QR{n+sG;G`a#ohkyC~akT6^$&9;!F2ta=1i650;%udL23#lwa&u8Tw%8CHE@Yuqh!_o+4Rf3T0_!wP$|W+U+^GsJg47H`0dQc;%~SizOQt57X&de=;9@gADn=* z(x_o3eu$8Qp6L%s@Z$8|qTTM?F%T-cinP0L&}wg)BerUqyxsCtG5`t+leP&ghV*Eh z_j&V-EO=+|Zr*RW`PPNyzOwTAWbeMQL)4s#>Gk+MAsNHP+6P~OA43mWD0~P^LA0Cw@OU-#ixU(6tzO7aG$EHJwLK2Q65 zn)#8nK-hC%Ulw;);eS;tdq-Uh+&z`2JbL{#5&+)EcZo9S-0*J!D$q$>-RxS zHy+P!wZw+GNY?@Z{k3G#RY-VM%l0TVN<`>M0Xz^72!z|}Y6Ck)L<&=j?5@SN+#VCo zP7e-uOh>s8?X<-?&?N)f@v12^@j6U%=m1SLfe8D3V*7cG@x9Gshf8T?nhI6AwIUoSkL$XG@>rHwL!?@4GD=h7NnI!1Sng9-NiAR0Q zU3BsPR`=eS?9{{=5CB_niZrl*dju~C?dZVvz{3UWj4l|I6XH8E{857KuD7Vnw-dIb zV)I~#@4&>&03O(Osy=TuDy?_|PaN`WH{`8CWfYI#$p8XAOAy*&s)M##1U|-or`DPF z=uGiuEuMK}Bc3S>X;UL(+hPJY_&K|Q1tollwRuS7%KYSS+OUO$h+Rzp!WBBFz?9+M zeb31xF?x{d!KZcv`-@52Do@D$@}1#=^6iV!4fhTMC-^;j9m5iJdz`694tXzL{n7$2 z4~J8$(K>~WCZGl2PFbnF5NhTsbtmbh7iPGtVn~pHYnLi@;ZCW|I3S!bxC_}Ka`AQ+ z{;v9REb616$feRH`jmjF`F7en{WcD0g1)x-%l250hzKsF%IvD&+puS-r5nsPtZmmI z_wXHmpg99NzE-nmUK#@zz1DVw&E}$E4|u01VJ{)E>i05A3YLJ z)~c1H6Un6=K&H3D2HA{$K3ecK1^4qo^e!eO&}jlmu3Aucv7za$1e{vwX<%s>^WF;< zH)mVh)mEt^FfERrjLC>a88$m35@%$?NK8T@<;nw+m-m$*X>KOK(XCgUs^C9IW!hM< zt5rHqGi;YLN2-FrgKoV6een5$o3B1$Pw)CzTe1L*YveiXpfArw)d)Yf}aLs2WI=Gh;WdiQLsK7CUOaEuZc4ipiShhT;P)M$i9Lt#Or zL)M{<4Tr#xq1k9}bbE*xiS@XXf%CM}CByLl!fbw9_i}S3K6y+!x|4Jnl_x(~gH|a$ zo=?PA+LWUVzT}SLj@Oex;Gq1Ax+Hn}Q}j6f4bNak38EgZuCYMmC!74+W;%)T7Cp;Z z4#WWN6yB5}Co95?iX41}=CReKs3fAX4u`r-y&Od8REO|F**+}cRl8@Qca)FiSSA|4 zJHS&aSXM4#XF zjNA%7)S=)Hd>c2>TvMjMy!rm;W92`+YvDcz9m0EFQ2jJ;1<2ykZNScy9m>}%5IG@f z3P2^|qXNaMRm~~Z5cgvfO>nfYSOzWp;8&=_80_Kd>Q}LtSEbc5Uj!$}X-fWAOg%b* zAwMdUWxiOohk;Lu zfb7egev@8F);kO$m2WS^bms{ic1wJihh!QWTpo>Hi%8uK?z!;XPdW6rQ-ohZJWz|h zEwT!^xu1)@I$g|R({_&On>O#8nVBD7Y=svit;oc@G0#X44K9p{{}qc>_V*alEcFw> zA3@VkqkCUF6^Ol7U6$mJYX)?a(#VZd!Pu`#t5OY?n==c~+BQkjy>x+! zsNRms1xY32xw{y(*5+T8ytGN}^-ZxVU4k**EEzJJtKP4&yZUBNxkkZz zkQQd{le_xWjP-1;2?|#hz?G|4g^?PQFSOTswz_$tSv8QV@n)7v!yV0b1-CvV0Zf%u zkOrN6M!KzcXBA^>3}(&_dHS!>wP9v*YI;g1%4qIXI|tVJygJR82ClHRs#`07ZZDy$ zd&L*JKbT5HB(4^q1w0KQ)AlX|%%$7)jTO-+JF^1+TKT5HNWE!WZ?$E|h}e_SAc+El zr?Y{X0CxfE&Hv%E*jgO6s-q=A%zBv=hj8L^>v$vcH@{G9Y=+buXJ1xM18>+mK6*NM z<(KIAA**}jYQggHp-fT;mH;f=g`1hi)lr{fFpf}Z#~F+h#=3RgxXCmy)7O8;Q(a!) z@WMmySrozhcs*U>n&Pa-fBl;04CL zyxb7qyWtG59@FlOdpL=lvpAmTOq|B078U;3$(-BTPjT%bMNnxmmmdi0G`0eBpyeC4u>DPsVq z4O<*&QLhHSmYvrP|0OEbN}Ib0ajZ0dhnzV|Hvo0gH4Xa?@L*U!4ZCq`!Sda=nbSMp zDOOL*_ZPoR8!*dOVy42G?P? z*r@fAFAwg6+p-VK>y6^kP*~C|$SCLitWr5-T)CCn2Kjn<^^2|3=p7sR(eg(f zp38WfY?O2bhKH9$lDhvkwMGLCUDQ$@5@SYjEC`~pt#B$-gqrb{1Iw@@?v+W_A)T$q z?KEaP)MmbqzUa-Y_}Dgn;#~8P@rvA8k8lfCI1)y5-}`2*BK@2J7@VgKSZ_dL`2T+6 zoHNVJgG^ecgZc^zGU;wm;kt-GO3ikT~Z%U;8mClf9{ZrEU;0fZwV#o|6B|Oa#?PA$edFTKZrzeTShhZu6C0~a8t}) zO3P}jhERwypkv2kYyLG5ZtN(-NL{9T0}>QBl{$l4g1r*?7d5K>(A)|jiOB5N{(OU zt)iPRl2AeTK_r}GZZ;|gJU;VK+NkE;-3brilVKZQQ+w_hI(EzhyPAEoxvQg1K}zkr zzrPG4bB0_lb3G7j5_aNtae}Hq72Ryri%>!6pf8+jZZRqcJU-)4#;E5xsW(xZli%q( z`a6`QHS6y0&mhv4FdPz>wH}-Y>^3bj5(|6B<``Y}7^heTZ_(fcZkEua3&s<6!YN|= zNbu^$_Z=}nyBFdj1}5G9!u8qalHXqE-GR<&s7glU=5}L^m{dxO{GB3%yGSSRE&0>fg^^n-X zV4VhEX;V&>$e6QzN=7S#n~P3ee1QL$#w6jRST@ALCwXGf|?8TQc4-K zWLOh;;q;eC*(NbBBfyd_?U>Q{H!o)nn;+{*6osmQvT@-*5tJ+DYi6e}qIct+ zqH(yFYaLSQH0wR1E@KiHQn1)#HL=kz5Cj+JuNHaI6_TrCf$L*wSuAFTs*>_L|Mx(H zqWRu+$VHaTqO&Y}3gLjihneFd6#mMkM)wEKjJl&g)mmIYoAQz|hx>Qj&o!0~GX+4v z)}V8YMq`4UVmoHWqK|skr?Q;pBV`9&BxOX0IP)n!1rW;#mVmZRYZ!^g4I^zjE#ZxC z?xxOEk4eT_uWA3j@UATBe(4STi^n_?&Hi|!*$X!5DgC7c!(bq27-%;ve#iK5w?5x6 z5DXXw+l-r!KfcN*#J&`KMu?fbn)^cVc?fjP`$00ewd~Y2eE;IC!dXKG(t zSBkg>I4>EXQSg5g+|p6>RDHIrra=0dZ!ip>Y&~V{XYmeN=@Xj+qWA9L1cj?IRkr#4 zFblpnW}B&e!2SH$;JwpJMtW1cMGM%r!gVUgO_z8rUji4#A9E5!g-vfVyFMLV>T5e= zJnLXC^|2}>qo8hflR2e=07z zosDZ1#+aUWHG0&CsusIOo9;IQHPF#HGFfhM<56r%6Ex7Ul#S{YUY=<4Vxm1g`unR zpcFXcbrpI9?>>6h2J6um1UAQ1&gL&P^Z)wxsj2gVBS4Fy`G}OdQ5i8?IWWfe^!+|Kz#c;m*WDJKV9VgvS%bH=gsZ-t6$1S%ydWEF#9eJeX)FtF7wqebQx?$sl#KAq3jFM^sJ zT2UkfM~gt-A(n2F#$-25pGHC(?XJHZ_pc9Ltiby0zanxt4 zL-C-KxlBmv07nBOyS;<12kyjK?GKr}YE1BsR3wL95X-iXSNd7~A$?{Y{-f%$#+FC0 zidU2<;sXz_6Pb@C1J*yS1-`Car%(aaP%L=u$4{TQ(TT&9t=#6iDUR87<>#*#J<#HF zBPMTs^*_&&pV8N<8GG+l*{y4VGVj<}*nW98^H5juVgtenq?W5x}-ak=KQ zF&QGHQokQEjVU>|PDvyw>j+8`Q3?L}k_xNeq*eo7zV(?UsS|5Rzg@#)TLqYZjvtuS z1f-YeFTZ$73j*O|hD0Gywmr)lSz$3Zl=}Gocz@{NHRvnS;QQW75RR@1d5Rm}ah8IW zo<;Tbp1EYMOSA~}-;TKoAYH$9G`cnUAGmA*^d~<1%{>QL`@d@#jz~l4c{2=l1F(nh zk6UrKguur38uZ@%Be4yvq zTDO0CQq_%!+ty@#l_&w5Gy9w@=HXMOD5>>B!5b-ixllebe_Gxz6e#+q=PO1& z@$+b>ZQ}5W8vJwr@k1ViX0h(abD!%xRDNa77BnbjOOiaZrO7K>l2Gv% zsL@Tjmt`tKphTI|EgcpMWy9Utl0;AdiGI!ZeXZYtTkYajsbQkcq>+SVgD7Nn^m6cu zn%O-3%QZ8qM@!|G*%-;rA$V@1siiKLK+jKjd`~3VX>MIW9R%meuh4Ma%_c;dV(I** z&Q=ZD>MASsz}jS^Sk8}-Ty>~%%p7!z-DHqzty&yhCNC(?^opddOtGRqM*z;SAF2P- zQ3n|06uMYRTdv#a86C6+o;OS=*HpUE$#L`Zg*waW&;jv)eU8*K7gd%3G=OD5Wy?6V zl1RPr7tBThTO4;JwKHqK#K*0*J+*xLy$Wi==n#$>~&Z+*t|o{luxTy~Wi z`H|rzlmKhcFv#a9?vG~uVoz6= z0J=(w!Uo5y%dLfldCg*7a|j8p8|)Qj)LX$xgdN*ta#Z7ZyI&LO7WYb|g*L1%T+U5X z;Ry90oa|8Ou#j`iVv-42k5bKJDH6)f>YAZ~i^K|j*wNAaHGn{W&qe#?o=bIg3oc)> zZ==?>)7-RluHuhem+-WkN-|t$ZV`50z7chU&p^k^BySwjctLQpLv4cWqPX%&Brv+F zzzei{k#hZIqp*oS8{J^&9&=ts^exJhE*xal2D8XQ1W!4e0Y6oJI=058tOIFW?TGh( zT7R#djrr(ne6#C%Y^1rJ-goNd%wt1n;HI9mgd4XBXpdaYA19)g=5(glQcKZ#eW`r+ zI$BUV1|Nr$xrCefCBTWK#(-tM7V?qcp3{~T;{Da9eY{#si6X9#}OO{h7`oqyO>l$na6kie^01sg{w-`@#vd@s=f%{(OY= zGKbfXV0gQ%K_{3vLI6MjsyEt4Lt*>qpb@eT5E~AG0YkF^YIJ*q7#!jR-3ZF)#+h=r#auP67hPnJmErrmr~Z`M!+fH5tzl~9a`uipZOE#$+JbI(H@O$ zaOUC`nQ^ksq-J|?UlLKhL4)WtM=at|hm3M($Uk!C0+0nzwazjeirWVVR3<{(W-8Q! zo);y}ZhcRO#?q`b*SmxSH<6`;ydk$G3Z4N0A?m&VN}Pp0oLqv@VFOy)bz+^NJfY|X z%Ansg(#b@*qDZ;!%3*|0r{!gEMo1;rSYyr7@^11F4qrRduw;5C*d!nM6td2=ae8s- z?bU8veB|-`ohPND+3jv@HD?6B>U(HpqxAy)A-j>VH4g%RksoKn)C6uPw5VqOzasqz zfsQYofzpcIYFa1Nt_nA*N;`b5T{v&m1T=qeO(ir3s(@Rwpo1Y8Ng`N83m>-N2FPe!r;H83J!N#ooS@8ZNM^;>j0`d=S(h>zhLR| zi8~$VfHy`7uA%%)vCtj@{(Kg7cyn34aU|?CEITKr4)ahW)uGhRI9Q9|+_XT&}_ zXt3FU+&w-5%etagFA){+0NCLE4~C}Lx2pugTg=07E1+e1t%L~_2Y$eau~nD- zUgmr^79h(Hu$~9j_H48ZVVra!n>qzt${i0-*+P#zkn_gDB47OfG(fgmeL3q9d>K^G zZhc*i!W7f5Krniyg!s#y*~FDAkU@Qk~i*bhUv=y%Hp(NB-HRxeY~Z zSI*<8qH9RVxjmTnQt>ITQqOXi0pKWp=>!qL{Y!i8)WFNh`8{WV37VXSRp& z`#FVaL@aOrJL&J$6~8!w?6)3t@|=4jeC@pA(F9$}NHe4fI#2^}n^0yBE|-TZ4FQc( z>63Wt6Gks25s4taT!4`OHu#pB5=}ibll3yO?*)j*2wAMQ#$ge#gKL8|MH6W#-RhU? zZR=`7HAN#CDBY@;8-O!xMM#BvqMUB2ym-+PR8RU{M-09XUjC%G^M!~A1DFHfFTSkp zZaeEz-j8#ZanM=Pt5sc|bynQml0yHDwb@Zcr3yLz(dHb(-HdhU z)OC$NHa~PG*kgXM1H9@Bw{(q;%$ypWq0uJ?XKZO38J#&jSg8F#!8S(zu+1$i8lUL! zr2c7)06W-e=et|v{-D5t?XX%{uUm1k)bwCmB#tjS8V(4B6 z6yR(h5Vqo;+95Q#3ZEtIpjh)@+V=qu>gJfD4v#LG<=Mn3mibF#=VC0-guDMIm|NJ& zDC|)sTX<$%3Zs2AEKJl$6tTvE3vB(r%RR)lpf$_ie-$ib!xSMMuUo?3tdS#Z#d@r)i+~nEX%KrBq%f_15WPEqE-nX_f{fP}#Rc#qa7X&C;rj82tF^imU!C#=1Puri z_ygGhhrhMS9N0F*lbPFOw@jXuAH}%a}X zTb!%@$H#gbyFAiloTpt#pQPVN`ATvunuqdgzzwA@7;YS=uKJ~V8#+ETKg$%VDx8-7I^tLN9z$J2k`InNX?AB}E;&|KDXu(R$JzuC7)Unop#?5P7COva$C< zYO!M~Sy7(Hf>F2fNlo3_2p!{3rQk!kVLkUZ+KVD?(1B*zF`Ao6YF^XU+x6LIbS5eb zUjoc-ABq|sa(wjfiRf_1t?-s-eH+he=o>D(XuZLn+{1Brm}pqZ@b(FGP1=j0gQ;Is z%dz^Fx!n#Uzd)aYFg$p^e*a`)jB{HPT4vwDs3Eb>6|Kxo$}F)%0=9< zc~9)J;x>n*qdd6q?*DuII!w>j%nVd2>zt{x;z*IUL8<8Q`1B(kX5hp4Lf?qhNSKeW zhOWPyAscKV8m3u2>KjDTC1pQ6sRbArn`R6IGq!2`H-G_Tk6)o67{GyZIpbHQx zFoWa&R_g?hS8UImB0mjKfi4*DYt!CEi%M%HIf%q>lhJ*G^KEw%S$)ZG6AN=B9<_b0 z-jBS7@lMTXkbRJOwe4wU^aCIY4E?0pVq~2>kh=jP&*}`P292bB))Y5pj=+1j5^L_5 z2f64geuR8O8B&XFkPciJjf*k)sbtgz{Y$%lIeOyNOhlg-oPSh?H^XwPG9&!};)!wj zRlT8&E zd-rtg8uTg6TG!p-&FWJDD2Ed(5WNp)f10(-;+{I}=XeGR%yYr%0Z#)Q!)kxSZr!v# zc;gb|OXds1jyHAyCg~N;=bCFfz$VSbf%|V1Yp-A4CgP3RO>DgEey;tbangYw`UckO zUT&80ChaC}b-KiXvwbHTpDeEqCbOgdAT#ns1S=NtkV0(2u8Na;fFr{)u{>d!;PHy= z*;C+M@!o;xwvl-E0!vTkG=x4ZUib*Q6vLN}p@UOhp$0h;dE#iV^2 z*9EO1Nm0N$g91rX44MXM){A7NK$p?AkQvA#af1k{rzjN-qC`wch)8$TO<=oQ7EHuu zimGOE71B&G^*40(JP!19f_Q?$vazv zj5NfZBeS*O)pC}Lj&K#X?C{u&ZwgPw{f%aCe5|HBx?_6rWf~>bpbfH z!uISp_Bncmt>%5s=$H9d0$4ZsagNo*7DW|N$i$h0bG2zLS)OYcll;L23LnMkui^8$ z;Gg(X|_Uz7ltep-#Kw-PqH4;zwN9JpNh6dVwg)`-`Ht0Y3HoWO#*V^1X7x7WP zbFmQ%K1V_6Mc|YFn%5mL;5+N2!MMihLq0>`8wt+(~Tv|wVWmDZX+5EI~EcRJh zK9Dea?UnZG1>bPy%AGai2~S_DeDJWrL(OF$6_@O#|5ru^X2{<*%N`!8@oa?#tC20?1GPbePhY#`96D`%15urQ zu7V4`FkC91YH@M;cLVtJr;y~&+gPmeUV4Z=bx$47Eci6uTVxNMid4$;1tSwac~yaZ z!8o-{X?Li|eY)ud2On)ELh(}x4e+X#la6ShTS!zI3*F<_d{x!E2;tR#EhMtxpA+Nn zupg;Z<+8n=KQ{{>EI$D9ndq78B@|V+t0%U-+uZO(@eE+m-oEk6`Q|^anYs=^Q(t`T z-!OFkm$$L`WbY#T@=~9B%&K#6U%rV0E*)5FCE4^dS>f|;RugIQ071c*JofpLe z6_G7N(d;tIP-@Cl%Vb?Sy`jB3fct7*8cC7KVjTJKiod=#=}5l) zvvnTV`OV5Q&8P0Ss0GZh7S?um8D73gfE{9$)oWKOZEGoBJSq5$1|#Sq@AvRIgLSKo zUIhxYv(~+vFlRhm04sG=c|In9``1=id&(h%#;uz$cWh;l#1)LiTmgv$4#Z+`P>j^* zWl}>;O;RdrvLC0OrGnaj6BcvxS%e6Q@PNUyG)bjlrPUF82aoa4L@c*MAhvsaWE8R&(cBBXPGYmQ(j_xDFgKr0ep8J5z}nA~-jSaJ5E$rs`uJqmtjRR} z*yQo9Q*}i;&+sB;c-N^I_9=p*N!|860e^nM* zPtOnoj8#i})J08?0x1x!SB91DzXM#2vEHKBc}yloMQ$3Uo7rAnx^v}wA;t_(pMYUU z`+x$NV5u%DwIl zJt>~CwZFwL)OdQ(IZlsFruKJ>>PA1$=TEAHdwJAe8#!03x5|aA>j5kk{*x>5>OgXF z?tj&EH~o)7N1jI|ahO^jSXvVVv*Y&)rCqs7Y6F)SA8N}&##C0WcZ^saD-vHVYvYt9 z>}I>?kRX8W^vQMK;IBz{JBnz%r=xEZzb*byw$`eq^*>*VJ-e$s`M zC==-qSwuLnAaQZ^PIL)Kenfa%O?NY}Gn)7zjl^MTDK7GONqChhF98C$c8 zX;;>k3RiiRZCuaZojbetk?k(+BX#h=4Y{wAPC`~soAy~n?G^HIsM(X9kK~lQb6w%1K^aN)G)t6t~J>f z=Y~SnY|+6JlXE6(Dy52)ac>M_{!HL#eHxz^bcxjfAfT|X9dvhKy2JlwAj5uw-@0_0 z^GIW$Sb&3OqrqbVpAGnfE8hit=#*eeQ<|GrP^97oy&#j}qSEuE*x|MHCBo%ic{_LD z7D@VYHIOr@K%Q_|jctPy{+omgkq)J`>>MPp6rd#FM7j_gczQ}(wnwQ_`cwQh+XG^a zpYC(W)%D%tx;dXyaI+fYexWR)sxq^eQo{Zu5a#}eC-WM!tMe{-3JO*Hz|BD|B~$vu z(!Lxut$|aS?vQ~Q?T$4KI^lA!!t?y>T=$}Ocy4wZL!FrTZSggW+skOC4Ll!xpLpA3 zXqtk-L^SQO@L#qTrYRTY|%nt{mZK4aw#kprERPP%=}BA&n1xa$6(-9uvirUT|lD0 zyzx~Irq&Mcee|~_fmtk|uU<~cXSGNSv4OCkizoeaZl*AR%43zb+ErdfP1eW%aE!Uj zj#ASqRiH!~(Y7I9=g!}5(b5SZQ;D|k@N>s(KeKE`wwt!NH0lbI`x#*V!MOgSsgFf= z12&CE%KC}N{De`qn5uRcf~4}nJ!Wf8ntq~d0qiIXd-Nko#|442&Dv{P(Bh>^O)Q`r z0w;&(5Q%uOlPyp@n+IdZnF=5;xnC&oN~Hp?ifs zkM86-I|vGd&nwY3KMHhSL$9<_W3?C3b`a$$LuEeEOz|WLu^5GytY}&7C%C}?)ZI%- zv_=Q&CLmj3f|(2_UjxOSgEViFfm(}U2YjWr{k%#ZdOKMz-ccO?MIeqF_#&SBt4aM8 zl)X_60HesJ4Yls}Ij~Xq@i5y4Cf4vL3;@l{`I6LO{{1(SXmgF-u?bD;Z@=%+nFfC4 zl}RSP8lPzXoQ%J<#1dz0HbK}kD9bw;=Wp5Y_?Hvo)-OOuq!w#AfAhQrT#ST!E+qxB zBTLl!pt>-SR@HtX*SX+ssgI;EoLS$bYlSUhaak3ahmIyIHzN>xSC$kV#F4AY#9|A$ z6qy+aA59XXgQ==bY~GzIMn~gCM`2!kxV2GNuPh9wRJC7gWNJTb_mLF_vV)EKR^S|q z-rQLxX9_mAW)FT1Vop0Ko!2T-Mhj4Mk=}XW2tDCZY2nL|MpJ;l_h3nH-U@cl=3}?# z>GnA}&9x9B)MLk1vXQCg;`GV~%>_=Ia{g-qkZ{msIC=K`9lN3!K^(5_Ha+C_U@}i) zi+=i-xiJw%V3#MwVa;^G@hR)Q%-=6Ti>cr-6esGx6J3CR(}gpBDH+W&YK6w`DXD=ab1>38JJy<2Rjj}kxm2}hN^^I(Wo~FazT}vW*YS7CQCTxbcN#qYx{*y!nkE2~oR`9@=*1fC;>%g+f-Hw~$B`h45NCl1}!4*8|c5_Q;$0%3gYSIc?4P-Hwh)A;{PE|%{ zp52}>PGk*amWTG{c_+MjCY#s$pAGO6joio*U2Fjb%j&A=f3H5 zuA@Wz&j6yiwf&iNs?Y67_N6n)ez%PwvAaDIh{2FR9=F5}(u+8@8#UQ4xAiiJ18xvq zRHE~AwsL7p8TiWuB#pntR&O&agN=V3bOSY-GRj@jNQbCz5secHxrK=JQn8Q!YWcb| zOw9gnFoGrs&bk%N+~N!YAuhP}`7f)azRusTH|Sgatw4jO33InJ${_kH6nZTa^WgsV z%G1BEe%_h$TTPj^-exw$z2GRSW}mYDA(b>rAxG*i1dIApot=YGURI3#$A`-lcV<|L zX4tM}H$!x=SVSgvDq3Uja8f0AR6W=M6cuRDTw;reaUOzvuoS6ZYqIz?GK%*hI%q+R zIAW3gys_9Diz5+d)ZmX-oMjASYaTyvkROi?fqs|J2%~nLBJ^W8aiLVpn-FpS_Twb$ zQ|U5Ncq}JngIC|spX%rs0_V82sS!+4ub0WCk<`1MoC&M7dl@L;+90zxgckCxREjHd z_5no2{e&m{i^Kg(!2bmHk6QSSA{gAkZ)XcH!jkI*3Y`Z)z#M7}1VS-0VC?Jt#!oR) zjn+WGd$k$}NDYOun9rqXNq{v#3cJq^Gy&`0 zpVnoU3D|Eixc}iQk9@@TJbZ~YQnqKeNBU8T7%>5z57bv%^Qy5kYpN%zw?Ksn#20Dx zQmQRgm;PVP-E1s9fR|c@BD)!^VQPIG*Z+<({};{W1uLRV00F&A$)cp^qKm%|<~SuX zrCq|Qd+0$QvPZDoO3wM`1Ix#JtJ}+bs%C7d{j~zK^v!f~OxFEI zsj*aE{G^(@#9)?6Z32!*lKx*Bk`)0VxNyE^!ehB5)|f#p8E;n$B&*bK!QUAlz{BZMeFT|r|!>0iCZ*m z!OXJFLIFC{9_9%+2GpCnTKeqV;8jFj$fzOCTu$=LJmQ7-YP6Uq>ncbFo7Kt`$hvG% z4wgb9QLy-O5~-Z>i+EmjWidrg`|XTz?bjfQur9Zu3uvt@t=wV06ulj_kW!0M+yqAm zs6pF%jHKCkA|6M^N*yW+}0Ma+$RA~1B`0Bf#|axFkoN77sF3IA-V<_5@1>%D)UFWeJW0;X{1iW z<>>7Q2Z<2-OlpEU6(o%Z&q$%lV`c>f2;3ZzPo)-l-CTh{P^+p{dvw0+d>gw#EJ?6g zT@rCONML^z7UxpfM95K@!`RqE!Kf^Byh=0a))T+VUX>yFoltRS`G_6fKz(E1jZ*uE z5+(@@Mn2oYNa3+qd&-%=EvX`I37iFo1NcG0+3Ze3IOB`*8pdBwxH9U5UbUSA;nt-I zrwNo7%8CmmR8$T z>*e=+0Ij{!ZQEM&l(9%Do*G$?P~M?qC&LQ?dT}*gSYj*urEY&l)E5IlEx;FQvX?~V z{m`xC3hJOq{TyN4H5U2Yd=W(bqU!{E1tbv^d1eI0tjzOR-R2p3kd*7H^Et0aFWZt| z1zJo2m5cMy2C8DREgetfaKRPp-9A)PB{ku=ppg4vDS0+(_6@Jnj{z^?83#H?C%o(l z5y)VA_an%QB-XDq*6g!yf{q{_$7|)Xl`~NdRG2KoMGNCA$Y<@00B~$xBN8nH=>)3nOda(Me3ZK17FdGE zl{HKHbxz|UBS=1!U7`lYGq`E%n*CE^$vrNOj=NVMeo9&NP_KX3h-dHo06LAEAGT5z z4Yd#rKlY^aPb*cY`S{P)D&=Y5a8D6&}j#M5G{DZ%^o zp);4E`=1>D_RNdiV}Uir!td|Xx@o}t{v6>s!*hl$Pp3_Kw*eW8pV4fg)}OrFET_}9 z8lE>iZ+w0S2n6Nh?Wj>mw>aO^*~L3wr~4H%vaz#9k>sHu(z3otQ@~%!M4EB=rOqy1 z&Oe#IEprO|dd_RlQu61tN`anIrn$JOtIw(GY&O5rK}#=u$rn4z(qzg_{|S*G7nz}o z%s~}i>bntrQ|bdB{BFPVVMXkND_)N{wjvSgrB;y(9S)UM$+IoE8psLqMHL&J+)WUZ zV)>z1^~SNcSOo@5RKhGyJGp8mTik1@&$ND&vgLm%qrkx~Zmws{)J4!iroDcx&WQ?A z7Z+l(B6{ID^HKlyf8rCCid4S|?Vnvt#eLQxP;_8}qxtqC5KU6yLG3Tt@!l zey3h_yL9ujB;-0SdO;cNGd*H3dIR7wtfa@$vyTzlDHhip#N(O;dD0An_G@|5(PPwj zjRbr%%@I||y`ELZ%r?%&X)pcR&#JFGkalcAy>sm>57Ne8QTw2Fu5}5iJ z+I2La9+l^KZxnJFMbo469f13;AlaVO%IkxC0h=8`LEM1d=H2=>y;tkWI~Ht38DIAZ zU|viNh`R~wZ9+}K^4Cb~&EWCnge0Dq0Y6x<%@($3FxIfjneXZ1P8&Is2ZSAx#1NSTWxj7Ond+H-J8JUW~Q+Qb&k8 zf6=z!nUQ>kB=Xtn-G!Gw0iVHtLDu>HbW4zVu0P|#`1oPo-Rmmy9?$A^)!N&!$n}B( zVDQCS48@6xiI;K!GihG_v7H?9Ji|*n**EXXU&PLD@63B~Czm|WpweFl%s+YBBznqp z{!Ojf^w0!IKbmrf(RuLLl62f&%`^od$Wq_KvikMEn}6RKWLRN?#t18{F!*%45cZ>2 z*Op@T|4{mU*?#W+df+H?{gq3vOzeMU=Kgyi{!JF_G#O!=O69N_O%A6Wb5+297lZkX zC-@Tkc;4+dNxuCz-JyN9_FXGbI5dMW(w_Iyp*t;IV$`QE9M0uz=CjST@82lq8gk%& z^MdTcvTA1mPRm74%0T4fle_oseueSA4gtTiiJ$?fj5tmrjS)#1wdX9c>nQm5Wsde$ zl{x=}trEu zcjrfQvB;#{1x1;%zR`WV%#6b}9q5ln9vg9!UG(Q+T^?`s{;ER(I*}0M##OAul zyBNN_5Ap$xuc{Dj4b!KOj%mjX1?-8h-FN0IL=_tNo0T#Kj`K~QIXbQ#C(>0^19;+g zCEB@tP%DbV72S!z9XliD<-w(!t~ea{AZoQfXm^THvd+ASylE*qseyG}%|Mlql{pNq zVFA5F;;?s$ijzXqMa|ANLP)rsN&1I@Pt77;RA+Lo{+(v6b`s;Yafag96#)Mmy^j7; z9L*Q@(D@&K+}GJ@@uzFVhyt|q(H|fE|9W35;Rh6f&J|$vE3u*c-rz!m@b+G#vD;=h zb~(ZB=rIa*o3Wb;ARICbK|@X#G}s7;dk7L-PH4!Cm=!^ZD6CQmLbQU`gR{3@c?-bQ z>w3p#a-bco1dv5J7=h(7>YK08CJJTI$8)Pzuz>lEkKkW_heia{ z8#*aV1|6v53dl!=5m?PxdAX?y2;Cs)6oGYfXHl#2-{^450oiI`b;FdLE%aQ!{QApZ zDcf3;sn6jMMA1%ahRss1P!Lck2vJxn^B@EYfZQCzChL&b+aiP=@DK(=CZjwol121- zLWJe25F?6LKtIUmaQFx5jE#d-8$tR#n$FXuw^L+=+`?Ic&z0^KEHb@Yov`_&|G<#Q z{x4$QP)U%_zBtk9k#aPX1~jR=`4Yb21b~IeVPsvJ(<5DDS%iVmku&=~?_XuJU6%gN z*9rP}L52j^%Hh$Ua7T!1^0S^4&3iMw^b}drz{PvM-O*B1CpLyg77(QM5gxcG!Tp0r z@3PYcHJI$*YYml6*_3y&ch~ZqoWC1OJj_*Uq_kbA`{tMgKJgqlK5fSRGO(V17F*MME z{>WEF&d@Pvxi)q>5DI|g6U%tKB}%0r7gjbbrC^YvadsQ@{Vqh`2f+#V7zD(n@23>r z!#zqSKZ?U1(^^`;{$u(3jomKLz|f9kSr*(LYx-3tv?g9MzmE z%xMN%39}^x%(^1ywO>E|RVy0D5F+K7x@O7Nh%l&@tkXNk0t5ZyQO~4ybCzL~#pXpE z&kpPNRPV73^f%hwyqHl_<^^7k=m5nLE(jV%wB9VUe_e=3m zIq03e)iroCf&3hRc=|{DAd8_jh4EO_xBqGH+nUA~CAh1c=~ty*myYaE}`H8?Q0YrGK%c5IsDI(c{)D(_{*m-)7D(>INX z=w2O|(F-B3@bFssue_ft?pIZnfS(cODpU&lF$mGYNt=XJSmxo9txD&W|;PRtY zvaO2i8j3t^bXa-^O$ah%GWR-+@^lk)QITk922&?*x_NGiga>(&5KY2$Lle4@;s#5f z-ClLaF(ZsmpBd`i=Uf<=OV7mz^7l=3PZK->ySZ=31fW_ig6Q?)*P0Vq*Kt558D3r~ z>#}`*RwCUgkrfq2j>JctwNbA@Dj8Z99k`@a8r>7KLP}AGc z`SaAH>S4n)8VKlb02)`{OKl@c_aj33{pccY3%WrxMld1)sXQFEM+K#GwL*s@RS%v> z5EMO^1k<^c%qBLcNeOt%V_!-bnnCgHW%pLKv0LzM1yI%|aB?DI>i2O;^l?TrZ=%#4 zpWSi45TJtz(FNoM7)V0QLjxMz<#JSYq#POPlg6e96&*Fz>57VUbxrJyCuPf!?R+Fu zR(=w)WyoxGw6y}bii&91vA51A9K%}~QFf-HT-{?L4poy;Gc}{c%vNXENVO^t!B@rG zBU@7yeI1CD8TQQGK#0ZF1O_^XcM18M&VW<7^H!2~_YmNMkhjbz#`{1<=jlt@pDOhbb)u<;M``66}<^G7&gVnewg)&%(HP&FdE*g z@jaKld>CRH74HKN%YqjDl~jIhh{&4&VCXKvWMu)CV9#jgwDv za_vRbcW}awY_y^Px)bID$SCHE=TOzCz%RJGFAAIBFe)z&pmKzV^jV8UYccGL^#w(> zJOn`HMwtFLBaOyhr!%gXry*1k904F}#&-8j?#Xhwz`g9hoYYYTY$r0gX4}*P3)i(TaqKlkx{hE&YfC&$lY1Sml}YEo*8^BiH($Gu7$K3OM3RFMx3&v}edEV#(e9h5 zvk_ZZ*GRMh=sx?i;(w<%e9Y&4{LH=c^3z8(;ZgB?5TW4cjc1DvUB~`Eey%Xm_~ax3 zm@YY_Kg>-qtR0xas@dSOwYCbh#TO?tSfuJ3D7^_ZFa@<>Q}IE4^QpjgJy{qTf8H20 zZU^*|rm>sNZF?+1a8*Df)?OS(gPnYh7Ut7ooV}R#94GuAXfG{=Xrx^3sNkp;rH{*( z+aT?m@w5>%x{gp+0z!tUty+rQuLE+Vm@FW5-0FN-2lp|GH*Wgb=XRRfjt-reuJ@ zqc_ildMM$>cPS5f#%B92;J6pI69ZYp6EED&(M2*4mLA#h$)F!2=q|;{VHvaIilhpsLyd-?ZRI_J`LbEMZ$W=2;{yOW4UE`?TL3EdCA#dk0Unxd}hS zJh@-D_+kDzXa9r2Z06v#()z#6W+e4XE!GJ_uXd1k+V}Wi=hfPpi&)I1mH@{U8ItwB z&mDa!AY81eeRW$NkKn?zi|J2bYN@MK;t$#M$FbIC^m;6dp3&p=@i~?id-Y_!Pt#L- zwVF)318s3;-HZZEFOKTU-qmx^gx@72pzAfYB~!3&>a?Q|gBqOeHfSt(q}FAdC-Ge^ z1HBd4;~O_Job-Nh^T8c;n|9Jezz4U#NTWULJ*d&&7ME3?3GHUW{$!Be|C~8xH(~)* z?1{Wq5jn>U9%+ z6n+)^W+x+RE4n3{+-I1MB$di0Rh`QV|5-FnswJC zq-+Y`?WE(3zqin*y_w6iBRH-QF@t*;qi z*=!5zPpZHpg>xV(6BSuG^4mD;{Wc%R6)<(Zezw(iMIDv#J~(mge%qa#m|FlP>_UkF zlFjy`OOXsGsy1E@CsjcGv-V|-wIt|GwXb*vGu@?YE%~}Liw@uMI|l5lPgvpwSgLvj ziwKURB0*3shvK|k*h(E*H}a@zwNAX+Pj{S*OP!yn(D$5D>X=?RDmxJ3qYoZpB#)A zDO%nDF3<88GUX`V9kND_E(rA+_D&C1K`dNdN4*YU~hdd&mnG2>dt$`VaY-X02 z#Iyz|4H$}El>#p*9#c82CM@I^V3lvw%w@5V%4Ma+3B$+>!R(3klFAZifSD-|ydex( zQAzU))j_55j{p`7Lsna=wIGkZ;ASsqB)=VlDeNrpXzvgqBB{!oKM1=p)(^ziP#$Bs zV~m{=rP^xX(bf!u?FGqRFv`36c+8TtWOQ#lrfOO<0a!FDr`pGxfl4E#r2S^V;>Alg z83tZG-4gS3gnXoV5;tp2U7(TLsXm#N6*0GwGM64n3A46*vnkQ&t5oD@>g+Ci@W#Yg91$Pr; z1_?C93AW;18y<=kDHUJwQ$IsUYkcjAoocN~0Z#kEOMZq37Wg#ts;V>(r+h}0zk&8< z;Df_MUI#+(jHI015(hbjpe2WuWpcv9Y1zmXQe?)8Ds^)vCt$IHgth=dqSR2!oOY68tN=q| zQ3F@FgO$5FKX(9P44oC0j*2Ln<>m%Rx#sGZ^Dz;}VRd=R0TGQC$fUJ@k`74qD0N^{%=%>1cx$E#qE|gI#rREG%Jszf}+wQWJx- z|IM2HZT771w6Ff(t3|tg-Bt2S7~i$v{*creT=s1l-c|RO;@w`h2`^z(KMo>pZWY|; zZ$Kgd1tH?jr%B|SR?&&?#v$Me8Tob>bR}NFrW8U2yFmMO7K6~d$_c)t&25`TEWfI| z+vk7$JG1rTybaC8o!dJv-2Z&=^Q!M{7q|n~Jt{Yr9H^T4W9-xHDlU!ZUAijw^n&#d zjG&1jJ4$fUl5_0>8)uy6H(nb(`S#-5=AT`(=D9Y3oij%B86F>@ePRX<#T&-4XVUfJ zk1U6qprDU-8b7igYJh^?IRL~F9BPTp06SnMKfvZ6-;-M{iUjZ#Yu)Sy@&k%Qfh#Ux zSILP11Omx(_t&>UF{GTR)&r?W8PK6ZotBdg(Q`!( z&f@|uvL(4NTkBc1q0eTJisNia)M>dea6yrZxKu|$XDa{C=uO+58WOcephk@vHEPnL zWf;(-lrFudfeaUxC>1C3R;QOdQh$7TE9^4alxBgxr1V(a=<>wGJ--^Q{AESUO7^xt zXh78q$X$qN!AU5NPC4k9Qy6kOR9K+SfRY~PaRC?ElELm29~QkfsCwQ7{^O7cZHSL> z^fhKmy?~Yrb0%{Ih?XA3eU9~oM;>LsO|I8)VK!R+PP&vo5x}sQA*JF}>${57qvUj` zP-iU*3^^ufb&146+!{zdDklb^3>a8YfEFb^@mOCks*eF^ zkvgfRcuo+1+rvS6V~#R!5YDWI6P27n;t?|16jYg~?UN!YguYB2>7>HAj(+b;We655$tXdeHU(9hlyu2B zm-D&M7H4d=Shc=y%HV}U9-&H;{pnMPRn12;Xu3i?!)fGHdTT6h0-i=`C!`^7iL>^h z$5@h4f{Zpr^54?aC|${2poKE3*9VcV4JX2)rBs~S?{@lQoU^)Cj~mr~BAf=3`E;s( z>|1)qarYfj?hqw;MIGN0&*%a(BMEh$NF1Qz`D8BCqUoaSV)R{n0YKsrGTIcZqfbef zb2*<2ZEU{M(5zT=Mr%+nlL_V?84`Cmw_v~+vka&cQHU(AYSx28U zIf=75)k*!(b-gDAa`%i?hWxj%Us{gXztUpVB8(U*lHHd>gJLboC_#H_9?g)rFUdkz ztRKMm!Z)5zlf+4*ihqYS)U0(QUbmy8+S$h7eB1s03{St~S6h$|f^3d0S<+$;WV9)$ zGEbk9F6VMS7uw?7N46?VT*~EK8COS7xxR#asf2VtB%1XIRhsNipF&LLm&{)J?kGz>9g7Yc;GrcY64kD5Y6h4Lq8GK?u0;i0vD|C$pD`lo&yk@Bj97R!OvR+R*Gm#M{v)@SycO)Z*%t9UbXk5M;$M}Z09f1#SERFpLRXHu|#n#(eAq1cm?_%eY%Mr_e|_vdp9Rh zw}g`9ZoLmbDf!1c*2O(-HB<9{Pg*~_QOI8r;{asl%guf)zF*^D)vG<X8VJ(M0FLR&i* zfXw=2>Vb66Rfb#l7&yPp^AoFvVg4XDz6^c#mti>1aNhj@X8_-qN^sPgKVB4vW|BJMT(U5$0Nq`c_z_f(G* z#TRoC`$}tmNa)}j_)DvQ*}eB&0Kh2rKVkh>!AJTdpYZ?jsraRou8jQF2mi28|Kvd= zAElMQh;{yQl6Cm_1n|FiXI}j$ckT7~lmkGAgFMgs{i99gE?e%WZ?qXZ_QI^cN!&ab zjc^5=yiyCmL(pJWfKurL5P%)?=LnkyeFXr@{P$)|2vGGf`0GPH9+1)#1r$4@rp>Xf zI3wUaE;xP~9s;;<;B(OlBR0)#-?YcVuHn&m6`G{DRFNU4nHDmV-+x!=r*Uu2;&lQy zMlqe}atob?H$+$%58^0UZq#Q|K7d4Bt7<$A@DRdu{3npv2W`VypR+LBM zRZNoN_-0Z=?DPf?zJxBDiT0g}Uop!>Ko2kj8vJ`{R38Io1 z6YgGYzQqZQsMGKez=gwE_!2ssh|sjh!mi<=S8JqbXa8wnFM%{?WB+D#zNu2J(V6*# zQORhjf*Fiy7%OuP3(c5<^ad1_W*DK52j z<-c z{}zk7m-g!$GP%nS*+tKa8na>o#j!i|cQ-Hg7ATM-V*n-MN`=yn-X1zM1G?4|cN@tD zKnnqK;cp$q51zQ=-q%C16uT=(!+e&+cf;2UFlDdK7cAM}FTQZU!DFire0KIDN2RGy zUiQq%mds~}8wWmv1zjoVY&R9Es-l)~XK{eKp_JEd*zD|oTR7J?Z1Z|bM+zX^!%ODH z?put?Fk%M^q)3`#10|)CaCr5CupwiX%&V}{tP62x*>gj{Y=*H&Kh!$_X_S47fVtK(+rvqfD~Z_+R_9?zzH>CFcSS57x! zirpo+UZ$N+N1#9=nY(RzFQI;{lnZdN5h#&4MU?D&eGBxAfc%)ol-IDz-)m8%2#)`7 zY$fbzY-TO0eBzsd1PP=_5NG6h3Z1o$3i*CBzB-ciUhG!UfvmN>ic{KA}8YNGkP2|d0%_$Y&VrcW}tWRCIGL2 zs|=491*1Hi$vXq<5RA?+((VMeTBE2vQce!?#&U~9w8Q%d(U?IOzLrd z%IXzys^Cd!qFfYfu!n?BQOG%SPEO>;J}$(woudAbRqf&%?!NqsKb?Qrzmq&DYfNp< z+jzNugL_x&2I}`-_^IbrzW$a`b54ACY1Xi1F^zdk+zY$fW&9ZcKgAE_ubz0;(&_az z#>-7EOP^0ahlTB<6;AmFy|brQny-W+mY(#`V{sJzv>Z&)nN3Pz#+O zL$c8N>gPZytP$C$@{N%z&W?eGS2h6{6)7PY5m_x7jD*n|;iP1D<#ilaSvzImko`qL zCOO(LuN=lna=OgT85_NY0n$LNA3rnGu&EH##<>nvJrJej@E9$9fjw4|dimP4D1&UA~66VjSR z_0WXgV)u^VtYy|CGb?a8W#ZEnbw?b*7PxnBu6~>xE3-_F-NP1@&0IB7ZQ{o^J7u#j z#$LsG1z&{X1yQF+TVEXT;&Myiq8|~f<~V4*I7|3virdRq@ZS( zlcO)I-fj6w=d`Xl2)mHkNv4b1W%Z_0biTgU#CG@>X|;YmtxZi_`?sEy?T+3!wEntx zaF|ZcO%Kv+WZKMJ_LT2f2m_mg3-)Ygi)JrimrjKj#?OgP*z+9ziN-!njk2jH*Z!PB z*|zDG*zIdpQGuPGX7_YTj(Vpe=??P-6Xa!^VbuJuyf>H?OaNOsbD{r)sjYX#S!G|L zmS~On=H`Gi=4kD^SAideR88RAI;79cQND;xMKQ3%r^4z!H8FWs4|lZPVFlQXS!X0* zvuBq@jH_;%{94hozTC`OT4N>Crdd7K@y3?uEB#lCM_!w0nV-Ds#^uy26X)v;J++5A zt1Z(Q@~It{QSZ!{vuv84TXILN#We8j$aVk~b708ot!$NgeO!%3 z;v?MW97eH^ZkFWX)aAF?oxybNws9P>-nkW1yiYE4VTSejEhU~)y>h=xyZ5Peve`YO zU=&MkUcP(u_{>e5+6S-W+W-bI^?Tlu`ZCzHjDMp@{|ex}Gdcx$`_pGPN^}3GoO+l5 z4g-LIH~c>sY;zJvOdC1)_;JOWDHWimID&vmTckqBFiEs3z?G;$qNqGfh+qXMsAJ+H z!I8xzg(OTSO%oEau&me5*dmJ=IK|6H7hEprDL4BYxU#sbgRiabh!)g@_P((Wqae!@SKX*KJo z#-!?9j6-bK$ItvkIn2Mn#A$_bIVC?)ZT;+3mPSm{sSDS`|WQHTUx1TwjLLR~1gpg}O# z(_0BItS>mF=sxwckNo2kmkGYo!l~7={9~WC2>JyOT+p*Mc4*R=H`@8|_KKf4hwO0X z$Pk9^sRH@@#bpyGWEl+?JVp;Ng!M2MYu>t&Cw3vyi;@lHdo(FkEVhH82w+UXGppDN z5rjUWnEQ;646F-#Hm1eSr5N|~xzOqK8Oj8W9`eFseoD%kJ(VL5R~Lns~=a&b4uR~-xH zlM+Z7C2zlf1qUh$0*eOMfxvwo;hMBppo`b_Y=<@a(ow6btfc7M+j`AgMHcfbL?{C2 z>7VAoK?pau9okes;chs~J{|L1wBnkl4rpSe@Hc`f>h#=V1S|2mVH7uvR~3SW&%5hZ z1$gh?`G%q8n*(%uH(PB;G)E7(*_j?hytwM9$d&)#J~ddery_-0Bg%8p^O4DwnTE(c zjxBg1;eB=&>0CV%>!En57KCzip-<<%Kq36ylw_^@e7QW8bK2!3Q1F$B_Spx*Eh6E; zkwBqassxTG6jidY4LU!;087N1DU2{77H1>Ev?!w-K&ezQbnhLuFiu^C3?T(&VX|%J zo7;SHj+V|6%=tw)6|19c=0F6Afz=xG%aKP$wcA;QD)(p1x>*RUT|<#?B66z&IE5$O zymF?@rJAYUETiWS{^dcyP{#2~a!;~suf&BmzF0u) zLXAGv`qPS3-Z(Br*Cb8ir^i9ET*^%tO8kjbj(+nCj@xciTzJ81>g`^ZuH1`uaB+F% z4lu)`IYbx^2cT*&sYMI@`3WbI9o+GN#%23m*Y*1$UwWpOubwsnw%vxR>FcC2Go;1r zZHWH22%XmGKR9p0$yaA{O18-u^3{(YQY;(|kW;?yjj!gl%RFCiD@(iR@Qt2FE!N^} zh5~ms24H<1e^8wSm}mZ=Yy`>W;xGMgAOdi?b0GrRLJuii!>dFisurb&$@G*gS}GqZN>wlo-Bkh|Vb#n)PqoiP#F{J& zW*;`%ID&(i%cm=shbG>fHGEs{^$CJUBq?mw#EvF0g+xyLpb*Hza1;)@X^XR3y8jSL zH!gH2+97nSHh{8veB2nUgcq^a;zJnO@nceyPXUPp5yhv>Negj&)tAQYM!BzuV*}5X zM=4_0Ctp6bk4PF)bAJo`>TFnRIT}MPvByfIE3v-s%Ln_0yDqOOGdoo*)%8lxsW!XV zL%Hm5{n)+j+s922yITJ8-nWt}qvu4fP<847d9B7;xY?-h#?lrSZ>oqY0g75 zSbjwi?~T%%It4?J#RU?u_QiG`ICY_=t1WTCXHRnK|DTLeNrXL@ z(nAMDFOQg&XrY%oRTbGiiZ9vh_zVgtumH80wRE|at@!oZ6k3kesXu#HGpj5}n6 zN~4vwu<<}j@}tG*iaptDl$aH$WvoJJsbA>TdPdY%a#Ehcb$Wmpm*#9K)>s;uIwjo8 zHS6+eH2>SO%J?3v{EHXq!>Q}aK2C(nff%e9Z2PcfS#-5*)ku2}Q{G>^2%fnzlvrCCYTZ3h>%ta} z^y0!q)*)1K;9YQnl?(4fsJfZq#K;f4>lmz3Y)dMIlbd862S^=A)-9*9>s)+R+*)MA zXvL8WS9yUpK@^pabQh}uUJ==ntCFh=yWwOtpa+{Vx+vbLisKp>g=HH^?*=(Sxy_Oa zdhz3WS$r37Jr$kW=x+ymm!Bh`6)w>chn65b|8)MqILIB&+m?s^DPgU`s|dS+-i2r| zBUhG&hzb}i2b(F5l;{dE^uSOwBaPWtLW6g*T1l{wa6ts=umk*u+^)~M<`m;hLRz8< z%JYw+yj;%AzbbIa;Od?lM6^g9!GldH^SVTPQj%Dfxk0C80kMJ;%F!ZV{~U**mPJ`J zWs(&-IfgF$9||V(TrsEn`2mwo+9-Zf+QHx9)`7{DM+hO2#f0P73OQAp@Z+m8VNuP)I?hZF{T!P%?LM=%^`sHfH=k zH9Tg>SBJ(a&}R81MSR+kPANZXhbRo&e>*FAph@19rtX+kLaem41f_|JG(A9=k(M&b zs$85TS5*vdB&%Nxtx_XaX9*>SWpP^X_b3Lp;`pK4c)?eyV)3SS!K>Uiv2`E&q{Gel zl(uu4+eoXaJ}iyF*i$<&FtM<4aPja@Y9iDIU)2rocZ<4+ks`b7fcwe06ee2q7%^kT zjuV%5N`!$N{K+PLx05_Y%2cV-q)nIJJ0wao@^;4l&Lne|psd-l=LpW3DtgG&N?CiR8-Kf8T29>Cffj;kH6HPX=Sxq&& zIn8Ze)6MrxjoJtfx3J(|_olbK>wO>k*rz`CrI6r=k@{L_-wG?dh$8#0w;xja*{`CC zE{3Am;)*Xpw|-kHNsh;zR7X{-Wm4CZr90V?GRrEvoN~*HTz&-=R@Co`qYzh8X=RnO z_o9jrN{?DqwCJ(1Nh5P_INQ1YueLw^t*-hSYSis3tpiH7?uT$+=?@Qu{9&74OP{*f zt;QOs?(Yiqwfdq}?Y=ZbpvX}f+HC)3${vDBC*-fVaK!%={lekGO_RnraAvK`m+gD?Ux zPSPwd%BpVKt{=u}Ue;|t&g*_&Vo~$R>RH@fIY3O1shPQj<@nRAZEWrA9aO4Ptwt>j zEF3(7I>dnky{TyE7$XO^j$KGhvU4CTr&v0WT0=`m&%nsU%px8_Ao0}GT4zH8UlNxs~n!G z48Yl56e?}TV6vd8$V^p!=nx=`F5%fsuCS-7I%Zp)-i%tEm~v6Uii*cl^TyWBUZ09A zT9VE#rM87SgUJ%9_P9L$JBK0w6#G*D3MiB+wMMJc8;mCNFrMN+bn6+b&F*lzaMaIlr5F{_A4EsbM=P>#f3at?-S?1fooKoa>4%}Z{?meSmrV_0gMj@=>_okg>=8r9*D#espPgbsQfLeoR|U?uBI0|KKqQeVR2rSZWU)D19>0H16$tyUmgTEVHL*l0 zlWSZpi|haN2V=a;E5c2})Ju-MFyX$jaEFhO)XdzXP_J8BS=;noR9m|gAx)iUG#u;_ z$2W)|tR9`!dx#*bw?r>%BSJ(AD|q$ZSp-p|uJ#hWTUJ?J2pfqIz1-EJCpwGR4X%6d zxi|OYJm+`j!<;j7=6U8h|7id#!p&OQ-|81lY*Px{%nFWw5fzaE2I;Ew>mk)staXO& zlDS{+{VP~s{MwbQqRC+|wKFS|Zfiv->TjYtF-d#m55!I%fNej#qm7D5+E2o^jX8Ux z74kEmP0O?}ivf))dDDg%M3P2rP;>0}QzU4DTr$Nnc$%xP(KA1Bq$QtS;2>tT2l*i3 zTw6IS8h&$QnMFx)tf#~*_VOqMZcSIf6>XefYHpSBY_Zu=C2_K=78{liAnPNG|4yQF zv&HEsQs{Gh^^X{*`Q)7oHReH`+>IyZ(+1enkKmlq&4dl-?)m+**b1_C@Pj zP#BFS0P}y?$Z*Hrr@+N;dScF;=1K`CU@4fPR$40m>;lSRSSdI;Ul`H46YH6aIEA7w z!ALY=?IP&pY>`0C83_Psb&Fj67HV0`?2_wQ6@R8zM>4uQ;{L>##9Jdjkw-k9WrR{dN|a%&)1Be$fY#r;aLXO%r^X4v zbcA9gELlYw@u>rrTjy3mLxCo>L6jgffs+CTx~Ol2P~Z5Wf6O8@%p|5y4OaZmf*cKM zv|h@}1xxSig1?tBQ8&`7NV{eksu>FV%IpVsBSpjd_2j6vm#3FcMdin$U~ zPmE(Cv{WCfYpOko(o)4WtY6r`&prB*!g}$?p&1`t4v+ohc3#=oshn@6P|7BjNfp0O z6L3q3&`!Hotur^R;P{jJ*kX&!8gA2|((}D`eIe+Arl|R!`d8`82aJlObF?3)xd#4`;h3 z1MTmmjcj^=^97Ck81WD2(ZebI%}~hr${wk|Ei_6-BVhe%i=8@l6}RaX#W6~=lE$?F zzWkwnMXm2yJ8cx*i+=r%gxpSrZH6W$TADPJlR3ejelc57UW!75wQK2R%haWBMV5m{ zRDaZJciSeM8l*Uj4mddn^$c8T_*mMw-mTS%CsLD)d`hQ1gPKGtNg9Q zX=0urj=DK^cgdLTe;=NZe?AGDe-KwFp z5O#e^wQAkl#{%RmKoiyUtk}mI1TfyET=p=IizTq`*)oaT3KIE_Ds*^&Vhu;9l=LJe zzvum_EsshrF6k%_vZDbld{m4xP3={QU9AKOsU4oz;zreoaIcvDkJGGVQ| zOS%M^(&9MGg8h!|Ez(5xg&wi)Cft1dJq6a@2*EZ_xz*l2f)hY+dDw*CjEaPkNO zOC$7w-8*1=D5HEXH;ZBQvw;{%LVDne*v`XjaTHYcmq-ggM``dtIUePLtzA=Q3i#}8 z8dMGcD%bYbDjXC`jBlf?aHD8$r0$IIT~TgJnHR({$tQk42;G`#;ligw-n5MVO{Qx& z{VV$XZU9lRZyEhuc;OX+fFvl-M#Z%#%aSX(kG{}a*1Io$ zJ`VwLl0}IY>LS?jk;U!R&qOp$U-&`hNI;_(TR#V=wne}%4zG-Z0Td(1VGDH7`DC{q zqKN-_(!cdzPdHD*@5EfU2VM%rWx}&X?Liwv-nJMdXNvL*M<+Y!bNny##dYtp$@7u1 zv;BgZ6CHJFz52w<6Sfv%oJP(4v=*CkiSQ{4bW64M!^!gS3Z&SKLs*}P0kSW+<(q|H zraOA~%xkJ0rRv68`)G-eo`aJ7R5Zur5-Lz7wPz%yR)!amQM=L8jtR-U+w1Ni)0XRu zoWDe6ZN@xy_`2srVOTqJEv~ENnver+B!SU3>o4FaZuF52Dbg@2Ci{cwe&~_aycY^? z8vkg)_fzFqHqUwR-@?9YRLEN9pym#0RmPpk1@lia-G`Au!q|>#=SBZE(1Sx}5 zLHH`AE1^ORBGjpmSb_8`CNRf$so>8#5DB%^BHbcr(ar1b4JTy6$>T1~E+AF;Wo$*` zfI{z)zAf!vkXZlA-|ZO)z|jCgRsAhr)??^rK7_h%RcV&yiyx&3HO-vC!fH!e>!h+s zQ|7=;<*qRX`>leB-Jdk%qZ9yqF4QrI_c%MKlVZnGaD&@H2Rq(uXcfq}yKqi{GhSy( z3A;E5CsE`&TfZ(?Y}Z8EGb$5yG{Jg2oPeSjJ)K%yyVX@mwE0zQ_jc&SYi>q*BF@ew zqvvPM%x%;o3(k!nSeKc|)1SIl%GQ5l8*b@U!77qBcDE~7e%v+NvslNm#ueax5=`ZT->6~BVsfinl@UsjaOLj8D zluVuMM9_&VBR*_mr$_M=I>^EikfddXPoKKA7FJ_kzW+ zXn@3sF(^>FsMN5K@mpKXx6XO58MZy*bk!v5v$a3?g*{|w16()c6)RirhB#kq_uNiS z*F-;hoDIQihHDV5`zC&cD%e4vK+o~1Uzxmz=N3U0L4ti0Kh*1 D0=ucW diff --git a/network-poc/target-native/doc/static.files/SourceSerif4-Bold-6d4fd4c0.ttf.woff2 b/network-poc/target-native/doc/static.files/SourceSerif4-Bold-6d4fd4c0.ttf.woff2 deleted file mode 100644 index 181a07f63bef8f18e42a5a57463e0e60cf8e8035..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81540 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 diff --git a/network-poc/target-native/doc/static.files/SourceSerif4-It-ca3b17ed.ttf.woff2 b/network-poc/target-native/doc/static.files/SourceSerif4-It-ca3b17ed.ttf.woff2 deleted file mode 100644 index 2ae08a7bedfed08cdfea76039c1bb1fa1d6cdf67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59716 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 tC40Gi`Mi4m<9BpxR%m?w=so8}_Gqj!BM1dG - -Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. -Copyright 2014 - 2023 Adobe (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. - -This Font Software is licensed under the SIL Open Font License, Version 1.1. - -This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. - - diff --git a/network-poc/target-native/doc/static.files/SourceSerif4-Regular-6b053e98.ttf.woff2 b/network-poc/target-native/doc/static.files/SourceSerif4-Regular-6b053e98.ttf.woff2 deleted file mode 100644 index 0263fc304226d90e224e53053855ad138303b70b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76260 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 G0RRB5qhxRZ diff --git a/network-poc/target-native/doc/static.files/SourceSerif4-Semibold-457a13ac.ttf.woff2 b/network-poc/target-native/doc/static.files/SourceSerif4-Semibold-457a13ac.ttf.woff2 deleted file mode 100644 index dd55f4e95ec9c29fb566d8617104afca31f0eeef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80732 zcmZU(Q*bU^6Ezsywrx8(vGv5ZZQHhO+c>dp+c>eE|DErjo2gmrVt4QA+f~(A?h4{8 zK)^siK)}2@KnVZ6U^L4>z&t-dV89apW&b~5i{pgC;D(iQ;9XKc7yvC8z=Ripg+AKD zra1utbAXV6)*65jfu|5a-uh`Pjx}%CAI`o0J}Oo?OAk+-Bwu6^(xB5RL-!@sB?x$NAFs3 zc8P=-OlTtdj^y}u^e9Vf9<1g>paCuV%@}ul$xm1S9G{6p6HfDr4NSGCPHKswGmN&@Z!5>(=1ttCVpEC|vphQ`)2-OHw6iKQlicv9@*bdY$rw*#gt$Ecs53MQvax_K zT&bESAh@3xDAfsES6B!LT@gf33Y=WO@|Lhf3Y7#Dcad~Tk~~3y|Mi%WF9{{()_9Z! zJ{=%$$#N;#nKO}K2v?lb`X%a&eV7Xq-|zrtt?sk4)O-AFaNmd_gy4j2a)~H4ei^Qsjkec`|A268q_!Wo5_2cYTqyq z#nm#@AdG*ZyFgNT^3IRvmM8R2TkjXAejgyu<7RUC{XiLZ5!fKSwo8qeZm;_yrSx}8 zBsC88-g~=_eC6povc{%M+tAz|ss~b8<8_m4B+|On>q(o5Kj3sT!DO%aOmF`y)-LTZ zL`dIGqvpW-(G;%(l_UujCpBA*t+IenE)5iHXKz@_;k2*uD8UqzTXPS#PP2(tYXVd! z@Jy8~=P@p|o&WqUl}pyk*~PU|3jq_}3vpt6pv~2M|87yp&w29_P?wNtG{mbW5@FEI zyKP-JR7!vbnyJ(&jxp-!8>8N(kxFXE`Ged;J z#svWrCL&H?_FpCPP6j6vgmQ*~isDk!ZFb}8TCS>Xt}U;v-89v{?)cX*WoK*ct-kdS zuisX_Q!i$iDu${?x`7Gw2%M1#CPe>fpcqBy6Ch3)oerH}sSO4OJy-xgYRC@4*j{(* zMT_o|-QyL*Eaa!6I)e4j6`^ea$$E!g%v0|H+MPyEkRjn_6=&r@))pUEj_|UCv=H?` z4+|(L+}`fCdG##9w3Sy9RRO=sf?V9O$l&JN*f$ z5ytfco|T)e36qRV3I<5+$j-;~7rzOFUnmhaH!3zEpx^yA58M}I+E5jRrHEt?im%6? zYY52SRRUkx0&oCO3hr+5JHOnc1=J!CF&K|!MtR7XP38PcwHtfQv6$pD(>X=c?9?P^rftg*^S53@qq*TfyoCM_BWra34{9_u z{_nq;;mqKX(343I*vKyQjBy#T$TXV5V0s`8VS zWBun>rKh>2Tbh6*OaUH6;PqR0Vl>5yA$UxE-Aeol_l z(4Ieodra&i^t>5(OF~Lh=nsCKrO-OfbU1@YAZ@bt-b^C0ot<>H85;U2Wi`AG!M8JH zbjwOEk2~l|{J2=qIo13`Z@O6$TZsr(h(v*+GYCBs$eYA!o45I|uocaI@G_AoO^Ve& zihnoN-zjm)bhi`0r3~-sO8sAOZ<3vRkiVI?bEFLVugpd!jQ)3*)>3oCAt;@bm2Njw zJ8X7Z?Sepp12VcC$*Tp?>)lCodwJ0`OOy&WJ_YcucG5zX21{4z!4HU>C&48@A+Hd{3QdCo1y9UgLo6umOcvfS)^(q*t&`)6uN>^vi z6p&DVm;l7zpZH1u{aJ2y%R6{KuqKj~lh68`8{m{xG9pjS zk{X}{Bq${eF=d9$-IG;8;i$?q(?;~{BpVr*)DyMTrkc7~`~zOP>v^C9f4Y3H@|XS=VE<1nSH zMk0i`Ie5_F;YGoqv)|X#x!z zK^!Wp%*8*~El0V|`_PfMJ-~^g1;9MtH#GH&-#p*>B2aX!Qs=fN(3R6R7GUs+kx#F5 zTQkaJSkV?N`upry(&#r=@2h^lT26{+Rl?)aB<VDQti(Wx-W^TwD=9EkojkQ)wPm5a&pXVFJZU+{(~?4uh*KM&97eHQXm3-64IAE z7*=_T_kiT8dSPL;bs#y-Iyz+MYFPilenjRjl4$Yl#t1I1AA}e~@ZZ_?-5lBo{jHL0 z>}jGHK&Zo7{f*z2y2`h3MOO7GO;m{#nS>}=f*=TVPJin5(U)!)9Hed8FaJ!yQ#3qn z5cEKZK@4ZP?X^baDaRx#N~UWvYX+ifPBLtq$UJoFhz2E^Jds`jL%x|G<>K#eOG|^y zT63Lit!i~uRTT*djZqA99J1>-40)qga(%0zDz+VGP1dl;?dNvABr-BJiZr!pf)d2* z93QRB&DXm9uVY0c)4tI%D!xmfd!ihszZa9m-m!Jbw z&&@)t1SWw_rsv(k>B1(?5tN#iRKqSr(2_i=j$`P4>l#?!H!v!)7}BA&Z!A*Z7)8iY zGKr;Oh-7XYlBo<*krTEsn`HtLzP4}0H02`X!xzJAF zNgF6QZ6E=i$%j2g4^cVGPz&hvRf+B@n7p{b36H1T@EXrXBS4O}fgNTmxq%T962_q_ zsM^<~C9Is+!!KkP_pfjN7`}k{o7%w{v_B@e2nkS^aiT`SVFFiyQfep=e+n3~JW8Sp zvK*%4lc5=`*%{pFF~aF7Vxl#h2Cc{?$gXVC)`R8R^@ zMMY2?0~S_rCinV!a5S&SyGRJnu!TqWv=lmQZf~Whi4| zhu+GYAu-D`E~?u0%6@!o1=eR?8qi?G=wnA)PuKlD>L2Ah6f&tm9^X^e?mxIn9ngtn z3a!RGPu-m_U(mhPhJOf9)Nqz#+iTV4>k*=LnIp(eY7n)rka%nW;Msq^-0HpJJv5H7&)y z9+&2>1i;YYfJU{*_;P79J z8Cd#%!joc6ku_z`;$bw!teo+3LdQ9fgwciQN491ld#(_=Ke6|Sv_*-o3ZtwupptZQ=+hb_^=yM z=6-gza0u=Torxn}vD8l$A2wUn;kqaUpUhN0YikZ?7g@Q%n`i#J}uJIr;o$#R9ggC7}jdQ3>UaCnvDNR#9}oHa=a^SElJ4(H2JV z%MEf?JR}ZAfFe~4Mm|0qhKmJ+Od4>9p89hUggKNuNom^?*&vZ+7C!&AM73=H6a9L- zkv4VXS=8@M*g2LD!oc=q5SSW3#Kee;5IDI11w{rEJ8%eg7xIrhX*>vxCXGVWoT+e- z4!I3+GRUyV2v69SW`I>x0Nroqmqd&ZyfmMMrn1fs3CFoPZBtCe?9vp7bIvmiduWQn zu^IbR!=kg5gZid1<)JAwkl0{HC?X{uZ%FmBNnsp1+1O^T(RFlY`#htlB6S5*OT2p& zQF2W|_m&n$+EFmZ;NH}%=`=v8;#RXwe)ceW*`$&-Jv!Cx@6t~6+DDg+BWq{`^28o{ zIh6nh0Nu+WOPYPD2y-l zC7%U#&!5L?TEhWJjE@>>TsdS}!K`KRj~N)M`h&rv`Ad?a=Y0#0)n3BMV(EQ$jc;bY zG-i8!!0w%5A@L59RN@LZ@(a7YiOJ9JtNBAQyS7Ce}H3d zNUtqs&wA_4W!)!%yIlSHbD%!q@57OLUti^K@7myPz9_#=CMnMM?mu65Bq;KB*&eO^ zJ3Y}V#aSAHLa@j*MKb=$UV0DAxZy^n5TmPi$B^3}?8()zXAe%%LvUCKYK;U+E{b$G zcK2yYz*R47flxF8;S(0qVKgDd7j(ZYkq{WFFcn74I@FLn7ebEcJ_!mZK=g<>Oye+u zGEg*0vJ8s4BuSiyn@xM7?aosD?+Z?mDH=v8G0lRY$aXI~H=5FTA(>#I{@JX4gU!h0 zvjW&hn1pcg(b6S~fztuegD8vAx{}(uu#UPrpMG7t1kEo+8qg;UBoLPo8G@8*m8@FC zw^W6N#l^W$XovB(5)Qj%TG~R9YIcnqH$IQ+#cHv7z8@$AJT`~XvU&uDJ&am_xv=cj z7U!eMF&an=HEX1wrAuy*BF8FyWSsK?S;cYqj#u zrNyV#^r{rqbW0l)Qx+nc?+@p|dKX3Kxadbsi9Lvjo2>+Wyfm*408XFdMG z`iK9G*FSd`-TngK@3v22ubwd+I)aNNk&0w864@w@OA?QA7U?V!HG(pdQOZzkqv+A3 zqNDo_@F4Wy3X?WWc_R6bs+uaCx}KU)YELFfS{~r8jHnc^Y`=J3`q<*yGSl*}rQ1b0 zvzktERdH2gRjVy|S6*LeZ(1-p)dbX&*O>E&?uhxwnY&I$vyPrK)q67eB=f;}`e?d( zdTjdj1c26lb+U7kJ(ZU(!YHA8sy7Q@ELcmasg3KdHa-Nt1NSTUg_q6ZgqYmVOeh<7 zPC@1jk5Q4N(n*$n2o0}lj3sh=w;aOGc2s?u)1$Z;xQ9CIHSr-15-|OboLeRJ1J@~P}MMV zcW9B(JR`!R(a}$|(Y7kAdO=$lvLe+%JFS6fmfVuD5TtT0jD%uB5A)2>)%cDGwJ_|5 zfhE|tcw$Sklh~X(nO)&Dlh%?ZaCRPC$DA_^2~!NqjeGh6BsnhDPvJDM=FlX@wZyRO zQ{W|Oz(d=rjAe$*4{H5T>opGjv#h?5>0K8*_jyqpz13f+Xhu6Uxh_ zhH3ymSPX!cgoNamxZPlG^nsl5SQRx!w2*n`!_fmIu|zG`3;sW4t^QZ;_J38?{<;1E zkHu!P9sw{OmHV3JO2#}kx{?$%GW#8OShu;p>NSTOH* zkZgM|soSV7oqY}yKWv_`u?=o;AJ*#$M}!&Jw?o1Muth;DB!o!2Q&e}J_y9|(Eoo@6&U)9V`+E6TT~_e!?3*|J(|e8SzO^X4VVwS+n7wzszW#g4i2bO) zJn|Hw3+M1iAj+-5bXmsl0J{tG*30H)uitvufH#fIT&A1pD?z1+O)mjvXN$fhJPpHb zi~a>1h@oX!tm|sRUhGwOutjVMIH7TrRP9u0?TGPJCk=?#= z3b-53S;?O!$urM(>s^otEs~s}&hCaFPbpI;kUF+w!lrQ(s(WZ^YmCsp{#WfKMV73* zphQVTPDDmxu77-Z8pHs6a&m%}iiUjwFH+bzOOA^#P*SN{z6T;Ui_LnWO0F9rx69?< z!j`Y@s(rr!qNA8mqzZ+)%SLk9OvZKRO;&v zYTpf&{XYHegMY}Npdb;F5^HPqB5xArBQ4C^sQY{4gYtJ)mx@YOt{C6$yDvzOy9jq7 zG<4Xi@$l&%elsu=w5-&VG#~%b+m+s+ny&(G82zgtA0p1%fR@SztLLbxYusYUgw_mh zQ^gpfm?-Gi9KewdMQ*qV>tyO-hi}36SHn~Tr)IQKbwg`^p8-+;CEt-MwrwbC%!?jJ zSr2tGNJ=4R`=yeRSUJb9w<}G1E1bb0MBD+@HNLtT8hwT!`ZVv`Cj3Kir|M7a=_FzHiCZPwWLnKu3*BxD&6keR_UF*5->*1L4oxP zrQ0eHC}s z26E*x603%aq=zoas7TzuHd9|!g_ZdY8n{X|Iuy?ZopBC#BRY_Cn&j+yUijL0YqfK{p&FW%_nyjps`!>-_^o`>#jv2NPDspFr1_L;H77>q~`L7Vw#IQ z{&^JeQ*_|dY(Z+w$A*AoZxJ*q3b}Y#psao)jJm*{ACI&(XyASe{=IS%hiR$%z{HEt zIoxzJ+gIwON@Tzk+5Sw5*mX&|)%Qnp9Vc9nDj@nz6TMs0m(#apN)fYEk?% z{}zOB3fV|?pYbY^#dH)C5(B$}87*#|rX(I(Ri;(#7KFlI``k|es#zta_NHSI(93}| z2p0`ZOwj|Og6=rU=j>j{_6s8301Xbh2kPWbE#r7Y-@aM7H>v2GZ&yd8VVR1DrNz@fWhXu-cYev z4*)4gn}U(f^rhDstI;I5>UBy1H$N!cb3_~^in7!ZcP3A9{e!3nRe0MTu5@1O*H$^c zHi!7NbFj9aFu;|eP5E38i)uDAEB?=D+5PXHU+r`B8n$ zV>Ws>9`ZY**hOk?-2!p%>}>~%X~kC$2ZmsNnuu2ikO~!Jfz!IbyM2|VrQ`&o`WdS3ES>+OwHPHZYWZI{uT%}@5Fzbbki`kvX zYXJAXm=i)n!AE>X2yxA$Q-rJsG}r@Svos;vYT&#*|ED9f+K^gbOQ{YdXCr{Z8;8Q^jVXAV;SU7RTO!;14WMTQkzqm6;n~A6^cGleNha zW_ywqL|`BgAT~^#UQ9`U{?)R%y1g!J4IqK|8#YKHBo!h#PED%W>yH}3`NmM)Na@+%)vS-ECvFYzN91Qk zk=uK)!ZiU~9D*iKD`Y-6>f^Nu=27%(`rNLQ6eT&?f#~_fAMotqghf5DxMqJAZGIZ_hWB+9Lyj3{O)8)*>?&N%ZFoXw57&o8z3{&X%(F32p+rY(tpJkuz7$-DP3*^> zq(Xu-2AS|+t;nzhW#rftZ`w1oitCuj_Hno9_yrdSZ0P&XS+bFwOHcj5iCD9L+m*Z7lIpP5;w#;sGB@tx+~w&tGQfSe^y1BA>+A7y>0^$X zkW-(yi$e~)Ylzoa(nRMi7YDP(w7VWHiQiGdg_<`@iM7n@p@P+XRI|_ux`4HweiXx=FNUa zuJ`~`{smRlPrB#| zkTc<@`OF}}k@E?b9#}m>;>ftF)ESyB2-6HT1P{LJB52~&af$i;S%X=HEnNJkt0PJ9 zt#B_+Ftio*vbgFiCyiyjtKz=8437F!FjtMrIRuDvFK{T{@t!OsCt#KClJ!3sf7T-2 z7IHCrTMA}YN{gRauGJIkiS_a=|00*!P5Au9SKgr|yeG>2-C~Uz+d!uPp@xcGB{d~{N0rHpO$UEfK+>4vL zP0@d9@riJf3bBFlk1dQykst~l5iySBZ!+ZCe{bwrI% zB@9lnMF|Tv&9f@CO72QQp*nml^RjYvDNii(5}~Q#+2MYb$BEt@bg!u7@_!CDB4U|@ zr5G)N8PwQ|<@R+t^|Y927+4uiWri&}MBec9eN%Ex1t8ZJO9KMrlpd!kVYPkizl1IXeyU}oLZ3;aZ5BM9kHnlZIP z=Jd90bThMe2-hhzrHrHeO{*gR79>(eED3qv0g86$ZB6AI#W4;S6U!+Y-S4c<1(lAOW%jON-9r7Z#$2*|!ke~Xf_ z=kO`jbSDwZER(RQhkfy>`1`PntmHun_x*b0$39P>G1-z`QZT}N*OLy})A8&5y*b(*x9CW^z&5THHoY&*{L>&QM zCg~sfSPzMmMDe*F%--@!yXh(xb|oG2zPnFh^A2CW1yWb?+BC3a@(;Y#Qbr6DyeY;4 zUybiQ0mxseF1vH#M9eq={0U13OqmXW{nkPI7Z3;&(uhuvnjYCq;f)NVrc64DN#jSi zP8;~QED-v_xY)efUi@VOjC#5U6(WS9xFi&A(17N60qm1%dlAk1bv};pnG@ZupZ7V! z!1>YDxS5j;V93PcYchhI#YP4HruK*CAxLF9E;k~H>72*R)&l$3u@(*;9}b75me&INM^T4kFmwP~eV_)Z} zfX0+9p}@bGuXldJ&cFM&R@SAQm`tAT68xf-tk`gqVD?mN5Wr|rPfobAvB*kB0)MUe z5=XvLla;fLl5*36mop*lp0>>wDdW4}{bUV18B(SPvzC;7V>5D&lIumBN|x(sqCq2( z>!T#58Ow4O1sGa}d?tfW&7wE7vIzIfxM}$)IIc9j93`7jsnwLJ!rA2IwH^VhwhMR2 z{(ywy+eK{|UUL_pB))~=RT9FaK4G}DE+@rFV&t_qnZ(k|fc6setG>>N5vD7T?aX~h zM2Nj*Sc%1Bd4{@Pc`)*&TnpeZ7@d!slm7`pD`TeRU6H?}Zu<(~EgHxV%cdc|XNErB zG`vN!d5TCgmh|2hM5|Xe>;=$_2RodGZe2KhP3`qMmQO_%6*#mT$dyB_B!?y|Dt$N= zPh{ZW&M<`7&yr5D6S5nAX>WhA9Z79D*G}^1Sr7f~S7W9 zc9NMx3OliAtd2s2I18;u`h)s!4`o)9i+^t?>#JPXa()`xl$Q&y9Lr`ndJq6rg7u!^ zn)B-dYc+>MZ(-+x!&4bozudGa%dmY=L?vn_Kk=CA(S5myYn+1WPw6RXd`;;h3$E5H6sCL^ zrRt!85*P-tC{)Xb>b(PWjK3srX*4CQP?CGnSgx^57%xwdEV0tE7HK5S>P!%Q!Gc7B z(!4)h!MKKcb$NOjZ)=%VI7hm6L5To-Ce6y+{(sb0f#X&bQ%Q`Va4O;A1{LsG6lIG- z&W%*F=@j2*?gKG9I4}*f1|xX1J{$vMq8maX6H;m^FQ*hjAv?Lan8XOW`dkif|^)(k{%N^&#;UzIZO zWM39Wu_6YB?s11e@q&Fu66Pl>z_=`QPY57e78&$j)RwFw29Eq4?w-2}Mtb=bn4W%@ z_|3~C4S?~}VE-XfNHHfTdvjc$Mz-j1k7PE~Y^>41pp&6ZQ%&=<`D(EXUFW{KhdnWp zOfVG+v3z0*@d06W+JSH6#rV)hY^1BtabEgtsR*{IX%?R)%AvRa37Ao14`mA}e?y!j zn|=zocvd=Z`kuO6P#RI{cz{&#Dn&{qjHL2|6QJfIR;38S>gRr8Oc5_pmsRs^BRvVP z8a-+2&Xy)LuzI?TeGuO0m5*1v`7wEBF?8z*2>|qIi{BzsRmX4YdN4L-4(9MyDw4&5 zv>0so#MIt%juKGF8XgtPGer|l-s`x)1r@~S=e{w9m!5}R>-``Mi1a;Uj1c(h!Hz-Z zLo78%P1MMZJz8H7UZBUuaSr9(Dj zMeri2`Nv&6S5iausvw=l=dd83d?|muB)GKG0%R#GA^g) zXCHQ4I2FL{wt-WG>`SaiE`qsqU%{fb~pTS6EqETU?!E z2K4h&Ecg6qVCaacI*!YAnKsO&5GZ`J>dN{hPL|dtkBut(;C~fvc)W4=<+-4RvF*&i zIGb~lN@N^<2dY(I$~DxwwGKo- z&%(iBRw>eIFh36giq#(gV*mt-6+{dKjMXm)R{?}E1QZs41+*7pN#aL=Z{qq@n_CoB zjYb2?{Qg+s16JWcit%GA2Fe)0_rY`!4nYdeKfDkK9T-ugRcB9Icbi5cl~s~HS!>fA zIz-#4IM}UGL{!y6mWcu)r9?(8Wlf8nL@t#iN+Ok1A|C+pn3;hioAZ(BB`521LRe%t z+4DVl2m2gYZuJ)Alkah>e6=Hkm}5q;UTE`|?e5eCGHyQ3>9&jHvL6WsSWajvObjy3 znW(VlKXZPTvjGyYC|IFTKHV7wZnV-@4v(_PrKH<4?`8^%iJm5PdHY)jUl>RlT;ps0 zr)FA~CJtT(i4O@rPH~Vtu;rSf0u0tr89w>U`Mp!; zjFvPR^F#5AM_>F%A{yOw3M$aUECH>C7)$c%Y2WUrm&X=_t>_hLSprfYravy)be|hi zBVww1={Bvxlt4{X%($#)IkTTSP5$%8{J~3hctHw_dFO(S?2`U=$m0A+4Z%4X+75Xd zr(Z#61V`HXkm>JZ)LLL`GCPBGsm#oFBlnhO=7(g(nBI5vM`o}fInD$gnQu3Q($6MB z<^2(}TFXC*SM2TQ?O0k!n_IGWm-H7UV%B>A9~J_RdAwA05o4^9@k6%iOtR3*G3?1| zn~aNA-b??6ImXCaBO}EObh8h(3K4AQO9FbawgK}sP&#x{YynW#k`dzP8jkyM+cADb zczI71do(}!M|2XjrGobmj)B@JIGHEJdnM^UzBWrbN3nox-qevv{UR9k_^YtFX3nf; zHLrgNGc<2MxlM2AT_+Z^5P6S6h`HW!Q=_s&qTiXHSF^cSHDg&aD0rR}yWX^AY!PJ} zhJz?E2K6)uI`^aB^L?yET<{+18KB{jVn>^e9BIR{N$jaIBNk8?l#6-vWh=aV=A=jk!{QM6(%M5>{c`e0j*j@TX4P`KpM z%^8fBUSs}mMJ=FUnstKK)0CsRC8m13q`et6EJL}ffkE6qz$=L1Ve)W8OCja z;zX-x;sY7BT>74d^ZX0*r(t;uVQP9We0;9I1RV?b&5=AXfqY(#Hc2`w=xKoyC3I^Ry5OBhMM_VUQ zh(I_&2%&O!9bD}M;PF+W_4%toGU+7#_;Yx26!7tRd=Zx`N8^eZej`y|=HbvhzZCR& zUFEAlBL&p8SQJ#Qq$V>w4v8dEOB#CWDdvL=r)jPvrJSV6@w#L#rQQEJ<@>m<+g$Hm zV&R<=YJ1V$LM(h!N1{u$unaZ{UYlaETK#rFdAh+j4g`^(+ z;`8PG<+)9QDv~xH5w!@7natjh)1ZyaL~UTh+u7J4Daq(7q;=AY3z)9x$SaSv|BDo` z@$n9#MqQ@6Hd;2Qp}XXrMY)}}W8QKQr=cuayNfk5V2J{N_@Iaa1i?UH1N-}hVg%{n zqSi_PQKKqc$#_Cb8VSe~PBqk6h9N}QCW=jXe?YK&?=D@R{pgenoV4H<<6G?5o`Tpg z6oskDEvY3DM_I_1y*{WEll)egQ!T(Mpunu~6_*131#LJD(Xuo~sc@EccYV&f&?v=G zh`NUwP*&VEg5tv4>`&|aV%iGNP)ui~52V4@gd=Ew?q(Q%^o5?C6@RAC(qPv#^;Y$Z zvwK_C>dFD*H~Cg_As@~*7DU!`>eH0USkC<`69iQMdHa-Z6->$i14Qq{zfh>q$r>BS zNh08oT?6njuAD?MQ`3yOyp>1q2da_I=~ZcXLkMG2(Xv1D+Zze!Rw zC+NFe^?YE1@^)Ix1j6)J`w|Hf(+TBD^}8#4gt=((^Lg_Ct#c3IQkfpx{G!2eroB*s zQ$YhFe`yOS{#M=WDud!%33y4z4}6XXvSL@et$EHUqB3(U2koRC&1{&z5PBKJ-nL03GVMy&a$|7Zm zx}dtlD9CT#gG;9>FjDM$f@N0B&q{kHvQm#D-@VbPo0kxeG7Ywbg znq=2cc~V0<+ngC?iEwge;D6uMfb80G3F8ZGnp=7LD+B-1gq*r?x2>=g5FxGwN_74< zuX$4yXveJcCNegyS^ydttG^inctoc3j-=(elHG2N%Y|}~!N)zKZdu_qDN5>oQ4w0C z;;igi_xz(hK7VFLlMKZkS8yRQ-Y1rf&Jx(JmavWD@Lm?&c#x;Ms2L>X&RqvaL_U9l zIoBJz_Z(k}tGCNIU=hTYh8)73L*PUvjh1tY&fN{27P@IQ?QPo;?WQ!W!`Rx0cCc1K zz?~zv^MT`4pA10?&pk^#_-e-dA?7{yZBu0Y8hjhd>B~Uq9qQ{s4&rGCnasWbK|~jD z!#{^|Z<3yU%|`KD?qm8ywE1-LZ~1j%M7ie2I9Tx6%cUyAgmC9F&c~TBVJifG!&dU|ejPq_;un7YfU> zueA5IiM7Cxt2p_K(lxDeJhg7B7ew8*wlp&hXwuYvo0G|$no4+mv5Udj#x1AxMDO{B z>?Y7Mpk&?Vm^{jZ~s9PnN>r$}okB zyNTslQ}h14Fg_MdlYPDjmJkX^LnP1u*sgFb}^HJ-%*d==XrJfMud5bHi153%uQY#D%?ejd{iIrs9r;-`p}!SZAqDS7pt7&_UQp5 zFJI-Hk!&ps`y$eMd5k?Xt5^}~5Njg468=6@2DZuAj#;}C6u$YHZ8S(*yYS#J_6Oz2 zF@vkHZ>=4~0}9C)KA4m z)B+%Is!yc=5VQm!X!64U5@u6rVA^(sk@Qjn*7{1)Fb3zq3d&YjZa0J49gb1bPykMx2nylTE-!9SGRCs*ake9_L<>-t;g` zno*%fj|LkirKaKn(&qwNb)+iW7ZvO`RI17_&B{tv_oldBtU@NMc_=2?VRR_&6TP+K zMYy^=5@!dMC}9r3l|nuwjR=|+_&Qb_e!sZIMVlMqd-Lvw^%?IkD!CxY!_0{fkap4i z<&qHs5vYkKOvWD&L5w?OE?Q0CVap9vRLMH7%06dSgNN)$0XddjP!nKjAOS+(Dm%>y zSVKX`J71tCAWg?7;2#WMjTa6VAZ#LKprTVCE^~?PD4mx0w6c1=bF0m!uLogpG|lr% z-Woq0b`=sfj_v7kTsbN8xrO$DQZo`kCR zj3F97$b~_F^dez72<`GJkoD4AKY?yV!vm+SdPd#FR7)>Q!_Qz%CLM1{xg0f3uMI*S z?Dg(Fa6ImR20GjZ`X-t7d7i@rG@1+Sc?Ab=`9u{gX0a2r52R-oTdC^`3+?fWC7W1V z^aYiC1DGYxff>c&nf2Fp9rU&tzqWSrX@ufI{L7EcUK%P3_QIapJ9to`^8W*JK#jlU zCeczh$XLHA2NDw~Inv@GZ62={j`HHP(Z<2_U4~c^hpzM>F?ZW3b}ylNDI}i*9z~tb zAg!pW^D*qM`ZPW?w1>iNQ{7Od2%g4ORlPA7HpyhxV$7rk;nH}aT9&FyF&{b8I>+;z z$5fBub}cQxONLTOnjOWkgA~_YAB;7WC5hP&P69ft9dIZ|tVcMP#k2hBQ9B+EjL8hh&t? zvTVd>5U6K51{U-bldGEQTpD1?H)SCQlinLx;jCPqM!=F+Xgq(kN@a0uAL`5!488mL7BcPx!r#?%?g3GEyWW>(j*5k+dG7z88zA;0j42Z6!)4y_m#K#&C}OrIM^#Lk;6jAf|+IhiENc z5xXsX^hr8hHwn|Xh@-(oThIuJ$eFo#BpCth++-u63oX-mFM$dPnKLa|4b7FY3o1<`3KYZ3z-3gAA=M! z(EB(ov2UdGBdGzvllduI(Tyb0_{;P%eeZD8{fw^1JZPsxJ*Lmb@)7NULqU}*rRbp> zQ{pa?@KfI$AdPi|`XZy;NyBX0(QIL=iznMjm*l%b(c`naDi-Ej0=+Cy%1hJIsBu;+?Q9jqCP<~$5Rkxt!TQk6y6R_QQz8oLhbX? zDR4p9SlBxCkdl#;krNOS5E79HNZ3o$1W^$6nkFsArwvCNJrA!eAVY?XXULEthaBS= zGGvtT3@I|?7-dL8N=8m9F@~Wk$moJ(Bsm+Qd!u_GA<3ZkAFG}Gv`R*QMfYYT>9x0P*s^QOXIri~egCmV zWW>iZ%w&mSub3G#BPuF0o)IQ7fe~irCG!R|!c@$}Ov7Y}5oQK5&t&8|Gh=2dhI}8U zWB2>XUz&H`O!XJMp(r0W77CZe7(r32Mcl1g(-La~e|KiAL7f zc%e%HHNcLi8hjwL;&HYGn_nB+CzrR~MjhV<+^Q2IE2_A(sKLlbQqPNt5&`Dpi zhq`~V8r~#W&~yZ9)HE8cK(*R8$|0n-8oxu~zQ+$|V`5;~tcQ(VTY_45zdgsi!_dZVfCVo$ECK5N6sZR{Rr>O;>C_Lb{>ArMh$DKMW52*SF) zS&`hCFtnDc!`gfQFeS8$^r(h*(Y3Fcdk_h2uJp6Kb1tTJZ=9SPnX08J)SQV_x82GE zz)Ur2Pf%fO#0H3J$f_R2H>OS@Z1#rXk+bkKFUJ%P_%i-{73cZFvHjVYf(GTrC68?K zpw5DXq6bs`)QtMlgI?+D{MsvRVgt^7xKdqK8VQd~VxH&#DR;ypp?zSix>|9C%ck3(O(`F`h^h7JsCCY1tH5b>N^4^Z4UU|By#;m-rZyE z^;9uVWk^Kb!Sc4YS3w?FRh&3wg1^*p2ISs@%s_R&;V8^T6| zI(T(pK_B}$emU8a^=Yb#rOxjO2stDb8C*U`qV1{{n3AM+_wRg*eR`V5&{?QK6! z{3@>Us8@4!r#bzYV~;cL_!CSxXyQpHn|#Wtrk;KVK)a3{Ku0d9GdD0X4^b%$D(o`> zDxeGZ1}ohNGq7f&%tn|4nv1spvJkN79fZYYDa&eScXyl@=Guv1e?&48Qe&+#L^AWg z4Z$4qXYPjFc@Rk=t!feQXO8wGH~zs0=A^oePM6W1w*d$XL)HHnwiAezC{htt<|;56@SJ*1w{V)Wu7b8$i6RwY zWv&9l)WlR%2V=2WY{a36L#;5?9gCtU;!wn)R!|gmv?|9|91-m(fy0Ej5EtSEF2sen zkT2xpd|ZeNaUM?KLY@#8@^Kz6WMV8fmia}SA1NVq=A@w0qTVU@B?gL^`b`H(r^O(U*b~2ke z%wQffn8Q40R5aAjZF2z2PPHXl*4B3{Z+vI5hGB(-5pX4gtr>WJDj*lHoVyC>I+(a} z-zsH`a1d*)fmW_r1d5tKS!y!GDg=u_q8-jx+9ABouGZl?e<#BzNJ~~|)8B|ri`)fQX3YP9&Eirbp+M=Q+m8N{kC2H!OiLnvr ztvgb!GZiKlLjyy`eEa(kJ5$nzu{g?x{^)ov4xcP<+R@rLB1db(NE~yrHjctkCoIkM zYLBz6%xYZL!rBTmQWYybuXm;_u&4VpHDfV?pkJq4w+zKpn5T zB*oo}o9zZZjAAcYuY18Z1Gy!65b|T>RZFgz+l($4q_qO+G|E8R;{biDx+r|looSl~ zJH6633viB0BUHA@%H6#&j@X${p6pG~c|F1CTrSHf2uIKH6jM#O+F0A9m}{NVi?YmO z=k!UT=>X>I%^2n2fn9`npcqFjjfPb^Eb{a~)|7qwcaqXB7>($`WTSE)Q@^=eAJYY# zs_1&>p{YEiLR~4FMtQwYPL!M-d)H#zI9m=ueHwsg-LQ+9o#+s>m>({&uxL07SJrL2 z9;}$5VgXJZG{v_SM?d~CQ>)iil${(~-=(fkJ_z|UvOyd#&kJ0n%A`FX&fK4Xs;g=c zH!W4~xg!~19rk~q#tUzD(pBqp&DCJ|E+jfRTaUaksO<0vcoZiNp-`x?!!2iYSvzp2 zj4x5fia?5Itkv!gSq9c2mHy3c%tsG^@nqJ7LcUXSmv0fBQ-DF*FUQ0+-0-!uhx=Vm zcmN|gQvs^7v2*4|NmuxOSEE?Z!UuT*?5?o_WxD5{S53^PV}+N}&0*9;3p(VPrTWq= zqPvV_U4}(67)obGb?*74b5XAE_!Q_WqIWLdaps(kVruwui()|}L$K){GN!d<6+nP6 zv!~c;eHoD7UvS^cuG!Vf{X560Py4Z+aMz3MbzM>J_Rtkg4)v!AZ|8Hdp6Cp;_pjK& zx&WM!1W=nRAGS$`rE)pteh4QJj6?!aP$SS_L`4Q8`7qi9_06$s`Y+NG^OEYZD4AAT zFP`a{sf0MPj1)3O1evM$@1Iv{lFp|^M>WPgUc+HR|0HjFYSGyW_-dl;>xqkR>gHSj z7ElKqA|wiYBViyMHU(Tt@F^p_(J_&^fO(>wWQcD0&9uUfsi`D{i}3p{NVw>-jH_;r21A}S(<^Xc>Knx3n>a?6E|=x&D14=YJzpCNQ?FpiPuuCu zzBp60AQp>{cr`2CzfO?vg*)2LFW+(gI5FrZj&;Cmq9z{&Jy^JtLl{j&3v(jJbArf; zoDGs)oEcrPQ)hkN(a^Qk)6(ZcbzmW$UX3+?E^qAR*^2rE6gH#Fgu1LxIlm|?v@cBi zjl}`H8NrWy^k_saL80;?VKk~H)Ec#xQ2Xyh(yVW4Ey0VrraEi@1Q0+F8jxbagiRQW z*zBLAmkpNU-$Bu>4Jj7;$KdE-9W?-AVQ%VV7KgQghJp;i*Hp{YP|K&Hz*GkTQi}u5 z8JweGz$YLiAjA^I62-<-&kI=Ak}S!JWpO2)Fsz|lLt}eOv<(JdXIx{~pvr48tAJUzEqgC-yV0W1NM00dy- zd28Tpx)RO&mGBm-M^jL^#RP9BQI#ej2w(}21YqL4{DQ)OB$&YEe2|bw(-_qFhYhzU zaV8@lO0gw)MIV~wybr_@nx6u(IXnQA?{V#@C`*mi=l`#EVk9?h=-V8}#Zu-#T-ic} zV{0sH3!^Qr*<=J&jsjF2dCcXny3B zTp@M!L@_->l0!2{+O8SsoUDpX`M8t(pTOMCsq;ZutE}$3LdvP4O7%oOB5*vaLKTm9 z9UJwHR#CT6QtwE>s^!BP(k;o} z2r3P-l?8uiQhMpPQ|!9%gj3xS#c#0nGrEVy#2byN(5RVFSHVGQ1XxM{>nv^6BeJu5 zI>)(_rn}(S9@~KNfM;U{&xAXej#aA ztV8v{)Q-A?-9NK&6T?b+);pAyk^%v--(OGVJxxP6B-W!8jZD4H-T@9-hqYyQ8+;r% zy0MaO%4)|V2n(Gf{t!!er<%tb{0n|?l=hJuF=Pd6C;UTs>zi4yx3eU2b34?sWSu?P zFLMM3?h(i81}D#qh9h zXX-(Z^T%ESR2>2pc-4=HpZw18hb7vMKw{SPu!<;H*)K2n;Yc(_y9;BHPkNf~>Ycxr zE?m#FTt}kATm}X9aHv4wkLbdd?nF}a27XZkyokl!S6;IDMsX*C2{(!d#pF{sLNZa6 z$2t8VokZDICxg{!s4g-{o#oX9(FjqHNM&-Pm6S1q2tWWFm_Pv1M9L&J8kj&p5vj8r z%ds5G3B0BiTRX>!zL_PJdBCi(aE2~ z3-AJcs6G_t8txtI#ft$opoU(&U=0}ra{|q)0mUs*sS_ z@FV5$oYmtrYCMSAIy>9H@7&4SQ(2GmpXr$seKny7b8s(9yAl`=tv>(@j^O?t^|9$E zHS>zTgM;3^rxCdyLqGBoXR#j81)pf7dP=4>Jes%tV)MGyvzrKE?6fSprSx~1(+hS( zjtm0o8O!q1QteMH0UM8PHm;~Yg=&YchYtEl=<|IC)jmlD@<6p=fb9-QG0=la_y%MZ zkt=eLqE2||HE1fhOz{6ndg-AL-s}XZH+E)>Z})NMskMd9+|^Pq_5o}P0)OhHMlPze ze~b3y=V&DpRipw;PIP*O9*1tw#n4Z}KGS#5>u2*xXkU0#*gjwYXpZ!N#z}R?#6djF zQfJd>KGJ*QjzYEy8fXCc|0jR+1jplrO(eKzdcmWvsXCtSo}o|%>HO^H74n}vD*=pEc~ub$I^gYghVMv7ww>^ zvCp;{J9KeYjX4t|6cx=L4piD*gKOGj_#TE^vTk?qf|v?_jj&NauOxVrFV71BOnFMs zDIpp;10ox{UUcz6KS}rX`wo&eRtKig6X9a{u_s|MgF^^ggM2eS@qqjX$t4^H3-^}s zk5!1-Y$;-eC*s-Z(FAWulDZc!!DFS%_3=3L)u~`-sfUdIsbu?GhQK6EdFDVWqu#QY z?QyY&>5Cq#vf>9+$o7iDuLwDYN6lh)jj)FvCz=(&QT&PmKhcT1jj?I1aE_m&4ML~k zX&q;cTCMDGdp*SHwStOCj?UzTiC}%mpHRGnv16oc=ZmJw<#8sbAy0!7n1MEDPVh-H z9QuO%1bcHiI}ZFSi(_0T3?XqpWLAO?Shd5_Z1dR3iUjes4 zCI0iWb)ZLcd)z2-E1?(}&r!rRitiz=$$y)s6Gth%t6((eNE5sOjo%J%5Fad=ox0mH z_=_}t)8u}wH8kz=aAt<3y&Wbuj2aC*^ODwqyV+lh(U_=r*~h-06#7hmKe{a(G_9gw z2vy0KNnsY5x|0>meiJCkq41Y@cbTESaz<+aaW2zoa2At1tTtIiKxYC%zNE9(%(a8X zgY1zRCK0aFxgjKROw!fUV5zN|uwlw}?!9@-I+L5D!h?V}sg^V~hq47cdj>0ZV0CgE zR02CPID^Mg+^|(0S%XQ1O7ZAy57ij-GZ|KH`CnCFmiE*9-o~3m}N^0X#?;8n|F! z41y>{p+O9Y0Wly33_6jq(IRuvWjy*xKaYBJ9BGOUeGC7l=GMBYQ^jCE- zxHL6x8s|TaFY1f>qMit);nHwJ8Cka=EZ92&iK59N=}aU96>_ z+xiiRPMh0?*uuhGY|5dnFR`f=BSQsjQ+l!-AhSRd9`R1#S-7z|h+)>mXO z7|mj~tvG;WIBN3xGLmA3Y4`nDrS(HU6LK(_X zfO;qkGL%Iqz@63iGO+?Q!*a~O*TUhrFf<5`-}42H)b zNDP9(aL_L$5$>fA5a)C|h{YDcBEYUFWJLigRdFc_N1?b4KKXH0 zR@7gblwLOt23q(&TZd!3r>Xc7wT*}JGwW~=gnHB*^U64Hh3 z10&#O=#17&v*p>6?Y`f_D0S9vCxm8xnP;rCsJ)@nFvyMQBIsbMIKc&)uwbNoV;36y z4AfcH+QvSj7nx4r@?InBR)MVEe*x|FpwZM9pm4Zn2)f@xuEn-cE{z*tS+q!QwHhgL zX`+lP68_X7Y>B7CG9Wu8`8Y7@-V#L+_$P+n0n2Z(l9B?q5GLrTw59X0$eEoJEknz1 zB(F#^cn2T?BmqbA4J-A5@xU;V`NTIDu!d5J2M4XZ^PeiQ_ZN<)4MJGIaX12=?=h85 z*x=n#pE3yP8?0?~1xbc3`5m%01XsYu{ElA@H1RSIXgBcOOyr3?BQWgd&P z6H~%qnm)*^sYSY8g<)1-6VORU zLQ4<1Q$RD7Ygg@Mpn47Sxq)pEAal#gs+Ew?iuun|A4flsiin_5I}jfD^A|X(*lkf&KQ_n!Nwc%s3QZq;2I{iD<&QHCN~~*8KNo@ zNhW|O0A6}_&hsWxW{s5hmw?lTSkJmtff|9vVi1zwg>SwBUJ3MPc>qY=NkKT0G_MIN zKcqp!5nkpKCPkWTPHS&;jL@Mc*+bp!!(dm~(w?xwRUrJ+)&Tj7{v3)3mmhba!S ztBnD+yJTeRrTx;xvW?tbZ}2}C!ehQ+(Qw^~QUBX~)bi?uZ?h4P?xsDW52uXGwnx1v zpu~<*hhe(Pkx>1(?o$ebX(m=q&*T)Z^L0a*L>InQ_bS(YP77;K=q#sBMWaHEL8h3iJdB9?#&f5vDUc7T8u@q>X$nRl z^NFH32|gL7sjaby@-)2IH4z&goq?1V?;e>sy)v4coetI{H?ECXj6u~{)~k(KvyY=W zJ@K&$={YjnpxJr295S^Kj-W|Z@3@Zi%4E8gPnAq}PNfXW`%<3dmMZ}L+NUvC0#Tnq z!$ypnFloxPIlIWfgffmczf`8oS+Zu!p3a@J7bqHs$M>JlkDk47(PDc35Tt4Mp+*t* zqC=5QZyHL|1DQ#fECQ3*BqX7PI)afM{Y}WqfVgh_r$5h((lGLfFw|1gz_IowNmzASJXVFbPr;lhCrvWl1z)2q3|Q>+sktWd%^$1VBc*bNoM#8{Cfz z+#xS+gBO>QF2lpb@j4fKkvL>0FDDa6`*&s(4}HSGA|CqGgmg%!`tSvycSsG*;h{fB zg>(&Q(I=!rAECVfy#-r%7#PAsDx|Xk?+`c>fpkds(M{Q`;K>hCCxbv1s2U_Gq>@f9 z2!h$|u^J>uOKe-1z?(?wq!LV05mGP^v~K%%r=ySM3u6Sy3$u5B0#~@o1rMt7RBYi! z9n_`Dr3}qdn@%Z5p=9|L%A#a7QLCN8Wkw2@StVR%hM+<}yMumLgqUU;zuhkWVq19M zMlZff@Zgn!!I)hyy(}kDY5JyMuo@_HF4!D z_(@Jvq@l7h$-T7bSj&!zMuHg(B20om3n(5iN~16CLbGG@*`T zS#P4{W7>vj{3luWUk8nS*nc})0$p|dR9~?nY8>gRnlruAWk4f=x^qfR7=BL&huZ8R>urAk*mRh3@kH+J$4c0F;3X(Usgu`$5NkC2Rjt$I8w4Zuew z>H%b%*VNUvNHgAD)f-jEXH<0>68Qn;sx~I+F(&|ElxX-lxBv`YtGda{vx=5ULPtv# z%hWB->3TG#8|8^lpeLiy&|c{D_T0v;REw%$N5^mJt+wc4R9DmbUpp=2njt%hUHCtC zYXIR|RJ&C@xkczu>(9fB(xe-yW>pKH=?(h6(h7B$oH9`l7~e1%2u_UPmk?xzQ=4v6 zQ78Ys2Vr%O{@|6Z$Pt4(M>0=SrJlGrosQL&j$JRe^ggut4$2ZfPZ2^~gl$sECMGxW z|8>av&UOgcyg$LU;{51r0b7}O=*)A-B7;g^=5^0*kWcXTsWW1lq z(D!sF`7^_MdS%w8jm2Z5>Qnl7`PrJndugMJ35c=fjER$iH+J#a{GuqX6ZDF8|3zx8 ztjYy0x7E9Pnpeq2IBq+#7tR}9FmRF7B-gUwno`aBnxe<2xCPRD;ii4z>50S(7kka zw53H@QX(lWdeR~zDPI~ILKrXBzr1&L`k0+Q&;I_R(!Cgsr9vyTLMbL%p%uow|LzFq zFK^MsOV58-s1Bi0&WLnFE3`r>CR$<4tc9~GCYl#*b_Z|( z2XFuZ+6B8Hh=TN~?ozhXA<+v#)af+gs&jF+vUKvWz~_)KDV#3r$Do#R-jRlgx z#OGGW-Ky&hx0*e&CSyZnBT*Y8x)lu$E)FgpA+@yxHs^B}+^tz_mJ{3scLE;XTDT%B zGbE3M34^G!&l7tgva{G(qAU&;yIqbf-a;rRW8ti_nXwX!6I18bEZ^j6E+*&PSRH=i zVzLrvCNNVtCV#sAYzYh>86In?ND48L6hJgYW4M=QB6o;^kP2cTnlWTt3NeuTsDdre zG!kX96o`Rnbf!DRq#8vuM020bGPyVB%vGqZN)4-Kz~E$Fg$a1zg>EQ|zy+YdX?3yF z>x2?u=uGWePEn9Sb}{ZV6h!V>fGi*=hNA6s$YreURckp;MeGG>fnyk`AOo`C4m#y6 z@<7@;=PG#e!qPftDV%k-v-ZqgTz8qr`*eru7R3GkY}zM9f(|5`tolb+S89%qm4TVHK)d)4Y4O;#}a<+A%eukv=M=2mAEwi)~V)~?zD!B$)5FL`y~-&o7V~_DM||j zTFoQ+LLva377*w|(c3%{Di>(}!9?`2|9K4Dpszdg;*%N3dH9?rN`0X&MK8Z*bcO-} zXUYmSC1n2;3$BxYGQnW1%1Ww-5DeK+qw@skUcl5;Y)UE(Ya(f1TN z8&l>dNS;*{t#mZ_iBYL9rZc8mtruzv==+{F^=rv$EQfZKQJlL^4i=h9Jorx7(f5n zIy3x3pv(2=Xb+!lMB6E8KlAKF!1Wz7GqOFBxmlF3)7?irL<1H?-AI_tL#RB7n90>x z#az?luD|$p!fc7{r1cnj6Rmf_m)!s?|8JjBs;DfTG_qt$p=8{5A7r{|p#KV+I(%|k zR3usQmsSMQp30hN7SduAhh7PI($X~12V??k*z~{l-9ZH?HvF5`5Y#ueJ%e#z7_KSD z$b5+MfQ)k2DrcOMwg&L@yz!O?trI{*lhrQnRPf;F^h5U^|GA5DV>7!0@)IKF?IYs8ppI z99l!n3ug3U5Qv~=d}D(wq`00c_IfYpI?5nr$c?L1LmVA!Z>DK#1liEby9uISN4Pm1 zz8wLku}}xw*zje58BGkD{pi4k#6`E}!vO8m*pML9Lzux42ZrDtGichWu_4<$rpp9% zP_Oxrg{pZ905S73w7~#uG;N>Z!`C)Yg2Vy?#e;q>vwc{>O1K=yKR0<0O*D^%hZIUt zNdv8P(a#8z%(2V{yBu*&5Q?BBo=X3;$NI@y!VQ}kxaBdVQku$gHPl*H{f#u)T+3~= z+fnCZeZrS)ek^H}p^BOsX``C~Mww!s6*k%9m0yvDrdeQ>E%rI#lFTMtHEs~MiMuz^yrl^g zB}=xZ+Usesv8G#SwXOC$>2g+|3@2NjNHNOEQCBk^^fJUaGc2;kHV2$?CDtd@$(AQk zobsxxr@4-L8*03n7F%n(gHF3j#3$v+mL^kz3TkMflRk!-V3sA;+2N2gu7OYLld&s8 zNhCX2N;*=~=6jydgutHWDAI?ly?w(sF)Sy)A|raBJ0{Y^QRBnpke;so%7 zm&Jb-tt=&*?4mjCval!K45M#1sq$aA$-N3Ht}GA)9{S$th#Y~!;QRZdcBaAgkw&~_rI9&E|$yBRtu+=X69dXh*mxnh#QP0&~PuM>B8BW$71(h6D z{A@RkYY5B-fx_VYh>l!DY6^|P;so#n;;Yhs`$pEXAcaa3qBEG2@MLDOMZ?JkP*Sqm znhx9lPe*Lh^wiH_BaAgkw&}Auf~{L!kO9LqUQXj$#q z2>4KZwTfVgJ*|v0!XSNg(?Kgux<-pyQAafulu|@KIb@17FLL}>qr4~Le^K|fM7SEo z^^*c5h$dG9Ep*Vs03%E=!vZS~Xu3o5z2%YD{`B47E`1+6C`FoLGUX{!W7&EeZKj3R z&GCowdv zfpr3>`|KE{(R`xriFUz}F>_txt`lD)5Gr1|*8AF5gCEvc?Hh8Eem|xlo#?p_~ z5fK(gpuo*{@Su3$6)IB$9|*1Jh#vwH3L2)F_st2wBOoFn6GTBpBZQ8DDGN^UB_AkI z;3{68O9?0cO_&6gtdSag|qNb=PRk*Jd5pZ5ivm0UNqe8^0;b z-OSC~;;q=)ZQAzj*})y#>0Q{>-P-*<*~`7#m&NA18*oitZM84YpIy>=_8UB6?4<1J zbM%1I52Xq)$=Bbw`{?<*=%1yjJ1-#xDh(Voc)lS+hYg>9#K=*j$BZ4f!1xIhCrw^( z%G7BKO`kDy;aQ8!-iJjOo3q3NmhPSJxP5C|uX^95pZl{N?dwPpOAz=g71phGDLKeT)RmS z7J*RSWS{X)JnN*BP9&1+IfIOBN+!olw?kgfnw(@xxHe{{1F7o1!$X>w+#i(j6|!UR(G_@L4WAQ&OID0^Y$4>GT;)j-#fmOi(Oh62h4JsWC!5G5e zqWndaKPS-Uty{OIAN1WWxCVgeJ?ctfAc-Baf7YZVuR5#<5s9!1rXeD^pwekVFv3M~ zKDLPRpWR{8qS2WG_VMJxak|ijE_7j?iPKR=DX9w!moDR!<)t0;IawpF7$^%C^zVFF!?on=Y_c|$`M`Dk1yk$)mt^Q#G z@-ExQH+#g<)t}qsMMd%>ocC6NcWab%KF3}^1`VGG{tEm$Dv=aZ{R<-Ss~BY1`JZBx zp#q7dkVRig@d2N~T@fK&YGbMx5&9*SV4q;Yg8#O*6A}1O!4G#@J65P}7x1jG$85~U za;(PUed^Z`Qr=Jpb;+s467jICB=Et1Q0Fg!Lhp&PI|6zrezMzxKu;pMASJ3XiV*gT zX0&uCU!_zEsNH645Esf&0k?a5p~s&P>_pbokQgZ`u$DTP!tQ)xj|7}LGXGw*%q^& zYuh;AET1B=#KqOk-NO@8N@a4z0^DQsf)N^>!DOLqAmDI${Kh#uzv1B=e`A2qOm{q3 zU^{X`DA;k)s@c>uv~=_gPfaT}o0c|q4o-j+##YvjwMOoEN+x5dZ&C9y&$9c6*|2~U(%*3ii zUc~_t$e;kAf(AMmV1flUIN*YZJ;Vw_31wm|HixT>^Y{WnNQx-&r3q`=u)5J&M(Y`` zxCTsJ#IQhfrZb@P3){Ck46j!D5;u= z&7m>q+s#o-ZCM~{R#}1+Mz;dPZKb+urQAuf%pke<~rAzsCq) zscP=NhGSm5o#_pYYoFCinC@2sC|*qnkt}G~D-?l;7(K@+2t-`{lceu5HeK`4C$?Jr zBxb@`yV4~;*=b{6aJ=nB&n(h+4zo7&WXC$*iJt1|PIju(z2K!+UVG!Mciy8LT!j4+ zd1Ix7pkp#8OeSnFZ%5~PhE*5+r!`^LZG-AUArc9bTP1wsT}0h@O&YYAu@OnU*i(o~ z>uSA|NOfN4y0s=ZT5I!?w3-ZPIr&Jf;N4ouM{Cuu)JP)cQTRvXHFX_YqLaIXOXlZG z`cZXM6Q?_K4K$}p!<({&D(kMaZNW&C zo0z=Tfcw#Z$9NIPe6*>RR(kh*`RV+A{yF3FNP&Y)6;)X^R9B7ETy4}*-ISr;8la)# z#B_U7r7J93F@Oib*19yJIc@ZAH!|qW0ERM(@k}9?napD`D_F}WwzG$W9OE<>xXP_Z z*by!F0?JL$)!?D8<&a{v#x!e`5v`x3^NaL;lffS{`b)TfWTMCn$U>79lFdj2Lv|B6 zSn}e?+lhR5LIpHJS`nR?Ucw+{lwBq{tuPQIMKdh-)#FrxD9MVd>4s^w*&R-oTY>Q5 z%f5WY?~iWNlW_V>d0Hhn)lzkqWI#S?ljKrI-8r=elXfX?Oq!liXDI2=$b&`Ov+4~e zotk*D>3U9sk)%sAACCIYYc!g4OY`H>_b*Mxk{%fWJccf4HlFlq5yWTgq81ZLpH?9P zrk>YoGLzR7;KA#P!8N7e4dviXmEbMa;5s!E(sPx@4}N*T0t;hTx4K;7uRm%^zi!L3!&ZdD|E9_D}JSPxH>t z@UGADci{K5MES|zdj5yw65T$e^mdsSC2C~CY#f|i^d3BU@#e!9D|V!Rcyt+GyA8|~G}ey8+z z#$}^j^}=Lt{IcAC?d+>iUvW5sesdkF=?%|vQs%cIrO-q`vGx1qQ=wy%Bh>BByZZy)z@{QA7lb`e{dI-iKHcRf+Vr}7f@=b*}4G#DY3k7zjJBbm6-9L*$-_Gl+* zbVoPIqdx{o8KW^y8ZcBu;vPYj9)UqgtZB__S?eNdSBE;)rEc|T7Xm>f0-^XK5K1rt zp}az1>Dl(RzgPOUS-$ZsexsWLJA7@D4>6lmnGi@3HA2^X^q8zmQB0MsA_8Yc6yJ)k ztJ057zKT_@O4X`S&1wl7ChMzBR9zF$mCymYsGlHR%qq0f3(Q*x=dCz-8!i^cGStAE z>}0T)gZ*Ax5eRT23doBUZU&7jA-#iJ!>d_b8{M7fJO9JwxQ;EvZ5+jYdLHPet9sCc8sUu~bU)g>KwxOmU?7Na97GUJ63GYzy{*G1 zM?{i+C|VI)atD}jB6Z@w!qEF&(mz_r`lbNlpjfk%m5l5#*)5?apS-(kdmMPNjt$vu_7jC;Lj$n-xgJIgyE`*3a!WO3w=g)!xaNRHfUBA9xNqzup+aH{do?#oJn*pNhh8d%srVwQ;3sG zxe#`5N`Z4&ILQb{VV%eD(h8Tswl6?({}evo|TGk%DWEqa^Cl9-(yVcAwzdXF8d*iRA0{|~ycrkX7 zP@NMk;|Q$LE(}b_FgZJnCEhm-MP?WS3Y@g(0&d5^$=f4TK$Z95;L%E{av;ac5a_wd z&CC69p|f3oVDsPi1x7Fa*dmq#mo0)9ofs$38C+)MDlPSZYEUPLS+>>+xX_iOkg*$+N za3hdc1_+V)z;&sHhwPVo?fS>P^~O8@^WHE17Fgjew8BS3Mk89$j%$449lr#`KV>OR zc`B5ZVxLsy!znxYDyt~GJc^gRNe-R;=%~Yv*xzD5`PFYN_p?Y*P2`U#$VwLd;1>s+ ztnVqO`hS8TgW}A!AxY(ounMkkE$havUBYB)RUMaK1Zq+sihLT9Pg(?O3gi4YqPNqg$7-U%d!YglSo7&p` zPV|vwO580+8$*pX)$88!zK?z8JDL7)KFGch{s_*x+@g{b>*Jb(qq8fe#&A5HuRob@ znE#5cKzPP*ws?HbZbS>=#NVV#s0 z8cUfbA}GvRapcT1Zbq19DQf|Uk|0f%0wrKDXgCCa>@~;3i%9$f6R> zP>kX|TB9Q$P9%xsQp(0`Ef33YkJS5|>i$9K1%hZKQ-UmwwKUj@L}~L)q0o>1c-Jh^ z!<{l=C^x<5BcJ-#_kMP^fbtAhK5{#}z&{vyOaV4=IaRg0)_@dq@nbqbHlfOq!}}VU zoLk!X9ncAb6XPSjqrU2DsI9JgRHOPeFF^Jk4{@o9A)!v2H_^$AB?rjnWSDX0n8&h% zDVU#D1%;egz0EIg^3Cps>BI)i6^0W}HpQE@ln1;vmHlm1)LU-)r}%u}iG~tp+3XAZ z{66O-aO)RxxVh%N{SK z^KM~fVHSYLx*yER!L4l#uYzw^KRf#%FS~cd0O#Fs-fy(8&duDOTXX#>oc@~w=bzp- z9dIf<{c9U<_irQN0NtK-7ZY$=1*Zcl%B=sDLoXtj!4xLb3HQDDe*B&J*7-aU0+7f9 zwSu}peVSo3`Dy$HfGBOH1~52X=yo7>^}`?1g)->LfJogIr0W285WBKN$IsGJPlD!G zuoiBoyJR2aWbMZ`4*qaoNk2(V$TqoA7lKbRIjHjA1*_5l?33VR_sr9IId5lhm?&e; zd`bkRvqy2eB*66}2B0K=5~rmu>Xvp^Z^Xqqi_zpWV+-+$#EfU`S6cb<^^MHmUdvW_ z<(JEiKk~KIF3-RU*&lcrDJuWE&!@^QU*zmED9ZL=SCjLy+y(1vppjmszW${tW|sRq zoon7+ZoQa9BfqPld~dw<&U^p!%O8I`_36r%8?zw(zs%Gn*{i90MWQlccBwYCugyyG zK`H((+iyt<$t{nX&cyECNl!(KI{_L(@5`_Lb{Ug^p45s7AMFh9uH2 zjsbD?4>B}~VV7M3h8Hq2r4id|R4U`rnV7-UEGA{l;#Ixo=QlgI1qEz)fQ`Q^*<7nl zwb@>W-Sya6mmPIF(2)HNx*5)iDxIm;$*P>H+UaWC>V*3d-1D?f&+GQAuKKMk;Yx>; z^Tn|E78Z22Iu~nnu6pOgxKM*mRhpd1uDTuUD`}xJX-jvA*%Pm|!GqE&=QZu=**0pQ z&6+;>$fZLP#U_OsOOTP2CT}}JVH^yOiyucRdq7r&&{2mSiCv4Xq!rc1)Q;(3>16BT z=;rEC){E=o>E{~|7$gh{4UCGCN?fHp<)u4qD`xsQ8OzwryliFQR+|TbTIr@ zj-o%_)~S%X!Rbb18%hZ=Rb zF?Tv8zvFIq(t}#Os7DolbNYwbS61KI{9yN!#W!*MsVpBEd}8!jJb!6ZskW7A7g_U& zT2`!8B&{paq9TJ68kE5DVpbHlsE{Q^EG=qT4Hg%+s-!hFT3eHKHCtWErJ7u>+0_oa z-cdI?CNHdO9r36(4{PB~5DBs6wc>F0i7T(*! zD_z9nuaZ;FIOl@X&N}a+Uw!AGUtAHd;H`Y^?_iJiI6c6h{{R4?BZyY_d7pEm6J1mg z#6bTGViF=iEW%0b5)#e@iO{nkG5QW533?hNZNVQT zdrlA90y0!a^gPH!xDsS0Tn@4jt_E4rn;_eS-jh8QK7mtF0zf5#8B`_+pb8-`sEYmt zP;DY1)zcw=ZbuL#(1{QLIujJ2%O&Io)1ou|54|EY{%0Z_JBtV_z-+=AFozHb<`P1| zJR)Aee1a7$AhZVy(N_SA2)Bd9=sSQVgfOs_h#FW%SPquAa3fezD+z9}iiiMK6X^xk z5G-IV`UPMe5g%YZArfpLbO0Nhz5&=&TL?$N)~2_?wqdYKnszH-kG%@n=YTRDRKX!f zwdk0e9XH4cCk=PX82~*%!oQ;y#ExLE9wfaUAcR1gTK!m z@GtjHV?DUZdmp072Y6IZkqbOSi^21zEb!v_C7{aSRlPygz+1w_;9XNw@V@>*eZaqH zI`|JQ0sr4L9z!Z92zk9)tr}1S@`nFG8oGpHkQSk?P#p3>sxK6U z44|=40`f)CuTT;)q0+xl5eh)BxljcP#MhugB`6q!A%)6NC`K)X@{kpswn9TF44d{s zT_~Io9ff+3lTafH^&uA)BMZ$SH%_ApO`vGP^%OcmF(evWXamLJF|p7NN+QPOLR+W^ zNv0J#L+KPT;|IDxQHp(}VDUm%s03-2EOduTkzwgVH>eEhmM!#vGAU|Sp$}A!l9n&@ zhbmCUiiN>YCCXX3FaWAT*+*3>Sgmjy%4VrKPZ;}F)vZw&3H?D;a|`33n$)mXVIEYQ zX4Waphw9SYdiRPr^+5|86c#`YX=$UusxfG5lfp`&Pu1z+?XDxWAn{&qF16!4C2Y+5hO?d4kZC=3a{NiXuYz%G!ru}`pt4n?|R$50WeIv8rSo!nfe zP0s|^R-*<#&>*uLZHDn$%x!|gCYq_$Bt=b8)->Lxt7yiw)mqMGrM0qW9hA0SxeYdH zZnH_c98%d~O^!HaXs32;+AqK^MX# zujX3|U|KEf(u**yG23fo?(_zM_8G}LeL;{jriY!GAlO;c*UoGZ;=Ji`XFdpZLFsjv zg;-ovdIM%LR#%kf!K}pQs?wV~1T)1+$%Sca+|S*@?qlrFUR<<89wyHCz*Qh8w{KxH0MlH-U|CQ`8&o24~>zqrSHX;3V7=O@@2HX}C9<3J-w` z@X&{5!Egf}i59_QQBQaZtbwONK6pC32RsAv!!zLn;90|XGCQ;L>N^KNK;~v{-t0UK z$o$OD+g$+23onFsfEPh7crm;NyaY0Xm%iN1 z1-urX!t0!P}rZydC+&JD>)<69vG#peDQ< znc+Q94c?1P@IL4W??(yn0q6i9MDg$;mSm04L*wM!N&%B<#>)KHz#r;llCM~ zE%+2nhEJo~@EMo_pG9@xb1)G;k7~jfU!=BQ z17^ZEQA79^9Dr}5QSco&2;W7c;d^ixzK_Pj58x>L5RHc)!7=zTngBn6Krk4`(>TKhAcJ56*S2kIr|2KV9fTpKR;cFnAwFG=XYQrC{m#NvV0-i9e%z{VGp62tGC~(@pK_dxr`L0a z(O%$%5}p^~b~C)#YZUbcZ zPPm^3I_1sY?1{H{i)Y^ItzLMWw<+*W@ATBWyvuX%_HHltdl0^Y z?|sv^eDHlg@TVX9iI0BX&wJyS{F1l(mofPrxa7%oO86PL*PDQ z;&tnKF*N}H%gI^@!b*~~nnJOTit4uk@#!2dlZ#jHQT$h`CII#h037WB*jL~+XZYGD zoU;#b>W2Z?``N+80w!_p~$lsu8Z9J9a&(uZ(VIU>8PPz_}b%q;@XL#-)Pc=E+c$bpWPTk4nm`R8AlVMgh zF{N7`mZ>mG)Kj%pBPoU3#Yw;-*53wrLf^*HUSp`S2~u^TEDyRF@T(il2LY@5D{eUv zRwn{dtZJ0qK`qn#W_$N;9Ty&+$TgD4d2)SMB5Ya9<9@UUU5SI|yRE5*xy)tg^?KtV z#zUpEx@;HITwRlFeGdwLO+9U?w*Q z0=Oz7hCK@yDjHp&;z|q!NN0j;DC9at;fD^5UCS-CLQM~?i{CARO_dQu(g~)iFs>2o z93cd5&<>S;!8k?1OWen%(H(gtM;4zv$I?*dT6188 zy`tC@JCNzqEJQ8F>wWVOPjCT%s0qs;09kyvZ6*}Urw7qK<$x{X1O!9`LI9o`5~px7@GUNlvX`1h@cRa`K zjb{HO)r-`>ifp8=pOsLaO?N zEB%e}W$ixe6dIh+dQjl(9Z{MNL!q?!>wQ_w$8pFJixY&8DhF2{`#JBf)T`CKa1Ip| zh5k{@Ch24H_*brr7k3W%1$(`kD+}TA7YRSVUu7-r1Q=B?s~82R@vwrBU@b|3gN`db zT*N|9WK$jor~+O4*%MX)1E8&*&{NDFXd#A>kCie$X(7=zZ3!M#Qr`#}GJsE%SP2;E z8b}YbIVgB$wEr6t#GsiL);F@OAR{QUeDtyFPZ?K8!73mvUsG=4>AqoT4j_McTv$LF zd6}AXx+)?~-)3{G2|zodY6y^#Q-Hm0&uU6E!q_}D?fZVK#lNQ9pwOFG(PR4kg z?J>g?O_zi4Gk;58LL8(gFzQ=DBm)@9(I+jzPcZ8r$5559El;1c(6?4T8DmtnMw3H$ zYlA%G2%+t+4&23-{4)VazzIVV5tP6H&{+`6LELGKnB|D9CK*vTB2$0+*YDV+rYpsN z2*`4Z8D?mr?Q+I}FS9+wL{QnzeH0UtBwO&I#Yh?7@@^T}1gYK@ORYfUJJ=bui_@|9 zE(|RQ5jS&JOkCab+Df!yQI*usdkVNhQBDi)ARw;_<5{Sy>j!_81a7ly)~-*X;0<@q z&L8QS%wZeS9NcHjgd%;ZG;J8e$TEF2Akke_e!y>70ZjwOe9J)+4@DrhQp#d{W_PE{3qY zleY{Fh5+s96!Z;V3@TRhjeRz3kXu)vxj-WX_7Cd}z5XRw1bS|JwO3(GXY*pTZbm|o z0k5RQsaOGawL}OBk&RdrYByq&Aoc2o!4(KYwsaCor~TY^GCR5WYG2yV<%yn1>{ z45l*&y2|OFH|^um&i8V?%h*=)`e9NWBdIF~;z9+9$1Z?Ur|)eZUkUd>oyO!%#7L#( zJmDs^_?h|$gVJ4~S6!WsezlX=dg==T)b}e4Gvd8?NzA?LCPZYDJ1&iFl$#^q}W0Mj}JC~$EyiTTi|su!6Ec;XDys%SM7g`0Z0fw)wm z#cq<8|1I1>1*6EQ&ennK+h~;CP`fe8ce8@Sbfp$3mG`zK&OyFDA-6ZgQ+a^$KL*QQ z3xS@>4)k@d8S~f-Sv#J&IofRYb}~-m%)e+4W2QfdKOlT zXI%{rdk7xwkbigF2;>jxqK*DPo^fFT$O6xj>zw1n7k?5+*>SIT(qtnj_H_;}WwmL_ z!pQB0Rz4Mg!73pI6pjq)|BbH0ithd?dYkVcI%Sl{JnXt>+Ih%so_J%Yx8MD?TwtYn zqpkYOd@^^d_vCE7J#=Y{TK+Pl+ckQNRgfWX&xAI1HWyISlo@Sp75F&pjL!`YB`(MM zpsTqRrq%og?dulN4C(#>|(4RQC+%WEf)K`ZnVF z7U*vH0yW86B=2TH=G}Fd)t5K+Y*Q9z5InuZxY{0~J+aaZC@SwW94V}}Wt%#D>*JK$ zIMa>og_fC$OQ(1NVcy_&J z6IHfrst$FyC7eEXILA&?)T*X zh%W>W{^9a+dP`&0{^EzE53Yp)Aq0du%PP#?+cvcs;r2IU$1z4H_3C(w4yn&=?thZu zhU0Ia$%EOY1Hw=WF7yu$AH{^sQ|FKzLKkiRR?UTvrI!dyNG$=9A0 zT8ITLpMv{gMChM~Mcq=IoVo2`+}>V?48ExA3#Z})!!KTMl(?ze^}`k$5rAWG8~L8%jwsIE(R`ay z4FbX>yKLkXiPtfbliF?J%n>#ywfAB(V{5@afOuh$J>4CzSu1Jv;3~q;eoM)XWHJA! z;o;e?pGxMX3-pw*v~XPbe&nT(Z`XY&avF-gNWA!-cQe#B7`;+Pf#8~K`au%=;|k0` z-0AMzrw_x`a3Hei8G{@YGj>a30nCIQyE|^Nt)0wgh~b*pCiLo(QMiDFl}FAeKfWD4 zlkjMftkl0P@f|Go`dW~EWf0x*qH7>Zv)bL+62~6zZ1K=vk0z7)OislV*@TK}mxY$v z;j$Z^rRC|MstFUzr^iTjRi#~@bkQK6NsZbAbXrm2{g{$f_6c(nHI_NqNxR3UW(k0! zi+g~LiuTv^=^z$x4cmx4V$(ZdPFhfG1B0@3pClvqqj)Td+lEa)Om2{TR(s7&Ev*|Q zBw_Jc!9dXN8^5$9Wa2;OEuMfpD`z*5jO90D=UEFbEHd-s5U4`CEUmAVgOi z5kn=FSB*%K>B!M9BFS0wr@=H;>JuSh!ALsKW_Rl@j^S+oGQ_uaV>_U5Y|yXa*Lw1) z?ABDwg!{LmJVh)m7jKXZ)^Ok;LA0H)T)Vo}{k=DD3n{<4yJ4BG`Y+z>C>L+w>8y)?eb{6`=*~C%#|y|Yne8ERjL0S z0!mW*3m06%@Il!=L{h=1S{O}i#5aSpas&w^rg{b_kB7+l7E>f<;T0kfL=q!&*Vx)`$if^j>&p2Jh0wF-l`WcviQ+<1e-{QSm4Gyh-vxyGK44KT6 z7Js_6X>H|pFEdgQp?wh)z)I51|5M~vP=H%}X0sa7P=d{ubglAUu%h}C47{SW2e$-d ztNs0eWTo)20lwb7A*R@NwToK%zB;h{sZm+B#$`iWgT34N-vU#LpMm-p{#`wek7eXP zQ3WyZs0^Ze?d)XP-hG-8)nZ1UoO2rQp6+W-^hMs8%~wiFIIx#pT63RruwZVyC1}P{ z)|zJg;>bUE!#q*q9xt!k`)X;$b#H||slGnH_@1gT8Srkf{6qfL>gZD3yf+$GUfVxI z#udUZzj7a2di%iVKd93c1v_|aCEUBY3UlA|;+Qngw(J~uUL8GN!2iLFUF$`Y@hPgh zbY=7lNgY^OUW(5lO?1iYxr!T^np%*nSA(&`TVJUm4ci+vMf)l!{_5JIs#llCrC0U? z`6&udWqDXR%E>)^iDDHRS1&w1rt)@BNW%0BGE#LUg$c7UVc}90WC_jvIz;*waZL)v z#2gZcvQ)T5-zKC$Q8ra|m-j>>UMwF9I^!ARJs|A>VXJ;&OUWJyy&y%ukX;$k&wTQ#>43272Yr{r{IIT8ttLFq_Ae4>Kfw*4FsF|IaG_zoiZX`DA# zK8ip@!M-Wu5u>A`-bKsxOI>HH`jVYk39>}5$&KzJ1*%E}Lg1`OBVI9>>=o}twWMLt zsQ)GR_Cm{*e*Dv+qJpxx1kGHGf!Yhr5l_msf&nyz)Yt$cC82&ZnAnLJkpRh zUX`S55_;cJJk}f&2_d-nTnj^h&yAr#{UXtfR2KzM=&C)vM`tS?sd>+-J0Eypo-&}Z zF4O{%dR$(=@Zjy7?K*auVG?P0A70tM%n2wn817?+&=6fP%P!F5dUivC6PNyX`;yK8 zJs9Sb(iKF;z`X3(k%WX|Vz(b>;d0+q!%)rG*hAo4thH9_Cu}YD*`!R z2?y3(BVi^;BO_{Bia;&uuCMQzNcr-lN$gGZJ&&#Mer1ZjV2I#EH!J+l@~o>lm@Bjq z#@p+%v47V;SeLOaBwtL0Oc}4%bOB+7xjxhSZ5@ovzpN(^#f(}N6JPS7)X?bgpeFi* zVU-fNThwFU-S~s9i7QF$AO_bblOuD+*FM_A^@Yx6Y$}9iwM$OM~YV#>TzQuhg2^Y?lNFFkx;APB1jkp<0%SkG~+S- zoL-N1=N1F9ig6)B)+>R(-FWvUx7dx~CPI6yQ1P$;aaKu=4YyI^f<-4pqPI)j1GTTa z9UMDR<*RxH3uUd2nQgNajp$K$K@YkmKS6@E=6Opo8}wMRr(KtGp~;FV@dML|1rv3l+(!)rfP@7iO1|04kFB*glO2^e6rGCerYl66SxPcV5~Evi_Ri zq4|0|$WKODO5v_-4!L~wRWeXi+{7&9Xty5n-JJ!|W$a6fpXO^!tddgY z^&sBdm1!b8AI>KbTDa&)&exO7>CiDVo(eGe&KO)BZhHMuamm<~!X;Ceft5KAq8zQ7 z;_Ou#$EvWvYKjMgmq5W+)Vhw-A-Njzy zMpIKtOl!l6Pq6DYM}~%lW1aJw%qqv%cm46=QF1)oX}*SSxRUR`GB=9vb#l&?wpi)! z%+1#p7==111q;g|(5OlVG#&(1Kue_<`_;H#D(sP_;Fn2Zr3>81oPO>@G-BFqHA^O6*I;r(y4NulXl+i&F~&2BftC|b;PWUx`OS0AEsp~Fmw`S zfvlA*hR&v!`^C(kaqIh2{-j!=l##j%NupkVP?}OA8l7a32wbUoa9SQg5YsGBRX`4Y zB&+xPf)U6@5Q~+{G(cDZRWeCmz6s%;^6@Hu4rQQ-r~WCod@kROf)vF#CfrVg69Ymo zw*tQ*Hzcf_ruSKYp!hvf@$mBI6L~3fS(_0#HJTw8Ms+UBmM|_$F=Wn}WloFZ#vT{> zO_cKBs>p5efXKI?yR6uibUi4Hu3VK`?Nhu;OS+QWlit&xc z-&Hj#nO4F$?z$C9+9~-|Mfc8swnw)p^cH(*O00H5SC_LW&VF-M+20)yCaluWo5`(4 zyF`#yfog2M6Jw7oCLq4tUN=9udHf#ms(YAO{6I`U4>GH^j|(?Ox!=937obDmk%7@n zMhZi57msY$Nq(PmS&@sWhi0?DjNWks#^O9`K2S-6$?Y{yb^>9b*q9vOp`5?HN23`S zjSG|>ZHE37Y(q1B%|c37!vX1Dx-T1Se-*>8A{0M9-A^sM82;Yl^sRr4&k%||jzCsy z%4@Ml{Mn`EdG&(T8bw14r|1{MSE=Fqn6>{GuQmUnL#u@O)*>ZRdlaX?{x^EJ;dgAU z1XUYbRI33GQpZjjTRH}fnTC-m)KlinG=XJ4tc3azB=H=KwFK?Jn%qPqrMItGV=Io} zO0CoVJwLPSjbV4H_}<>WW{|8RmX3*QDmAXB+B-tVYYv#APx5Wd0)ib=d?4c2n=1UVxUUH1;b=Ri#i<0 z!zQAx>{fi1(;73>a=~ZWbJq}3uZ#WoVxwRHEAM>!feob~)X)`A z9A1sqoZG@V%*7M`3Kh&-5B#W4nx3E+an9W(apc`IrgJR+7LER}>mfH@)qDhL{zOH% zS}>^@VhMH=c4*x2Wea4`b($=5q~n5_^l9s)=b*tBlNV# zNqVSXzTth15UHJuH|zaNMslU6`&x-c<^E+LyP2F)z1qb0QQeFNPJPUyXpJ4T-NeXg?ln=7IFa^bR;Rv%(Jl%_u1+fFD@sAPDsT~ z|2C-mdPeat+e!n=td$!vSjC~5@1(CXObWl=5x-Xz%8<((V7##r)QZ3u7^>?8#$O*5 zqv&C)%@!|<<{acQzS`>3who(~W0t>(?an5%S@L|)6onDBT?^{i zgVH%Cyxyfq@c|5If+-saR<(tT7is^of{Dq%(#4V?g8WC0Q`SyZvc9vz7nf=AIL4U}-$urs6{FZITO4F_Ee&x~}ZX zO(5GLE5aQyTCJ~Xm1BF>w5p_ZT#ondEYZAmI9e+O2Yi9P|R9Tf+g9f?8|($;&eWtl{lBnJ0kLkcf^5Rm`q+nys^}ZJ zFUo2{v^A{C2+zL~OJ%w!-uhQqb?2|M5aO-WNqKUL69^|$Fi!Da4XpL(mZXrAl& zEgZ&xBg|cPHfLn!tZ(PXy&49LkhAM=PcOk|7+%gI#gksRCFe*_u`%c!G&{|GM^-iGk+HocDv4a9h zr18(g&Hi5Zx0vM|nA{qo=`PNW%Nu*Om1B%1;jMKr5p6+FLP_U=9_85#Wqjb#&w51MxRD6 z-nv+Gd7;i(NCPtIWb2vSzJ>dhjRtZ0gtPyY9>_n|3wBG8Rk6lxuEuFmN$ubn|q7}UZ zMd_eBjx#{!7#bjrc(?Y-B&q%Q6a0%^*UpF&tPVIW4?7)o{kbR0p{3v=@3Rh&jP0k+ zS3l!fM7TNGk9_VKKaNxJjMSo4%p22y?HmO80#kezR5YYQ9rA09gwG7#u<+8_y>Ba# z?XFOTnmpDNGuK<;YGAFj>vl|KqZ-|m0D73kk#K6vc}>?gaf`5QWv zpm|2!F_$3IKz0}tK4PlkRKSedeDU|2)#{@6-PTeU5ws$GH!ffK^KU zOs~wmtTG`i543^0b~Tr({W35AqIQ9>iLFCyYoO-Us`M<{{gA_yp2krGW!{0IOsGq# z0+H}ZVvfo(YP|XkQw;jUOq1L0S;b>sUKGP%0}_*bO?uZm3_4QmJf{p=SMt2OV?AhC z**T!<7Zg#r7MOnbiEKV&$v<;TGIcKXt4Rw>QERNl<_*DOFnCLWBH_$*GV4HL4G*Hm z8mXmrg4*4_>+4iaTvKIe+1U1UBjq0N^;q zb_OB~+*_O++lygT0es~BI9FFOD?j;Sh*D5xeY*v-(BaWbj1QklvOf5?aEY=lnnQP? z^2c)!flJ!q}+=)kGcZU{Ad#!9QT^Ra&u7JydHU_hRNWIDC`kYsGCUF zZ&+IWs1aezuxASgYH^fhr{jYQP)-J?arB#G%l+cGv5?`mN6IL1`YfG=IKXUgT}i9y z$qSxvJfH|>J;lexmc!Y$hc$+Xp%CS>+Y)%TEWYoCWSoQHEHU2g`0*hkPvfc9 zpp>4;s-tCqY4~|e7lIlh)_rO1o8Mkpn%rKuj|%ZG_y^^dz;{)(g+|n4y=BMw+P;;Z zUv0QZa^bODd3z$Piqf93*)VB^wm2coGsKtB*6#Tj9B3kKWPXfX8m!S0*i+x13G{(l z(dxbuXynK39yVu@7x&99!2Y3rV+V~RG)D70jQh8V0BJ}{l9?mRs9&O6TU%5Zjs>^K zJfE#aao#^)sHh+gxUjf|_Mue+6{8XAaSu9prCkX{gbC_=&wN>iZ^>MFVzX=%`>GO< zRTFp23=MuzZL~)-bdOpkSO<|$ZSle$GFSIdK#tRh+#5a^P6#|A9C4P@+d-5MuCICn zKyB8;j{MW@)e9%wkKC0Rr7eHRpDZLr@OX9X7(;4<4&{4&z{1v*$N)YXz5@|wK+zY!MI+Y-Rf3e-A-Nol6mK(6#_DX|%Q1L3yBw+!mJ0|@YwmHokM^rgc z=fZ*f99s4`_{dc%Xpr7C*-{m(;NZnk)!0O8lWSPepqwr<_}~^)g4-!K@Kc!@@V?=Q zisW{*oZ2{gs3U;x9ZbBG1VQLMCzZ?^a~BnDD>R9%dbt2D^LIJph#2cayeB!RzrO2_ zmFvG|y?Onf&W^wv{J|aWRBwN9Cg}0e51xJ3bBy~KC%gk@#kxwgu|&XFJG5-#)ANP# z65DN~X`_Yl;O?5ymW=dwdd>iehw~#(zJJIkkZHf9A_xe%4Z7?FpIb0wxZKFGspbcR zX>=YUqMLc=(@yBpp8d-VA?@ecmZ`oV^Tn5_kR-t35#Oj?25`QRExf`Y@rdb$wDi*$ zH@R6R9N!Dsx(ZLv$|1eWIqR$3@>YJH-S_^1-S__By!Xr|$5*$pmAW)I5=n48=K_wz zHgFrsv6hG{9+{vqU&hNed!)L2zEm}f#zKiHt8V9l4k(T&=Ud-~@5@C1($ zXGnWp4u%t(aV-W5hwH1mxr(HH601at(1wfU9d>t@&y5v#mV(zSYswEYn4F4W=T|%` zH!7W$33}Xu^4?5TZj|9!H$za11K)AO^@LQjVvBKW0w2RH^8_9{&@;oHY!=t0@n3_F zFn8TLerob|+xgCAdw+m2yY?fiNe;YSE%kS5Cv5_Ms#`0a=*}RjS4C-ByE$~r+fKLZ zfOjCb4|Qm%82)f){s`t$=Q{SW<&bxi48gTE%X6&&+`8cQh9Cbl%Xl=dc5$walmpa` zxxXm;7OW2j%)B`t+`H39vJS^{c4ZgVUO3V@L_I zH>r$lS|g$}>}Jv{SDjaQD6kvu@E+t~HDRs|r6!F`&*Gm>8oC58!-8`2rUZ{-xqoTK z*${0kf+?<3?9jGM41AAQ3LeH(3l9FoEx^)Z`jgI&1ME)t9?Es#^JT-iBIO;{VF&6H zz5^Prgsv-t3MBO%R@1k~1B>UZAYhfX#TrM4mF&g%91ygMI9Aj6)AB4uw_IcT62H?k z>sSk=R)p}$o&NHdk=4wfUsHa{N$=_QPvf3|CvN@IeUbhV6cqSAc*~j1>z}w=n0p_~ zk403~4kt3t)JqfZrIbQrUGX)nZJ|!Hr5n6D8h71_8MQo@!tq*k6uYO^9*k9Eu?X!Y zPs~=Fb|yO*dU=ap4mh1gwx4UxRe1zhdy2tEZkS3g_ml@#M^%N z+MyY!RT=+waf6m4zFxreRvYm@F*G~kLmU}=-T)&gK)#1K_kkN87lk*lrqCEtnayRJ z7G!E?+IP*4vI8q%)tQ|A`l96T5NZkVS%;}w6XLW^O3cJpR};)uKg&Cj*j!A!u1_?hrD~4KK-^|pc$qm~`Q4X?!K-H5Y4&-wcZAB` z3oX3ba|x^iY|Socu)j{IK+%ye53{M;&OE}2-x)#x&AZ$W)m)wvgxg z8_$)C^bg0JunM+5XWqpnL$jFK(E04OYwF#y95lC14%fvN(&ebjtEI5k>Ir~};NOhb zzBQ?rPa{@5&p9S#?}dk&OoDwTooOJ6UBzi!MfVBC`g2f`GuJo372%Lq3sjHHx{#L` zAnJ6>)0baIUIA)Sf6rQp-~_%C&W@mZqjQ&=n-ez~lPmWr6r8!0h}NB(W$Wtf1^!es z>Q09}Gbmb;xGuT%_iGc)14j6aPut0?Sh zcs^9S6X>^WfKaDm-fBsE%WFo6M4|*5ntdCZk%fh*U`JjFkSB;dpeaDSZoEBe3DzkI zV2OeoaOzD4iz-wAg^vxS>~d!;MeN2kCyg~!lSwg1i;$rxvbx#GHZ2o?CSv>EwB(-J zq2>qLqb-uQ(%%c_TFYjxDEoAn>KD8@%|eM$Pto2_A7(4q-q~3J{=`{9Gcag6hqtz@ z9o$rEB!C6udl*R8vE38iUe%l0w%FfQial?vwbnSl4WvHkH~9aylIhn1z?^ECe_Z~# z79U%1fO^~~CBq!>WB!(3U)5~jbALGA0IQ!u*_{YN%PKpl#WtcK?U$?hC}QWH%!d1` zx*Hy7Pxh(X${s`Pu#%@QhsSqVvlbu0nM!L*?u4z$W2q#(YoryA_^K|Cmm z#DgVfz7dQjM3ImJ3L~q>8i_7YhY2AeITUF_NqZrjTj0Q~ifEXo^evsRVXCS_+gIj; z)KCKw3uaAwQc$@H^X!)v9+NYj39!n^xVF$DST0EBAV3P>K^>xeE)+xIPM_pwz6A?C zR~KP-b-z4lML8WsY3ebAp!2DVK* zUGbkf!qe%*usv|-aKf=kpqN-c#7`!q%d#6}%d(S0!g}2xpDSC)$}lKA9p?-)Rwf67 zFopE>-f(RwNI}*BeJ@`!UZw<+pfhfF`h4L6C}6|bfs|UAnN#&}C7=|>(cTo-;dxrV z_RZ8Jmo%}>xS^P3V_7fWXK1%?9uT);X(qdxkcvSmuR#1(JvGR)affzMdnJnDoAx-ssCx~}w zr2=BdvQ$P(TTrKq_6qItWF;BC%0(I_a%Fb8gdd0PFJVX0p5*cxAoU1!T8}zyBh9zq z!7@?FfX|>HBa}u}HHjvs1;Kb~GdNv>yVqBgyT`DsLFaW3DU1^>1BSV3KLQGano(G= z*cb@cX6zh^Kh!y^19%_A5jUcCAJ}yviWWaqr(oV{vwl(mR($G@)T!7b#r6k!clO%1 zmOBv;1VvH9C)!RVP!JDFqgQO3Itc=N5C`%gN1q>j$cd@H6Oen~pVKEHp)e?dT=MS3 z>kbTbPo0T8ig;2CNIr-S#ZXJim(i0k&~0@x_F;#$dj!I7aF{mz(Lw-|w`lHBnyrY_ zk2!@}!UAl6v;a%+9L9+4J$01Nq^DnXt6ikYKL^tsLlU&4t6K)E2%B41?`%p0BH0gA ze9|xNMO4-XNh7Vq@a0k@`hQ#LfG0O$U?5&|+<|0wDPJHqEVnqK%D6^07z(P#G6pTn zT6O9Cz%C|c2kmxvxGkAZ8ykT%VR(MrM8rHgRBw|6>xA}wp;1Wtt7Aldb*Cg5=C)+Y zSoi-Iwx4K@1uI`SS(6INp$Pu?7J7s$^>KE;6XqJBu2Cl&@&~nJS%c2)dBfw!?!NP% z5GY187f|-F2{l&T>fosy?a%a6&N@x~U@&AH>o-{HQxZu^PmjwB8e(y4RQt%YranL< zw_@SI&%W-8@Szayn)KvfZVHQiz7b9nl*P3**8A-*2Ey&I+4`C5Qs9P1@mw$@otTXV zr7ZexO-*&SW~zXvw5k-xnKv?(9qgWw{v(OVE!wP*mJ5Tm8w5*%3>3Gh&4wa=&qZ!!j9} z`a9Cd_os@o3ZIh$k=#^!$PgD^WkWKzCj7{sGM=7Y_!@VVm3CGjY!CG@q2Mv#_X$F4 zuIU)I!jh`+7T7}BUI13d=5=74s5Xja&p&HVc)OYo!3kRew%m#>1W`s;9NV@!G13r; zy79a>ihOJ?yN6)Hao4o`*IEM{1S^&c*aY-}HX6hR9=J`ZLSwQNT+l_(F;;L7r$HoY zuV@~L@kBOTw7HKFD}0Unnfn?UV>BBpS*kG<4BK5ozic1MAFqx2e}cKakItoM7e0q= z)!a>Sp3rP3)I8l^Ed74)Of-UZKxZ5dg)AeJ-((6~Y#9!ROe6hT3#8QKy1F$T%Aq&T z0$Q)!g2jL^i;Nho-myN5Bce=bWkcbBdNiZgGXHopP6|>m0X&zyiScb4yHl;P$J5P* zG@!m}vL+Oi(-zwD10`BlqbDV!+~DYq^>rrd=XnXK{8jzgAPHf{a{ahTcsK~K{4ZLC zKs?Hr0sTKhP=g2j7Ix)xRe3%G^XIjNr9lTR1`89o;1ogVDQN&D)}m$uPgYB(F8@pH zZ?Y-4d|Lxo&v%s6!n!R*k)vYSQ#_7X+~+RWdt}!BI2b4BEILaWvg$@+L>N`qno_WK zSp5u#`2v&o+my(}08_AtgsZvD;0}Sb{Cg%Gdn0u>a^(iKl0iMTwt)7Vxt4w!zEX5X z4&t^c_A5pl+@RaGiK8gwxiI}T?R4NcrP!gU-my_RJi0ildT=va@jsp!)ktZlm{Gjv zil5oCco}e=Qgka8jd^tSH4C1LHy|-+X0PVwJ;A09sS{5Gn=aG#ooCAmIZ5bYnfjrKS%4|QZP-AmHx(duwlJ|9 zc2I{}P=~+;a5k@`u5?-ULS*NYL86^b|EI_ot)T>d8k;Yw{X&3yYoTaj`CEY{3rK{( zKSFB_eaY9b-m`w(+j?5sh$vpGTgP1CXL14xcFZD*M9B5`phv=pT0g{sao_|fx+`j zSlBPxx@Iaq*Q$E9aUsRD11Ll72h3%3`a>+{@i^V)iJavsO@p!Py-r@PI{7FTC2Yfg)WcXm7iIOZQjGQ zFBvcvvX}SYQQ^QAR`rF2$1e44I=0jL0xf7OXZuP(|E&{k-N|p-qnq1E&=&evsGk3o zff2OP_Dum@>4b8pwQJ2IE&3myZn~$vFo3x@C{OpZ*5VFP_98KqUt<4Dm z6!{(5TKGOot>;!y#JeSj*v7ckM5$2suJFU?lWPrE8Mh0Ql5@cF7@N)cR=ZJ$f&LF0 z$s>|JfB_@zj35Uy4Du}www0HW%1WIl@;L?X{(ErkKITOQ#kP^n7ihc;;w!+xuzGW{ zVRH(#*+8*Z5{C@_#MgRWbnlqSzL?fo1w|=#@kPp$u#oQ-1vU?ZNRmiL4 zuHD~LAv|u;1zHLfGZo$v%|k?Q)^twexA`*TFVvmr)YEJdLK)GVa$AJZrO1m~Ce!r( z^~dxhA3aJa8b_k0+InV4s>8LkjYt|RDowWbaKK^?PUI*Q@1gEuJ#vvtfB!m#G+T{ad`(V!A|ksockT6OqTL_(YVse_Ln`1TyH8}Qbyvl zx%B6My<8pQkn3EnzqeTF8Bf#TtOInxd?^6acO5OD=>RvhQqiH%?wuCSLJPAJ&H*S~ zq-60t0!5O9>qH#cAoAcWj}i0`B~MH~x4n0tPvo$?U#79Vqu=H%shXHIEUUN=b!7qxFrjZg+eqtl2W2|u@K71bb6hKbN= z2zaD(R+k}--6yLU!cIcEFOL}@8zS=XkdCq&8t8Azut9Cv$n?Vg-g<5s6{2ku@=_hG z)!hzJb)A9{60N?;_g(Jq+oO9_EzzwGfWdi=AJP)_n!?{t;W4JTJf2vr)BeaC1P>60sK>*rjMjMWU8R7tT z75WLWO&}Sat1$O}Y2q58P zu3r<8ncJU*IlX|+{@9)`U)h@QR)dnulh;VkYg2{fdr4bAy3TJl(BF2eon^|ZojltR zM9MxBA*vw1teaHtZW7vQQoW^7myAEdxQlZ7S@(ytWh;2(bHUwZHnPKeSsWJg?jhl> z_hhW8Pvh2@f^tY3IKGUob*1i$--v^oRMwcTQ6ua3__V`q1}*pXr9)3dY>x84kZfqR zP3HK@hy$cOEJBUdn>^Rai>AXh2i}Fq&R(rS-sRh?@lar(FGe*o)WR zLsQ^qT6}y{mVOXnHoS3ZOU&H?q>AetUPpkFFu$YOBll>M=CeEHo%6rW9O50i@3}$A zO|%~ZesGrkXk*+x!!0K}T2&RHP$JP2J;WMdj8;4i3b$|CYWkihmJhciLDpO{^gL zYE=!m*?M0Dt6Me8!_h-~v_UKI;oi-6;(TpPel^y}6Wa%`UJ&M~ll24p&feq)QsQKn zzg&qKJh3Ob4;@35#d_u22{5XN`ogIgKOBL>$4%BM`tD^;s6wl6!|>NP@&EliC&Z{y zw|BkS(C^y09s=BJhL8P5A}L#Ed-iOA$6;S+KtMcRltGkrmRMjp-@8)aDU9NY^ue=_ zt;AI2B3p(gZ|n-|IZy8GUP&ST+X=m&?5(r4#L{jH6$~?$wA^SUh&mwd|Gk=LB4v$( zf-R7mBCYHP8$xW@`g2u&cVhm~ux)UPwy$0i_6gR&e8ovQn9@yf4b&1IlvM$l`6|nBw+6EQR!5(m7!mzTGLAm zUzw#n7n23tJ+AZ$qsv42>RTj%T{x%~bmR1A;jSY2AU!{^s?tc=C49QDRq2Ntgx<*6U& zs<%Lud9>s_`*z9jYQ4e?s4p|ts6w(AO7AaG`Qy&CI;oWQ1|qseT_$tQYs<3hQ~9g@ zmLqXHtNO;)2LFFV>j%^ijrItEqq`fN(X}b0UA~ZRywhl@`EYrbzV_PiJ1+^5tFqpF zGc2{sg>tQTc1v6n3RxUWcQOGtFgn=HDo5-jPf zCI#znq!X-4|6jSUkqNq90t`iGFDWIoBn=0#JfPD5&SsxKp?mIk^$dAo$#Bzt*h1Ms zIY_B~7UNUwLz#&7uUes;Djsd4z))gFY&h2lu$lv-z&DA>3Umnu}I}IrNxqv#OQAG*X0!vwbTI1 zkq!C-QHNIM@cWpbguAwJ3?+G_yM@@u7rP1; zSaN_QaNM-dyRq8N%2EH6acj9n%k_K$AvijetzPpXx2NHP<{Z9?_cwJ!&nAAk;Zc@I zb3t<#4`2jsx!JgND4e0qbpkgCALrcXj3~e-XavXplIvq2mJgJ`JatWdNXc#OEyM<4 zkO$UV!UZ~agTwiw(`BDB*6XaYVhi5Bj>uq>6gp=ML*3cj>Jf2cnQYK3;hjnA02_pO zuLtd4eyNE2;^cMvB{+w}X)`(O4xXacXg8bGPv`=Rca-2M#EXq+N5939?M>Qc)|j;< zjCVDd6zYa&Plj(CRBm>KY;KR& zT=wO_z0|N&2OG8PjI?U5Gix!V2c@9n{eZd+;weKRi`*`(sNUv}>BaWXY#P&%eWH7C z7L!;^Th&S`e<>;2FJ;G6HbYxh3I^<<1~zp(8UM-v&co`$tgbrCvl993kl@WZn(R>6 ztFZel)i1>4D3l6+Ge^^yi5ZzPzqQs~=S-Rvsz8>1WTiCTERhWIx%H-CU9%66kGYI? znaqza!%wNQ5LfTk)$VKJ%+3(9D6c9hl*RQXUAjYN>>uASqCIwK!zegFFji>mr!$%Q z=}w)|*rC(KLdevi{gLyGQ<`e5Y%BfTd%9&~sxo^IIJv8Z=QMoLjF-KM?1gVwU+XMb z!IT3k!91X`Ot-YCsRLTG8BKt>sm27+l=N&Wh2MgdG+Lb2)|jGYt<$hRMuuQ3Qv@$d;u?9n(FX8ej^`AEP zDF+7#x^kO-_vl&u&T^Yho3j~qj$C5c?X^8bb5@#&6HSf8v5U^q(j?VH7;9`Mj8jc1 zU@q?~g?Z}6`caZQ(jO5S)t zr)+|cbxYu3{zCdwKfc3z&rY5@E}Ihfc=Ep(w2vC=K_7S}DcF^>8`=luQ{VJOwdO@5 zF1fb=et|^mB@Aj~Q&_dRYGj8ajY>{cub5I=dB8)}3U;%W0hX1%OY9QVAr+{FtKfPXZ+~KMWCI) zxG(e&I-i6e1H=D*Z<~%m`}>n=>m`&w{wW<-q82oG)L=1zeorX;NGN(;D7+@zA|Ax1 z5*8O_izfs^7=<-RWv^WEXSm8KxS4ZJ@I6B<7u*D(5Ngf|g|CZ*9|?swH(!wmLj7kS z!qLzUR2j>E#7H#qaZ~;4=$N}@Y}{|LFw0Rd@Bz^^FPwsFIX49^DgS$UROtFgcCtM( zF!CcFnOTZ79afX#!lHQfbMg$AGK)dYOXT}^AIK7-ttRrXEx(-&S|X%SQy}kC^4qgA zXXw{V)50iKNw6im-5u)}IlpV$u9Kk8g(-O}bq56KezIB`4!-L7;^}ewV6QvSe=alm zjKpqLshk#x#9^VqI;`M;$4~ZytF+{*)#g=E9?|=I0tt;A>V$*vM+e=iTbNcw3rexT z%U;=oFdv|#+)V~#Sm1`b4nqL*#=8d401N{d2)sD03(&@BeL)btl?VS7y~Hv2b7ULG z*rfMzL{u2=Ejee_ff8nFE~zR`iD#H|&<&=M5<|AprT$UHPfgXZ_9!=A%2o?{*m z-dBELO3O7I<$Tldi(mivnex0mU-&jD>TL-=8@(yH`hBzSXwx{pB&VdLyM(Z<>8S7d z7e{n&($fCaUCI7%MdjvR3n2hW+D?h*=zEL ztGDwQq0l{_1LE>TN^9|<>)iN6pjqOfZ5Ix{NMwjkzAVJR6+J<8OXPoUM$}~z$!yZE z=1QdgKppRTF7dYsbxF_+>nZyG2SYd|kQl_YWPzr5$D(LFHohy?`<^=epI8^{BT0Y= z^9|&AK~M4#2dJQi7ZQD|3(~&TV_o6Ua)*CaVcNfDoI5CV&WSUPiuu&AVriyv4stpd zLr1t2%zt>vVzFXNbe=@sXf!FCnxv}Q`irm@A5!79FG9$FO2rPD_tUGoh~hvJDjVW@%>oYm2`?K>A72iY_$CP47@wVr^SVzqa;q)vu$^s?1Yx}$M5QpHAq~^DiU!Kr{^7~ zkn?UDwt6n?GX}pe`b_dO^YMtE&U-s}{r^GwTJN}CXd*=q%b%T}98hhL2{O1Zp``%5=#I63oc}b}eR^c$`M3%VeCLG#%T?B( zOa0}EBygkMWRnGgO&DTEpv!aulZ>%;so3nYpu5&ehoMYyF4eff9LcK{qQq;$9k;PAiWH%6Q+~N|>KJ*_z zx!)C-qk5C6(F&gRqg@3NhNG(DyRgvm(i`^lCSSdwf7}&<89aoB#A<>p>c=Qk#0t_L z%{;2To|JlytkOHU6W~ainKPkst+H!W1F2RZr33+AGEZqB9Bp@VG}UAjwRJp)-I3kY@|N9RsO8{A3LP`$7L z2QPTUyTKLhKAU;{}W$#Mb(?v-=mEjEiMX6`%AI4>Ww|BK8yxvJgXF*Dig z+y~E!h@rirK9OWgCfH;ux3Bxg*aKO%n(F);UWRmA)@)Hs=#ygS_Hg)9PeI+# zz@~?e_DUEp%&fmxp_Z)Wq-+SjI8eQCcsnMk0bv2u4!wYdmP1p=);87N2W3WLjF%uu z@#<($`|xLbsSC;Igoe0!J{OO@So+G&MJxfVMcRTr-O!_LYZl8DLDp^;gD|&ag}gNS59r28*w4`;;rv{D9;2%$X4cg;$7)?gi}u)ou?~1lKfY~p z+LVvm6&;L=xDZW(Mvvkuc?X2scI4!bZvify$-W(+4Gapi+SE25cu0D_? z;J)${S`2xwdUKlqa55OWBAQo%&)`&|tx)!=VdBjr75G?OkZxoQ(aHE1v^}%X3sXUx zpq!y8agLkiipOUGkD1MQ8KODH-IKSVnUJ}CSHp7>=v9aoSV&uOgc(lnJLEey8^qZL zy1@SAhrcqWL5{B1#$97vhmMV@z7B{Tya&Y#iK!55!mz+~|FfoW0?03kS<$+V9?av= z^PMH{FcBrHhafa|qlYH${y* z`5R9WZZ}%TZc%t=2b543Rh`~>SgrGh8X}RnMy;6!_u6f#cu*no_}D_JO|BTE6;JsC zrspxNd{cctpT4t4|J^D8{jAm-BH_0?INaLH^PVeN*Xe_J^qojZYUKk;2mi*4FiBx( z>It!lN*RlStYYG}%TuCUF#&JEhk2o|+W5fLM|(d+H&kAsHer^m)Y!B#n2Og(!t-+ zSW2C)+Hvxs;WQy!w_$#DC%-Ohh* zHnu)~vbrv@Ta3_a&V<(6S%#b5{P>$;D=)2A)|Hd%k})5HK^IWs@flK&AJI%x^eoXPR`68sSs_Lu$TwGum9Gorl z*98+-#?BLr6{(yWFllKWhJQFr;wVe0^P0lE@F}K*h;+P+eDQs-wOv3nJyK2`!A!m+ zn?j~eLeFMVhH;ZcQ`N)pnZH2Z!RjvlH`iIyIdt_{{)BomYnlvT2dg{z+xl!U9_g-b z=eHQ1h+ez8dUW+<2e~fx@6;PXH5I_`VD(D=XLYhVV6R?OJsIw5T(P5iBj2itX&WZ1 z7x>>I1Mzu)I9R=n@9zE3J$&{7T=2fekO-5#>hC@6Oj1fcpDuD?Ka7WijddB!(Izfd}vbB6|ma(crs~{ zSp2B~x)s;wmPYW_e&C{F+)py3LP%#8GCtzS#3{;fogeXHeB3QD|1*F^|Gx#?&kUpz zyz5`ykk=8Q-D5H^i=MrFF+S#%a=A<3(~%>y$Vjj zzNuS^ajRB1SeuU8GK}xFWBm24H%I@DDFwQAs;WhXB*0sgfj9Q4BNd@0fyUPvEU;Xa zF`=2)KN7;u8A5P2%Sru41fpOts0efbtLeJAjvczDdF&MtPUJ!k{L%2c6(u?xYCtcB zt%pl@H7_M-2oA6m6n`OMDpghjT~UU9Qs1uy?iMMapxoarjKW2r0K}q1Vo?xT zIb6>xVUd~@%~dGO0uqhGR8LKK4$xWLx8%{~w?l(pj)Gp+NWN*8FOc_Pe-o>-%EU62 zw#2Gc3&c)^k#W0~j_)h!+eWG+c7YE4Hoc+BC^2#HubR#^?7*|MrUU;%pA4#WrMi;! zqLg1OCKo-MeocQ)o?OV?%-Rm`RVh`2-8^8$wXYgR8r3V5=u$iuj#lXmWuxndw0WAH zjfyWw^!j~WBLsvtJxyqSM|T@X_Q#asK2Tf@Y)-W33s0n+Xm2hnx+F<#cLC@H*s)&N zv3UC8t^&}(?c=KZxS@F9D&RskBSkt<8c9c%RP)rHh2UH@Op-gx7K5cA^|lMkEiWrW zKgq2!SanKKAr?UrixsA!!TJ`M2o&Tckh?6v$Jsx~6Y0ceWfP$~0KE&e#Ld`( z)eDh?8sc(}0Z8@la2E`Q>Nk0twVUfxUSwL{QMyrkt}j+dk2W6qs_Il#g3>dBJBSbI;J! zNtQ0z8nKoAt+pzbq+K8Bxj%7u(#xTQg+tc{`IiMOK&-K=12_5j>}`u5FUDtN zP4>J7SC{Q25)FH#YnX`Ck$=9pUO?fjwkKWY{M?=`i`8o`^B+gHfC#76Vzf$L(Vrlu zcL$W4_2UxSqSKTiqbcGb-swFk9u+_ek*nD1A2vdxE|Ihlctv1-eT)UNWpPn`T$G3l zb#ajn6r!R?QLreE%mY@&a=TuE1gIaw*HiF?8Kb?sx(>xmB#{>4ZT6li9q=oG9q)x5 zH<4z$K)O`L1DWWhDOQzt!oQYZ#bodM#8esg-Go#%x zr7S)sZ6y>3kuK>D!&&eqEMLYCp$piQv?5bnN6IKORQ)U!yp7=aKsB0bu-Wt`v(a2p zg#%M^noe#}s`n5*d^Z|9V_+L*ac(q!ici|jFGRt*r2{^!J){#`!%<=z)*n-|X%4sC zgr1g;w-zC*2FS($j#KmU{2H*7c=NRV^cB|?)7MS#2lT-H0Guy9-Ye3;A#>Db1b9=` zNXM_?(gMweb1Hx9y7SvUHz?$1mnW_ZGFQ_=$j2Y0cV)mL!!DYrHL-UU%E< ztsGNQAraX5>=3vxOX;IC&0gUuWD1=sud_&aY4sOj$vh~mcbWSJv}XNLgrD7HVe=}U z{e2GRFA?fG)rRrZwD;7QEFhr$#6!eY?sWaU*Q#R=tzo@oQ-}rqeritRA{-{Jwfk8E zM!T2J6ok?{i9@0NZ@@=w1sVe|xUo^krpfKL6LroVy`XZm;~ndjqL7a<&sZrdkZ1Ha zU2&DGZOE@c?dU&?jyp_u9PmH!oQD%s!kYB9FbPMDkfRFfwlR@Lhdxr|=&BLDjM)n2#88Ek3j9ecg9%=)KPdZBa2PfN$sopYz|dzF%T64axV3UGP(A#Ah2C6ein5{Z=i0t3B?Xk0@?ZPCFbyn1rp&=~>DT z7HL4j&Y@kP$(4Mxi1gj}w~=g~it@uO?9LisYx{W6!0#}q7{BDuy@RxnI1+IiOjINv zqZI%4>K-eaSE0EH0VcpfEFm3?WBILoFE1G47yED*0P)k@CcAHf_}4vh_aN0@mCIU= zQUc#t0tC1o>Rsw;7;mM@$tJ<4kdo%$!SV~4m&@tkaAF*;jbjx#c|4a$#B)v_kQ{YuJi2n8sq(Y62cBS**_o@;E@(?;Vw75l3Xs z9oTXJ#Af@YLE|!(S#o4*u;G#6&FAN?(w?{)lpTKxv=M~g_~B85wWRcmcv*V>;$Wex zRmM!uZw$(7kKpnAgj{2!1H7^<}`r}g(1 z01c3u)LJ2}u$+OQDYYgQST#WMf8Bf1zrCF3eg#Hq;ng(iD$tpKYw7D>QBNdaB~jk{ zwYwh(#1nZwFj}#L&-%YdB3)(h?)iN?fM)@3)oA*X{-Nr*vB$*bkN`Ft3*il6(BVLs zrFL$4%^kw~B--VrY^+J_;F2YO{B@g3JG}{PyRm>ca&*x9w+o!YD0mqJ#LIn82Zlo9 z@6?DHcC%0}vj}VK0J<{W_Mn4hU2uo1pEA_CDa(1h1vYmydd4nr2Uw%j%8$DWl)b+; z`z0JneUHJs%;UbxWW2XeWztBc7L8D7QORW%H8^F&kvhb<;|);IPb1y199c~2C_z8@ zsd1v8B;T+MQACN6F#r10JPs<~HsGi#|8a2TQ1wmSk`!|&fO)bGx-`Cd`RGmV^?z^2 z&%!nedj8FVn4iSa$!||MJVsC}$Yp?hKLp6s^}heYpvTt*ydN2C?+u$37~>1CMo?El zx%|wx2_h+U1sAr!ENU@#9LSv<-;=@N22T1#R^ele#bBCuGuAloHP9A_f*cX0m0HzG zp|n;}Tg4k?X@!50h=*vT!B@<&y%Wdd*jG`XR-q`S-y6}WW z_sp~++94tZSIA2BZ2C1kzOvO*`Gn#&O2EY@_M8nZFm3E$k5*w5oSNsv8hQsnDnr%5>cW{y}iNyPnxNx#HX zHLrO-m`E~R_KU27Y^bl} zQ~1B$BP4cODZe89m4#c`c${Q}1YT&`woQCUGSWab>oX9>=tnYN04yK$1Nw@cxn(~d zEHlcqU<4kKkRPR!og)B>`?4VItAe?rLKe)5@5-q9{<{y{!c0Jly=W@Rbrk2!bH-_3 zp&eIn4*3l&&ZdDaQ~Ou=uIGqn;sY~{etDqd4kP^*>^NIoPV~2&8oGLOU7|CUPvJLK3mb0PdSIAwQ~q@IzHt9)p`25RTP$1=N;R zsZb6~QZk%VrwaKX6WxG>KoId%9J_HRm|x&i_B&$!6;r&Kw)Gz0d~#-RS1}jNXXn)u zPtnlpYz)JS^uENhJYArk+2d%nF8Ucg$*I%}@t_(We zW1JqglYK5LH-wWO?w=M-*RMP2NQd{hOa|=gdl)_vN-y+%Mn}b0%#wNq> z{;i1qNpk1s&ib^3r3)2=VGF`t!cbk>-=~^#eE1Cu_*y55dx<&}0loNmHyo@MB34)z%eEczQKF z<~0^&<>ZSGPu7%<{II|va0jcS3Zt&O&+ych22)V1(I(wSb;~o2a`2p>%&F4yL}usr zeMfNASx=uXO}|5*#->0obHX}Vb?agSA1?MSW8$4l==44nD_C@_wt7qoWM>b2tEAnY zH>s^69r0?kOP6)@j9~I|eMCaIabS(HyRw1JA9s?1rEi2wsLs1!@@diqG>&>NNN^_w z=^VklPIx(QC+{VLn12y-L=bYzF)v5WXI>Dyfd}H&2m`z6bB6Et7)-1i9Lh=PHa%ls${iA(z5} zG{HUwh5h792ozvmFWv{+&&885MGY4*zgKIH5-`A4TxUuS27U|PN@-&Y>6eZOEd@-Y zA~gL&K(+M#O?PReqH$R_Blh0jUU+`67(5`9&kr&Y)DPzknTFr@?u)PQNHXeOemlwp zaitDZnPbHg%~dYGee1eop99-dOipp{5cw5E3_cBOge!hl2t{dxs)76rx&ytmAVk0j z7$ow)dhbHAl_?FMNm&rF{DWEsxCtkDpiQjAbWs`l^R^4_HjYg1A~%zqmD6jF2`YI{ zE-I6jQ%hWnbj)HNtxGXt82vAR&K~$irB}YUzOW(_bg)^ju+oIG;hb)n#vL@1j-fgx z3BhHs0h6BZ(R%Ro_pM(PbPWR8hRrQH7fzQ8Yn_83f1+LF(b-S_`di+(REf9`8NCk} z^4Gvk1ulhI%vjE*JhQeIy@0VG*TF5|N?_ixg$lvc^L^v{e`GRZgz!GXa~G~*Euf#-xs_h|3%;QEZ3gVoB>^v=9Gij9k0+>W~<$F@*R&&kxHkkw9U zhD;U9sksjIP}B@%V=Ar6qqy_htpm!l7rt_Z;frOIbbn7kJKksVsJwMp?B5mC~c?vk4t8QpcQ3HEArw!Kg7E&O>>?aV8~78Sn|f0;e`j+1ai)jb(yhYMkS>%W@_g88aK zzxA`N&|uIhoYtm_;|BIJD5%;-1eTM`U{Y%a@4SW2cNTV+{~O`_PXM-pfGuh$1-|`w z=E6!m23s?Z3oRmqyon)>bF(3W0*PK&z- zqN?rMy0V5cYDGm=8M&&Wg4)SnOWD9_s32XT;d85!az6vyTObzv9%%%Pz#us=(`Iuf z2`3J|!&3hQ>$a55A4P&;W!rUn_Ml82Q`A*BzO98CiZI=k|)*(aLuedxTk|pbAmc-1PO_t z2(o&NiO!Ebr(C)D4JAEhhZ+&wHiFCT#@>8cvsbZvSr#LxCR1g^Lr% zqBSNarQoPf&DHQt;Nt{5F2_6a_D(yu{URobQmrKE=@AOfiHGrnZoe%Rp;k@uq?Y;( zOZZhy2E*)%$byEC==-p=0!UCOGHVOxdYVc)jbxA zp>v70MVdrGK~M@MEt{*a?=V|5y>t3bQwl8tYpvYlRNrb#`T4$8O2eReY4v!HF7g4{4^iOIZH-8^hH&vzgpI^+rvbF4@ZmM?~S2dowz&|@PLQ&!6d zUd1Bjq451NyU*iy#xbFXQ`RF-uY@vS1bwpb7Fzm{Or2EAh z&ImBXp*Vwfx6k47;pUgUTdWpC2~;6gnU_&hV+LhHrI0jFs=KfttOSg`zm0WNsQ#vB z1k#3}*Wt8#62#{(UL&hzP-B<{M?Pa@56b07Q%7-pS0`>DG2W#BG!^WykZ0hUgoIo? zm6tn%PsqQ}`o~Yf+a#k2i9vmmG16YJ{bf5{mfM;fyuWcYeE;k~b^uUSX%H&}1 zSi@=+rB5KeWruGeF|-ZQw`w2-qI;GwNdmUnV%2JNXLx;+(-U0b3ho)QD7bf=2LMnq zQZP0$02?oIH>#scS|=|iU#Tg$28t`*dzw)SX>IG?>*Db@#v*8^ovlXSQfj@^Zq@4T zKA`Xjd0K&d(n^}zj0OYBm}+TvcOS1Js&%xAoCVJsu#V2CrNXf{Ov#}60TJfAg#iTW zdIrBna98Md{@BD0Y9O|6PYds>8;IRMC)y&(mVSrWVJ)9+e1#R?49P|daxeJD=AR9-cQCNi1KP9}fDY`87GEcAFKB4{F8HKbJEt6E4Ov zOUd(;e1h+qJM(}_L_HtS=Y>$muL&pqjkkde{#5P?}Xm2C$1=!aq9^RiShq& z5dKs5$4HjN20VPw4KP?iO5EdBa!E|t4z9Mm-GqQK+RAkQ-Pa?6w9oai* zBC>a?FTT7exD7U6me;_T^;v)}@`Fwz9FmEfP}}ykcuL&du%wQ$9pne==r8SL+dpsG z0D=o_vXK`#mp#=Azf@XZ@_A-ZkBc4UTZK9GoO}-ZqG8>Se6~qIPgZ3UD^LZut@IN} zM1d6aVt;U|uNRqOo9T?_qgbjJ2X>XBtMIgNyYw*%_G%vrcH2TffkeWT_rW80<@wDa ztM)Vq*}T>pp|7ji#|AsS^p87ayk*f*9HJ1ZpVc9R(f#37vNQL79Xq0lvo;R_S?vyh zpM;FU=g_d*R>t`|<73ALG!bE_LO0u#^d}*lB7YRUEX%c}1Oq)0%FZHtVy0>5>avh8 z#|t8%*r%Pk*mOgc{M(W8v45v@JMj7$$ zawa%lKS8=q?{rtZJ%=KMKo+P_q&?iLlq{YiG7T z!;n~$(`D!nPP}+hJofff{~6NX!4wFN9;0sKz;4dtL%Pyc4%9o}9!-?{2xb6|=eHqK zrH3W@V}lUxRtLSA9_(o9XVTkBdddc&^uw2A?lMAh%Fk8-qex^~tB) zSEzW6t|kGy&85eJCMgU1p~KH$fauLBW{_|!4h9-H3h8%p7trjMPe7iE=ByY61F2eF zO{~z3<-)nIkwHfZF0ELy_WkQ9kYea+K`yKpw{7HJ`7XH=4~x-t*SmbjU@vP}y9ZKs zMRDX3uGP$ekV&Q@Ws$uGOn$0?7{&xr$Hv`5j876*g0w zD3Ubf>>AFxbvBH~Bs7jiK+$RWr?i@J*qzB^Y{8e5^v|v1S#aEMnMl7$@4tjk?lFm9 z*VQlNB%IieJ1hp3N(xgoUvqi?j^>6*R4TdRPB}N}1XcBw*-h0f0SDyN-3dPbYh;ok zthteDxT*gd!a|p7p!TK2_ETS7`o*|8y%it}Q@u?#;d%w>fxVxQN8BWjLwEv2?m_uo zD(#QBUqdBj_#E#l2$Qz+SaG`nNaSYR$Y1gk6QagOolFz>_ME`&Lw|U%Ro&Twe1GqK zE+{!I|9%opj>{_v$QNA+1^E;|rVvQ2xgr9owLtP?M`hGLO4ze(M~*ZAjEKU+kA0nv zJ<|)Ti@}^YE|zP<7REg80zDNo;19lVeEHy@a=5MDKskon??JKFDPJJ&t3V%R6-_J~ z6jqM5=nNHa;N+kX6DDxU+z1W}nv|#~hyGq}$ruSMSB|@@jh1vYP1wF_{NP-I(b(G6 zZf*vVr{!NL^fLA#)tuc;327#rWvA){Qusmji=xlTauwbl)m>za_Us!$irrzQC{az^ zujOZukWj#q$SR1$z{kB5Q=Cc;U7(^VFmB(%NmwuUGx-Qu;s|$tYy>_!?@IRWOW_dc zLLZ#t{_A3pUntOT)klf-nAV3i`ohEgxmIiyFjt!wD3%5e%gW|+?P+f4FL@#sR%-Qq z1*+)<5dGf1NWg@s5{^^)vG5$B73lP zrfBh9*lFNpf;;6Tg-#L~&m?V!lN2umrQ|uEL27rx^KG@BBT}BSBxi$-dpS+k9(Da- zcy{SZz!oX)Hsw?d2m7f_mk*txKi?Z=FsTXOpignHIrQfI-wIClR592~A4^YKS z%X7#b8mD9PS+GIAVdgIZfjH>SEL!Betj_al7~`eu@)gL*TJmq_M%924y!r+Wg)la~ zbb8f<#gk$esid&mTpXLG8C@P&`ctI#0RonAd5j_x?Wt4vb~#^oemx|AEdVxJjf7|k zbC?!3mu*e4ecy2iz2|0$WMfr!sQy;tNHaiS3H7TBPs>$QCH~V-cN`T8BM^c_`pDJXhn7dEiO-LD^llp3}#5azp zSAhp&hzEKP>sl#yU|~tx?Hb06vheU$3_Gx8$0IkKFW9N0b*^3-*+R7j*$fk#U292k z!kTx)ps0ksg!?V`(Mjl{9e|}*b**r0XDZHd%Y(T^%x#*ayd694*N!6W=lzeo5?uW<}Ll9Q( zhOcL);1>?<6Vtx-UWXgg8a@e#!D2hrHxHc>Tqzt>4B66^}Vl;dAzT3e`9bIgam#VwH`|OhlS7;sxib(lRC0t-eFJ=Z^ zePV!%6~l#dO_=I2{6W1;aAVFDxum<^a?f>Qm?rfunJW}hCFgx@F@mXER^MjVNfR-n zbJ;~fQ1SVSJvXo)TqXBw6dFP;zW$T!magEmLO z9S0(4rw@D>|8;`n-vai78wZr>7&qFO6j6vxEbeQNiQpMcBXZIH6C0ec#?W5J!g`k7d+!s3O(>PyY#Y;H zbs)3Qe2GYRCM`wK8t#V#fqkF+U2cSB^^sEUqkFGEoPw*jg~Hr&TS^4U1x8~?@Ay+k zDZWJ=YcAYwZYq*y1~Xx!z1fY65bW*7dQD583K4TfNZeYG;MS?NaZ1J|e(viWByfK9 zS&=D)P1vOm<*@`j0DM2y0dVq>M>lErcJ*@M+(c|q(a&~nHx#dV)qrEK6a37dX1Oxu z=l|GPHOKnNHJq~vR|vg(Luq23@AH zC5|+V2i))ofm`~?(N(0ysmMs@>8ie1R{-%)8Y0}8HG>sq6~WF&v3Gzg-5F-5s{#dk zoxO^Bn$?`BQb=VLVA)*+w>ysStBe55W8o3BUBDH5cMhc7s?V3;}i?Biwn<3v33C0iZVaDP_MTONJmq|p&rS|^ON>7 zrZSq!%&oFrDg;p$esJUzHS$hXbxplLOIr!0fCHID` z^fv+VS>Y)^uU2^^1t~o8XZx`(#=xF`5Uc71srUCA=h3iD^J^ZhfSDEMJ==XN#`@~m zCi4nct%db&9xs~@JV%hg>t+K*b#Jq%jJWD4AOg>ST$7jWoXmOgfyMc05!Ug}DxAU^ z4uxG&S;;zrOPJqs+|5uoN|j9}qpYz}!fp>QIQ?r1GX7OqI#Z~)I#0)WfV0aiX9)qb zW0une`D+9=rCekU)IhQ_VB{RxN?>j>S~Mmu@>1)18O;3q>tk4anzGUA9Y{D||4h;| z{hXBJLGaYD?U+od3ntVI`x@NdDV+!Z;DyYt55dTUK+hofRq<7lg?*XaGjmYbe(PdrvZiJB5k@aZ! z_0}N12^(_AYDM;8QF~DyD+*NPG3QmPTvE&T>HyFJ)!IJN>K+4LTym`?FrS->EM0Gj zaZ`jx5i{1JMs2cKmXOH1!y$2ZR3aC>L&~+nX0pwsOBL#pGb9~(XB?kep5T~Dq(al{ z4Q587s(jEPi`&#%X=mQc*kQ~zE1~rS4772EFgEFV4bC>K0^Yn! zgjPFzE1~BYdYi>@5>C92bVY*?Oek|87$F3uxYQcEZ&_x8XMVD)O`Ie~V6(QOCe3P^ zE-sUH1t8paz9 z%yK+v1*bs;IQmI=UX_Dhdf$5Xb=7BK`Q&>>2g8}~KnO9hQe0t|(O&Dh=1ton?&gz) zeneiUR3reUdB>P_cJ#v_SQSQ}v?GN_*Uj9wABGz<$XGzS|k=vs5wxNReB+hZF} z2EYx1Tp4w-!0Qq-fIOvquh%EIsmCCB)|Cpk6eOxlp zi0ZxZXGdE7pIEm_)H;M`YY*N#PKc-aW+Cp#U_LUY6MQZc6g4iLPH zgoCVDVqd2y8NS{&AoPs7t$c?sf}NbX$|$lRgypab&EO*P@Plt4u{?|S7FWt1g0!rx zws4Uj+w9uS*8NK&K6&5ZpeBNLiNevsGD4xUx6wmhToPBKct$GvW?4Z4%^TFaCsRPa z6}9UJY`ztr8_okA@>)q}egq*D3L}r#^RD7yd=8xZB)q0_A__oC)1QN^=A1y?>Ti_f zfCpSi5k`=NtW=k?drW3$q~jhSA+G$?t-?cY_(I{b0y_dasdA#uz5zcX9(-?t3o$|m zq9rmO_8^5YVJd30p{v1$5*}7r(Ys!o+s3S11~95*#E$d3o?A=5+4YjSr8|xbk9wTW zmHYSq=70;SLIf_x;+NMy&9#%8p*|C(49J5kkNU zlD~4E=Cu~?+Ef?uN)M&ff!F~KaGtAW0CPkr`5S8$T)J16)IZTr7k4H$&OVM#6rH)v zHjW-BlD2)Oh7=%$j!ev~Cei3odV|&GGIWn7&uIrmCkjF5ZjO}pOcAwfvfFu*^Wj_6 z9RUA)9f++Lg%$+C#ysX+X-5lBtIWt>PP$P-6nq=0efF>DPQjg{o`szFMf)%n{ncS;h4@>n&{GTFk2MPw#C8ZNK5^KKX>E``hfo`7-WbQj3F#CEKKM z5v(n!X)w?Bd~@020(rg<8!IkgbX=?Ok&ri@I1`C%?BmOr?g)E6s7f`C)dVRDA2?uj;7R(u4;2Y%xJd&^_fy4oH8k9m@eA zg9h91SFY%F**zYi4iI>K2#4QzcNvz~;tVptPSPi5rVbRiYh86_pHY1cpc8_5qZua& z)nn1KQp@YZwEJN>xtqDX+Vdb6-4T{YSUcyI?7V=*%KO9%_0Zg9_5=z=<5oEHR|ve0 zGu;_+SU4SN_<3dfArzbFd~8Vxg&8sH)gPhoQlqco$@mT0RO`fq3czAyssJjCv#7gR zi|7Kk8Heb_-qtPrJZ-4@LO)|@B6iDX>c-GO{coj#!|KZlmwXPD7{a=fFjlVd{8E1% zDmDaNT)kC=y5x3L*T-T)logNlTV#~IQl%~NGl>@k_lZVkZ^&pSZaG|1qo`H%m0X%B z7uiMbi+(;AXB$*^fEUDKJ7Q~k;aPV2eF+&$T3Z^H+?S9}d4yp^Y_k$ukHfN@fuW)g zUI^TFuX#pRa*AH2J7DhDe2ZcxbT|dBy)yAfqfEb#X*xn9K>7w|lnSZ9^nsa{TT4fvWaW9+A$Ph89CJP4>W(_`<#3Jj{>xHByf@`l^Y0t0pbZ%E=3b3zrykw@C5 zX^ntkMB$B{$MQdJlMmwRuJfH{+NVfLzY~q0&kyeTFK9(uI|Z6nf1|WL+Dp)2bw+c) zQsIf;D-b}x7K3Bk1}QkgXHG*3`wP%zgiDu+#Kk4(_T9HBk!I~nQPtESLoqcR!x$Z^y#Zl(yNmv+JR%)DfLNw;tWnx zY#INa)C0!6ZE}`33I6=0Da+&*n^7vas2tJ?NyQ70B;)GHKO4YFs2to&gW5g>017J)cTKGieM4QdX1{GN=U^6Hl&sTKn-+1BTg@);1#{hE2 z0v%y$?WhS7S1<=}Ph>3OF#Yv|@+!y{nzq{JlFiO#gKRdb&ejSlfQqoh>I(t0Pr}{k z!&cIwgDrNRjMJJIRH*b_tSwxbv@;JdBR_lPx%?_}ZPP{X$thZhF zNVLg9?bGY2y%vi`ZM9VO>h)E9R?DcOTxl2e_7-I4=7qrltjdgf?v;P{yB#WjUMhM; z<=S%poC&DV560r{RFyz8i%uK!-t|R27!UWexq( zSRT3%<3q`TYgncD29Ph6#pDuIWKbGHm-vA%EaJb+@h}60DUl$Fu`Lr`BBlw&X2XCn zO)|Z+9bK#GEWV=pAbbYvl+_}xd_gq?#EWTWi7-OH9@dDl2~sIh5XN-EJP09BB6r0T z?TZSll1%)R#BJ`G)ModbT(yXLL1Qx~M zXu$|L)FHH(HJZcbWO4qB1z&a+oXEOXsqCiGqg7QMRisyJ^Ce|xEl*hXq}Q1>QMSOs z?OBNWSZ=0k5*CNUqZM;6m}%$#IoKrER2r~ixclV>%umAft9S3bFT!{2pn~ssZJtU! z*VCn*X;jH&jVjelSC4A0Q6(bh$X)GiHw44P@&hL)zd2RBkWNJQw*!alAzev`oB8)*NoobJ(7Sm|gc*bDEI`oA_Xh z8EyfZ?5BrL&A&&){#9t+kCn=*)h}u^K?sH&UbOU0Ht~3a>c1X}Al2g6b2N_SR-D19 z;7gqu9>7e0Z9+8$0&#zQ)0T$R)Fb!77kGcl_CVtcWY&eDvr=4rf?1(68}%ec_lUa%ti(sS^{Cd%ONf7jFL!*w-i@5eb_hl6`zL8l@s5St@) zvQUFpRdxKp9fM0_?TbD&jpO5RuLOzcw(74gf^E&(fqdaF2(n*?*w3lc$*(V}p$&B5 zqYoP;0j9_)(S{gTZ^#NRV|{gfKcydBf*V==)QPZikcYf9FxGU%2$}^4l_lu>F8P&+%7VF8 z0B%$3bhb66^8 zI4l&(Q-Hy&f6FY3gCP$~e@LB%1}M98XqwvHC5jqndAQ1x%L9wAPzMmZO+_7taUj9n zDtEW>L=HZ+u`O2}fd0{fiUOw7rq-&ryK&@Y;K?nCICcINfN!G!S`~_ z4`k3ql+rj4MfB^xJ6Di+@8^$8qUsP_D1ni}_ky>C#DEcQ-+F+^IoX!`Y=-~pA%dMY zmYi<65gO?bOR63TNc-TEHw#JH^oY;OF*sbrFxKf%xR*47GoOV1W*s=Q^wopfuBojX z2)pZHC-F{p3frZxa9oVyK^vx|8ClJ?+E)5$Nj&Ouo3zhMqw1;vXzx(Bx}hwWTy`$ zJf?C4#{;sC6?O>&$cv|0XWne#FmWHnP@c4hA;!T8kd}i~h#kPy$Rk+rQQj4h8=!m! zyr5=(5*|<)ke417IqiCB?N`v72-)Ob^z54(1_=vbm9fYFSt!pbMn4Yf6; zruAE>+$a^3X-0Z&nQ7hkN0mt^R>1UBZzM9&HH+sbq4@rPWe%7d?+Gd7u|7!{&vJ?& z`$@qMLBSg&^st;|H(>TlBoO{Tn_wI`PT?WyiK7soH1fbXB_@m zMHG4w$S60G_;MMtN;p=q_vaYTS6elW!Xh^~{8!c_cyu@5yr3>e) zK^&J{Zg$V-rF=_QSQ>aK;-koETTzpC5n1kM2vY^2jd;7{VmQvR8Q#E6`)k$YZ>va+ z7T9z)Spu@KjFk%8uzQJxwB0(YvJ1eYyTSLg@kMR{#gom_f}apDwb(@HOEKKeUgR>@ zD>dib2&@VC^52PfAG5sv5jPwQCsRn@FHUHMqhtJ=icE?mOH5I!haX(mS2voz(EPs<&xe6gLw5qXA1?LX@NRU$%> zRdf|)ZLl3Xa25W*^GC9+zaRq@WGwwbseexAnakzeOXhTez?{Leq^->}x5VH>MJ;1_ zIZ1xbItGLg7jhJz$7T|dzmgcXJp$nn&h@u|zhoie$e?2X{D76@2@Cx3FL@v*Wyrho zgCcf|`6#peA@LC5>n|;Yh&Uo?!7WjqdSPWNs^GGPya9nIkSqed_df`DByIqCM!0R! z^5ob$kZgtb@+>us=Us%CW^FUF;EI*B0S?a>F9IXc;z?^+vns!mK=O8E5naWzxSV4~ z8Lbtb*DfGe_5aSR;+byFIfSpEpVeTVZ+(HLyWTx%)eJ|l{kuniZm|h2RMVDt1DoG#WUum{V}awd zZ)x4jdj=cR_WaSVt$<15KD#akaJ(B*Nm#V3X@V@PUxpseH2Jvtk|FD=h}<$+YK74~ z+tln^7-_Xjt?ur;p+Ygg%xVi-Y6H76D*l-jr%#5xXT)es62Q9pGky|R_^>P-Lk64x z)rCj92}3HYs9@(*rn{i6 zT&|Z^u5JKsaIGbRojtsk6-5FYpzzQjkQ{)kyhVRJ{$_w7T#4` zc=b!*gfoJxT60&rLTkmuMFy=MRX;`OIahOCJ{^__t-%-mw&C~LH4w@aSxD*t1oM}Zf56tUlH$<(UlGc!Kq3y>X#_{-5?qxJxYR8nX%z2 z_Sj-4f|Ij~`bwIw*wNIE4z{a6pZkpMA;4A;+!h z)iu=S^12ZgBF?%LB(~*8P;;svqAVpQp`c4jo2=;{aT=8r)FE+vG^Oi6Z9`#~L7+`R zLTW=YCfW_GYDAQ|gP5eDt3}(YH+t_vmZA&Yot7Sv4K;U2w=avGLY+l|x7{VBsT$1c5%K_G%2cdE3Dvw1|>BUPjuShYW?(tT8q zIP)b%jCwE1-mj#n+DJe)81%LqdP|K8QLb`O z&V$kg|6ed4?K4i%fMGda5TPV1DjITbplHCb950Aak`)yVImc2oU|5b9L@3FMD#%d? zWAMw-05=ot_i#z0*Tbc}ml6O6vU0$L`Y4*zl8!O?yOf<-(yCTH=y&7FT9gbS{39122~#~2;8ThyjWx(`y718A1#mfQL1_eE^D%?RDq>tq~*s% zB~Yk(8ZnaBiANUIKk{FRGqQc!oc(AePD^ji9 zG>9&_>ffJUUY6Sy*o&N|3QTU_epx#b{y;6FyNTQsD&WScM6y|_YK>^O>Sq%S)KJ&bUtL4~F%$M( z$fmn`uj3e9SaZ$hN=en6!YI?oYZwTX+B>9iT56{+p{2jN#(cH({|4OwYVERNy}?|y zMJ6~JxnTDSzt87(`7#F!27lADoH^ zNMYFuXg8+heI1c`b6b8{I7W53(LuFbyw zI7yZf+P2oVgFI$hn~hi5-n)p8^HkA4|Nboh`FCIc+y3J} z;4b*#8GgFl`W;+0%5Stk{Rxb}&20K^{+LW)gb=hk^qV?4Y@!&6Cqh6IfV ze|q;)SYE`P9%~l0dC4fmyklwIBCtfL_oysvYb$0<(J65l?9HkbEXab+Vt=q3RFUTh z`Maof5-kf4K9I*{7VGJDrO_%7K>L_o%17+`KVZO4)vVYouHb9p?=V}a+4QHV<*rl+ z!e%X-IE!XZ8F#SJBSEkR8wNxshNh1ipx9@r8FK9?{DgR=YPX17$~qz^3?IX?G6DIN zd_MAl#q!OVNAL=IJH;_$03<|^P#6ZG8Q_>&hz?zfwiBQs1A3W7WJk9kay)1L+i=P` zw$4pB>8=sH+Zp2&a>CyYG7s$(!Qtu==D491+FcOmLeDyKtV)oM4KU{1?R+Kt1ZL}N zAJyU%8l16)h#O&KA$ZCM^0=(UNl}8m{9{5K(LfD?69ObUsFwWqDpSNLo6q2%rrwzba`2Jb6R?3&srd4kt0e@Y`l^|V4bt30eyR)=0Wn{+yh z`B;TL(HgSL)G*lZZX+g(8O6ixArW;d@t3bc#zvjMvX6csmq0J_b0sH&A}rAudlf3C zX3xrtUwN@2SG8G9o|Fd@@=iR4jo87cAG?;dwDx>`%9mi?qj zRY;Jk74Is&aR%$W>^M<_{O0;}DJUHedq$TDKbumFlEpS0--{J;l3XPuy-9O*1+9fR z*@b7V%Vh}XnaVo2=AOaJdE%fCKjO8Y_sQYoVi0waCNg%sN_^+5{N7<44JQ{#U|7~w zpy*opvt`7jCs==AG9+ShG3en;IbYsev->x8&Bx?u5OG0<9k~6IjnWwp*GLhOB-v_p zOp#-R=$A?vR5c{t5{cJ78BWtcogf6Ms7?wCVW=LFa)M?{Eh?yJxYPp2r?AbEW66BH zkY&M+d3$$eK=yjL#`(~+TJeS*SfUwky0aQE`_S0Z#gIBE*6f~ZVUP9RHM1SsSFEKT z{&Z8?(9z0qQJOR|HQh+Bx=?lbcMCZ%V$bma=6O9r`R;$^iGc!cLN&}YI|){XZQC7M?VtD z+V8}vh8+zaV@k#>%_qUROg81lx9lQ&tKe@z9gzwn5x!+GHYo+(1z~!j5Hkvi7Q{k|VE*7BNAtr9$qW%BX8!JJk#3gh;W6Q zs-@UNR&1dod~{Bm1OidB0}j}bN%FZ8bZkO5OjycmO-LX;)+}nvl5oVbV`<$Yu*9o3 zvL)CSCMHhNDRBbW`-Zpa!nkOxnl-?nLc=WMZGNU!Gm?^kQH9zZDdVfP&XAxV4b^M6 z$!A6rDncZ$0oy8Tk<=>t#i{3Vs+jV!*{-jdX?^a93Ek2YTh_Pg2$R_?Oe)7(2bEn) z7^V{{*gN--N!4EhV}R}DZeU}?ZON88wf^T}X>E=UrdTMCG3=8qnDG>%D#{_!t6n!41tlqn0g36u8_%st0WdvVZ?&aXsm_y1jm}- z9>Z!n9F1@r0Z&`pd4x5O@gx$QtOZ?2;lITe{wo`u)IqKg(u>!P8YYy^Vzi0Bq)l^d+GdG=P>I zNeG)80J}TmOBi7W%P^GCleGnZCq;!uhV;?Gh?+esU1sQXkLwRI)I~7UPBfJYeIMh) zVnF~4Z85QamtmS7TJky%t&2~DUU5`g0{vnxg9q~n;~fWi3HnJk9j^%H6Z~c*X|ZV@ zmI3fJH+*a|Yzu_%4T52NI4>MU2!A#3^%V!;!3KK1o2iXkSMa*lLU^YIS(M|3o5Tx`91RWmK=XPN(6WLhAFH$`;MosNhZ_o}EMv)2eB?NM#2)lw4L+hD zq*i|i0i&o6JBJBP5^Ub`4+>&P7`euu)ALapFmjbqwu2f9W_i+5`JiU3F~l4rY`muC z`8+Mwe@W|?3NWJC;v^bBPWyf7yuNYr`mhqs=R(a)HZ?<+@d=VnPfm{2Ph~PtLHP!xBn>m_Z7c z5LLx%prWCgT@3+i%A^aP)}cv?*D@n=Iy)`IZSy>ESUtTZ^E{U=bG^0@C#cWAOMx3U zbk%)mO$6}WcYnuP9N(5sN8EQ8qBdCZK*0N%t5EAbF(CUhs`&O}+Xr5NAdQi2hHc-B zEQ4GgV(&oJN*F3w0Qa2dYqztzQzYKk1LdEgKQ5*4arQ>x(gmwLU*m1oG9CLs+P%@mAi<1u=V83TZ=s%AUk5!@h#PHpNCZDVryNxuWupBa)QDoi_yxAwViwD~FFbLAW^FfVQDP2=WyW z1C7-3`!U($v%v{b5GrxriE%y;fmUf^G`Gy;RL}rlp{x*D-`4=xd86!liu2nRiy?O7w_Nl}B-t`2i1Hil`e6 z1Azt&Uq~ABW#L&u>6=X~L20k_cO)3iNMfPM~ELkK4S70=vzp20RIEvQ{V*vE(-tz_6{(T7j3{GzNx7;c23Mu5GpC)hH!qf zpbqi3sRiC|)-*w4jHgMAqRBLcoaCgc^3%L%kh{~=#40+?n|Vb{)1Z^rrfG@rGxf2d zefO|oP#iVfFp{<(u;GVozhT3K-#%#*aQ*$uZ$eOSf8{qc0Jl7F3NId792~kQ1>l+o z3r`+$4k>)-EdjXpp{##A)Hp;Qh1p(BNgazTn}MhT77B3{?jTQTXaN%>leDZbIun%5 z!{k+(GO4L#l@SEMp=rSphJeS${;Y5qECI-Y=kU$jRCh9sP?E{}kZ-A=xv-KV%wqy;>UPr+7*(zCz#ZY`FGy}7Se@Dg)Gq+VhdswiR2-COQ@w=grxpUc zMRFm%QX52uecCIDL->s|72SAjP&uhgR?qo6UC z*xadAH(f9wJV>kdF|X3K71RfOMuFM}5-TL{4K+r;jbgNEw+C+c7MM5N)0$ zk>op-P|@xj7AS|4l;%X55iTrK{4|h2q_rMq(|>lX;<;6haqjlSETvm!mxfVj(^={X zI~~v=y~4Ug+Rc#VT zYPsCDI)jx}EXt%VMZd_B(3o5vq6TuRfrbpsMC7IqsfQfhn#>mqdD4Z2XkdO--Me6fKjjZR~EYMck&b2Qj! zFehXQC-)((cmlhz^ajzIn*XiWhPwiEMpZ{{IVtleiU>wW#7|Zwh9S7cZavo)YHFkz zAOjOM_==2+f;vWmFBpi&6O2(6Lzf(Zc zURUTM*>$u*SFTZNMe~a(r1t5`II#L$pKKK|8M(`IrVt6fr2<2sXcU&nYPUs7u~_cd zN4`L0#4PrX>ZAP?WT7vW_~@+yk9?>lXrIiQ_P^{Nea`QXHEVZ{;H@7Fx#8lzymPLq zrmm-NU}$7)Vrph?0a;pE+t}KP^XTt5u}^)x1c|PoTTzzQH!L{?r7@2-f2Zu|85o&L z?{|0^xB-R|%EV&$%lpg*vp8I3oW~asLQ>QYEtaSNT2)P|-Ux%qs=GZ!OIt@*Pv5}M z$k@cxthuHvEJ;pfB~u{hCO9oOrUDs8z!(%1yZpuKekI#45&lY_#I9dS^-FBO@g1I5A|`wZ!_H!9@>>i`RdJl~!48jkVSlVnOaPjW&6N4@vn;1G>G~ z*`Jb@DMZ+;oVBe^da-#kU5Uuf*Vf7=``k1r64 z#1g4YuBgCq-Gv6XQ!2GatJ52dCbPwAvpbxwSa<9aWdh4N-+cCULsnExCxE|vv~#~B zBpfGm%r#q<=~`NEjae30Vy%T1?GID9tOphZWinf=HoJCkbaHliT~;-Pwq3sqaR>!g zDJwUBcWVz%Z(lDTzdmW{YclknHow5{NugAd%2GwDN;Ro2)u+bPwd}41diLraJW}%? z3!WA>HEN}20Uszl^o}gU~pHEQ37N*jf^36H< zoFFH5WmK4=YOZF`?$nxIf6ft>kGf_`@%Frq39BvZ{8-n>;W6~6-(vhU;%G^wET;s* zC|M@GWno#(?ut6hxUj_R%w$W>GaoM>f4-W3brTj5)gUG=;a@2d4==l{C7JS{X^-@N zjrbn|99Carb6+Ho6?9fH(R9Opd?WT$Chz=86-H1DCrFBBSdJG&01@Vjc^q6?a{@_N zeb=ry7u?Z1VRc-u$Q%S2Vh<43sTvuy4bEO++)_u z;D7F2H83V7WW2~{hB6DQx(|v?sP7A1R(;#*&L+vK5CwFisNXl8{A)3t-6s>bw`1qG zh15M*F&(5RA+U)hLi=Iw(An5is4kksR;a(<=yE6CcH`2QRtT!smsc^AnQie$!u`Tq zI!OW1l)qc)Ywx5v5d?Z)`-a7F!~wf}AHzb4uwfbqb1AaIa5ApxjEtZ1=P-BjF7rXD zYiN5tfVHOv;Y<&N;Y|MShicKkLkrc-k;(G=n(;iyci$U!#rYu|bJZ)aq|Lz~*-G4^ zdQMN#Iek6YbEkWlQp!L9hLX`_bQDxH;Dhu|?cB;u5e_KvsQz3mEwTfP#b71IKmmr5 zQPGUq1=Rt*s`iyoYSm-si~8nz`~7lVOn=FGVa>yB_BCo=I8FN3AA6kQ0L}jDYW(K? zYql5do~LIoJJSjczZ^Y%3HmM2?l*Bg>kmR0PBI7h8cQRNF0L0DosJw@JvRTdPDWD` z)tb5a0qIg40#iZBDCkBG4yS?AF|5Paa)_C-eV8HFBRQkyTA8u^#R@L-bHf!~cLCc6 ztSsE(QLPDwB_qlLQ4$E7pir`r#dARgrlC790HMP^wjMg#znM|l^`f3Zin-=f^Vfy!l!a{HW{UBIljdZ?^4=I){X1Jwo9+BMm{0iKlBaR7cYDlt`o1!1 zQlpM{byD7r+(XgM>YnJ*r4krusqCZC)$VIu=X>5dNnCT#Hxk*`5)VlgNkF=f^ioJb z8ai&7p5e-OOJLzzMX^)RAVBUv2KJ#Dgdql93wng}Rqe0eK$g&J(w9UCU-M@LV|n`Mc+$a{YgHsd2n#3JoO*&I_e}ajmhkay zU{n9QSxsl{b_U3r`OaOs_|k2x^&D;HK3Kkln|EL~TC;=gG&Y33zrM;3hTG~B$wAe6 zU$Dp9p56GkgzEiJ)H%fkX}rGzdPS-6d$#B{DepLGYgRJooD~)7)R`|`1{*~X1|Jym z3)6J%bkSD7z!DSTY&7MdE^6ZhY3d{cyzs|37eq|j2-yVNjM#$OirL1tH(>{9CuLP4 z?O|-3Mk4FMEzdEld3tt}XNzWj6IivFO~?TyCoI-Nf=%p$kOO+o$>c=^8~Y&SfSz;m z0T09~jHY^J#$f&5LRB#;j^@pUoLF*}Awbbpz_*LZNH((09?`5yLq$ME%!615i5#aL zQuY)jVms>ETzGDZiu&r{&`yxrHc90m+k4iGO5QKZ^VW@oglGlgDz!yCN9Vmg(z+pt znW@l76CrOU(0t*IQ{yetDU+$D=&ZBP+4T8@bHknL%^?I&(bv&ARe;@WK_51eKR(gLcUO`Y0VPa8cb0L+ZGbMls6N@sN3#lBP zDF8&6Sd`gZNag6vsdQMR4v5-`1|X4c0-}i)1bcwc>^4z5y{G7503u8*%4{yAa&)Ew z5Mg3bW^*BxqcdFq5hfO8HWyMkdTmm8u@?|CE+Li%VkVJ+7UP(4^YH6Mb3J0-;kxyG z`tuJFOve@6pT79kinr}9W+4lbZtxakZQ`edDUV-PP&|NY-4 zV)wYmU*);F!Lz&s9;A6&)0oTu)a&hGl)38DpmM8!a^bRLu{-D|Vu$(t#Ggs&pI?5Q z{`wlo6v&whBQ!dL$wJv2E{_icLXkMh`qD}fjsN4vpDz>1`%5W)V}sL3npCZ*K`fh_ zoK+I%yv$BT=0G6AYI?g@NYn?k$WfvOTF5g`^1a*J76ISFaC-K3C`+xDedk>t@~HiP z5AfUgQ+bM`~iFH}Hc5R3!n0;pI~pBeS1RV0s9iTM;fWI8s*KYY~c( z-}haXUUqpoXl_PJ>qQ;1OQ#hYWv(|Csw(og&S=dg~j%zb_SroNSRl-riIt}LJ6?^NeyCUYkiMuLx ztmm~pI{SUK?nhM}LU3-&@~<0oVfAdKac;Kt}Mdcpv8D z*X~K#FWrCq(8C8q`P5e4)|gz3QtJP-tiU_oKna0C*CgO+h700;s@u%Iw( zI0A{nLCZK300e;{SWp-?9DzjPpmi>lXexyR2#T#y1b`6QMFI$_Q4}Z^2Ov=0MH3WT t`*=uVU%NwZ#AF>jEZ}dmOPP~|=V6f)jIe5b=p6X&nOR805Hkq?000Vy{IdW6 diff --git a/network-poc/target-native/doc/static.files/favicon-044be391.svg b/network-poc/target-native/doc/static.files/favicon-044be391.svg deleted file mode 100644 index 8b34b51..0000000 --- a/network-poc/target-native/doc/static.files/favicon-044be391.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - diff --git a/network-poc/target-native/doc/static.files/favicon-32x32-eab170b8.png b/network-poc/target-native/doc/static.files/favicon-32x32-eab170b8.png deleted file mode 100644 index 0670c4dabb0f844105d193c3c9dbf66b687fc709..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmV;j0!{siP)kdg00009a7bBm000DZ z000DZ0m8#+P5=M`WJyFpRCwB@)dP$zW)KD7Z)=-zZCj6VYTLGrpbF|nwS61aZXbf$ z=Ckd+cRNY`Omew8XLV-h&aZ*C*wYYP5oAcHeqdKOS>7m%U2JLaVvCKkyqoN*S8Rjp z)r?owBdKb42Xy<--|~Y_45l*CINjP{9Yd{VX*$pGsby{sF7v55Xns&v)MULpuKyD(DlrKYv@^v7xUv-8jp`UPh_jFG$b3xm>BNOaH!fS@9LRoAGTq1-|twmjch2{ua zA`f7H2+z-ib_rZ=X^ITcl2Z)6BN!#mK&Ch!B63a728hO=A!7tMJYoU$AU1{q!*0<&F@{BBR zT!(XCfJ0jTXPo6Tm3s-WlHcmBnaWvA6HA``*2Gi5IlfdZrJ!fYVv^;&$U(Mum`%09 zrVg{cAr@yj*EN(SnSb3XTA`x5^nz?Cty0){getNotDisplayedElem().appendChild(el.firstElementChild);}if(elemToDisplay===null){addClass(el,"hidden");showMain();return;}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden");const mainHeading=elemToDisplay.querySelector(".main-heading");if(mainHeading&&window.searchState.rustdocToolbar){if(window.searchState.rustdocToolbar.parentElement){window.searchState.rustdocToolbar.parentElement.removeChild(window.searchState.rustdocToolbar,);}mainHeading.appendChild(window.searchState.rustdocToolbar);}}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function";}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link);}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url,errorCallback){const script=document.createElement("script");script.src=url;if(errorCallback!==undefined){script.onerror=errorCallback;}document.head.append(script);}onEachLazy(document.querySelectorAll(".settings-menu"),settingsMenu=>{settingsMenu.querySelector("a").onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return;}window.hideAllModals(false);addClass(settingsMenu,"rotate");event.preventDefault();loadScript(getVar("static-root-path")+getVar("settings-js"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css");}}},0);};});window.searchState={rustdocToolbar:document.querySelector("rustdoc-toolbar"),loadingText:"Loading search results...",inputElement:()=>{let el=document.getElementsByClassName("search-input")[0];if(!el){const out=nonnull(nonnull(window.searchState.outputElement()).parentElement);const hdr=document.createElement("div");hdr.className="main-heading search-results-main-heading";const params=window.searchState.getQueryStringParams();const autofocusParam=params.search===""?"autofocus":"";hdr.innerHTML=`

`;out.insertBefore(hdr,window.searchState.outputElement());el=document.getElementsByClassName("search-input")[0];}if(el instanceof HTMLInputElement){return el;}return null;},containerElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el);}return el;},outputElement:()=>{const container=window.searchState.containerElement();if(!container){return null;}let el=container.querySelector(".search-out");if(!el){el=document.createElement("div");el.className="search-out";container.appendChild(el);}return el;},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(window.searchState.timeout!==null){clearTimeout(window.searchState.timeout);window.searchState.timeout=null;}},isDisplayed:()=>{const container=window.searchState.containerElement();if(!container){return false;}return!!container.parentElement&&container.parentElement.id===ALTERNATIVE_DISPLAY_ID;},focus:()=>{const inputElement=window.searchState.inputElement();window.searchState.showResults();if(inputElement){inputElement.focus();requestAnimationFrame(()=>inputElement.focus());}},defocus:()=>{nonnull(window.searchState.inputElement()).blur();},toggle:()=>{if(window.searchState.isDisplayed()){window.searchState.defocus();window.searchState.hideResults();}else{window.searchState.focus();}},showResults:()=>{document.title=window.searchState.title;if(window.searchState.isDisplayed()){return;}const search=window.searchState.containerElement();switchDisplayedElement(search);const btn=document.querySelector("#search-button a");if(browserSupportsHistoryApi()&&btn instanceof HTMLAnchorElement&&window.searchState.getQueryStringParams().search===undefined){history.pushState(null,"",btn.href);}const btnLabel=document.querySelector("#search-button a span.label");if(btnLabel){btnLabel.innerHTML="Exit";}},removeQueryParameters:()=>{document.title=window.searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash);}},hideResults:()=>{switchDisplayedElement(null);window.searchState.removeQueryParameters();const btnLabel=document.querySelector("#search-button a span.label");if(btnLabel){btnLabel.innerHTML="Search";}},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=").map(x=>x.replace(/\+/g," "));params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1]);});return params;},setup:()=>{let searchLoaded=false;const search_input=window.searchState.inputElement();if(!search_input){return;}function sendSearchForm(){document.getElementsByClassName("search-form")[0].submit();}function loadSearch(){if(!searchLoaded){searchLoaded=true;window.rr_=data=>{window.searchIndex=data;};if(!window.StringdexOnload){window.StringdexOnload=[];}window.StringdexOnload.push(()=>{loadScript(getVar("static-root-path")+getVar("search-js"),sendSearchForm,);});loadScript(getVar("static-root-path")+getVar("stringdex-js"),sendSearchForm);loadScript(resourcePath("search.index/root",".js"),sendSearchForm);}}search_input.addEventListener("focus",()=>{loadSearch();});const btn=document.getElementById("search-button");if(btn){btn.onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return;}event.preventDefault();window.searchState.toggle();loadSearch();};}if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=window.searchState.getQueryStringParams();document.title=previousTitle;const inputElement=window.searchState.inputElement();if(params.search!==undefined&&inputElement!==null){loadSearch();inputElement.value=params.search;e.preventDefault();window.searchState.showResults();if(params.search===""){window.searchState.focus();}}else{window.searchState.hideResults();}});}window.onpageshow=()=>{const inputElement=window.searchState.inputElement();const qSearch=window.searchState.getQueryStringParams().search;if(qSearch!==undefined&&inputElement!==null){if(inputElement.value===""){inputElement.value=qSearch;}window.searchState.showResults();if(qSearch===""){loadSearch();window.searchState.focus();}}else{window.searchState.hideResults();}};const params=window.searchState.getQueryStringParams();if(params.search!==undefined){window.searchState.setLoadingSearch();loadSearch();}},setLoadingSearch:()=>{const search=window.searchState.outputElement();nonnull(search).innerHTML="

"+window.searchState.loadingText+"

";window.searchState.showResults();},descShards:new Map(),loadDesc:async function({descShard,descIndex}){if(descShard.promise===null){descShard.promise=new Promise((resolve,reject)=>{descShard.resolve=resolve;const ds=descShard;const fname=`${ds.crate}-desc-${ds.shard}-`;const url=resourcePath(`search.desc/${descShard.crate}/${fname}`,".js",);loadScript(url,reject);});}const list=await descShard.promise;return list[descIndex];},loadedDescShard:function(crate,shard,data){this.descShards.get(crate)[shard].resolve(data.split("\n"));},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&window.searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash);}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView();}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId);}}if(savedHash.startsWith("impl-")){const splitAt=savedHash.indexOf("/");if(splitAt!==-1){const implId=savedHash.slice(0,splitAt);const assocId=savedHash.slice(splitAt+1);const implElems=document.querySelectorAll(`details > summary > section[id^="${implId}"]`,);onEachLazy(implElems,implElem=>{const numbered=/^(.+?)-([0-9]+)$/.exec(implElem.id);if(implElem.id!==implId&&(!numbered||numbered[1]!==implId)){return false;}return onEachLazy(implElem.parentElement.parentElement.querySelectorAll(`[id^="${assocId}"]`),item=>{const numbered=/^(.+?)-([0-9]+)$/.exec(item.id);if(item.id===assocId||(numbered&&numbered[1]===assocId)){openParentDetails(item);item.scrollIntoView();setTimeout(()=>{window.location.replace("#"+item.id);},0);return true;}},);});}}}function onHashChange(ev){hideSidebar();handleHashes(ev);}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true;}elem=elem.parentElement;}}function expandSection(id){openParentDetails(document.getElementById(id));}function handleEscape(ev){window.searchState.clearInputTimeout();window.searchState.hideResults();ev.preventDefault();window.searchState.defocus();window.hideAllModals(true);}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return;}if(document.activeElement&&document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":case"/":ev.preventDefault();window.searchState.focus();break;case"+":case"=":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs(false);break;case"_":ev.preventDefault();collapseAllDocs(true);break;case"?":showHelp();break;default:break;}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return;}const sidebar=document.getElementById("rustdoc-modnav");function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return;}const modpath=hasClass(document.querySelector(".rustdoc"),"mod")?"../":"";const h3=document.createElement("h3");h3.innerHTML=`
${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=`${modpath}${name}/index.html`;}else{path=`${modpath}${shortty}.${name}.html`;}let current_page=document.location.href.toString();if(current_page.endsWith("/")){current_page+="index.html";}const link=document.createElement("a");link.href=path;link.textContent=name;const li=document.createElement("li");if(link.href===current_page){li.classList.add("current");}li.appendChild(link);ul.appendChild(li);}sidebar.appendChild(h3);sidebar.appendChild(ul);}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Aliases");block("union","unions","Unions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("attribute","attributes","Attributes");block("attr","attributes","Attribute Macros");block("derive","derives","Derive Macros");block("traitalias","trait-aliases","Trait Aliases");}}window.register_implementors=imp=>{function implementorsElems(id){const elem=document.getElementById(id);return[elem,elem?elem.querySelector(".negative-marker"):null];}const implementors=implementorsElems("implementors-list");const syntheticImplementors=implementorsElems("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const IS_NEG_IDX=1;const SYNTHETIC_IDX=2;const TYPES_IDX=3;if(syntheticImplementors[0]){onEachLazy(syntheticImplementors[0].getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return;}aliases.split(",").forEach(alias=>{inlined_types.add(alias);});});}let currentNbImpls=implementors[0].getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=new Set((script?script.getAttribute("data-ignore-extern-crates"):"").split(","),);for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.has(lib)){continue;}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?syntheticImplementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop;}inlined_types.add(struct_type);}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href);}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);if(struct[IS_NEG_IDX]){list[1].before(display);}else{list[0].appendChild(display);}currentNbImpls+=1;}}if(implementors[0]){implementors[0].classList.add("loaded");}if(syntheticImplementors[0]){syntheticImplementors[0].classList.add("loaded");}};if(window.pending_implementors){window.register_implementors(window.pending_implementors);}window.register_type_impls=imp=>{if(!imp||!imp[window.currentCrate]){return;}window.pending_type_impls=undefined;const idMap=new Map();let implementations=document.getElementById("implementations-list");let trait_implementations=document.getElementById("trait-implementations-list");let trait_implementations_header=document.getElementById("trait-implementations");const script=document.querySelector("script[data-self-path]");const selfPath=script?script.getAttribute("data-self-path"):null;const mainContent=document.querySelector("#main-content");const sidebarSection=document.querySelector(".sidebar section");let methods=document.querySelector(".sidebar .block.method");let associatedTypes=document.querySelector(".sidebar .block.associatedtype");let associatedConstants=document.querySelector(".sidebar .block.associatedconstant");let sidebarTraitList=document.querySelector(".sidebar .block.trait-implementation");for(const impList of imp[window.currentCrate]){const types=impList.slice(2);const text=impList[0];const isTrait=impList[1]!==0;const traitName=impList[1];if(types.indexOf(selfPath)===-1){continue;}let outputList=isTrait?trait_implementations:implementations;if(outputList===null){const outputListName=isTrait?"Trait Implementations":"Implementations";const outputListId=isTrait?"trait-implementations-list":"implementations-list";const outputListHeaderId=isTrait?"trait-implementations":"implementations";const outputListHeader=document.createElement("h2");outputListHeader.id=outputListHeaderId;outputListHeader.innerText=outputListName;outputList=document.createElement("div");outputList.id=outputListId;if(isTrait){const link=document.createElement("a");link.href=`#${outputListHeaderId}`;link.innerText="Trait Implementations";const h=document.createElement("h3");h.appendChild(link);trait_implementations=outputList;trait_implementations_header=outputListHeader;sidebarSection.appendChild(h);sidebarTraitList=document.createElement("ul");sidebarTraitList.className="block trait-implementation";sidebarSection.appendChild(sidebarTraitList);mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList);}else{implementations=outputList;if(trait_implementations){mainContent.insertBefore(outputListHeader,trait_implementations_header);mainContent.insertBefore(outputList,trait_implementations_header);}else{const mainContent=document.querySelector("#main-content");mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList);}}}const template=document.createElement("template");template.innerHTML=text;onEachLazy(template.content.querySelectorAll("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href);}});onEachLazy(template.content.querySelectorAll("[id]"),el=>{let i=0;if(idMap.has(el.id)){i=idMap.get(el.id);}else if(document.getElementById(el.id)){i=1;while(document.getElementById(`${el.id}-${2 * i}`)){i=2*i;}while(document.getElementById(`${el.id}-${i}`)){i+=1;}}if(i!==0){const oldHref=`#${el.id}`;const newHref=`#${el.id}-${i}`;el.id=`${el.id}-${i}`;onEachLazy(template.content.querySelectorAll("a[href]"),link=>{if(link.getAttribute("href")===oldHref){link.href=newHref;}});}idMap.set(el.id,i+1);});const templateAssocItems=template.content.querySelectorAll("section.tymethod, "+"section.method, section.associatedtype, section.associatedconstant");if(isTrait){const li=document.createElement("li");const a=document.createElement("a");a.href=`#${template.content.querySelector(".impl").id}`;a.textContent=traitName;li.appendChild(a);sidebarTraitList.append(li);}else{onEachLazy(templateAssocItems,item=>{let block=hasClass(item,"associatedtype")?associatedTypes:(hasClass(item,"associatedconstant")?associatedConstants:(methods));if(!block){const blockTitle=hasClass(item,"associatedtype")?"Associated Types":(hasClass(item,"associatedconstant")?"Associated Constants":("Methods"));const blockClass=hasClass(item,"associatedtype")?"associatedtype":(hasClass(item,"associatedconstant")?"associatedconstant":("method"));const blockHeader=document.createElement("h3");const blockLink=document.createElement("a");blockLink.href="#implementations";blockLink.innerText=blockTitle;blockHeader.appendChild(blockLink);block=document.createElement("ul");block.className=`block ${blockClass}`;const insertionReference=methods||sidebarTraitList;if(insertionReference){const insertionReferenceH=insertionReference.previousElementSibling;sidebarSection.insertBefore(blockHeader,insertionReferenceH);sidebarSection.insertBefore(block,insertionReferenceH);}else{sidebarSection.appendChild(blockHeader);sidebarSection.appendChild(block);}if(hasClass(item,"associatedtype")){associatedTypes=block;}else if(hasClass(item,"associatedconstant")){associatedConstants=block;}else{methods=block;}}const li=document.createElement("li");const a=document.createElement("a");a.innerText=item.id.split("-")[0].split(".")[1];a.href=`#${item.id}`;li.appendChild(a);block.appendChild(li);});}outputList.appendChild(template.content);}for(const list of[methods,associatedTypes,associatedConstants,sidebarTraitList]){if(!list){continue;}const newChildren=Array.prototype.slice.call(list.children);newChildren.sort((a,b)=>{const aI=a.innerText;const bI=b.innerText;return aIbI?1:0;});list.replaceChildren(...newChildren);}};if(window.pending_type_impls){window.register_type_impls(window.pending_type_impls);}function addSidebarCrates(){if(!window.ALL_CRATES){return;}const sidebarElems=document.getElementById("rustdoc-modnav");if(!sidebarElems){return;}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";link.textContent=crate;const li=document.createElement("li");if(window.rootPath!=="./"&&crate===window.currentCrate){li.className="current";}li.appendChild(link);ul.appendChild(li);}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul);}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true;}});innerToggle.children[0].innerText="Summary";}function collapseAllDocs(collapseImpls){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if((collapseImpls||e.parentNode.id!=="implementations-list")||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false;}});innerToggle.children[0].innerText="Show all";}function toggleAllDocs(ev){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return;}if(hasClass(innerToggle,"will-expand")){expandAllDocs();}else{collapseAllDocs(ev!==undefined&&ev.shiftKey);}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs;}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open;});}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false);}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true;}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false;}});}());window.rustdoc_add_line_numbers_to_examples=()=>{function generateLine(nb){return`${nb}`;}onEachLazy(document.querySelectorAll(".rustdoc:not(.src) :not(.scraped-example) > .example-wrap > pre > code",),code=>{if(hasClass(code.parentElement.parentElement,"hide-lines")){removeClass(code.parentElement.parentElement,"hide-lines");return;}const lines=code.innerHTML.split("\n");const digits=(lines.length+"").length;code.innerHTML=lines.map((line,index)=>generateLine(index+1)+line).join("\n");addClass(code.parentElement.parentElement,`digits-${digits}`);});};window.rustdoc_remove_line_numbers_from_examples=()=>{onEachLazy(document.querySelectorAll(".rustdoc:not(.src) :not(.scraped-example) > .example-wrap"),x=>addClass(x,"hide-lines"),);};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples();}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown");}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown");}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true;}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar);}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar();});});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(!e.target.matches("summary, a, a *")){e.preventDefault();}});});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText);}else{throw new Error("showTooltip() called with notable without any notable traits!");}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);return;}window.hideAllModals(false);const wrapper=Object.assign(document.createElement("div"),{TOOLTIP_BASE:e});if(notable_ty){wrapper.innerHTML="
"+window.NOTABLE_TRAITS[notable_ty]+"
";}else{const ttl=e.getAttribute("title");if(ttl!==null){e.setAttribute("data-title",ttl);e.removeAttribute("title");}const dttl=e.getAttribute("data-title");if(dttl!==null){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(dttl));wrapper.appendChild(titleContent);}}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";document.body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px";}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px",);}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);wrapper.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return;}clearTooltipHoverTimeout(e);};wrapper.onpointerleave=ev=>{if(ev.pointerType!=="mouse"||!(ev.relatedTarget instanceof HTMLElement)){return;}if(!e.TOOLTIP_FORCE_VISIBLE&&!e.contains(ev.relatedTarget)){setTooltipHoverTimeout(e,false);addClass(wrapper,"fade-out");}};}function setTooltipHoverTimeout(element,show){clearTooltipHoverTimeout(element);if(!show&&!window.CURRENT_TOOLTIP_ELEMENT){return;}if(show&&window.CURRENT_TOOLTIP_ELEMENT){return;}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE!==element){return;}element.TOOLTIP_HOVER_TIMEOUT=setTimeout(()=>{if(show){showTooltip(element);}else if(!element.TOOLTIP_FORCE_VISIBLE){hideTooltip(false);}},show?window.RUSTDOC_TOOLTIP_HOVER_MS:window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS);}function clearTooltipHoverTimeout(element){if(element.TOOLTIP_HOVER_TIMEOUT!==undefined){removeClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");clearTimeout(element.TOOLTIP_HOVER_TIMEOUT);delete element.TOOLTIP_HOVER_TIMEOUT;}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!window.CURRENT_TOOLTIP_ELEMENT.contains(document.activeElement)&&!window.CURRENT_TOOLTIP_ELEMENT.contains(event.relatedTarget)&&!window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.contains(document.activeElement)&&!window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.contains(event.relatedTarget)){setTimeout(()=>hideTooltip(false),0);}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus();}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false;}document.body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=undefined;}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=()=>{e.TOOLTIP_FORCE_VISIBLE=e.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!e.TOOLTIP_FORCE_VISIBLE){hideTooltip(true);}else{showTooltip(e);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler;}return false;};e.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return;}setTooltipHoverTimeout(e,true);};e.onpointermove=ev=>{if(ev.pointerType!=="mouse"){return;}setTooltipHoverTimeout(e,true);};e.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return;}if(!e.TOOLTIP_FORCE_VISIBLE&&window.CURRENT_TOOLTIP_ELEMENT&&!window.CURRENT_TOOLTIP_ELEMENT.contains(ev.relatedTarget)){setTooltipHoverTimeout(e,false);addClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");}};});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar();}else{hideSidebar();}});}function helpBlurHandler(event){const isInPopover=onEachLazy(document.querySelectorAll(".settings-menu, .help-menu"),menu=>{return menu.contains(document.activeElement)||menu.contains(event.relatedTarget);},);if(!isInPopover){window.hidePopoverMenus();}}function buildHelpMenu(){const book_info=document.createElement("span");const drloChannel=`https://doc.rust-lang.org/${getVar("channel")}`;book_info.className="top";book_info.innerHTML=`You can find more information in \ -the rustdoc book.`;const shortcuts=[["?","Show this help dialog"],["S / /","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+ / =","Expand all sections"],["-","Collapse all sections"],["_","Collapse all sections, including impl blocks"],].map(x=>"
"+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
"+x[1]+"
").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

Keyboard Shortcuts

"+shortcuts+"
";const infos=[`For a full list of all search features, take a look \ - here.`,"Prefix searches with a type followed by a colon (e.g., fn:) to \ - restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ - enum, trait, type, macro, \ - and constant.","Search functions by type signature (e.g., vec -> usize or \ - -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \ - your request: \"string\"",`Look for functions that accept or return \ - slices and \ - arrays by writing square \ - brackets (e.g., -> [u8] or [] -> Option)`,"Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

"+x+"

").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);const container=document.createElement("div");if(!isHelpPage){container.className="popover content";}container.id="help";const side_by_side=document.createElement("div");side_by_side.className="side-by-side";side_by_side.appendChild(div_shortcuts);side_by_side.appendChild(div_infos);container.appendChild(book_info);container.appendChild(side_by_side);container.appendChild(rustdoc_version);if(isHelpPage){const help_section=document.createElement("section");help_section.appendChild(container);nonnull(document.getElementById("main-content")).appendChild(help_section);}else{onEachLazy(document.getElementsByClassName("help-menu"),menu=>{if(menu.offsetWidth!==0){menu.appendChild(container);container.onblur=helpBlurHandler;menu.onblur=helpBlurHandler;menu.children[0].onblur=helpBlurHandler;return true;}});}return container;}window.hideAllModals=switchFocus=>{hideSidebar();window.hidePopoverMenus();hideTooltip(switchFocus);};window.hidePopoverMenus=()=>{onEachLazy(document.querySelectorAll(".settings-menu .popover"),elem=>{elem.style.display="none";});onEachLazy(document.querySelectorAll(".help-menu .popover"),elem=>{elem.parentElement.removeChild(elem);});};function showHelp(){window.hideAllModals(false);onEachLazy(document.querySelectorAll(".help-menu a"),menu=>{if(menu.offsetWidth!==0){menu.focus();return true;}});buildHelpMenu();}if(isHelpPage){buildHelpMenu();}else{onEachLazy(document.querySelectorAll(".help-menu > a"),helpLink=>{helpLink.addEventListener("click",event=>{if(event.ctrlKey||event.altKey||event.metaKey){return;}event.preventDefault();if(document.getElementById("help")){window.hidePopoverMenus();}else{showHelp();}},);});}addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);window.searchState.setup();}());(function(){const SIDEBAR_MIN=100;const SIDEBAR_MAX=500;const RUSTDOC_MOBILE_BREAKPOINT=700;const BODY_MIN=400;const SIDEBAR_VANISH_THRESHOLD=SIDEBAR_MIN/2;let sidebarButton=document.getElementById("sidebar-button");const body=document.querySelector(".main-heading");if(!sidebarButton&&body){sidebarButton=document.createElement("div");sidebarButton.id="sidebar-button";const path=`${window.rootPath}${window.currentCrate}/all.html`;sidebarButton.innerHTML=``;body.insertBefore(sidebarButton,body.firstChild);}if(sidebarButton){sidebarButton.addEventListener("click",e=>{removeClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","false");if(window.rustdocToggleSrcSidebar){window.rustdocToggleSrcSidebar();}e.preventDefault();});}let currentPointerId=null;let desiredSidebarSize=null;let pendingSidebarResizingFrame=false;const resizer=document.querySelector(".sidebar-resizer");const sidebar=document.querySelector(".sidebar");if(!resizer||!sidebar){return;}const isSrcPage=hasClass(document.body,"src");const hideSidebar=function(){if(isSrcPage){window.rustdocCloseSourceSidebar();updateLocalStorage("src-sidebar-width",null);document.documentElement.style.removeProperty("--src-sidebar-width");sidebar.style.removeProperty("--src-sidebar-width");resizer.style.removeProperty("--src-sidebar-width");}else{addClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","true");updateLocalStorage("desktop-sidebar-width",null);document.documentElement.style.removeProperty("--desktop-sidebar-width");sidebar.style.removeProperty("--desktop-sidebar-width");resizer.style.removeProperty("--desktop-sidebar-width");}};const showSidebar=function(){if(isSrcPage){window.rustdocShowSourceSidebar();}else{removeClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","false");}};const changeSidebarSize=function(size){if(isSrcPage){updateLocalStorage("src-sidebar-width",size.toString());sidebar.style.setProperty("--src-sidebar-width",size+"px");resizer.style.setProperty("--src-sidebar-width",size+"px");}else{updateLocalStorage("desktop-sidebar-width",size.toString());sidebar.style.setProperty("--desktop-sidebar-width",size+"px");resizer.style.setProperty("--desktop-sidebar-width",size+"px");}};const isSidebarHidden=function(){return isSrcPage?!hasClass(document.documentElement,"src-sidebar-expanded"):hasClass(document.documentElement,"hide-sidebar");};const resize=function(e){if(currentPointerId===null||currentPointerId!==e.pointerId){return;}e.preventDefault();const pos=e.clientX-3;if(pos=SIDEBAR_MIN){if(isSidebarHidden()){showSidebar();}const constrainedPos=Math.min(pos,window.innerWidth-BODY_MIN,SIDEBAR_MAX);changeSidebarSize(constrainedPos);desiredSidebarSize=constrainedPos;if(pendingSidebarResizingFrame!==false){clearTimeout(pendingSidebarResizingFrame);}pendingSidebarResizingFrame=setTimeout(()=>{if(currentPointerId===null||pendingSidebarResizingFrame===false){return;}pendingSidebarResizingFrame=false;document.documentElement.style.setProperty("--resizing-sidebar-width",desiredSidebarSize+"px",);},100);}};window.addEventListener("resize",()=>{if(window.innerWidth=(window.innerWidth-BODY_MIN)){changeSidebarSize(window.innerWidth-BODY_MIN);}else if(desiredSidebarSize!==null&&desiredSidebarSize>SIDEBAR_MIN){changeSidebarSize(desiredSidebarSize);}});const stopResize=function(e){if(currentPointerId===null){return;}if(e){e.preventDefault();}desiredSidebarSize=sidebar.getBoundingClientRect().width;removeClass(resizer,"active");window.removeEventListener("pointermove",resize,false);window.removeEventListener("pointerup",stopResize,false);removeClass(document.documentElement,"sidebar-resizing");document.documentElement.style.removeProperty("--resizing-sidebar-width");if(resizer.releasePointerCapture){resizer.releasePointerCapture(currentPointerId);currentPointerId=null;}};const initResize=function(e){if(currentPointerId!==null||e.altKey||e.ctrlKey||e.metaKey||e.button!==0){return;}if(resizer.setPointerCapture){resizer.setPointerCapture(e.pointerId);if(!resizer.hasPointerCapture(e.pointerId)){resizer.releasePointerCapture(e.pointerId);return;}currentPointerId=e.pointerId;}window.hideAllModals(false);e.preventDefault();window.addEventListener("pointermove",resize,false);window.addEventListener("pointercancel",stopResize,false);window.addEventListener("pointerup",stopResize,false);addClass(resizer,"active");addClass(document.documentElement,"sidebar-resizing");const pos=e.clientX-sidebar.offsetLeft-3;document.documentElement.style.setProperty("--resizing-sidebar-width",pos+"px");desiredSidebarSize=null;};resizer.addEventListener("pointerdown",initResize,false);}());(function(){function copyContentToClipboard(content){if(content===null){return;}const el=document.createElement("textarea");el.value=content;el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el);}function copyButtonAnimation(button){button.classList.add("clicked");if(button.reset_button_timeout!==undefined){clearTimeout(button.reset_button_timeout);}button.reset_button_timeout=setTimeout(()=>{button.reset_button_timeout=undefined;button.classList.remove("clicked");},1000);}const but=document.getElementById("copy-path");if(!but){return;}but.onclick=()=>{const titleElement=document.querySelector("title");const title=titleElement&&titleElement.textContent?titleElement.textContent.replace(" - Rust",""):"";const[item,module]=title.split(" in ");const path=[item];if(module!==undefined){path.unshift(module);}copyContentToClipboard(path.join("::"));copyButtonAnimation(but);};function copyCode(codeElem){if(!codeElem){return;}let content="";for(const node of codeElem.childNodes){if(node instanceof HTMLElement&&node.hasAttribute("data-nosnippet")){continue;}content+=node.textContent;}copyContentToClipboard(content);}function getExampleWrap(event){const target=event.target;if(target instanceof HTMLElement){let elem=target;while(elem!==null&&!hasClass(elem,"example-wrap")){if(elem===document.body||elem.tagName==="A"||elem.tagName==="BUTTON"||hasClass(elem,"docblock")){return null;}elem=elem.parentElement;}return elem;}else{return null;}}function addCopyButton(event){const elem=getExampleWrap(event);if(elem===null){return;}elem.removeEventListener("mouseover",addCopyButton);const parent=document.createElement("div");parent.className="button-holder";const runButton=elem.querySelector(".test-arrow");if(runButton!==null){parent.appendChild(runButton);}elem.appendChild(parent);const copyButton=document.createElement("button");copyButton.className="copy-button";copyButton.title="Copy code to clipboard";copyButton.addEventListener("click",()=>{copyCode(elem.querySelector("pre > code"));copyButtonAnimation(copyButton);});parent.appendChild(copyButton);if(!elem.parentElement||!elem.parentElement.classList.contains("scraped-example")||!window.updateScrapedExample){return;}const scrapedWrapped=elem.parentElement;window.updateScrapedExample(scrapedWrapped,parent);}function showHideCodeExampleButtons(event){const elem=getExampleWrap(event);if(elem===null){return;}let buttons=elem.querySelector(".button-holder");if(buttons===null){addCopyButton(event);buttons=elem.querySelector(".button-holder");if(buttons===null){return;}}buttons.classList.toggle("keep-visible");}onEachLazy(document.querySelectorAll(".docblock .example-wrap"),elem=>{elem.addEventListener("mouseover",addCopyButton);elem.addEventListener("click",showHideCodeExampleButtons);});}());(function(){document.body.addEventListener("copy",event=>{let target=nonnull(event.target);let isInsideCode=false;while(target&&target!==document.body){if(target.tagName==="CODE"){isInsideCode=true;break;}target=target.parentElement;}if(!isInsideCode){return;}const selection=nonnull(document.getSelection());const text=Array.from({length:selection.rangeCount},(_,i)=>{const fragment=selection.getRangeAt(i).cloneContents();fragment.querySelectorAll("[data-nosnippet]").forEach(el=>el.remove());return fragment.textContent;}).join("");nonnull(event.clipboardData).setData("text/plain",text);event.preventDefault();});}()); \ No newline at end of file diff --git a/network-poc/target-native/doc/static.files/normalize-9960930a.css b/network-poc/target-native/doc/static.files/normalize-9960930a.css deleted file mode 100644 index 469959f..0000000 --- a/network-poc/target-native/doc/static.files/normalize-9960930a.css +++ /dev/null @@ -1,2 +0,0 @@ - /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ -html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type="button"],[type="reset"],[type="submit"],button{-webkit-appearance:button}[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none} \ No newline at end of file diff --git a/network-poc/target-native/doc/static.files/noscript-ffcac47a.css b/network-poc/target-native/doc/static.files/noscript-ffcac47a.css deleted file mode 100644 index 9eba706..0000000 --- a/network-poc/target-native/doc/static.files/noscript-ffcac47a.css +++ /dev/null @@ -1 +0,0 @@ - #main-content .attributes{margin-left:0 !important;}#copy-path,#sidebar-button,.sidebar-resizer{display:none !important;}nav.sub{display:none;}.src .sidebar{display:none;}.notable-traits{display:none;}#synthetic-implementors-list:not(.loaded),#implementors-list:not(.loaded){display:block;}:root,:root:not([data-theme]){--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--sidebar-border-color:#ddd;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--mobile-sidebar-menu-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#595959;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--attribute-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);--sidebar-resizer-hover:hsl(207,90%,66%);--sidebar-resizer-active:hsl(207,90%,54%);}@media (prefers-color-scheme:dark){:root,:root:not([data-theme]){--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--sidebar-border-color:#2A2A2A;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#a5a5a5;--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--attribute-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(65%);--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);--sidebar-resizer-hover:hsl(207,30%,54%);--sidebar-resizer-active:hsl(207,90%,54%);}} \ No newline at end of file diff --git a/network-poc/target-native/doc/static.files/rust-logo-9a9549ea.svg b/network-poc/target-native/doc/static.files/rust-logo-9a9549ea.svg deleted file mode 100644 index 62424d8..0000000 --- a/network-poc/target-native/doc/static.files/rust-logo-9a9549ea.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - diff --git a/network-poc/target-native/doc/static.files/rustdoc-77263533.css b/network-poc/target-native/doc/static.files/rustdoc-77263533.css deleted file mode 100644 index 5fe9ed4..0000000 --- a/network-poc/target-native/doc/static.files/rustdoc-77263533.css +++ /dev/null @@ -1,86 +0,0 @@ - :root{--nav-sub-mobile-padding:8px;--search-typename-width:6.75rem;--desktop-sidebar-width:200px;--src-sidebar-width:300px;--desktop-sidebar-z-index:100;--sidebar-elems-left-padding:24px;--clipboard-image:url('data:image/svg+xml,\ -\ -\ -');--copy-path-height:34px;--copy-path-width:33px;--checkmark-image:url('data:image/svg+xml,\ -\ -');--button-left-margin:4px;--button-border-radius:2px;--toolbar-button-border-radius:6px;--code-block-border-radius:6px;--impl-items-indent:0.3em;--docblock-indent:24px;--font-family:"Source Serif 4",NanumBarunGothic,serif;--font-family-code:"Source Code Pro",monospace;--line-number-padding:4px;--line-number-right-margin:20px;--prev-arrow-image:url('data:image/svg+xml,');--next-arrow-image:url('data:image/svg+xml,');--expand-arrow-image:url('data:image/svg+xml,');--collapse-arrow-image:url('data:image/svg+xml,');--hamburger-image:url('data:image/svg+xml,\ - ');}:root.sans-serif{--font-family:"Fira Sans",sans-serif;--font-family-code:"Fira Mono",monospace;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-0fe48ade.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:italic;font-weight:400;src:local('Fira Sans Italic'),url("FiraSans-Italic-81dc35de.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-e1aa3f0a.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:italic;font-weight:500;src:local('Fira Sans Medium Italic'),url("FiraSans-MediumItalic-ccf7e434.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Mono';font-style:normal;font-weight:400;src:local('Fira Mono'),url("FiraMono-Regular-87c26294.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Mono';font-style:normal;font-weight:500;src:local('Fira Mono Medium'),url("FiraMono-Medium-86f75c8c.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-6b053e98.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It-ca3b17ed.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:500;src:local('Source Serif 4 Semibold'),url("SourceSerif4-Semibold-457a13ac.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold-6d4fd4c0.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-8badfe75.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-fc8b9304.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-aa29a496.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-13b3dcba.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 var(--font-family);margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;grid-area:main-heading-h1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{position:relative;display:grid;grid-template-areas:"main-heading-breadcrumbs main-heading-breadcrumbs" "main-heading-h1 main-heading-toolbar" "main-heading-sub-heading main-heading-toolbar";grid-template-columns:minmax(105px,1fr) minmax(0,max-content);grid-template-rows:minmax(25px,min-content) min-content min-content;padding-bottom:6px;margin-bottom:15px;}.search-results-main-heading{grid-template-areas:"main-heading-breadcrumbs main-heading-placeholder" "main-heading-breadcrumbs main-heading-toolbar " "main-heading-h1 main-heading-toolbar ";}.search-results-main-heading nav.sub{grid-area:main-heading-h1;align-items:end;margin:4px 0 8px 0;}.rustdoc-breadcrumbs{grid-area:main-heading-breadcrumbs;line-height:1.25;padding-top:5px;position:relative;z-index:1;}.search-switcher{grid-area:main-heading-breadcrumbs;line-height:1.5;display:flex;color:var(--main-color);align-items:baseline;white-space:nowrap;padding-top:8px;min-height:34px;}.rustdoc-breadcrumbs a{padding:5px 0 7px;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}.structfield,.sub-variant-field{margin:0.6em 0;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,rustdoc-topbar,.search-input,.search-results .result-name,.item-table dt>a,.out-of-band,.sub-heading,span.since,a.src,rustdoc-toolbar,summary.hideme,.scraped-example-list,.rustdoc-breadcrumbs,.search-switcher,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.section-header a,#src-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,rustdoc-topbar h2 a,h1 a,.search-results a,.search-results li,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}span.attribute,a.attribute{color:var(--attribute-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p,.docblock>.warning{margin:0 0 .75em 0;}p:last-child,.docblock>.warning:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.src main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,.code-header,.type-signature{font-family:var(--font-family-code);}.docblock code,.item-table dd code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.item-table dd pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.src .content pre{padding:20px;padding-left:16px;}img{max-width:100%;}.logo-container{line-height:0;display:block;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 var(--desktop-sidebar-width);width:var(--desktop-sidebar-width);overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;z-index:var(--desktop-sidebar-z-index);border-right:solid 1px var(--sidebar-border-color);}.rustdoc.src .sidebar{flex-basis:50px;width:50px;overflow-x:hidden;overflow-y:hidden;}.hide-sidebar .sidebar,.hide-sidebar .sidebar-resizer{display:none;}.sidebar-resizer{touch-action:none;width:9px;cursor:ew-resize;z-index:calc(var(--desktop-sidebar-z-index) + 1);position:fixed;height:100%;left:var(--desktop-sidebar-width);display:flex;align-items:center;justify-content:flex-start;color:var(--right-side-color);}.sidebar-resizer::before{content:"";border-right:dotted 2px currentColor;width:2px;height:12px;}.sidebar-resizer::after{content:"";border-right:dotted 2px currentColor;width:2px;height:16px;}.rustdoc.src .sidebar-resizer{left:49px;}.src-sidebar-expanded .src .sidebar-resizer{left:var(--src-sidebar-width);}.sidebar-resizing{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;}.sidebar-resizing *{cursor:ew-resize !important;}.sidebar-resizing .sidebar{position:fixed;border-right:solid 2px var(--sidebar-resizer-active);}.sidebar-resizing>body{padding-left:var(--resizing-sidebar-width);}.sidebar-resizer:hover,.sidebar-resizer:active,.sidebar-resizer:focus,.sidebar-resizer.active{width:10px;margin:0;left:calc(var(--desktop-sidebar-width) - 1px);border-left:solid 1px var(--sidebar-resizer-hover);color:var(--sidebar-resizer-hover);}.src-sidebar-expanded .rustdoc.src .sidebar-resizer:hover,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:active,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:focus,.src-sidebar-expanded .rustdoc.src .sidebar-resizer.active{left:calc(var(--src-sidebar-width) - 1px);}@media (pointer:coarse){.sidebar-resizer{display:none !important;}.sidebar{border-right:none;}}.sidebar-resizer.active{padding:0 140px;width:calc(140px + 140px + 9px + 2px);margin-left:-140px;border-left:none;color:var(--sidebar-resizer-active);}.sidebar,rustdoc-topbar,.sidebar-menu-toggle,#src-sidebar{background-color:var(--sidebar-background-color);}.src .sidebar>*{visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:var(--src-sidebar-width);width:var(--src-sidebar-width);}.src-sidebar-expanded .src .sidebar>*{visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.logo-container>img{height:48px;width:48px;}ul.block,.block li,.block ul{padding:0;margin:0;list-style:none;}.block ul a{padding-left:1rem;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-right:0.25rem;border-left:solid var(--sidebar-elems-left-padding) transparent;margin-left:calc(-0.25rem - var(--sidebar-elems-left-padding));background-clip:border-box;}.hide-toc #rustdoc-toc,.hide-toc .in-crate{display:none;}.hide-modnav #rustdoc-modnav{display:none;}.sidebar h2{text-wrap:balance;overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{text-wrap:balance;overflow-wrap:anywhere;font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>.version,.sidebar>h2{padding-left:var(--sidebar-elems-left-padding);}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar .current a,.sidebar-crate a.logo-container:hover+h2 a,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.sidebar-crate{display:flex;align-items:center;justify-content:center;margin:14px 32px 1rem;row-gap:10px;column-gap:32px;flex-wrap:wrap;}.sidebar-crate h2{flex-grow:1;margin:0 -8px;align-self:start;}.sidebar-crate .logo-container{margin:0 calc(-16px - var(--sidebar-elems-left-padding));padding:0 var(--sidebar-elems-left-padding);text-align:center;}.sidebar-crate .logo-container img{margin-top:-16px;border-top:solid 16px transparent;box-sizing:content-box;position:relative;background-clip:border-box;z-index:1;}.sidebar-crate h2 a{display:block;border-left:solid var(--sidebar-elems-left-padding) transparent;background-clip:border-box;margin:0 calc(-24px + 0.25rem) 0 calc(-0.2rem - var(--sidebar-elems-left-padding));padding:calc((16px - 0.57rem ) / 2 ) 0.25rem;padding-left:0.2rem;}.sidebar-crate h2 .version{display:block;font-weight:normal;font-size:1rem;overflow-wrap:break-word;}.sidebar-crate+.version{margin-top:-1rem;margin-bottom:1rem;}rustdoc-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap>pre,.rustdoc .scraped-example .src-line-numbers,.rustdoc .scraped-example .src-line-numbers>pre{border-radius:6px;}.rustdoc .scraped-example{position:relative;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.scraped-example:not(.expanded) .example-wrap{max-height:calc(1.5em * 5 + 10px);}.more-scraped-examples .scraped-example:not(.expanded) .example-wrap{max-height:calc(1.5em * 10 + 10px);}.rustdoc:not(.src) .scraped-example:not(.expanded) .src-line-numbers,.rustdoc:not(.src) .scraped-example:not(.expanded) .src-line-numbers>pre,.rustdoc:not(.src) .scraped-example:not(.expanded) pre.rust{padding-bottom:0;overflow:auto hidden;}.rustdoc:not(.src) .scraped-example .src-line-numbers{padding-top:0;}.rustdoc:not(.src) .scraped-example.expanded .src-line-numbers{padding-bottom:0;}.rustdoc:not(.src) .example-wrap pre{overflow:auto;}.example-wrap code{position:relative;}.example-wrap pre code span{display:inline;}.example-wrap.digits-1{--example-wrap-digits-count:1ch;}.example-wrap.digits-2{--example-wrap-digits-count:2ch;}.example-wrap.digits-3{--example-wrap-digits-count:3ch;}.example-wrap.digits-4{--example-wrap-digits-count:4ch;}.example-wrap.digits-5{--example-wrap-digits-count:5ch;}.example-wrap.digits-6{--example-wrap-digits-count:6ch;}.example-wrap.digits-7{--example-wrap-digits-count:7ch;}.example-wrap.digits-8{--example-wrap-digits-count:8ch;}.example-wrap.digits-9{--example-wrap-digits-count:9ch;}.example-wrap .expansion{position:relative;display:inline;}.example-wrap .expansion>input{display:block;position:absolute;appearance:none;content:'↕';left:-20px;top:0;border:1px solid var(--border-color);border-radius:4px;cursor:pointer;color:var(--main-color);padding:0 2px;line-height:20px;}.example-wrap .expansion>input::after{content:"↕";}.example-wrap .expansion .expanded{display:none;color:var(--main-color);}.example-wrap .expansion>input:checked~.expanded,.example-wrap .expansion>input:checked~* .expanded{display:inherit;}.example-wrap .expansion>input:checked~.original,.example-wrap .expansion>input:checked~* .original{display:none;}.example-wrap [data-nosnippet]{width:calc(var(--example-wrap-digits-count) + var(--line-number-padding) * 2);}.example-wrap:not(.hide-lines) pre>code{padding-left:calc(var(--example-wrap-digits-count) + var(--line-number-padding) * 2 + var(--line-number-right-margin));}.src .example-wrap .expansion [data-nosnippet]{position:initial;margin-left:calc((var(--example-wrap-digits-count) + var(--line-number-padding) * 2 + var(--line-number-right-margin)) * -1);}.example-wrap [data-nosnippet]{color:var(--src-line-numbers-span-color);text-align:right;display:inline-block;margin-right:var(--line-number-right-margin);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;padding:0 var(--line-number-padding);position:absolute;left:0;}.example-wrap pre>code{position:relative;display:block;}:root.word-wrap-source-code .example-wrap pre>code{word-break:break-all;white-space:pre-wrap;}:root.word-wrap-source-code .example-wrap pre>code *{word-break:break-all;}.example-wrap [data-nosnippet]:target{border-right:none;}.example-wrap .line-highlighted[data-nosnippet]{background-color:var(--src-line-number-highlighted-background-color);}.example-wrap.hide-lines [data-nosnippet]{display:none;}.search-loading{text-align:center;}.item-table dd{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.item-table dd code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:var(--docblock-indent);position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.sub-heading{font-size:1rem;flex-grow:0;grid-area:main-heading-sub-heading;line-height:1.25;padding-bottom:4px;}.main-heading rustdoc-toolbar,.main-heading .out-of-band{grid-area:main-heading-toolbar;}rustdoc-toolbar{display:flex;flex-direction:row;flex-wrap:nowrap;min-height:60px;}.docblock code,.item-table dd code,pre,.rustdoc.src .example-wrap,.example-wrap .src-line-numbers{background-color:var(--code-block-background-color);border-radius:var(--code-block-border-radius);text-decoration:inherit;}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}.docblock .stab,.item-table dd .stab,.docblock p code{display:inline-block;}.docblock li{margin-bottom:.4em;}.docblock li p:not(:last-child){margin-bottom:.3em;}div.where{white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:var(--docblock-indent);}.impl-items>.item-info{margin-left:calc(var(--docblock-indent) + var(--impl-items-indent));}#synthetic-implementors-list:not(.loaded),#implementors-list:not(.loaded){display:none;}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;display:flex;align-items:start;margin-top:4px;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;}.src nav.sub{margin:0 0 -10px 0;}.section-header{display:block;position:relative;}.section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{--anchor-link-shift:0.5em;display:none;position:absolute;left:calc(var(--anchor-link-shift) * -1);padding-right:var(--anchor-link-shift);background:none !important;}.anchor.field{left:-5px;}.section-header>.anchor{left:-15px;padding-right:8px;}h2.section-header>.anchor{padding-right:6px;}a.doc-anchor{color:var(--main-color);display:none;position:absolute;left:-17px;padding-right:10px;padding-left:3px;}*:hover>.doc-anchor{display:block;}.top-doc>.docblock>*:first-child>.doc-anchor{display:none !important;}.main-heading a:hover,.example-wrap .rust a:hover:not([data-nosnippet]),.all-items a:hover,.docblock a:not(.scrape-help):not(.tooltip):hover:not(.doc-anchor),.item-table dd a:not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block li.current a{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{padding:0;margin:0;width:100%;}.item-table>dt{padding-right:1.25rem;}.item-table>dd{margin-inline-start:0;margin-left:0;}#crate-search-div{position:relative;min-width:0;margin-top:-1px;}#crate-search{padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ - ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);max-width:100%;}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;margin:0;padding:0;}.search-results>a{display:grid;grid-template-areas:"search-result-name search-result-desc" "search-result-type-signature search-result-type-signature";grid-template-columns:.6fr .4fr;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);column-gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;grid-area:search-result-desc;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;grid-area:search-result-name;}.search-results .result-name .alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.search-results .result-name .path>*{display:inline;}.search-results .type-signature{grid-area:search-result-type-signature;white-space:pre-wrap;}.popover{position:absolute;top:100%;right:0;z-index:calc(var(--desktop-sidebar-z-index) + 1);margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-check input{flex-shrink:0;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ - \ - ');}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;}#settings.popover{--popover-arrow-offset:196px;top:calc(100% - 16px);}#help.popover{max-width:600px;--popover-arrow-offset:115px;top:calc(100% - 16px);}#help dt{float:left;clear:left;margin-right:0.5rem;}#help dd{margin-bottom:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;padding:0 0.5rem;text-wrap-style:balance;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side{display:flex;margin-bottom:20px;}.side-by-side>div{width:50%;padding:0 20px 0 17px;}.item-info .stab{display:block;padding:3px;margin-bottom:5px;}.item-table dt .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;white-space:pre-wrap;border-radius:3px;display:inline;vertical-align:baseline;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji,.item-info .stab::before{font-size:1.25rem;}.stab .emoji{margin-right:0.3rem;}.item-info .stab::before{content:"\0";width:0;display:inline-block;color:transparent;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band,.sub-heading,rustdoc-toolbar{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.src .example-wrap pre.rust a:not([data-nosnippet]){background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}.content .docblock .warning{border-left:2px solid var(--warning-border-color);padding:14px;position:relative;overflow-x:visible !important;}.content .docblock .warning::before{color:var(--warning-border-color);content:"ⓘ";position:absolute;left:-25px;top:5px;font-weight:bold;font-size:1.25rem;}.top-doc>.docblock>.warning:first-child::before{top:20px;}.example-wrap>a.test-arrow,.example-wrap .button-holder{visibility:hidden;position:absolute;top:4px;right:4px;z-index:1;}a.test-arrow{height:var(--copy-path-height);padding:6px 4px 0 11px;}a.test-arrow::before{content:url('data:image/svg+xml,');}.example-wrap .button-holder{display:flex;}@media not (pointer:coarse){.example-wrap:hover>a.test-arrow,.example-wrap:hover>.button-holder{visibility:visible;}}.example-wrap .button-holder.keep-visible{visibility:visible;}.example-wrap .button-holder>*{background:var(--main-background-color);cursor:pointer;border-radius:var(--button-border-radius);height:var(--copy-path-height);width:var(--copy-path-width);border:0;color:var(--code-example-button-color);}.example-wrap .button-holder>*:hover{color:var(--code-example-button-hover-color);}.example-wrap .button-holder>*:not(:first-child){margin-left:var(--button-left-margin);}.example-wrap .button-holder .copy-button{padding:2px 0 0 4px;}.example-wrap .button-holder .copy-button::before,.example-wrap .test-arrow::before,.example-wrap .button-holder .prev::before,.example-wrap .button-holder .next::before,.example-wrap .button-holder .expand::before{filter:var(--copy-path-img-filter);}.example-wrap .button-holder .copy-button::before{content:var(--clipboard-image);}.example-wrap .button-holder .copy-button:hover::before,.example-wrap .test-arrow:hover::before{filter:var(--copy-path-img-hover-filter);}.example-wrap .button-holder .copy-button.clicked::before{content:var(--checkmark-image);padding-right:5px;}.example-wrap .button-holder .prev,.example-wrap .button-holder .next,.example-wrap .button-holder .expand{line-height:0px;}.example-wrap .button-holder .prev::before{content:var(--prev-arrow-image);}.example-wrap .button-holder .next::before{content:var(--next-arrow-image);}.example-wrap .button-holder .expand::before{content:var(--expand-arrow-image);}.example-wrap .button-holder .expand.collapse::before{content:var(--collapse-arrow-image);}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.main-heading span.since::before{content:"Since ";}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}@keyframes targetfadein{from{background-color:var(--main-background-color);}10%{background-color:var(--target-border-color);}to{background-color:var(--target-background-color);}}:target:not([data-nosnippet]){background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}a.tooltip{font-family:var(--font-family);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}@media not (prefers-reduced-motion){:target{animation:0.65s cubic-bezier(0,0,0.1,1.0) 0.1s targetfadein;}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{margin-top:0.25rem;display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;font-variant-numeric:tabular-nums;color:var(--search-tab-title-count-color);position:relative;}#search-tabs .count.loading{color:transparent;}.search-form.loading::after{width:18px;height:18px;border-radius:18px;content:url('data:image/svg+xml,\ - \ - \ - \ - \ - \ - \ - \ - \ - \ - ');position:absolute;right:8px;top:8px;filter:var(--settings-menu-filter);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--src-sidebar-background-hover);}#src-sidebar div.files>a.selected{background-color:var(--src-sidebar-background-selected);}.src-sidebar-title{position:sticky;top:0;display:flex;padding:8px 8px 0 48px;margin-bottom:7px;background:var(--sidebar-background-color);border-bottom:1px solid var(--border-color);}#search-button,.settings-menu,.help-menu,button#toggle-all-docs{margin-left:var(--button-left-margin);display:flex;line-height:1.25;min-width:14px;}#sidebar-button{display:none;line-height:0;}.hide-sidebar #sidebar-button,.src #sidebar-button{display:flex;margin-right:4px;position:fixed;margin-top:25px;left:6px;height:34px;width:34px;z-index:calc(var(--desktop-sidebar-z-index) + 1);}.hide-sidebar #sidebar-button{left:6px;background-color:var(--main-background-color);}.src #sidebar-button{margin-top:0;top:8px;left:8px;border-color:var(--border-color);}.hide-sidebar .src #sidebar-button{position:static;}#search-button>a,.settings-menu>a,.help-menu>a,#sidebar-button>a,button#toggle-all-docs{display:flex;align-items:center;justify-content:center;flex-direction:column;}#search-button>a,.settings-menu>a,.help-menu>a,button#toggle-all-docs{border:1px solid transparent;border-radius:var(--button-border-radius);color:var(--main-color);}#search-button>a,.settings-menu>a,.help-menu>a,button#toggle-all-docs{width:80px;border-radius:var(--toolbar-button-border-radius);}#search-button>a,.settings-menu>a,.help-menu>a{min-width:0;}#sidebar-button>a{border:solid 1px transparent;border-radius:var(--button-border-radius);background-color:var(--button-background-color);width:33px;}.src #sidebar-button>a{background-color:var(--sidebar-background-color);border-color:var(--border-color);}#search-button>a:hover,#search-button>a:focus-visible,.settings-menu>a:hover,.settings-menu>a:focus-visible,.help-menu>a:hover,#help-menu>a:focus-visible,#sidebar-button>a:hover,#sidebar-button>a:focus-visible,#copy-path:hover,#copy-path:focus-visible,button#toggle-all-docs:hover,button#toggle-all-docs:focus-visible{border-color:var(--settings-button-border-focus);text-decoration:none;}#search-button>a::before{content:url('data:image/svg+xml,\ - \ - Search\ - ');width:18px;height:18px;filter:var(--settings-menu-filter);}.settings-menu>a::before{content:url('data:image/svg+xml,\ - \ - ');width:18px;height:18px;filter:var(--settings-menu-filter);}button#toggle-all-docs::before{content:url('data:image/svg+xml,\ - ');width:18px;height:18px;filter:var(--settings-menu-filter);}.help-menu>a::before{content:url('data:image/svg+xml,\ - \ - \ - \ - \ - ');width:18px;height:18px;filter:var(--settings-menu-filter);}.help-menu>a{width:74px;}.help-menu>a>.label{padding-right:1px;}#toggle-all-docs:not(.will-expand)>.label{padding-left:1px;}#search-button>a::before,button#toggle-all-docs::before,.help-menu>a::before,.settings-menu>a::before{filter:var(--settings-menu-filter);margin:8px;}@media not (pointer:coarse){#search-button>a:hover::before,button#toggle-all-docs:hover::before,.help-menu>a:hover::before,.settings-menu>a:hover::before{filter:var(--settings-menu-hover-filter);}}button[disabled]#toggle-all-docs{opacity:0.25;border:solid 1px var(--main-background-color);background-size:cover;}button[disabled]#toggle-all-docs:hover{border:solid 1px var(--main-background-color);cursor:not-allowed;}rustdoc-toolbar span.label{font-size:1rem;flex-grow:1;padding-bottom:4px;}#sidebar-button>a::before{content:url('data:image/svg+xml,\ - \ - \ - ');width:22px;height:22px;}#copy-path{color:var(--copy-path-button-color);background:var(--main-background-color);height:var(--copy-path-height);width:var(--copy-path-width);margin-left:10px;padding:0;padding-left:2px;border:solid 1px transparent;border-radius:var(--button-border-radius);font-size:0;}#copy-path::before{filter:var(--copy-path-img-filter);content:var(--clipboard-image);}#copy-path:hover::before{filter:var(--copy-path-img-hover-filter);}#copy-path.clicked::before{content:var(--checkmark-image);}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}.settings-menu.rotate>a img{animation:rotating 2s linear infinite;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px var(--border-color);border-radius:3px;color:var(--kbd-color);background-color:var(--kbd-background);box-shadow:inset 0 -1px 0 var(--kbd-box-shadow-color);}ul.all-items>li{list-style:none;}details.dir-entry{padding-left:4px;}details.dir-entry>summary{margin:0 0 0 -4px;padding:0 0 0 4px;cursor:pointer;}details.dir-entry div.folders,details.dir-entry div.files{padding-left:23px;}details.dir-entry a{display:block;}details.toggle{contain:layout;position:relative;}details.big-toggle{contain:inline-size;}details.toggle>summary.hideme{cursor:pointer;font-size:1rem;}details.toggle>summary{list-style:none;outline:none;}details.toggle>summary::-webkit-details-marker,details.toggle>summary::marker{display:none;}details.toggle>summary.hideme>span{margin-left:9px;}details.toggle>summary::before{background:url('data:image/svg+xml,\ - ');content:"";cursor:pointer;width:16px;height:16px;display:inline-block;vertical-align:middle;opacity:.5;filter:var(--toggle-filter);}details.toggle>summary.hideme>span,.more-examples-toggle summary,.more-examples-toggle .hide-more{color:var(--toggles-color);}details.toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.toggle>summary.hideme::after{content:"";}details.toggle>summary:focus::before,details.toggle>summary:hover::before{opacity:1;}details.toggle>summary:focus-visible::before{outline:1px dotted #000;outline-offset:1px;}details.non-exhaustive{margin-bottom:8px;}details.toggle>summary.hideme::before{position:relative;}details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.toggle>summary:not(.hideme)::before,#main-content>.methods>details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}.impl-items>*:not(.item-info),.implementors-toggle>.docblock,#main-content>.methods>:not(.item-info),.impl>.item-info,.impl>.docblock,.impl+.docblock{margin-left:var(--impl-items-indent);}details.big-toggle>summary:not(.hideme)::before{left:-34px;top:9px;}details.toggle[open] >summary.hideme{position:absolute;}details.toggle[open] >summary.hideme>span{display:none;}details.toggle[open] >summary::before{background:url('data:image/svg+xml,\ - ');}details.toggle[open] >summary::after{content:"Collapse";}details.toggle:not([open])>summary .docblock{max-height:calc(1.5em + 0.75em);overflow-y:hidden;}details.toggle:not([open])>summary .docblock>:first-child{max-width:100%;overflow:hidden;width:fit-content;white-space:nowrap;position:relative;padding-right:1em;}details.toggle:not([open])>summary .docblock>:first-child::after{content:"…";position:absolute;right:0;top:0;bottom:0;z-index:1;background-color:var(--main-background-color);font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;padding-left:0.2em;}details.toggle:not([open])>summary .docblock>div:first-child::after{padding-top:calc(1.5em + 0.75em - 1.2rem);}details.toggle>summary .docblock{margin-top:0.75em;}.docblock summary>*{display:inline-block;}.docblock>.example-wrap:first-child .tooltip{margin-top:16px;}.src #sidebar-button>a::before,.sidebar-menu-toggle::before{content:var(--hamburger-image);opacity:0.75;filter:var(--mobile-sidebar-menu-filter);}.src #sidebar-button>a:hover{background:var(--main-background-color);}.sidebar-menu-toggle:hover::before,.sidebar-menu-toggle:active::before,.sidebar-menu-toggle:focus::before{opacity:1;}@media (max-width:850px){#search-tabs .count{display:block;}.side-by-side{flex-direction:column-reverse;}.side-by-side>div{width:auto;}.main-heading{grid-template-areas:"main-heading-breadcrumbs main-heading-toolbar" "main-heading-h1 main-heading-toolbar" "main-heading-sub-heading main-heading-toolbar";}.search-results-main-heading{display:grid;grid-template-areas:"main-heading-breadcrumbs main-heading-toolbar" "main-heading-breadcrumbs main-heading-toolbar" "main-heading-h1 main-heading-toolbar";}rustdoc-toolbar{margin-top:-10px;display:grid;grid-template-areas:"x settings help" "search summary summary";grid-template-rows:35px 1fr;}.search-results-main-heading rustdoc-toolbar{display:grid;grid-template-areas:"settings help" "search search";}.search-results-main-heading #toggle-all-docs{display:none;}rustdoc-toolbar .settings-menu span.label,rustdoc-toolbar .help-menu span.label{display:none;}rustdoc-toolbar .settings-menu{grid-area:settings;}rustdoc-toolbar .help-menu{grid-area:help;}rustdoc-toolbar .settings-menu{grid-area:settings;}rustdoc-toolbar #search-button{grid-area:search;}rustdoc-toolbar #toggle-all-docs{grid-area:summary;}rustdoc-toolbar .settings-menu,rustdoc-toolbar .help-menu{height:35px;}rustdoc-toolbar .settings-menu>a,rustdoc-toolbar .help-menu>a{border-radius:2px;text-align:center;width:34px;padding:5px 0;}rustdoc-toolbar .settings-menu>a:before,rustdoc-toolbar .help-menu>a:before{margin:0 4px;}#settings.popover{top:16px;--popover-arrow-offset:58px;}#help.popover{top:16px;--popover-arrow-offset:16px;}}@media (max-width:700px){:root{--impl-items-indent:0.7em;}*[id]{scroll-margin-top:45px;}#copy-path{width:0;visibility:hidden;}rustdoc-topbar span.label,html:not(.hide-sidebar) .rustdoc:not(.src) rustdoc-toolbar .settings-menu>a,html:not(.hide-sidebar) .rustdoc:not(.src) rustdoc-toolbar .help-menu>a{display:none;}rustdoc-topbar .settings-menu>a,rustdoc-topbar .help-menu>a{width:33px;line-height:0;}rustdoc-topbar .settings-menu>a:hover,rustdoc-topbar .help-menu>a:hover{border:none;background:var(--main-background-color);border-radius:0;}#settings.popover{top:32px;--popover-arrow-offset:48px;}#help.popover{top:32px;--popover-arrow-offset:12px;}.rustdoc{display:block;}html:not(.hide-sidebar) main{padding-left:15px;padding-top:0px;}.sidebar .logo-container,.sidebar .location,.sidebar-resizer{display:none;}.sidebar{position:fixed;top:45px;left:-1000px;z-index:11;height:calc(100vh - 45px);border-right:none;width:100%;}.sidebar-elems .block li a{white-space:wrap;}.src main,.rustdoc.src .sidebar{top:0;padding:0;height:100vh;border:0;}html .src main{padding:18px 0;}.src .search-form{margin-left:40px;}.src .main-heading{margin-left:8px;}.hide-sidebar .search-form{margin-left:32px;}.hide-sidebar .src .search-form{margin-left:0;}.sidebar.shown,.src-sidebar-expanded .src .sidebar,.rustdoc:not(.src) .sidebar:focus-within{left:0;}rustdoc-topbar>h2{padding-bottom:0;margin:auto;overflow:hidden;font-size:24px;white-space:nowrap;text-overflow:ellipsis;text-align:center;}rustdoc-topbar .logo-container>img{max-width:35px;max-height:35px;margin:5px 0 5px 20px;}rustdoc-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;height:45px;width:100%;left:0;top:0;}.hide-sidebar rustdoc-topbar{display:none;}.sidebar-menu-toggle{width:41px;min-width:41px;border:none;line-height:0;}.hide-sidebar .sidebar-menu-toggle{display:none;}.sidebar-elems{margin-top:1em;}.anchor{display:none !important;}#main-content>details.toggle>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}#sidebar-button>a::before{content:url('data:image/svg+xml,\ - \ - \ - \ - \ - \ - \ - ');width:22px;height:22px;}.sidebar-menu-toggle:hover{background:var(--main-background-color);}.search-results>a,.search-results>a>div{display:block;}.search-results>a{padding:5px 0px;}.search-results>a>div.desc,.item-table dd{padding-left:2em;}.search-results .result-name{display:block;}.search-results .result-name .typename{width:initial;margin-right:0;}.search-results .result-name .typename,.search-results .result-name .path{display:inline;}.src-sidebar-expanded .src .sidebar{position:fixed;max-width:100vw;width:100vw;}.src .src-sidebar-title{padding-top:0;}details.implementors-toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.toggle>summary:not(.hideme)::before,#main-content>.methods>details.toggle>summary:not(.hideme)::before{left:-20px;}summary>.item-info{margin-left:10px;}.impl-items>.item-info{margin-left:calc(var(--impl-items-indent) + 10px);}.src nav.sub{margin:0 0 -25px 0;padding:var(--nav-sub-mobile-padding);}html:not(.src-sidebar-expanded) .src #sidebar-button>a{background-color:var(--main-background-color);}html:not(.src-sidebar-expanded) .src #sidebar-button>a:hover,html:not(.src-sidebar-expanded) .src #sidebar-button>a:focus-visible{background-color:var(--sidebar-background-color);}}@media (min-width:701px){.scraped-example-title{position:absolute;z-index:10;background:var(--main-background-color);bottom:8px;right:5px;padding:2px 4px;box-shadow:0 0 4px var(--main-background-color);}.item-table:not(.reexports){display:grid;grid-template-columns:33% 67%;}.item-table>dt,.item-table>dd{overflow-wrap:anywhere;}.item-table>dt{grid-column-start:1;}.item-table>dd{grid-column-start:2;}}@media print{:root{--docblock-indent:0;}nav.sidebar,nav.sub,.out-of-band,a.src,#copy-path,details.toggle[open] >summary::before,details.toggle>summary::before,details.toggle.top-doc>summary{display:none;}main{padding:10px;}}@media (max-width:464px){:root{--docblock-indent:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}nav.sub{flex-direction:column;}.search-form{align-self:stretch;}}.variant,.implementors-toggle>summary,.impl,#implementors-list>.docblock,.impl-items>section,.impl-items>.toggle>summary,.methods>section,.methods>.toggle>summary{margin-bottom:0.75em;}.negative-marker{display:none;}.variants>.docblock,.implementors-toggle>.docblock,.impl-items>.toggle[open]:not(:last-child),.methods>.toggle[open]:not(:last-child),.implementors-toggle[open]:not(:last-child){margin-bottom:2em;}#trait-implementations-list .impl-items>.toggle:not(:last-child),#synthetic-implementations-list .impl-items>.toggle:not(:last-child),#blanket-implementations-list .impl-items>.toggle:not(:last-child){margin-bottom:1em;}.scraped-example-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;border:1px solid var(--scrape-example-help-border-color);border-radius:50px;color:var(--scrape-example-help-color);}.scraped-example-list .scrape-help:hover{border-color:var(--scrape-example-help-hover-border-color);color:var(--scrape-example-help-hover-color);}.scraped-example:not(.expanded) .example-wrap::before,.scraped-example:not(.expanded) .example-wrap::after{content:" ";width:100%;height:5px;position:absolute;z-index:1;}.scraped-example:not(.expanded) .example-wrap::before{top:0;background:linear-gradient(to bottom,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded) .example-wrap::after{bottom:0;background:linear-gradient(to top,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded){width:100%;overflow-y:hidden;margin-bottom:0;}.scraped-example:not(.expanded){overflow-x:hidden;}.scraped-example .rust span.highlight{background:var(--scrape-example-code-line-highlight);}.scraped-example .rust span.highlight.focus{background:var(--scrape-example-code-line-highlight-focus);}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;cursor:pointer;}.more-scraped-examples{margin-left:25px;position:relative;}.toggle-line{position:absolute;top:5px;bottom:0;right:calc(100% + 10px);padding:0 4px;cursor:pointer;}.toggle-line-inner{min-width:2px;height:100%;background:var(--scrape-example-toggle-line-background);}.toggle-line:hover .toggle-line-inner{background:var(--scrape-example-toggle-line-hover-background);}.more-scraped-examples .scraped-example,.example-links{margin-top:20px;}.more-scraped-examples .scraped-example:first-child{margin-top:5px;}.example-links ul{margin-bottom:0;}:root[data-theme="light"],:root:not([data-theme]){--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--sidebar-border-color:#ddd;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--mobile-sidebar-menu-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#595959;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--attribute-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);--sidebar-resizer-hover:hsl(207,90%,66%);--sidebar-resizer-active:hsl(207,90%,54%);}:root[data-theme="dark"]{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--sidebar-border-color:#999;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#a5a5a5;--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--attribute-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(65%);--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);--sidebar-resizer-hover:hsl(207,30%,54%);--sidebar-resizer-active:hsl(207,90%,54%);}:root[data-theme="ayu"]{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--sidebar-border-color:#5c6773;--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--code-example-button-color:#b2b2b2;--code-example-button-hover-color:#fff;--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--attribute-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--settings-menu-filter:invert(70%);--settings-menu-hover-filter:invert(100%);--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--src-sidebar-background-selected:#14191f;--src-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);--sidebar-resizer-hover:hsl(34,50%,33%);--sidebar-resizer-active:hsl(34,100%,66%);}:root[data-theme="ayu"] h1,:root[data-theme="ayu"] h2,:root[data-theme="ayu"] h3,:root[data-theme="ayu"] h4,:where(:root[data-theme="ayu"]) h1 a,:root[data-theme="ayu"] .sidebar h2 a,:root[data-theme="ayu"] .sidebar h3 a{color:#fff;}:root[data-theme="ayu"] .docblock code{color:#ffb454;}:root[data-theme="ayu"] .docblock a>code{color:#39AFD7 !important;}:root[data-theme="ayu"] .code-header,:root[data-theme="ayu"] .docblock pre>code,:root[data-theme="ayu"] pre,:root[data-theme="ayu"] pre>code,:root[data-theme="ayu"] .item-info code,:root[data-theme="ayu"] .rustdoc.source .example-wrap{color:#e6e1cf;}:root[data-theme="ayu"] .sidebar .current,:root[data-theme="ayu"] .sidebar .current a,:root[data-theme="ayu"] .sidebar a:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:hover,:root[data-theme="ayu"] details.dir-entry summary:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:focus,:root[data-theme="ayu"] details.dir-entry summary:focus,:root[data-theme="ayu"] #src-sidebar div.files>a.selected{color:#ffb44c;}:root[data-theme="ayu"] .sidebar-elems .location{color:#ff7733;}:root[data-theme="ayu"] a[data-nosnippet].line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}:root[data-theme="ayu"] .search-results a:hover,:root[data-theme="ayu"] .search-results a:focus{color:#fff !important;background-color:#3c3c3c;}:root[data-theme="ayu"] .search-results a{color:#0096cf;}:root[data-theme="ayu"] .search-results a div.desc{color:#c5c5c5;}:root[data-theme="ayu"] .result-name .primitive>i,:root[data-theme="ayu"] .result-name .keyword>i{color:#788797;}:root[data-theme="ayu"] #search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}:root[data-theme="ayu"] #search-tabs>button:not(.selected){border:none;background-color:transparent !important;}:root[data-theme="ayu"] #search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}:root[data-theme="ayu"] .settings-menu>a img,:root[data-theme="ayu"] #sidebar-button>a::before{filter:invert(100);} \ No newline at end of file diff --git a/network-poc/target-native/doc/static.files/scrape-examples-2bbcccac.js b/network-poc/target-native/doc/static.files/scrape-examples-2bbcccac.js deleted file mode 100644 index c90f297..0000000 --- a/network-poc/target-native/doc/static.files/scrape-examples-2bbcccac.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(function(){const DEFAULT_MAX_LINES=5;const HIDDEN_MAX_LINES=10;function scrollToLoc(elt,loc,isHidden){const lines=elt.querySelectorAll("[data-nosnippet]");let scrollOffset;const maxLines=isHidden?HIDDEN_MAX_LINES:DEFAULT_MAX_LINES;if(loc[1]-loc[0]>maxLines){const line=Math.max(0,loc[0]-1);scrollOffset=lines[line].offsetTop;}else{const halfHeight=elt.offsetHeight/2;const offsetTop=lines[loc[0]].offsetTop;const lastLine=lines[loc[1]];const offsetBot=lastLine.offsetTop+lastLine.offsetHeight;const offsetMid=(offsetTop+offsetBot)/2;scrollOffset=offsetMid-halfHeight;}nonnull(lines[0].parentElement).scrollTo(0,scrollOffset);nonnull(elt.querySelector(".rust")).scrollTo(0,scrollOffset);}function createScrapeButton(parent,className,content){const button=document.createElement("button");button.className=className;button.title=content;parent.insertBefore(button,parent.firstChild);return button;}window.updateScrapedExample=(example,buttonHolder)=>{let locIndex=0;const highlights=Array.prototype.slice.call(example.querySelectorAll(".highlight"));const link=nonnull(example.querySelector(".scraped-example-title a"));let expandButton=null;if(!example.classList.contains("expanded")){expandButton=createScrapeButton(buttonHolder,"expand","Show all");}const isHidden=nonnull(example.parentElement).classList.contains("more-scraped-examples");const locs=example.locs;if(locs.length>1){const next=createScrapeButton(buttonHolder,"next","Next usage");const prev=createScrapeButton(buttonHolder,"prev","Previous usage");const onChangeLoc=changeIndex=>{removeClass(highlights[locIndex],"focus");changeIndex();scrollToLoc(example,locs[locIndex][0],isHidden);addClass(highlights[locIndex],"focus");const url=locs[locIndex][1];const title=locs[locIndex][2];link.href=url;link.innerHTML=title;};prev.addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex-1+locs.length)%locs.length;});});next.addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex+1)%locs.length;});});}if(expandButton){expandButton.addEventListener("click",()=>{if(hasClass(example,"expanded")){removeClass(example,"expanded");removeClass(expandButton,"collapse");expandButton.title="Show all";scrollToLoc(example,locs[0][0],isHidden);}else{addClass(example,"expanded");addClass(expandButton,"collapse");expandButton.title="Show single example";}});}};function setupLoc(example,isHidden){const locs_str=nonnull(example.attributes.getNamedItem("data-locs")).textContent;const locs=JSON.parse(nonnull(nonnull(locs_str)));example.locs=locs;scrollToLoc(example,locs[0][0],isHidden);}const firstExamples=document.querySelectorAll(".scraped-example-list > .scraped-example");onEachLazy(firstExamples,el=>setupLoc(el,false));onEachLazy(document.querySelectorAll(".more-examples-toggle"),toggle=>{onEachLazy(toggle.querySelectorAll(".toggle-line, .hide-more"),button=>{button.addEventListener("click",()=>{toggle.open=false;});});const moreExamples=toggle.querySelectorAll(".scraped-example");toggle.querySelector("summary").addEventListener("click",()=>{setTimeout(()=>{onEachLazy(moreExamples,el=>setupLoc(el,true));});},{once:true});});})(); \ No newline at end of file diff --git a/network-poc/target-native/doc/static.files/search-9e2438ea.js b/network-poc/target-native/doc/static.files/search-9e2438ea.js deleted file mode 100644 index a49ae8a..0000000 --- a/network-poc/target-native/doc/static.files/search-9e2438ea.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict";const initSearch=async function(Stringdex,RoaringBitmap,hooks){if(!Array.prototype.toSpliced){Array.prototype.toSpliced=function(){const me=this.slice();Array.prototype.splice.apply(me,arguments);return me;};}async function onEachBtwnAsync(arr,func,funcBtwn){let skipped=true;for(const value of arr){if(!skipped){funcBtwn(value);}skipped=await func(value);}}const yieldToBrowser=typeof window!=="undefined"&&window.requestIdleCallback?function(){return new Promise((resolve,_reject)=>{window.requestIdleCallback(resolve);});}:function(){return new Promise((resolve,_reject)=>{setTimeout(resolve,0);});};const timeout=function(ms){return new Promise((resolve,_reject)=>{setTimeout(resolve,ms);});};if(!Promise.withResolvers){Promise.withResolvers=()=>{let resolve,reject;const promise=new Promise((res,rej)=>{resolve=res;reject=rej;});return{promise,resolve,reject};};}const itemTypes=Object.freeze({keyword:0,primitive:1,mod:2,externcrate:3,import:4,struct:5,enum:6,fn:7,type:8,static:9,trait:10,impl:11,tymethod:12,method:13,structfield:14,variant:15,macro:16,associatedtype:17,constant:18,associatedconstant:19,union:20,foreigntype:21,existential:22,attr:23,derive:24,traitalias:25,generic:26,attribute:27,});const itemTypesName=Array.from(Object.keys(itemTypes));const itemParents=new Map([[itemTypes.associatedconstant,itemTypes.constant],[itemTypes.method,itemTypes.fn],[itemTypes.tymethod,itemTypes.fn],[itemTypes.primitive,itemTypes.type],[itemTypes.associatedtype,itemTypes.type],[itemTypes.traitalias,itemTypes.trait],[itemTypes.attr,itemTypes.macro],[itemTypes.derive,itemTypes.macro],[itemTypes.externcrate,itemTypes.import],]);const ROOT_PATH=typeof window!=="undefined"?window.rootPath:"../";const UNBOXING_LIMIT=5;const REGEX_IDENT=/\p{ID_Continue}+/uy;const REGEX_INVALID_TYPE_FILTER=/[^a-z]/ui;const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1;}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1);}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1);}if(b.length===0){return minDist;}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE;}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost,);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1,);}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp;}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1);},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit);}function isEndCharacter(c){return"=,>-])".indexOf(c)!==-1;}function isFnLikeTy(ty){return ty===itemTypes.fn||ty===itemTypes.method||ty===itemTypes.tymethod;}function isSeparatorCharacter(c){return c===","||c==="=";}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->";}function skipWhitespace(parserState){while(parserState.pos0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true;}else if(c!==" "){break;}pos-=1;}return false;}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">");}function getFilteredNextElem(query,parserState,elems,isInGenerics){const start=parserState.pos;if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){throw["Expected type filter before ",":"];}getNextElem(query,parserState,elems,isInGenerics);if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",];}if(elems.length===0){throw["Expected type filter before ",":"];}else if(query.literalSearch){throw["Cannot use quotes on type filter"];}const typeFilterElem=elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.normalizedPathLast;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;getNextElem(query,parserState,elems,isInGenerics);}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let foundSeparator=false;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;const oldIsInBinding=parserState.isInBinding;parserState.isInBinding=null;let hofParameters=null;let extra="";if(endChar===">"){extra="<";}else if(endChar==="]"){extra="[";}else if(endChar===")"){extra="(";}else if(endChar===""){extra="->";}else{extra=endChar;}while(parserState.pos"," after ","="];}hofParameters=[...elems];elems.length=0;parserState.pos+=2;foundStopChar=true;foundSeparator=false;continue;}else if(c===" "){parserState.pos+=1;continue;}else if(isSeparatorCharacter(c)){parserState.pos+=1;foundStopChar=true;foundSeparator=true;continue;}else if(c===":"&&isPathStart(parserState)){throw["Unexpected ","::",": paths cannot start with ","::"];}else if(isEndCharacter(c)){throw["Unexpected ",c," after ",extra];}if(!foundStopChar){let extra=[];if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"];}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"];}if(endChar!==""){throw["Expected ",",",", ","=",", or ",endChar,...extra,", found ",c,];}throw["Expected ",","," or ","=",...extra,", found ",c,];}const posBefore=parserState.pos;getFilteredNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra];}if(posBefore===parserState.pos){parserState.pos+=1;}foundStopChar=false;}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra];}parserState.pos+=1;if(hofParameters){foundSeparator=false;if([...elems,...hofParameters].some(x=>x.bindingName)||parserState.isInBinding){throw["Unexpected ","="," within ","->"];}const hofElem=makePrimitiveElement("->",{generics:hofParameters,bindings:new Map([["output",[...elems]]]),typeFilter:null,});elems.length=0;elems[0]=hofElem;}parserState.typeFilter=oldTypeFilter;parserState.isInBinding=oldIsInBinding;return{foundSeparator};}function getNextElem(query,parserState,elems,isInGenerics){const generics=[];const handleRefOrPtr=(chr,name)=>{if(parserState.typeFilter!==null&&parserState.typeFilter!=="primitive"){throw["Invalid search type: primitive ",chr," and ",parserState.typeFilter," both specified",];}parserState.typeFilter=null;parserState.pos+=1;let c=parserState.userQuery[parserState.pos];while(c===" "&&parserState.pos"){generics[0].typeFilter=typeFilter;elems.push(generics[0]);}else{if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive ",name," and ",typeFilter," both specified",];}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1;}elems.push(makePrimitiveElement(name,{bindingName,generics}));}}else if(parserState.userQuery[parserState.pos]==="&"){handleRefOrPtr("&","reference");}else if(parserState.userQuery[parserState.pos]==="*"){handleRefOrPtr("*","pointer");}else{const isStringElem=parserState.userQuery[start]==="\"";if(isStringElem){start+=1;getStringElem(query,parserState,isInGenerics);end=parserState.pos-1;}else{end=getIdentEndPosition(parserState);}if(parserState.pos=end){throw["Found generics without a path"];}parserState.pos+=1;getItemsBefore(query,parserState,generics,">");}else if(parserState.pos=end){throw["Found generics without a path"];}if(parserState.isInBinding){throw["Unexpected ","("," after ","="];}parserState.pos+=1;const typeFilter=parserState.typeFilter;parserState.typeFilter=null;getItemsBefore(query,parserState,generics,")");skipWhitespace(parserState);if(isReturnArrow(parserState)){parserState.pos+=2;skipWhitespace(parserState);getFilteredNextElem(query,parserState,generics,isInGenerics);generics[generics.length-1].bindingName=makePrimitiveElement("output");}else{generics.push(makePrimitiveElement(null,{bindingName:makePrimitiveElement("output"),typeFilter:null,}));}parserState.typeFilter=typeFilter;}if(isStringElem){skipWhitespace(parserState);}if(start>=end&&generics.length===0){return;}if(parserState.userQuery[parserState.pos]==="="){if(parserState.isInBinding){throw["Cannot write ","="," twice in a binding"];}if(!isInGenerics){throw["Type parameter ","="," must be within generics list"];}const name=parserState.userQuery.slice(start,end).trim();if(name==="!"){throw["Type parameter ","="," key cannot be ","!"," never type"];}if(name.includes("!")){throw["Type parameter ","="," key cannot be ","!"," macro"];}if(name.includes("::")){throw["Type parameter ","="," key cannot contain ","::"," path"];}if(name.includes(":")){throw["Type parameter ","="," key cannot contain ",":"," type"];}parserState.isInBinding={name,generics};}else{elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics,),);}}}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();const match=query.match(REGEX_INVALID_TYPE_FILTER);if(match){throw["Unexpected ",match[0]," in type filter (before ",":",")",];}}function createQueryElement(query,parserState,name,generics,isInGenerics){const path=name.trim();if(path.length===0&&generics.length===0){throw["Unexpected ",parserState.userQuery[parserState.pos]];}if(query.literalSearch&&parserState.totalElems-parserState.genericsElems>0){throw["Cannot have more than one element if you use quotes"];}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name.trim()==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",];}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",];}const bindingName=parserState.isInBinding;parserState.isInBinding=null;return makePrimitiveElement("never",{bindingName});}const quadcolon=/::\s*::/.exec(path);if(path.startsWith("::")){throw["Paths cannot start with ","::"];}else if(quadcolon!==null){throw["Unexpected ",quadcolon[0]];}const pathSegments=path.split(/(?:::\s*)|(?:\s+(?:::\s*)?)/).map(x=>x.toLowerCase());if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"];}else{throw["Unexpected ",parserState.userQuery[parserState.pos]];}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"];}pathSegments[i]="never";}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1;}const bindingName=parserState.isInBinding;parserState.isInBinding=null;const bindings=new Map();const pathLast=pathSegments[pathSegments.length-1];return{name:name.trim(),id:null,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast,normalizedPathLast:pathLast.replace(/_/g,""),generics:generics.filter(gen=>{if(gen.bindingName!==null&&gen.bindingName.name!==null){if(gen.name!==null){gen.bindingName.generics.unshift(gen);}bindings.set(gen.bindingName.name.toLowerCase().replace(/_/g,""),gen.bindingName.generics,);return false;}return true;}),bindings,typeFilter,bindingName,};}function makePrimitiveElement(name,extra){return Object.assign({name,id:null,fullPath:[name],pathWithoutLast:[],pathLast:name,normalizedPathLast:name,generics:[],bindings:new Map(),typeFilter:"primitive",bindingName:null,},extra);}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"];}else if(query.literalSearch){throw["Cannot have more than one literal search element"];}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"];}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""];}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"];}else if(start===end){throw["Cannot have empty string element"];}parserState.pos+=1;query.literalSearch=true;}function getIdentEndPosition(parserState){let afterIdent=consumeIdent(parserState);let end=parserState.pos;let macroExclamation=-1;while(parserState.pos0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]," (not a valid identifier)"];}else{throw["Unexpected ",c," (not a valid identifier)"];}parserState.pos+=1;afterIdent=consumeIdent(parserState);end=parserState.pos;}if(macroExclamation!==-1){if(parserState.typeFilter===null){parserState.typeFilter="macro";}else if(parserState.typeFilter!=="macro"){throw["Invalid search type: macro ","!"," and ",parserState.typeFilter," both specified",];}end=macroExclamation;}return end;}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1;}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::";}function consumeIdent(parserState){REGEX_IDENT.lastIndex=parserState.pos;const match=parserState.userQuery.match(REGEX_IDENT);if(match){parserState.pos+=match[0].length;return true;}return false;}function isPathSeparator(c){return c===":"||c===" ";}function removeIdxListAsc(a,idxList){if(idxList.length===0){return;}let removed=0;let i=idxList[0];let nextToRemove=idxList[0];while(i>1];this.offset+=1;this.elemCount+=1;return sign?-value:value;}next(){const c=this.string.charCodeAt(this.offset);if(c>=48&&c<64){this.offset+=1;return this.backrefQueue[c-48];}if(c===96){this.offset+=1;return this.cons(0);}const result=this.cons(this.decode());this.backrefQueue.unshift(result);if(this.backrefQueue.length>16){this.backrefQueue.pop();}return result;}}const EMPTY_STRING_ARRAY=[];const EMPTY_GENERICS_ARRAY=[];const EMPTY_BINDINGS_ARRAY=[];const EMPTY_BINDINGS_MAP=new Map();function itemTypeFromName(typename){if(typename===null){return NO_TYPE_FILTER;}const index=itemTypes[typename];if(index===undefined){throw["Unknown type filter ",typename];}return index;}class DocSearch{constructor(rootPath,database){this.rootPath=rootPath;this.database=database;this.utf8decoder=new TextDecoder();this.TYPES_POOL=new Map();}getTypeNameIds(){if(this.typeNameIds){return this.typeNameIds;}const nn=this.database.getData("normalizedName");if(!nn){return{typeNameIdOfOutput:-1,typeNameIdOfFnPtr:-1,typeNameIdOfFn:-1,typeNameIdOfFnMut:-1,typeNameIdOfFnOnce:-1,typeNameIdOfArray:-1,typeNameIdOfSlice:-1,typeNameIdOfArrayOrSlice:-1,typeNameIdOfTuple:-1,typeNameIdOfUnit:-1,typeNameIdOfTupleOrUnit:-1,typeNameIdOfReference:-1,typeNameIdOfPointer:-1,typeNameIdOfHof:-1,typeNameIdOfNever:-1,};}return this.getTypeNameIdsAsync(nn);}async getTypeNameIdsAsync(nn){const[output,fn,fnMut,fnOnce,hof,array,slice,arrayOrSlice,tuple,unit,tupleOrUnit,reference,pointer,never,]=await Promise.all([nn.search("output"),nn.search("fn"),nn.search("fnmut"),nn.search("fnonce"),nn.search("->"),nn.search("array"),nn.search("slice"),nn.search("[]"),nn.search("tuple"),nn.search("unit"),nn.search("()"),nn.search("reference"),nn.search("pointer"),nn.search("never"),]);const first=async(trie,ty,modulePath)=>{if(trie){for(const id of trie.matches().entries()){const pathData=await this.getPathData(id);if(pathData&&pathData.ty===ty&&pathData.modulePath===modulePath){return id;}}}return-1;};const typeNameIdOfOutput=await first(output,itemTypes.associatedtype,"");const typeNameIdOfFnPtr=await first(fn,itemTypes.primitive,"");const typeNameIdOfFn=await first(fn,itemTypes.trait,"core::ops");const typeNameIdOfFnMut=await first(fnMut,itemTypes.trait,"core::ops");const typeNameIdOfFnOnce=await first(fnOnce,itemTypes.trait,"core::ops");const typeNameIdOfArray=await first(array,itemTypes.primitive,"");const typeNameIdOfSlice=await first(slice,itemTypes.primitive,"");const typeNameIdOfArrayOrSlice=await first(arrayOrSlice,itemTypes.primitive,"");const typeNameIdOfTuple=await first(tuple,itemTypes.primitive,"");const typeNameIdOfUnit=await first(unit,itemTypes.primitive,"");const typeNameIdOfTupleOrUnit=await first(tupleOrUnit,itemTypes.primitive,"");const typeNameIdOfReference=await first(reference,itemTypes.primitive,"");const typeNameIdOfPointer=await first(pointer,itemTypes.primitive,"");const typeNameIdOfHof=await first(hof,itemTypes.primitive,"");const typeNameIdOfNever=await first(never,itemTypes.primitive,"");this.typeNameIds={typeNameIdOfOutput,typeNameIdOfFnPtr,typeNameIdOfFn,typeNameIdOfFnMut,typeNameIdOfFnOnce,typeNameIdOfArray,typeNameIdOfSlice,typeNameIdOfArrayOrSlice,typeNameIdOfTuple,typeNameIdOfUnit,typeNameIdOfTupleOrUnit,typeNameIdOfReference,typeNameIdOfPointer,typeNameIdOfHof,typeNameIdOfNever,};return this.typeNameIds;}static parseQuery(userQuery){function newParsedQuery(userQuery){return{userQuery,elems:[],returned:[],foundElems:0,totalElems:0,literalSearch:false,hasReturnArrow:false,error:null,correction:null,proposeCorrectionFrom:null,proposeCorrectionTo:null,typeFingerprint:new Uint32Array(4),};}function parseInput(query,parserState){let foundStopChar=true;while(parserState.pos"){if(isReturnArrow(parserState)){query.hasReturnArrow=true;break;}throw["Unexpected ",c," (did you mean ","->","?)"];}else if(parserState.pos>0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]];}throw["Unexpected ",c];}else if(c===" "){skipWhitespace(parserState);continue;}if(!foundStopChar){let extra=EMPTY_STRING_ARRAY;if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"];}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"];}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,];}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,];}const before=query.elems.length;getFilteredNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1;}foundStopChar=false;}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",];}while(parserState.pos{const ty=itemTypeFromName(elem.typeFilter);if(ty===itemTypes.generic&&elem.generics.length!==0){throw["Generic type parameter ",elem.name," does not accept generic parameters",];}for(const generic of elem.generics){checkTypeFilter(generic);}for(const constraints of elem.bindings.values()){for(const constraint of constraints){checkTypeFilter(constraint);}}};for(const elem of query.elems){checkTypeFilter(elem);}for(const elem of query.returned){checkTypeFilter(elem);}}catch(err){query=newParsedQuery(userQuery);if(Array.isArray(err)&&err.every(elem=>typeof elem==="string")){query.error=err;}else{throw err;}return query;}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1;}query.foundElems=query.elems.length+query.returned.length;query.totalElems=parserState.totalElems;return query;}async getName(id){const ni=this.database.getData("name");if(!ni){return null;}const name=await ni.at(id);return name===undefined||name===null?null:this.utf8decoder.decode(name);}async getDesc(id){const di=this.database.getData("desc");if(!di){return null;}const desc=await di.at(id);return desc===undefined||desc===null?null:this.utf8decoder.decode(desc);}async getAliasTarget(id){const ai=this.database.getData("alias");if(!ai){return null;}const bytes=await ai.at(id);if(bytes===undefined||bytes===null||bytes.length===0){return null;}else{const encoded=this.utf8decoder.decode(bytes);const decoded=JSON.parse(encoded);return decoded;}}async getEntryData(id){const ei=this.database.getData("entry");if(!ei){return null;}const encoded=this.utf8decoder.decode(await ei.at(id));if(encoded===""||encoded===undefined||encoded===null){return null;}const raw=JSON.parse(encoded);return{krate:raw[0],ty:raw[1],modulePath:raw[2]===0?null:raw[2]-1,exactModulePath:raw[3]===0?null:raw[3]-1,parent:raw[4]===0?null:raw[4]-1,traitParent:raw[5]===0?null:raw[5]-1,deprecated:raw[6]===1?true:false,associatedItemDisambiguator:raw.length===7?null:raw[7],};}async getPathData(id){const pi=this.database.getData("path");if(!pi){return null;}const encoded=this.utf8decoder.decode(await pi.at(id));if(encoded===""||encoded===undefined||encoded===null){return null;}const raw=JSON.parse(encoded);return{ty:raw[0],modulePath:raw[1],exactModulePath:raw[2]===0||raw[2]===undefined?raw[1]:raw[2],};}async getFunctionData(id){const fi=this.database.getData("function");if(!fi){return null;}const encoded=this.utf8decoder.decode(await fi.at(id));if(encoded===""||encoded===undefined||encoded===null){return null;}const raw=JSON.parse(encoded);const parser=new VlqHexDecoder(raw[0],async functionSearchType=>{if(typeof functionSearchType==="number"){return null;}const INPUTS_DATA=0;const OUTPUT_DATA=1;let inputs_;let output_;if(typeof functionSearchType[INPUTS_DATA]==="number"){inputs_=Promise.all([this.buildItemSearchType(functionSearchType[INPUTS_DATA]),]);}else{inputs_=this.buildItemSearchTypeAll(functionSearchType[INPUTS_DATA]);}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){output_=Promise.all([this.buildItemSearchType(functionSearchType[OUTPUT_DATA]),]);}else{output_=this.buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA]);}}else{output_=Promise.resolve(EMPTY_GENERICS_ARRAY);}const where_clause_=[];const l=functionSearchType.length;for(let i=2;i{const[name,path]=entry!==null&&entry[field]!==null?await Promise.all([this.getName(entry[field]),this.getPathData(entry[field])]):[null,null];if(name!==null&&path!==null){return{name,path};}return null;};const[moduleName,modulePathData,exactModuleName,exactModulePathData,parent,traitParent,crateOrNull,]=await Promise.all([entry&&entry.modulePath!==null?this.getName(entry.modulePath):null,entry&&entry.modulePath!==null?this.getPathData(entry.modulePath):null,entry&&entry.exactModulePath!==null?this.getName(entry.exactModulePath):null,entry&&entry.exactModulePath!==null?this.getPathData(entry.exactModulePath):null,buildParentLike("parent"),buildParentLike("traitParent"),entry?this.getName(entry.krate):"",]);const crate=crateOrNull===null?"":crateOrNull;const name=name_===null?"":name_;const normalizedName=(name.indexOf("_")===-1?name:name.replace(/_/g,"")).toLowerCase();const modulePath=modulePathData===null||moduleName===null?"":(modulePathData.modulePath===""?moduleName:`${modulePathData.modulePath}::${moduleName}`);return{id,crate,ty:entry?entry.ty:nonnull(path).ty,name,normalizedName,modulePath,exactModulePath:exactModulePathData===null||exactModuleName===null?modulePath:(exactModulePathData.exactModulePath===""?exactModuleName:`${exactModulePathData.exactModulePath}::${exactModuleName}`),entry,path,functionData,deprecated:entry?entry.deprecated:false,parent,traitParent,};}async buildItemSearchTypeAll(types){return types&&types.length>0?await Promise.all(types.map(type=>this.buildItemSearchType(type))):EMPTY_GENERICS_ARRAY;}async buildItemSearchType(type){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;const BINDINGS_DATA=2;let id,generics;let bindings;if(typeof type==="number"){id=type;generics=EMPTY_GENERICS_ARRAY;bindings=EMPTY_BINDINGS_MAP;}else{id=type[PATH_INDEX_DATA];generics=await this.buildItemSearchTypeAll(type[GENERICS_DATA]);if(type[BINDINGS_DATA]&&type[BINDINGS_DATA].length>0){bindings=new Map((await Promise.all(type[BINDINGS_DATA].map(async binding=>{const[assocType,constraints]=binding;const[k,v]=await Promise.all([this.buildItemSearchType(assocType).then(t=>t.id),this.buildItemSearchTypeAll(constraints),]);return k===null?EMPTY_BINDINGS_ARRAY:[[k,v]];},))).flat());}else{bindings=EMPTY_BINDINGS_MAP;}}let result;if(id<0){result={id,name:"",ty:itemTypes.generic,path:null,exactPath:null,generics,bindings,unboxFlag:true,};}else if(id===0){result={id:null,name:"",ty:itemTypes.generic,path:null,exactPath:null,generics,bindings,unboxFlag:true,};}else{const[name,path,type]=await Promise.all([this.getName(id-1),this.getPathData(id-1),this.getTypeData(id-1),]);if(path===undefined||path===null||type===undefined||type===null){return{id:null,name:"",ty:itemTypes.generic,path:null,exactPath:null,generics,bindings,unboxFlag:true,};}result={id:id-1,name,ty:path.ty,path:path.modulePath,exactPath:path.exactModulePath===null?path.modulePath:path.exactModulePath,generics,bindings,unboxFlag:type.searchUnbox,};}const cr=this.TYPES_POOL.get(result.id);if(cr){if(cr.generics.length===result.generics.length&&cr.generics!==result.generics&&cr.generics.every((x,i)=>result.generics[i]===x)){result.generics=cr.generics;}if(cr.bindings.size===result.bindings.size&&cr.bindings!==result.bindings){let ok=true;for(const[k,v]of cr.bindings.entries()){const v2=result.bindings.get(k);if(!v2){ok=false;break;}if(v!==v2&&v.length===v2.length&&v.every((x,i)=>v2[i]===x)){result.bindings.set(k,v);}else if(v!==v2){ok=false;break;}}if(ok){result.bindings=cr.bindings;}}if(cr.ty===result.ty&&cr.path===result.path&&cr.bindings===result.bindings&&cr.generics===result.generics&&cr.ty===result.ty&&cr.name===result.name&&cr.unboxFlag===result.unboxFlag){return cr;}}this.TYPES_POOL.set(result.id,result);return result;}async execQuery(parsedQuery,filterCrates,currentCrate){const queryLen=parsedQuery.elems.reduce((acc,next)=>acc+next.pathLast.length,0)+parsedQuery.returned.reduce((acc,next)=>acc+next.pathLast.length,0);const maxEditDistance=Math.floor(queryLen/3);const buildHrefAndPath=item=>{let displayPath;let href;let traitPath=null;const type=itemTypesName[item.ty];const name=item.name;let path=item.modulePath;let exactPath=item.exactModulePath;if(type==="mod"){displayPath=path+"::";href=this.rootPath+path.replace(/::/g,"/")+"/"+name+"/index.html";}else if(type==="import"){displayPath=item.modulePath+"::";href=this.rootPath+item.modulePath.replace(/::/g,"/")+"/index.html#reexport."+name;}else if(type==="primitive"||type==="keyword"||type==="attribute"){displayPath="";exactPath="";href=this.rootPath+path.replace(/::/g,"/")+"/"+type+"."+name+".html";}else if(type==="externcrate"){displayPath="";href=this.rootPath+name+"/index.html";}else if(item.parent){const myparent=item.parent;let anchor=type+"."+name;const parentType=itemTypesName[myparent.path.ty];let pageType=parentType;let pageName=myparent.name;exactPath=`${myparent.path.exactModulePath}::${myparent.name}`;if(parentType==="primitive"){displayPath=myparent.name+"::";exactPath=myparent.name;}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.modulePath.lastIndexOf("::");const enumName=item.modulePath.substr(enumNameIdx+2);path=item.modulePath.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName;}else{displayPath=path+"::"+myparent.name+"::";}if(item.entry&&item.entry.associatedItemDisambiguator!==null){anchor=item.entry.associatedItemDisambiguator+"/"+anchor;}href=this.rootPath+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html#"+anchor;}else{displayPath=item.modulePath+"::";href=this.rootPath+item.modulePath.replace(/::/g,"/")+"/"+type+"."+name+".html";}if(item.traitParent){const tparent=item.traitParent;traitPath=`${tparent.path.exactModulePath}::${tparent.name}::${name}`;}return[displayPath,href,`${exactPath}::${name}`,traitPath];};function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6);}return tmp;}const formatDisplayTypeSignature=async(obj,typeInfo,elems,returned)=>{const typeNameIds=await this.getTypeNameIds();const objType=obj.type;if(!objType){return{type:[],mappedNames:new Map(),whereClause:new Map()};}let fnInputs=null;let fnOutput=null;let mgens=null;if(typeInfo!=="elems"&&typeInfo!=="returned"){fnInputs=unifyFunctionTypes(objType.inputs,elems,objType.where_clause,null,mgensScratch=>{fnOutput=unifyFunctionTypes(objType.output,returned,objType.where_clause,mgensScratch,mgensOut=>{mgens=mgensOut;return true;},0,typeNameIds,);return!!fnOutput;},0,typeNameIds,);}else{const highlighted=unifyFunctionTypes(typeInfo==="elems"?objType.inputs:objType.output,typeInfo==="elems"?elems:returned,objType.where_clause,null,mgensOut=>{mgens=mgensOut;return true;},0,typeNameIds,);if(typeInfo==="elems"){fnInputs=highlighted;}else{fnOutput=highlighted;}}if(!fnInputs){fnInputs=objType.inputs;}if(!fnOutput){fnOutput=objType.output;}const mappedNames=new Map();const whereClause=new Map();const fnParamNames=obj.paramNames||[];const queryParamNames=[];const remapQuery=queryElem=>{if(queryElem.id!==null&&queryElem.id<0){queryParamNames[-1-queryElem.id]=queryElem.name;}if(queryElem.generics.length>0){queryElem.generics.forEach(remapQuery);}if(queryElem.bindings.size>0){[...queryElem.bindings.values()].flat().forEach(remapQuery);}};elems.forEach(remapQuery);returned.forEach(remapQuery);const pushText=(fnType,result)=>{if(!!(result.length%2)===!!fnType.highlighted){result.push("");}else if(result.length===0&&!!fnType.highlighted){result.push("");result.push("");}result[result.length-1]+=fnType.name;};const writeHof=async(fnType,result)=>{const hofOutput=fnType.bindings.get(typeNameIds.typeNameIdOfOutput)||[];const hofInputs=fnType.generics;pushText(fnType,result);pushText({name:" (",highlighted:false},result);let needsComma=false;for(const fnType of hofInputs){if(needsComma){pushText({name:", ",highlighted:false},result);}needsComma=true;await writeFn(fnType,result);}pushText({name:hofOutput.length===0?")":") -> ",highlighted:false,},result);if(hofOutput.length>1){pushText({name:"(",highlighted:false},result);}needsComma=false;for(const fnType of hofOutput){if(needsComma){pushText({name:", ",highlighted:false},result);}needsComma=true;await writeFn(fnType,result);}if(hofOutput.length>1){pushText({name:")",highlighted:false},result);}};const writeSpecialPrimitive=async(fnType,result)=>{if(fnType.id===typeNameIds.typeNameIdOfArray||fnType.id===typeNameIds.typeNameIdOfSlice||fnType.id===typeNameIds.typeNameIdOfTuple||fnType.id===typeNameIds.typeNameIdOfUnit){const[ob,sb]=fnType.id===typeNameIds.typeNameIdOfArray||fnType.id===typeNameIds.typeNameIdOfSlice?["[","]"]:["(",")"];pushText({name:ob,highlighted:fnType.highlighted},result);await onEachBtwnAsync(fnType.generics,nested=>writeFn(nested,result),()=>pushText({name:", ",highlighted:false},result),);pushText({name:sb,highlighted:fnType.highlighted},result);return true;}else if(fnType.id===typeNameIds.typeNameIdOfReference){pushText({name:"&",highlighted:fnType.highlighted},result);let prevHighlighted=false;await onEachBtwnAsync(fnType.generics,async value=>{prevHighlighted=!!value.highlighted;await writeFn(value,result);},value=>pushText({name:" ",highlighted:prevHighlighted&&value.highlighted,},result),);return true;}else if(fnType.id===typeNameIds.typeNameIdOfPointer){pushText({name:"*",highlighted:fnType.highlighted},result);if(fnType.generics.length<2){pushText({name:"const ",highlighted:fnType.highlighted},result);}let prevHighlighted=false;await onEachBtwnAsync(fnType.generics,async value=>{prevHighlighted=!!value.highlighted;await writeFn(value,result);},value=>pushText({name:" ",highlighted:prevHighlighted&&value.highlighted,},result),);return true;}else if(fnType.id===typeNameIds.typeNameIdOfFn||fnType.id===typeNameIds.typeNameIdOfFnMut||fnType.id===typeNameIds.typeNameIdOfFnOnce||fnType.id===typeNameIds.typeNameIdOfFnPtr){await writeHof(fnType,result);return true;}else if(fnType.id===typeNameIds.typeNameIdOfNever){pushText({name:"!",highlighted:fnType.highlighted},result);return true;}return false;};const writeFn=async(fnType,result)=>{if(fnType.id!==null&&fnType.id<0){if(fnParamNames[-1-fnType.id]===""){const generics=fnType.generics.length>0?fnType.generics:objType.where_clause[-1-fnType.id];for(const nested of generics){await writeFn(nested,result);}return;}else if(mgens){for(const[queryId,fnId]of mgens){if(fnId===fnType.id){mappedNames.set(queryParamNames[-1-queryId],fnParamNames[-1-fnType.id],);}}}pushText({name:fnParamNames[-1-fnType.id],highlighted:!!fnType.highlighted,},result);const where=[];await onEachBtwnAsync(fnType.generics,nested=>writeFn(nested,where),()=>pushText({name:" + ",highlighted:false},where),);if(where.length>0){whereClause.set(fnParamNames[-1-fnType.id],where);}}else{if(fnType.ty===itemTypes.primitive){if(await writeSpecialPrimitive(fnType,result)){return;}}else if(fnType.ty===itemTypes.trait&&(fnType.id===typeNameIds.typeNameIdOfFn||fnType.id===typeNameIds.typeNameIdOfFnMut||fnType.id===typeNameIds.typeNameIdOfFnOnce||fnType.id===typeNameIds.typeNameIdOfFnPtr)){await writeHof(fnType,result);return;}else if(fnType.name===""&&fnType.bindings.size===0&&fnType.generics.length!==0){pushText({name:"impl ",highlighted:false},result);if(fnType.generics.length>1){pushText({name:"(",highlighted:false},result);}await onEachBtwnAsync(fnType.generics,value=>writeFn(value,result),()=>pushText({name:", ",highlighted:false},result),);if(fnType.generics.length>1){pushText({name:")",highlighted:false},result);}return;}pushText(fnType,result);let hasBindings=false;if(fnType.bindings.size>0){await onEachBtwnAsync(await Promise.all([...fnType.bindings.entries()].map(async([key,values])=>[await this.getName(key),values],)),async([name,values])=>{if(values.length===1&&values[0].id<0&&`${fnType.name}::${name}`===fnParamNames[-1-values[0].id]){for(const value of values){await writeFn(value,[]);}return true;}if(!hasBindings){hasBindings=true;pushText({name:"<",highlighted:false},result);}pushText({name,highlighted:false},result);pushText({name:values.length!==1?"=(":"=",highlighted:false,},result);await onEachBtwnAsync(values||[],value=>writeFn(value,result),()=>pushText({name:" + ",highlighted:false},result),);if(values.length!==1){pushText({name:")",highlighted:false},result);}},()=>pushText({name:", ",highlighted:false},result),);}if(fnType.generics.length>0){pushText({name:hasBindings?", ":"<",highlighted:false},result);}await onEachBtwnAsync(fnType.generics,value=>writeFn(value,result),()=>pushText({name:", ",highlighted:false},result),);if(hasBindings||fnType.generics.length>0){pushText({name:">",highlighted:false},result);}}};const type=[];await onEachBtwnAsync(fnInputs,fnType=>writeFn(fnType,type),()=>pushText({name:", ",highlighted:false},type),);pushText({name:" -> ",highlighted:false},type);await onEachBtwnAsync(fnOutput,fnType=>writeFn(fnType,type),()=>pushText({name:", ",highlighted:false},type),);return{type,mappedNames,whereClause};};const transformResults=(results,typeInfo,duplicates)=>{const out=[];const traitImplIdxMap=new Map();for(const result of results){const item=result.item;if(item.id!==-1){const res=buildHrefAndPath(item);const obj=Object.assign({parent:item.parent?{path:item.parent.path.modulePath,exactPath:item.parent.path.exactModulePath||item.parent.path.modulePath,name:item.parent.name,ty:item.parent.path.ty,}:undefined,type:item.functionData&&item.functionData.functionSignature?item.functionData.functionSignature:undefined,paramNames:item.functionData&&item.functionData.paramNames?item.functionData.paramNames:undefined,dist:result.dist,path_dist:result.path_dist,index:result.index,desc:this.getDesc(result.id),item,displayPath:pathSplitter(res[0]),fullPath:"",traitPath:null,href:"",displayTypeSignature:null,},result);let ty=obj.item.ty;if(ty===itemTypes.tymethod){ty=itemTypes.method;}obj.fullPath=res[2]+"|"+ty;if(res[3]){obj.traitPath=res[3]+"|"+obj.item.ty;}if(duplicates.has(obj.fullPath)){continue;}if(obj.traitPath&&duplicates.has(obj.traitPath)){continue;}if(obj.item.ty===itemTypes.import&&duplicates.has(res[2])){continue;}if(duplicates.has(res[2]+"|"+itemTypes.import)){continue;}duplicates.add(obj.fullPath);duplicates.add(res[2]);if(typeInfo!==null){obj.displayTypeSignature=formatDisplayTypeSignature(obj,typeInfo,result.elems,result.returned,);}obj.href=res[1];if(obj.traitPath){let list=traitImplIdxMap.get(obj.traitPath);if(list===undefined){list=[];}list.push(out.length);traitImplIdxMap.set(obj.traitPath,list);}else{const toRemoveList=traitImplIdxMap.get(obj.fullPath);if(toRemoveList){removeIdxListAsc(out,toRemoveList);}traitImplIdxMap.delete(obj.fullPath);}out.push(obj);if(out.length>=MAX_RESULTS){break;}}}return out;};const sortAndTransformResults=async function*(results,typeInfo,preferredCrate,duplicates){const userQuery=parsedQuery.userQuery;const normalizedUserQuery=parsedQuery.userQuery.toLowerCase();const isMixedCase=normalizedUserQuery!==userQuery;const result_list=[];for(const result of results.values()){if(!result){continue;}const item=result.item;if(filterCrates!==null&&item.crate!==filterCrates){continue;}if(item){result_list.push(result);}else{continue;}}result_list.sort((aaa,bbb)=>{const aai=aaa.item;const bbi=bbb.item;let a;let b;if(typeInfo===null){if(isMixedCase){a=Number(aai.name!==userQuery);b=Number(bbi.name!==userQuery);if(a!==b){return a-b;}}a=Number(aai.normalizedName!==normalizedUserQuery);b=Number(bbi.normalizedName!==normalizedUserQuery);if(a!==b){return a-b;}a=Number(aaa.index<0);b=Number(bbb.index<0);if(a!==b){return a-b;}}a=Number(aaa.path_dist);b=Number(bbb.path_dist);if(a!==b){return a-b;}a=Number(aaa.index);b=Number(bbb.index);if(a!==b){return a-b;}a=Number(aaa.dist);b=Number(bbb.dist);if(a!==b){return a-b;}a=Number(aaa.is_alias);b=Number(bbb.is_alias);if(a!==b){return a-b;}a=Number(aai.deprecated);b=Number(bbi.deprecated);if(a!==b){return a-b;}a=Number(aai.crate!==preferredCrate);b=Number(bbi.crate!==preferredCrate);if(a!==b){return a-b;}a=Number(aai.normalizedName.length);b=Number(bbi.normalizedName.length);if(a!==b){return a-b;}let aw=aai.normalizedName;let bw=bbi.normalizedName;if(aw!==bw){return(aw>bw?+1:-1);}const di=this.database.getData("desc");if(di){a=Number(di.isEmpty(aaa.id));b=Number(di.isEmpty(bbb.id));if(a!==b){return a-b;}}a=Number(aai.ty);b=Number(bbi.ty);if(a!==b){return a-b;}const ap=aai.modulePath;const bp=bbi.modulePath;aw=ap===undefined?"":ap;bw=bp===undefined?"":bp;if(aw!==bw){return(aw>bw?+1:-1);}return 0;});const transformed_result_list=transformResults(result_list,typeInfo,duplicates);yield*transformed_result_list;return transformed_result_list.length;}.bind(this);function unifyFunctionTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb,unboxingDepth,typeNameIds,){if(unboxingDepth>=UNBOXING_LIMIT){return null;}const mgens=mgensIn===null?null:new Map(mgensIn);if(queryElems.length===0){return solutionCb(mgens)?fnTypesIn:null;}if(!fnTypesIn||fnTypesIn.length===0){return null;}const ql=queryElems.length;const fl=fnTypesIn.length;if(ql===1&&queryElems[0].generics.length===0&&queryElems[0].bindings.size===0){const queryElem=queryElems[0];for(const[i,fnType]of fnTypesIn.entries()){if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens,typeNameIds,)){continue;}if(fnType.id!==null&&fnType.id<0&&queryElem.id!==null&&queryElem.id<0){if(mgens&&mgens.has(queryElem.id)&&mgens.get(queryElem.id)!==fnType.id){continue;}const mgensScratch=new Map(mgens);mgensScratch.set(queryElem.id,fnType.id);if(!solutionCb||solutionCb(mgensScratch)){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({highlighted:true,},fnType,{generics:whereClause[-1-fnType.id],});return highlighted;}}else if(solutionCb(mgens?new Map(mgens):null)){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({highlighted:true,},fnType,{generics:unifyGenericTypes(fnType.generics,queryElem.generics,whereClause,mgens?new Map(mgens):null,solutionCb,unboxingDepth,typeNameIds,)||fnType.generics,});return highlighted;}}for(const[i,fnType]of fnTypesIn.entries()){if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,typeNameIds,)){continue;}if(fnType.id!==null&&fnType.id<0){const highlightedGenerics=unifyFunctionTypes(whereClause[(-fnType.id)-1],queryElems,whereClause,mgens,solutionCb,unboxingDepth+1,typeNameIds,);if(highlightedGenerics){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({highlighted:true,},fnType,{generics:highlightedGenerics,});return highlighted;}}else{const highlightedGenerics=unifyFunctionTypes([...Array.from(fnType.bindings.values()).flat(),...fnType.generics],queryElems,whereClause,mgens?new Map(mgens):null,solutionCb,unboxingDepth+1,typeNameIds,);if(highlightedGenerics){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({},fnType,{generics:highlightedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,highlightedGenerics.splice(0,v.length)];})),});return highlighted;}}}return null;}const fnTypes=fnTypesIn.slice();const flast=fl-1;const qlast=ql-1;const queryElem=queryElems[qlast];let queryElemsTmp=null;for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens,typeNameIds,)){continue;}let mgensScratch;if(fnType.id!==null&&queryElem.id!==null&&fnType.id<0){mgensScratch=new Map(mgens);if(mgensScratch.has(queryElem.id)&&mgensScratch.get(queryElem.id)!==fnType.id){continue;}mgensScratch.set(queryElem.id,fnType.id);}else{mgensScratch=mgens;}fnTypes[i]=fnTypes[flast];fnTypes.length=flast;if(!queryElemsTmp){queryElemsTmp=queryElems.slice(0,qlast);}let unifiedGenerics=[];let unifiedGenericsMgens=null;const passesUnification=unifyFunctionTypes(fnTypes,queryElemsTmp,whereClause,mgensScratch,mgensScratch=>{if(fnType.generics.length===0&&queryElem.generics.length===0&&fnType.bindings.size===0&&queryElem.bindings.size===0){return solutionCb(mgensScratch);}const solution=unifyFunctionTypeCheckBindings(fnType,queryElem,whereClause,mgensScratch,unboxingDepth,typeNameIds,);if(!solution){return false;}const simplifiedGenerics=solution.simplifiedGenerics;for(const simplifiedMgens of solution.mgens){unifiedGenerics=unifyGenericTypes(simplifiedGenerics,queryElem.generics,whereClause,simplifiedMgens,solutionCb,unboxingDepth,typeNameIds,);if(unifiedGenerics!==null){unifiedGenericsMgens=simplifiedMgens;return true;}}return false;},unboxingDepth,typeNameIds,);if(passesUnification){passesUnification.length=fl;passesUnification[flast]=passesUnification[i];passesUnification[i]=Object.assign({},fnType,{highlighted:true,generics:unifiedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,queryElem.bindings.has(k)?unifyFunctionTypes(v,queryElem.bindings.get(k),whereClause,unifiedGenericsMgens,solutionCb,unboxingDepth,typeNameIds,):unifiedGenerics.splice(0,v.length)];})),});return passesUnification;}fnTypes[flast]=fnTypes[i];fnTypes[i]=fnType;fnTypes.length=fl;}for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,typeNameIds,)){continue;}const generics=fnType.id!==null&&fnType.id<0?whereClause[(-fnType.id)-1]:fnType.generics;const bindings=fnType.bindings?Array.from(fnType.bindings.values()).flat():[];const passesUnification=unifyFunctionTypes(fnTypes.toSpliced(i,1,...bindings,...generics),queryElems,whereClause,mgens,solutionCb,unboxingDepth+1,typeNameIds,);if(passesUnification){const highlightedGenerics=passesUnification.slice(i,i+generics.length+bindings.length,);const highlightedFnType=Object.assign({},fnType,{generics:highlightedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,highlightedGenerics.splice(0,v.length)];})),});return passesUnification.toSpliced(i,generics.length+bindings.length,highlightedFnType,);}}return null;}function unifyGenericTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb,unboxingDepth,typeNameIds,){if(unboxingDepth>=UNBOXING_LIMIT){return null;}const mgens=mgensIn===null?null:new Map(mgensIn);if(queryElems.length===0){return solutionCb(mgens)?fnTypesIn:null;}if(!fnTypesIn||fnTypesIn.length===0){return null;}const fnType=fnTypesIn[0];const queryElem=queryElems[0];if(unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens,typeNameIds,)){if(fnType.id!==null&&fnType.id<0&&queryElem.id!==null&&queryElem.id<0){if(!mgens||!mgens.has(queryElem.id)||mgens.get(queryElem.id)===fnType.id){const mgensScratch=new Map(mgens);mgensScratch.set(queryElem.id,fnType.id);const fnTypesRemaining=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgensScratch,solutionCb,unboxingDepth,typeNameIds,);if(fnTypesRemaining){const highlighted=[fnType,...fnTypesRemaining];highlighted[0]=Object.assign({highlighted:true,},fnType,{generics:whereClause[-1-fnType.id],});return highlighted;}}}else{let unifiedGenerics;const fnTypesRemaining=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgens,mgensScratch=>{const solution=unifyFunctionTypeCheckBindings(fnType,queryElem,whereClause,mgensScratch,unboxingDepth,typeNameIds,);if(!solution){return false;}const simplifiedGenerics=solution.simplifiedGenerics;for(const simplifiedMgens of solution.mgens){unifiedGenerics=unifyGenericTypes(simplifiedGenerics,queryElem.generics,whereClause,simplifiedMgens,solutionCb,unboxingDepth,typeNameIds,);if(unifiedGenerics!==null){return true;}}},unboxingDepth,typeNameIds,);if(fnTypesRemaining){const highlighted=[fnType,...fnTypesRemaining];highlighted[0]=Object.assign({highlighted:true,},fnType,{generics:unifiedGenerics||fnType.generics,});return highlighted;}}}if(unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,typeNameIds,)){let highlightedRemaining;if(fnType.id!==null&&fnType.id<0){const highlightedGenerics=unifyFunctionTypes(whereClause[(-fnType.id)-1],[queryElem],whereClause,mgens,mgensScratch=>{const hl=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgensScratch,solutionCb,unboxingDepth,typeNameIds,);if(hl){highlightedRemaining=hl;}return hl;},unboxingDepth+1,typeNameIds,);if(highlightedGenerics){return[Object.assign({highlighted:true,},fnType,{generics:highlightedGenerics,}),...highlightedRemaining];}}else{const highlightedGenerics=unifyGenericTypes([...Array.from(fnType.bindings.values()).flat(),...fnType.generics,],[queryElem],whereClause,mgens,mgensScratch=>{const hl=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgensScratch,solutionCb,unboxingDepth,typeNameIds,);if(hl){highlightedRemaining=hl;}return hl;},unboxingDepth+1,typeNameIds,);if(highlightedGenerics){return[Object.assign({},fnType,{generics:highlightedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,highlightedGenerics.splice(0,v.length)];})),}),...highlightedRemaining];}}}return null;}const unifyFunctionTypeIsMatchCandidate=(fnType,queryElem,mgensIn,typeNameIds)=>{if(!typePassesFilter(queryElem.typeFilter,fnType.ty)){return false;}if(fnType.id!==null&&fnType.id<0&&queryElem.id!==null&&queryElem.id<0){if(mgensIn&&mgensIn.has(queryElem.id)&&mgensIn.get(queryElem.id)!==fnType.id){return false;}return true;}else{if(queryElem.id===typeNameIds.typeNameIdOfArrayOrSlice&&(fnType.id===typeNameIds.typeNameIdOfSlice||fnType.id===typeNameIds.typeNameIdOfArray)){}else if(queryElem.id===typeNameIds.typeNameIdOfTupleOrUnit&&(fnType.id===typeNameIds.typeNameIdOfTuple||fnType.id===typeNameIds.typeNameIdOfUnit)){}else if(queryElem.id===typeNameIds.typeNameIdOfHof&&(fnType.id===typeNameIds.typeNameIdOfFn||fnType.id===typeNameIds.typeNameIdOfFnMut||fnType.id===typeNameIds.typeNameIdOfFnOnce||fnType.id===typeNameIds.typeNameIdOfFnPtr)){}else if(fnType.id!==queryElem.id||queryElem.id===null){return false;}if((fnType.generics.length+fnType.bindings.size)===0&&queryElem.generics.length!==0){return false;}if(fnType.bindings.size0){const fnTypePath=fnType.path!==undefined&&fnType.path!==null?fnType.path.split("::"):[];if(queryElemPathLength>fnTypePath.length){return false;}let i=0;for(const path of fnTypePath){if(path===queryElem.pathWithoutLast[i]){i+=1;if(i>=queryElemPathLength){break;}}}if(i0){let mgensSolutionSet=[mgensIn];for(const[name,constraints]of queryElem.bindings.entries()){if(mgensSolutionSet.length===0){return false;}if(!fnType.bindings.has(name)){return false;}const fnTypeBindings=fnType.bindings.get(name);mgensSolutionSet=mgensSolutionSet.flatMap(mgens=>{const newSolutions=[];unifyFunctionTypes(fnTypeBindings,constraints,whereClause,mgens,newMgens=>{newSolutions.push(newMgens);return false;},unboxingDepth,typeNameIds,);return newSolutions;});}if(mgensSolutionSet.length===0){return false;}const binds=Array.from(fnType.bindings.entries()).flatMap(entry=>{const[name,constraints]=entry;if(queryElem.bindings.has(name)){return[];}else{return constraints;}});if(simplifiedGenerics.length>0){simplifiedGenerics=[...binds,...simplifiedGenerics];}else{simplifiedGenerics=binds;}return{simplifiedGenerics,mgens:mgensSolutionSet};}return{simplifiedGenerics,mgens:[mgensIn]};}function unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth,typeNameIds,){if(unboxingDepth>=UNBOXING_LIMIT){return false;}if(fnType.id!==null&&fnType.id<0){if(!whereClause){return false;}return checkIfInList(whereClause[(-fnType.id)-1],queryElem,whereClause,mgens,unboxingDepth,typeNameIds,);}else if(fnType.unboxFlag&&(fnType.generics.length>0||fnType.bindings.size>0)){const simplifiedGenerics=[...fnType.generics,...Array.from(fnType.bindings.values()).flat(),];return checkIfInList(simplifiedGenerics,queryElem,whereClause,mgens,unboxingDepth,typeNameIds,);}return false;}function containsTypeFromQuery(elems,list,where_clause,typeNameIds){if(!list)return false;for(const ty of elems){if(ty.id!==null&&ty.id<0){continue;}if(checkIfInList(list,ty,where_clause,null,0,typeNameIds)){return true;}}return false;}function checkIfInList(list,elem,whereClause,mgens,unboxingDepth,typeNameIds){for(const entry of list){if(checkType(entry,elem,whereClause,mgens,unboxingDepth,typeNameIds)){return true;}}return false;}const checkType=(row,elem,whereClause,mgens,unboxingDepth,typeNameIds)=>{if(unboxingDepth>=UNBOXING_LIMIT){return false;}if(row.id!==null&&elem.id!==null&&row.id>0&&elem.id>0&&elem.pathWithoutLast.length===0&&row.generics.length===0&&elem.generics.length===0&&row.bindings.size===0&&elem.bindings.size===0&&elem.id!==typeNameIds.typeNameIdOfArrayOrSlice&&elem.id!==typeNameIds.typeNameIdOfHof&&elem.id!==typeNameIds.typeNameIdOfTupleOrUnit){return row.id===elem.id&&typePassesFilter(elem.typeFilter,row.ty);}else{return unifyFunctionTypes([row],[elem],whereClause,mgens,()=>true,unboxingDepth,typeNameIds,);}};const checkTypeMgensForConflict=mgens=>{if(!mgens){return true;}const fnTypes=new Set();for(const[_qid,fid]of mgens){if(fnTypes.has(fid)){return false;}fnTypes.add(fid);}return true;};function checkPath(contains,path){if(contains.length===0){return 0;}const maxPathEditDistance=parsedQuery.literalSearch?0:Math.floor(contains.reduce((acc,next)=>acc+next.length,0)/3,);let ret_dist=maxPathEditDistance+1;const length=path.length;const clength=contains.length;pathiter:for(let i=length-clength;i>=0;i-=1){let dist_total=0;for(let x=0;xmaxPathEditDistance){continue pathiter;}dist_total+=dist;}}ret_dist=Math.min(ret_dist,Math.round(dist_total/clength));}return ret_dist>maxPathEditDistance?null:ret_dist;}function checkRowPath(contains,row){if(contains.length===0){return 0;}const path=row.modulePath.split("::");if(row.parent&&row.parent.name){path.push(row.parent.name.toLowerCase());}return checkPath(contains,path);}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;return filter===itemParents.get(type);}const innerRunNameQuery=async function*(currentCrate){const index=this.database.getData("normalizedName");if(!index){return;}const idDuplicates=new Set();const pathDuplicates=new Set();let count=0;const prefixResults=[];const normalizedUserQuery=parsedQuery.userQuery.replace(/[_"]/g,"").toLowerCase();const handleAlias=async(name,alias,dist,index)=>{const item=nonnull(await this.getRow(alias,false));const path_dist=name.includes(" ")||parsedQuery.elems.length===0?0:checkRowPath(parsedQuery.elems[0].pathWithoutLast,item);if(path_dist===null){return null;}return{id:alias,dist,path_dist,index,alias:name,is_alias:true,elems:[],returned:[],item,};};const flush=async function*(data){const satr=sortAndTransformResults(await Promise.all(data),null,currentCrate,pathDuplicates,);data.length=0;for await(const processed of satr){yield processed;count+=1;if((count&0x7F)===0){await yieldToBrowser();}if(count>=MAX_RESULTS){return true;}}return false;};const aliasResults=await index.search(normalizedUserQuery);if(aliasResults){for(const id of aliasResults.matches().entries()){const[name,alias]=await Promise.all([this.getName(id),this.getAliasTarget(id),]);if(name!==null&&alias!==null&&!idDuplicates.has(id)&&name.replace(/[_"]/g,"").toLowerCase()===normalizedUserQuery){prefixResults.push(handleAlias(name,alias,0,0));idDuplicates.add(id);}}}if(parsedQuery.error!==null||parsedQuery.elems.length===0){yield*flush(prefixResults);return;}const elem=parsedQuery.elems[0];const typeFilter=itemTypeFromName(elem.typeFilter);const handleNameSearch=async id=>{const row=await this.getRow(id,false);if(!row||!row.entry){return null;}if(!typePassesFilter(typeFilter,row.ty)||(filterCrates!==null&&row.crate!==filterCrates)){return null;}let pathDist=0;if(elem.fullPath.length>1){pathDist=checkRowPath(elem.pathWithoutLast,row);if(pathDist===null){return null;}}if(parsedQuery.literalSearch){return row.name.toLowerCase()===elem.pathLast?{id,dist:0,path_dist:0,index:0,elems:[],returned:[],is_alias:false,item:row,}:null;}else{return{id,dist:editDistance(row.normalizedName,elem.normalizedPathLast,maxEditDistance,),path_dist:pathDist,index:row.normalizedName.indexOf(elem.normalizedPathLast),elems:[],returned:[],is_alias:false,item:row,};}};if(elem.normalizedPathLast===""){const l=index.length;for(let id=0;id{let i=0;const l=idx.length;while(i{if(!elem){return empty_postings_list;}const typeFilter=itemTypeFromName(elem.typeFilter);const[searchResults,upla,uplb]=await Promise.all([index.search(elem.normalizedPathLast),unpackPostingsListAll(elem.generics,polarity),unpackPostingsListBindings(elem.bindings,polarity),]);const typePromises=[];if(typeFilter!==itemTypes.generic&&searchResults){for(const id of searchResults.matches().entries()){typePromises.push(Promise.all([this.getName(id),this.getTypeData(id),this.getPathData(id),]).then(([name,typeData,pathData])=>[id,name,typeData,pathData]));}}const types=(await Promise.all(typePromises)).filter(([_id,name,ty,path])=>name!==null&&name.toLowerCase()===elem.pathLast&&ty&&!ty[polarity].every(bitmap=>{return bitmap.isEmpty();})&&path&&path.ty!==itemTypes.associatedtype&&(elem.pathWithoutLast.length===0||checkPath(elem.pathWithoutLast,path.modulePath.split("::"),)===0),);if(types.length===0){const areGenericsAllowed=typeFilter===itemTypes.generic||(typeFilter===-1&&(parsedQuery.totalElems>1||parsedQuery.hasReturnArrow)&&elem.pathWithoutLast.length===0&&elem.generics.length===0&&elem.bindings.size===0);if(typeFilter!==itemTypes.generic&&(elem.name.length>=3||!areGenericsAllowed)){let chosenName=null;let chosenType=[];let chosenPath=[];let chosenId=[];let chosenDist=Number.MAX_SAFE_INTEGER;const levResults=index.searchLev(elem.normalizedPathLast);for await(const searchResults of levResults){for(const id of searchResults.matches().entries()){const[name,ty,path]=await Promise.all([this.getName(id),this.getTypeData(id),this.getPathData(id),]);if(name!==null&&ty!==null&&path!==null&&!ty[polarity].every(bitmap=>{return bitmap.isEmpty();})&&path.ty!==itemTypes.associatedtype){let dist=editDistance(name,elem.pathLast,maxEditDistance,);if(elem.pathWithoutLast.length!==0){const pathDist=checkPath(elem.pathWithoutLast,path.modulePath.split("::"),);dist+=pathDist===null?Number.MAX_SAFE_INTEGER:pathDist;}if(name===chosenName){chosenId.push(id);chosenType.push(ty);chosenPath.push(path);}else if(dist{const p1=!pathData1?"":pathData1.modulePath;const p2=!pathData2?"":pathData2.modulePath;const n1=name1===null?"":name1;const n2=name2===null?"":name2;if(p1.length!==p2.length){return p1.length>p2.length?+1:-1;}if(n1.length!==n2.length){return n1.length>n2.length?+1:-1;}if(n1!==n2){return n1>n2?+1:-1;}if(p1!==p2){return p1>p2?+1:-1;}return 0;});const results=[];for(const[id,_name,typeData]of types){if(!typeData||typeData[polarity].every(bitmap=>{return bitmap.isEmpty();})){continue;}for(const{invertedIndex:genericsIdx,queryElem:generics}of upla){for(const{invertedIndex:bindingsIdx,queryElem:bindings}of uplb){results.push({invertedIndex:intersectInvertedIndexes(typeData[polarity],genericsIdx,bindingsIdx,),queryElem:{name:elem.name,id,typeFilter,generics,bindings,fullPath:elem.fullPath,pathLast:elem.pathLast,normalizedPathLast:elem.normalizedPathLast,pathWithoutLast:elem.pathWithoutLast,},});if((results.length&0x7F)===0){await yieldToBrowser();}}}}return results;};const unpackPostingsListAll=async(elems,polarity)=>{if(!elems||elems.length===0){return nested_everything_postings_list;}const[firstPostingsList,remainingAll]=await Promise.all([unpackPostingsList(elems[0],polarity),unpackPostingsListAll(elems.slice(1),polarity),]);const results=[];for(const{invertedIndex:firstIdx,queryElem:firstElem,}of firstPostingsList){for(const{invertedIndex:remainingIdx,queryElem:remainingElems,}of remainingAll){results.push({invertedIndex:intersectInvertedIndexes(firstIdx,remainingIdx),queryElem:[firstElem,...remainingElems],});if((results.length&0x7F)===0){await yieldToBrowser();}}}return results;};const unpackPostingsListBindings=async(elems,polarity)=>{if(!elems){return[{invertedIndex:everything_inverted_index,queryElem:new Map(),}];}const firstKey=elems.keys().next().value;if(firstKey===undefined){return[{invertedIndex:everything_inverted_index,queryElem:new Map(),}];}const firstList=elems.get(firstKey);if(firstList===undefined){return[{invertedIndex:everything_inverted_index,queryElem:new Map(),}];}elems.delete(firstKey);const[firstKeyIds,firstPostingsList,remainingAll]=await Promise.all([index.search(firstKey),unpackPostingsListAll(firstList,polarity),unpackPostingsListBindings(elems,polarity),]);if(!firstKeyIds){elems.set(firstKey,firstList);return[{invertedIndex:empty_inverted_index,queryElem:new Map(),}];}const results=[];for(const keyId of firstKeyIds.matches().entries()){for(const{invertedIndex:firstIdx,queryElem:firstElem,}of firstPostingsList){for(const{invertedIndex:remainingIdx,queryElem:remainingElems,}of remainingAll){const elems=new Map(remainingElems);elems.set(keyId,firstElem);results.push({invertedIndex:intersectInvertedIndexes(firstIdx,remainingIdx),queryElem:elems,});if((results.length&0x7F)===0){await yieldToBrowser();}}}}elems.set(firstKey,firstList);if(results.length===0){return[{invertedIndex:empty_inverted_index,queryElem:new Map(),}];}return results;};const[allInputs,allOutput,typeNameIds]=await Promise.all([unpackPostingsListAll(inputs,"invertedFunctionInputsIndex"),unpackPostingsListAll(output,"invertedFunctionOutputIndex"),this.getTypeNameIds(),]);let checkCounter=0;const queryPlan=[];for(const{invertedIndex:inputsIdx,queryElem:inputs}of allInputs){for(const{invertedIndex:outputIdx,queryElem:output}of allOutput){const invertedIndex=intersectInvertedIndexes(inputsIdx,outputIdx);for(const[size,bitmap]of invertedIndex.entries()){checkCounter+=1;if((checkCounter&0x7F)===0){await yieldToBrowser();}if(!queryPlan[size]){queryPlan[size]=[];}queryPlan[size].push({bitmap,inputs,output,});}}}const resultPromises=[];const dedup=new Set();let resultCounter=0;const isReturnTypeQuery=inputs.length===0;const pushToBottom=[];plan:for(const queryStep of queryPlan){for(const{bitmap,inputs,output}of queryStep){for(const id of bitmap.entries()){checkCounter+=1;if((checkCounter&0x7F)===0){await yieldToBrowser();}resultPromises.push(this.getFunctionData(id).then(async fnData=>{if(!fnData||!fnData.functionSignature){return null;}checkCounter+=1;if((checkCounter&0x7F)===0){await yieldToBrowser();}const functionSignature=fnData.functionSignature;if(!unifyFunctionTypes(functionSignature.inputs,inputs,functionSignature.where_clause,null,mgens=>{return!!unifyFunctionTypes(functionSignature.output,output,functionSignature.where_clause,mgens,checkTypeMgensForConflict,0,typeNameIds,);},0,typeNameIds,)){return null;}const item=await this.getRow(id,true);if(!item){return null;}const result={id,dist:fnData.elemCount,path_dist:0,index:-1,elems:inputs,returned:output,is_alias:false,item,};const entry=item.entry;if((entry&&!isFnLikeTy(entry.ty))||(isReturnTypeQuery&&functionSignature&&containsTypeFromQuery(output,functionSignature.inputs,functionSignature.where_clause,typeNameIds,))){pushToBottom.push(result);return null;}return result;}));}}for await(const result of sortAndTransformResults(await Promise.all(resultPromises),typeInfo,currentCrate,dedup,)){if(resultCounter>=MAX_RESULTS){break plan;}yield result;resultCounter+=1;}resultPromises.length=0;}if(resultCounter>=MAX_RESULTS){return;}for await(const result of sortAndTransformResults(await Promise.all(pushToBottom),typeInfo,currentCrate,dedup,)){if(resultCounter>=MAX_RESULTS){break;}yield result;resultCounter+=1;}}.bind(this);if(parsedQuery.foundElems===1&&!parsedQuery.hasReturnArrow){const{promise:donePromise,resolve:doneResolve,reject:doneReject,}=Promise.withResolvers();const doneTimeout=timeout(250);return{"in_args":(async function*(){await Promise.race([donePromise,doneTimeout]);yield*innerRunTypeQuery(parsedQuery.elems,[],"elems",currentCrate);})(),"returned":(async function*(){await Promise.race([donePromise,doneTimeout]);yield*innerRunTypeQuery([],parsedQuery.elems,"returned",currentCrate);})(),"others":(async function*(){try{yield*innerRunNameQuery(currentCrate);doneResolve(null);}catch(e){doneReject(e);throw e;}})(),"query":parsedQuery,};}else if(parsedQuery.error!==null){return{"in_args":(async function*(){})(),"returned":(async function*(){})(),"others":innerRunNameQuery(currentCrate),"query":parsedQuery,};}else{const typeInfo=parsedQuery.elems.length===0?"returned":(parsedQuery.returned.length===0?"elems":"sig");return{"in_args":(async function*(){})(),"returned":(async function*(){})(),"others":parsedQuery.foundElems===0?(async function*(){})():innerRunTypeQuery(parsedQuery.elems,parsedQuery.returned,typeInfo,currentCrate,),"query":parsedQuery,};}}}let docSearch;const longItemTypes=["keyword","primitive type","module","extern crate","re-export","struct","enum","function","type alias","static","trait","","trait method","method","struct field","enum variant","macro","assoc type","constant","assoc const","union","foreign type","existential type","attribute macro","derive macro","trait alias","","attribute",];let currentResults;function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("search-tabs").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true;onEachLazy(document.querySelectorAll(".search-form",),form=>{if(hasClass(elem.firstElementChild,"loading")){addClass(form,"loading");}else{removeClass(form,"loading");}});}else{removeClass(elem,"selected");}iter+=1;});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true;}else{removeClass(elem,"active");}iter+=1;});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden");}else{addClass(correctionsElem[0],"hidden");}}else if(nb!==0){printTab(0);}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates);}return getNakedUrl()+extra+window.location.hash;}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"){return elem.value;}return null;}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;window.searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult();}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target&&target instanceof HTMLElement){target.focus();}}async function addTab(results,query,display,finishedCallback,isTypeSearch){const extraClass=display?" active":"";let output=document.createElement("ul");output.className="search-results "+extraClass;let count=0;const descList=[];const addNextResultToOutput=async obj=>{count+=1;const name=obj.item.name;const type=itemTypesName[obj.item.ty];const longType=longItemTypes[obj.item.ty];const typeName=longType.length!==0?`${longType}`:"?";const link=document.createElement("a");link.className="result-"+type;link.href=obj.href;const resultName=document.createElement("span");resultName.className="result-name";resultName.insertAdjacentHTML("beforeend",`${typeName}`);link.appendChild(resultName);let alias=" ";if(obj.alias!==undefined){alias=`
\ -${obj.alias} - see \ -
`;}resultName.insertAdjacentHTML("beforeend",`
${alias}\ -${obj.displayPath}${name}\ -
`);const description=document.createElement("div");description.className="desc";obj.desc.then(desc=>{if(desc!==null){description.insertAdjacentHTML("beforeend",desc);}});descList.push(obj.desc);if(obj.displayTypeSignature){const{type,mappedNames,whereClause}=await obj.displayTypeSignature;const displayType=document.createElement("div");type.forEach((value,index)=>{if(index%2!==0){const highlight=document.createElement("strong");highlight.appendChild(document.createTextNode(value));displayType.appendChild(highlight);}else{displayType.appendChild(document.createTextNode(value));}});if(mappedNames.size>0||whereClause.size>0){let addWhereLineFn=()=>{const line=document.createElement("div");line.className="where";line.appendChild(document.createTextNode("where"));displayType.appendChild(line);addWhereLineFn=()=>{};};for(const[qname,name]of mappedNames){if(name===qname){continue;}addWhereLineFn();const line=document.createElement("div");line.className="where";line.appendChild(document.createTextNode(` ${qname} matches `));const lineStrong=document.createElement("strong");lineStrong.appendChild(document.createTextNode(name));line.appendChild(lineStrong);displayType.appendChild(line);}for(const[name,innerType]of whereClause){if(innerType.length<=1){continue;}addWhereLineFn();const line=document.createElement("div");line.className="where";line.appendChild(document.createTextNode(` ${name}: `));innerType.forEach((value,index)=>{if(index%2!==0){const highlight=document.createElement("strong");highlight.appendChild(document.createTextNode(value));line.appendChild(highlight);}else{line.appendChild(document.createTextNode(value));}});displayType.appendChild(line);}}displayType.className="type-signature";link.appendChild(displayType);}link.appendChild(description);output.appendChild(link);results.next().then(async nextResult=>{if(nextResult.value){addNextResultToOutput(nextResult.value);}else{await Promise.all(descList);yieldToBrowser().then(()=>{finishedCallback(count,output);});}});};const firstResult=await results.next();let correctionOutput="";if(query.correction!==null&&isTypeSearch){const orig=query.returned.length>0?query.returned[0].name:query.elems[0].name;correctionOutput="

"+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${query.correction}" instead.

`;}if(query.proposeCorrectionFrom!==null&&isTypeSearch){const orig=query.proposeCorrectionFrom;const targ=query.proposeCorrectionTo;let message=`Type "${orig}" not found and used as generic parameter.`;if(targ!==null){message+=` Consider searching for "${targ}" instead.`;}correctionOutput=`

${message}

`;}if(firstResult.value){if(correctionOutput!==""){const h3=document.createElement("h3");h3.innerHTML=correctionOutput;output.appendChild(h3);}await addNextResultToOutput(firstResult.value);}else{output=document.createElement("div");if(correctionOutput!==""){const h3=document.createElement("h3");h3.innerHTML=correctionOutput;output.appendChild(h3);}output.className="search-failed"+extraClass;const dlroChannel=`https://doc.rust-lang.org/${getVar("channel")}`;if(query.userQuery!==""){output.innerHTML+="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:";}output.innerHTML+="Example searches:";yieldToBrowser().then(()=>finishedCallback(0,output));}return output;}function makeTab(tabNb,text,results,query,isTypeSearch,goToFirst){const isCurrentTab=window.searchState.currentTab===tabNb;const tabButton=document.createElement("button");tabButton.appendChild(document.createTextNode(text));tabButton.className=isCurrentTab?"selected":"";const tabCount=document.createElement("span");tabCount.className="count loading";tabCount.innerHTML="\u{2007}(\u{2007})\u{2007}\u{2007}";tabButton.appendChild(tabCount);return[tabButton,addTab(results,query,isCurrentTab,(count,output)=>{const search=window.searchState.outputElement();const error=query.error;if(count===0&&error!==null&&search){error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`;}else{error[index]=value;}});const errorReport=document.createElement("h3");errorReport.className="error";errorReport.innerHTML=`Query parser error: "${error.join("")}".`;search.insertBefore(errorReport,search.firstElementChild);}else if(goToFirst||(count===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};window.searchState.removeQueryParameters();const a=output.querySelector("a");if(a){a.click();return;}}const fmtNbElems=count<10?`\u{2007}(${count})\u{2007}\u{2007}`:count<100?`\u{2007}(${count})\u{2007}`:`\u{2007}(${count})`;tabCount.innerHTML=fmtNbElems;tabCount.className="count";printTab(window.searchState.currentTab);},isTypeSearch),];}async function showResults(docSearch,results,goToFirst,filterCrates){const search=window.searchState.outputElement();if(!search){return;}let crates="";const crateNames=await docSearch.getCrateNameList();if(crateNames.length>1){crates=" in 
"+"
";}nonnull(document.querySelector(".search-switcher")).innerHTML=`Search results${crates}`;const tabs=[];searchState.currentTab=0;if(results.query.error!==null){tabs.push(makeTab(0,"In Names",results.others,results.query,false,goToFirst));}else if(results.query.foundElems<=1&&results.query.returned.length===0&&!results.query.hasReturnArrow){tabs.push(makeTab(0,"In Names",results.others,results.query,false,goToFirst));tabs.push(makeTab(1,"In Parameters",results.in_args,results.query,true,false));tabs.push(makeTab(2,"In Return Types",results.returned,results.query,true,false));}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";tabs.push(makeTab(0,signatureTabTitle,results.others,results.query,true,goToFirst));}const tabsElem=document.createElement("div");tabsElem.id="search-tabs";const resultsElem=document.createElement("div");resultsElem.id="results";search.innerHTML="";for(const[tabNb,[tab,output]]of tabs.entries()){tabsElem.appendChild(tab);const isCurrentTab=window.searchState.currentTab===tabNb;const placeholder=document.createElement("div");placeholder.className=isCurrentTab?"search-results active":"search-results";placeholder.innerHTML="Loading...";output.then(output=>{if(placeholder.parentElement){placeholder.parentElement.replaceChild(output,placeholder);}});resultsElem.appendChild(placeholder);}if(window.searchState.rustdocToolbar){nonnull(nonnull(window.searchState.containerElement()).querySelector(".main-heading"),).appendChild(window.searchState.rustdocToolbar);}const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate);}search.appendChild(tabsElem);search.appendChild(resultsElem);window.searchState.showResults();window.searchState.focusedByTab=[null,null,null];let i=0;for(const elem of tabsElem.childNodes){const j=i;elem.onclick=()=>printTab(j);window.searchState.focusedByTab[i]=null;i+=1;}printTab(0);}function updateSearchHistory(url){const btn=document.querySelector("#search-button a");if(btn instanceof HTMLAnchorElement){btn.href=url;}if(!browserSupportsHistoryApi()){return;}const params=searchState.getQueryStringParams();if(!history.state&¶ms.search===undefined){history.pushState(null,"",url);}else{history.replaceState(null,"",url);}}async function search(forced){const query=DocSearch.parseQuery(nonnull(window.searchState.inputElement()).value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch();}return;}currentResults=query.userQuery;searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"];}if(filterCrates!==null&&(await docSearch.getCrateNameList()).indexOf(filterCrates)===-1){filterCrates=null;}searchState.title="\""+query.userQuery+"\" Search - Rust";updateSearchHistory(buildUrl(query.userQuery,filterCrates));await showResults(docSearch,await docSearch.execQuery(query,filterCrates,window.currentCrate),params.go_to_first,filterCrates);}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search();}function putBackSearch(){const search_input=window.searchState.inputElement();if(!search_input){return;}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()));}document.title=searchState.title;}}function registerSearchEvents(){const params=searchState.getQueryStringParams();const inputElement=nonnull(window.searchState.inputElement());if(inputElement.value===""){inputElement.value=params.search||"";}const searchAfter500ms=()=>{searchState.clearInputTimeout();window.searchState.timeout=setTimeout(search,500);};inputElement.onkeyup=searchAfter500ms;inputElement.oninput=searchAfter500ms;if(inputElement.form){inputElement.form.onsubmit=onSearchSubmit;}inputElement.onchange=e=>{if(e.target!==document.activeElement){return;}searchState.clearInputTimeout();setTimeout(search,0);};inputElement.onpaste=inputElement.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(!(e instanceof KeyboardEvent)){return;}if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return;}if(e.which===38){const active=document.activeElement;if(active){const previous=active.previousElementSibling;if(previous){previous.focus();}else{searchState.focus();}}e.preventDefault();}else if(e.which===40){const active=document.activeElement;if(active){const next=active.nextElementSibling;if(next){next.focus();}const rect=active.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault();}});inputElement.addEventListener("focus",()=>{putBackSearch();});}function updateCrate(ev){if(ev.target.value==="all crates"){const query=nonnull(window.searchState.inputElement()).value.trim();updateSearchHistory(buildUrl(query,null));}currentResults=null;search(true);}const makeUint8ArrayFromBase64=Uint8Array.fromBase64?Uint8Array.fromBase64:(string=>{const bytes_as_string=atob(string);const l=bytes_as_string.length;const bytes=new Uint8Array(l);for(let i=0;i{for(const key in callbacks){if(Object.hasOwn(callbacks,key)){window[key]=callbacks[key];}}databaseCallbacks=callbacks;if(window.searchIndex){window.rr_(window.searchIndex);}},loadTreeByHash:hashHex=>{const script=document.createElement("script");script.src=`${ROOT_PATH}search.index/${hashHex}.js`;script.onerror=e=>{if(databaseCallbacks){databaseCallbacks.err_rn_(hashHex,e);}};document.documentElement.appendChild(script);},loadDataByNameAndHash:(name,hashHex)=>{const script=document.createElement("script");script.src=`${ROOT_PATH}search.index/${name}/${hashHex}.js`;script.onerror=e=>{if(databaseCallbacks){databaseCallbacks.err_rd_(hashHex,e);}};document.documentElement.appendChild(script);},});}else if(typeof exports!=="undefined"){exports.initSearch=initSearch;} \ No newline at end of file diff --git a/network-poc/target-native/doc/static.files/settings-c38705f0.js b/network-poc/target-native/doc/static.files/settings-c38705f0.js deleted file mode 100644 index 7e4939e..0000000 --- a/network-poc/target-native/doc/static.files/settings-c38705f0.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict";(function(){const isSettingsPage=window.location.pathname.endsWith("/settings.html");function changeSetting(settingName,value){if(settingName==="theme"){const useSystem=value==="system preference"?"true":"false";updateLocalStorage("use-system-theme",useSystem);}updateLocalStorage(settingName,""+value);switch(settingName){case"theme":case"preferred-dark-theme":case"preferred-light-theme":updateTheme();updateLightAndDark();break;case"line-numbers":if(value===true){const f=window.rustdoc_add_line_numbers_to_examples;if(f!==undefined){f();}}else{const f=window.rustdoc_remove_line_numbers_from_examples;if(f!==undefined){f();}}break;case"hide-sidebar":if(value===true){addClass(document.documentElement,"hide-sidebar");}else{removeClass(document.documentElement,"hide-sidebar");}break;case"hide-toc":if(value===true){addClass(document.documentElement,"hide-toc");}else{removeClass(document.documentElement,"hide-toc");}break;case"hide-modnav":if(value===true){addClass(document.documentElement,"hide-modnav");}else{removeClass(document.documentElement,"hide-modnav");}break;case"sans-serif-fonts":if(value===true){addClass(document.documentElement,"sans-serif");}else{removeClass(document.documentElement,"sans-serif");}break;case"word-wrap-source-code":if(value===true){addClass(document.documentElement,"word-wrap-source-code");}else{removeClass(document.documentElement,"word-wrap-source-code");}break;}}function showLightAndDark(){removeClass(document.getElementById("preferred-light-theme"),"hidden");removeClass(document.getElementById("preferred-dark-theme"),"hidden");}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme"),"hidden");addClass(document.getElementById("preferred-dark-theme"),"hidden");}function updateLightAndDark(){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||(useSystem===null&&getSettingValue("theme")===null)){showLightAndDark();}else{hideLightAndDark();}}function setEvents(settingsElement){updateLightAndDark();onEachLazy(settingsElement.querySelectorAll("input[type=\"checkbox\"]"),toggle=>{const settingId=toggle.id;const settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true";}toggle.onchange=()=>{changeSetting(toggle.id,toggle.checked);};});onEachLazy(settingsElement.querySelectorAll("input[type=\"radio\"]"),elem=>{const settingId=elem.name;let settingValue=getSettingValue(settingId);if(settingId==="theme"){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||settingValue===null){settingValue=useSystem==="false"?"light":"system preference";}}if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value;}elem.addEventListener("change",()=>{changeSetting(elem.name,elem.value);});},);}function buildSettingsPageSections(settings){let output="";for(const setting of settings){const js_data_name=setting["js_name"];const setting_name=setting["name"];if(setting["options"]!==undefined){output+=`\ -
-
${setting_name}
-
`;onEach(setting["options"],option=>{const checked=option===setting["default"]?" checked":"";const full=`${js_data_name}-${option.replace(/ /g,"-")}`;output+=`\ - `;});output+=`\ -
-
`;}else{const checked=setting["default"]===true?" checked":"";output+=`\ -
\ - \ -
`;}}return output;}function buildSettingsPage(){const theme_list=getVar("themes");const theme_names=(theme_list===null?"":theme_list).split(",").filter(t=>t);theme_names.push("light","dark","ayu");const settings=[{"name":"Theme","js_name":"theme","default":"system preference","options":theme_names.concat("system preference"),},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":theme_names,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":theme_names,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Hide persistent navigation bar","js_name":"hide-sidebar","default":false,},{"name":"Hide table of contents","js_name":"hide-toc","default":false,},{"name":"Hide module navigation","js_name":"hide-modnav","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},{"name":"Use sans serif fonts","js_name":"sans-serif-fonts","default":false,},{"name":"Word wrap source code","js_name":"word-wrap-source-code","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
${buildSettingsPageSections(settings)}
`;const el=document.createElement(elementKind);el.id="settings";if(!isSettingsPage){el.className="popover";}el.innerHTML=innerHTML;if(isSettingsPage){const mainElem=document.getElementById(MAIN_ID);if(mainElem!==null){mainElem.appendChild(el);}}else{el.setAttribute("tabindex","-1");onEachLazy(document.querySelectorAll(".settings-menu"),menu=>{if(menu.offsetWidth!==0){menu.appendChild(el);return true;}});}return el;}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display="";onEachLazy(document.querySelectorAll(".settings-menu"),menu=>{if(menu.offsetWidth!==0){if(!menu.contains(settingsMenu)&&settingsMenu.parentElement){settingsMenu.parentElement.removeChild(settingsMenu);menu.appendChild(settingsMenu);}return true;}});onEachLazy(settingsMenu.querySelectorAll("input[type='checkbox']"),el=>{const val=getSettingValue(el.id);const checked=val==="true";if(checked!==el.checked&&val!==null){el.checked=checked;}});}function settingsBlurHandler(event){const isInPopover=onEachLazy(document.querySelectorAll(".settings-menu, .help-menu"),menu=>{return menu.contains(document.activeElement)||menu.contains(event.relatedTarget);},);if(!isInPopover){window.hidePopoverMenus();}}if(!isSettingsPage){const settingsMenu=nonnull(document.getElementById("settings"));onEachLazy(document.querySelectorAll(".settings-menu"),settingsButton=>{settingsButton.querySelector("a").onclick=event=>{if(!(event.target instanceof Element)||settingsMenu.contains(event.target)){return;}event.preventDefault();const shouldDisplaySettings=settingsMenu.style.display==="none";window.hideAllModals(false);if(shouldDisplaySettings){displaySettings();}};settingsButton.onblur=settingsBlurHandler;settingsButton.querySelector("a").onblur=settingsBlurHandler;});onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=settingsBlurHandler;});settingsMenu.onblur=settingsBlurHandler;}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings();}onEachLazy(document.querySelectorAll(".settings-menu"),settingsButton=>{removeClass(settingsButton,"rotate");});},0);})(); \ No newline at end of file diff --git a/network-poc/target-native/doc/static.files/src-script-813739b1.js b/network-poc/target-native/doc/static.files/src-script-813739b1.js deleted file mode 100644 index bf54625..0000000 --- a/network-poc/target-native/doc/static.files/src-script-813739b1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(function(){const rootPath=getVar("root-path");const NAME_OFFSET=0;const DIRS_OFFSET=1;const FILES_OFFSET=2;const RUSTDOC_MOBILE_BREAKPOINT=700;function closeSidebarIfMobile(){if(window.innerWidth{removeClass(document.documentElement,"src-sidebar-expanded");updateLocalStorage("source-sidebar-show","false");};window.rustdocShowSourceSidebar=()=>{addClass(document.documentElement,"src-sidebar-expanded");updateLocalStorage("source-sidebar-show","true");};window.rustdocToggleSrcSidebar=()=>{if(document.documentElement.classList.contains("src-sidebar-expanded")){window.rustdocCloseSourceSidebar();}else{window.rustdocShowSourceSidebar();}};function createSrcSidebar(srcIndexStr){const container=nonnull(document.querySelector("nav.sidebar"));const sidebar=document.createElement("div");sidebar.id="src-sidebar";const srcIndex=new Map(JSON.parse(srcIndexStr));let hasFoundFile=false;for(const[key,source]of srcIndex){source[NAME_OFFSET]=key;hasFoundFile=createDirEntry(source,sidebar,"",hasFoundFile);}container.appendChild(sidebar);const selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus();}}function highlightSrcLines(){const match=window.location.hash.match(/^#?(\d+)(?:-(\d+))?$/);if(!match){return;}let from=parseInt(match[1],10);let to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10);}if(to{removeClass(e,"line-highlighted");});for(let i=from;i<=to;++i){elem=document.getElementById(""+i);if(!elem){break;}addClass(elem,"line-highlighted");}}const handleSrcHighlight=(function(){let prev_line_id=0;const set_fragment=name=>{const x=window.scrollX,y=window.scrollY;if(browserSupportsHistoryApi()){history.replaceState(null,"","#"+name);highlightSrcLines();}else{location.replace("#"+name);}window.scrollTo(x,y);};return ev=>{let cur_line_id=parseInt(ev.target.id,10);if(isNaN(cur_line_id)||ev.ctrlKey||ev.altKey||ev.metaKey){return;}ev.preventDefault();if(ev.shiftKey&&prev_line_id){if(prev_line_id>cur_line_id){const tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp;}set_fragment(prev_line_id+"-"+cur_line_id);}else{prev_line_id=cur_line_id;set_fragment(""+cur_line_id);}};}());window.addEventListener("hashchange",highlightSrcLines);onEachLazy(document.querySelectorAll("a[data-nosnippet]"),el=>{el.addEventListener("click",handleSrcHighlight);});highlightSrcLines();window.createSrcSidebar=createSrcSidebar;})(); \ No newline at end of file diff --git a/network-poc/target-native/doc/static.files/storage-e2aeef58.js b/network-poc/target-native/doc/static.files/storage-e2aeef58.js deleted file mode 100644 index fb76ad5..0000000 --- a/network-poc/target-native/doc/static.files/storage-e2aeef58.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict";const builtinThemes=["light","dark","ayu"];const darkThemes=["dark","ayu"];window.currentTheme=(function(){const currentTheme=document.getElementById("themeStyle");return currentTheme instanceof HTMLLinkElement?currentTheme:null;})();const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null;})();function nonnull(x,msg){if(x===null){throw(msg||"unexpected null value!");}else{return x;}}function nonundef(x,msg){if(x===undefined){throw(msg||"unexpected null value!");}else{return x;}}function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def;}}return current;}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return!!elem&&!!elem.classList&&elem.classList.contains(className);}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className);}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className);}}function onEach(arr,func){for(const elem of arr){if(func(elem)){return true;}}return false;}function onEachLazy(lazyArray,func){return onEach(Array.prototype.slice.call(lazyArray),func);}function updateLocalStorage(name,value){try{if(value===null){window.localStorage.removeItem("rustdoc-"+name);}else{window.localStorage.setItem("rustdoc-"+name,value);}}catch{}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name);}catch{return null;}}function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.getAttribute("data-"+name):null;}function switchTheme(newThemeName,saveTheme){const themeNames=(getVar("themes")||"").split(",").filter(t=>t);themeNames.push(...builtinThemes);if(newThemeName===null||themeNames.indexOf(newThemeName)===-1){return;}if(saveTheme){updateLocalStorage("theme",newThemeName);}document.documentElement.setAttribute("data-theme",newThemeName);if(builtinThemes.indexOf(newThemeName)!==-1){if(window.currentTheme&&window.currentTheme.parentNode){window.currentTheme.parentNode.removeChild(window.currentTheme);window.currentTheme=null;}}else{const newHref=getVar("root-path")+encodeURIComponent(newThemeName)+getVar("resource-suffix")+".css";if(!window.currentTheme){if(document.readyState==="loading"){document.write(``);window.currentTheme=(function(){const currentTheme=document.getElementById("themeStyle");return currentTheme instanceof HTMLLinkElement?currentTheme:null;})();}else{window.currentTheme=document.createElement("link");window.currentTheme.rel="stylesheet";window.currentTheme.id="themeStyle";window.currentTheme.href=newHref;document.documentElement.appendChild(window.currentTheme);}}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref;}}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true);}else{switchTheme(getSettingValue("theme"),false);}}mql.addEventListener("change",updateTheme);return updateTheme;})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&localStoredTheme!==null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme);}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"src-sidebar-expanded");}if(getSettingValue("hide-sidebar")==="true"){addClass(document.documentElement,"hide-sidebar");}if(getSettingValue("hide-toc")==="true"){addClass(document.documentElement,"hide-toc");}if(getSettingValue("hide-modnav")==="true"){addClass(document.documentElement,"hide-modnav");}if(getSettingValue("sans-serif-fonts")==="true"){addClass(document.documentElement,"sans-serif");}if(getSettingValue("word-wrap-source-code")==="true"){addClass(document.documentElement,"word-wrap-source-code");}function updateSidebarWidth(){const desktopSidebarWidth=getSettingValue("desktop-sidebar-width");if(desktopSidebarWidth&&desktopSidebarWidth!=="null"){document.documentElement.style.setProperty("--desktop-sidebar-width",desktopSidebarWidth+"px",);}const srcSidebarWidth=getSettingValue("src-sidebar-width");if(srcSidebarWidth&&srcSidebarWidth!=="null"){document.documentElement.style.setProperty("--src-sidebar-width",srcSidebarWidth+"px",);}}updateSidebarWidth();window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0);setTimeout(updateSidebarWidth,0);}});class RustdocToolbarElement extends HTMLElement{constructor(){super();}connectedCallback(){if(this.firstElementChild){return;}const rootPath=getVar("root-path");const currentUrl=window.location.href.split("?")[0].split("#")[0];this.innerHTML=` -
- Search -
-
- Settings -
-
- Help -
- `;}}window.customElements.define("rustdoc-toolbar",RustdocToolbarElement);class RustdocTopBarElement extends HTMLElement{constructor(){super();}connectedCallback(){const rootPath=getVar("root-path");const tmplt=document.createElement("template");tmplt.innerHTML=` - - - - - `;const shadow=this.attachShadow({mode:"open"});shadow.appendChild(tmplt.content.cloneNode(true));this.innerHTML+=` - -
- Settings -
-
- Help -
- `;}}window.customElements.define("rustdoc-topbar",RustdocTopBarElement); \ No newline at end of file diff --git a/network-poc/target-native/doc/static.files/stringdex-b897f86f.js b/network-poc/target-native/doc/static.files/stringdex-b897f86f.js deleted file mode 100644 index 01c630b..0000000 --- a/network-poc/target-native/doc/static.files/stringdex-b897f86f.js +++ /dev/null @@ -1,2 +0,0 @@ -const EMPTY_UINT8=new Uint8Array();class RoaringBitmap{constructor(u8array,startingOffset){const start=startingOffset?startingOffset:0;let i=start;this.keysAndCardinalities=EMPTY_UINT8;this.containers=[];this.consumed_len_bytes=0;if(u8array===null||u8array.length===i||u8array[i]===0){return this;}else if(u8array[i]>0xf0){const lspecial=u8array[i]&0x0f;this.keysAndCardinalities=new Uint8Array(lspecial*4);let pspecial=i+1;let key=u8array[pspecial+2]|(u8array[pspecial+3]<<8);let value=u8array[pspecial]|(u8array[pspecial+1]<<8);let entry=(key<<16)|value;let container;container=new RoaringBitmapArray(1,new Uint8Array(4));container.array[0]=value&0xFF;container.array[1]=(value>>8)&0xFF;this.containers.push(container);this.keysAndCardinalities[0]=key;this.keysAndCardinalities[1]=key>>8;pspecial+=4;for(let ispecial=1;ispecial>16;container=this.addToArrayAt(key);const cardinalityOld=container.cardinality;container.array[cardinalityOld*2]=value&0xFF;container.array[(cardinalityOld*2)+1]=(value>>8)&0xFF;container.cardinality=cardinalityOld+1;pspecial+=2;}this.consumed_len_bytes=pspecial-i;return this;}else if(u8array[i]>0xe0){const lspecial=u8array[i]&0x0f;this.keysAndCardinalities=new Uint8Array(lspecial*4);i+=1;const key=u8array[i+2]|(u8array[i+3]<<8);const value=u8array[i]|(u8array[i+1]<<8);const container=new RoaringBitmapRun(1,new Uint8Array(4));container.array[0]=value&0xFF;container.array[1]=(value>>8)&0xFF;container.array[2]=lspecial-1;this.containers.push(container);this.keysAndCardinalities[0]=key&0xFF;this.keysAndCardinalities[1]=(key>>8)&0xFF;this.keysAndCardinalities[2]=lspecial-1;this.consumed_len_bytes=5;return this;}else if(u8array[i]>0xd0){const lspecial=u8array[i]&0x0f;this.keysAndCardinalities=new Uint8Array(lspecial*4);let pspecial=i+1;let key=u8array[pspecial+2]|(u8array[pspecial+3]<<8);let value=u8array[pspecial]|(u8array[pspecial+1]<<8);let entry=(key<<16)|value;let container;container=new RoaringBitmapArray(1,new Uint8Array(4));container.array[0]=value&0xFF;container.array[1]=(value>>8)&0xFF;this.containers.push(container);this.keysAndCardinalities[0]=key;this.keysAndCardinalities[1]=key>>8;pspecial+=4;for(let ispecial=1;ispecial>16;container=this.addToArrayAt(key);const cardinalityOld=container.cardinality;container.array[cardinalityOld*2]=value&0xFF;container.array[(cardinalityOld*2)+1]=(value>>8)&0xFF;container.cardinality=cardinalityOld+1;pspecial+=1;}this.consumed_len_bytes=pspecial-i;return this;}else if(u8array[i]<0x3a){const lspecial=u8array[i];this.keysAndCardinalities=new Uint8Array(lspecial*4);let pspecial=i+1;for(let ispecial=0;ispecial>8)&0xFF;container.cardinality=cardinalityOld+1;pspecial+=4;}this.consumed_len_bytes=pspecial-i;return this;}const has_runs=u8array[i]===0x3b;if(u8array[i]!==0x3a&&u8array[i]!==0x3b){throw new Error("not a roaring bitmap: "+u8array[i]);}const size=has_runs?((u8array[i+2]|(u8array[i+3]<<8))+1):((u8array[i+4]|(u8array[i+5]<<8)|(u8array[i+6]<<16)|(u8array[i+7]<<24)));i+=has_runs?4:8;let is_run;if(has_runs){const is_run_len=(size+7)>>3;is_run=new Uint8Array(u8array.buffer,i+u8array.byteOffset,is_run_len);i+=is_run_len;}else{is_run=EMPTY_UINT8;}this.keysAndCardinalities=u8array.subarray(i,i+(size*4));i+=size*4;let offsets=null;if(!has_runs||size>=4){offsets=[];for(let j=0;j>3]&(1<<(j&0x7))){const runcount=(u8array[i]|(u8array[i+1]<<8));i+=2;this.containers.push(new RoaringBitmapRun(runcount,new Uint8Array(u8array.buffer,i+u8array.byteOffset,runcount*4),));i+=runcount*4;}else if(cardinality>=4096){this.containers.push(new RoaringBitmapBits(new Uint8Array(u8array.buffer,i+u8array.byteOffset,8192,)));i+=8192;}else{const end=cardinality*2;this.containers.push(new RoaringBitmapArray(cardinality,new Uint8Array(u8array.buffer,i+u8array.byteOffset,end),));i+=end;}}this.consumed_len_bytes=i-start;}static makeSingleton(number){const result=new RoaringBitmap(null,0);result.keysAndCardinalities=Uint8Array.of((number>>16),(number>>24),0,0,);result.containers.push(new RoaringBitmapArray(1,Uint8Array.of(number,number>>8),));return result;}static everything(){if(EVERYTHING_BITMAP.isEmpty()){let i=0;const l=1<<16;const everything_range=new RoaringBitmapRun(1,Uint8Array.of(0,0,0xff,0xff));EVERYTHING_BITMAP.keysAndCardinalities=new Uint8Array(l*4);while(i>8;EVERYTHING_BITMAP.keysAndCardinalities[(i*4)+2]=0xff;EVERYTHING_BITMAP.keysAndCardinalities[(i*4)+3]=0xff;i+=1;}}return EVERYTHING_BITMAP;}static empty(){return EMPTY_BITMAP;}isEmpty(){return this.containers.length===0;}addToArrayAt(key){let mid=this.getContainerId(key);let container;if(mid===-1){container=new RoaringBitmapArray(0,new Uint8Array(2));mid=this.containers.length;this.containers.push(container);if(mid*4>this.keysAndCardinalities.length){const keysAndContainers=new Uint8Array(mid*8);keysAndContainers.set(this.keysAndCardinalities);this.keysAndCardinalities=keysAndContainers;}this.keysAndCardinalities[(mid*4)+0]=key;this.keysAndCardinalities[(mid*4)+1]=key>>8;}else{container=this.containers[mid];const cardinalityOld=this.keysAndCardinalities[(mid*4)+2]|(this.keysAndCardinalities[(mid*4)+3]<<8);const cardinality=cardinalityOld+1;this.keysAndCardinalities[(mid*4)+2]=cardinality;this.keysAndCardinalities[(mid*4)+3]=cardinality>>8;}const cardinalityOld=this.keysAndCardinalities[(mid*4)+2]|(this.keysAndCardinalities[(mid*4)+3]<<8);if(!(container instanceof RoaringBitmapArray)||container.array.byteLength<((cardinalityOld+1)*2)){const newBuf=new Uint8Array((cardinalityOld+1)*4);let idx=0;for(const cvalue of container.values()){newBuf[idx]=cvalue&0xFF;newBuf[idx+1]=(cvalue>>8)&0xFF;idx+=2;}if(container instanceof RoaringBitmapArray){container.cardinality=cardinalityOld;container.array=newBuf;return container;}const newcontainer=new RoaringBitmapArray(cardinalityOld,newBuf);this.containers[mid]=newcontainer;return newcontainer;}else{return container;}}union(that){if(this.isEmpty()){return that;}if(that.isEmpty()){return this;}if(this===RoaringBitmap.everything()||that===RoaringBitmap.everything()){return RoaringBitmap.everything();}let i=0;const il=this.containers.length;let j=0;const jl=that.containers.length;const result=new RoaringBitmap(null,0);result.keysAndCardinalities=new Uint8Array((il+jl)*4);while(i=jl||(i=il||(jthatContainer.array.length?thisContainer.array.length:thatContainer.array.length,);let k=0;const kl=resultArray.length;while(k>8)&0xFF;k+=2;}result.containers.push(new RoaringBitmapArray(resultValues.length,resultArray,));card=resultValues.length;}result.keysAndCardinalities[k+0]=this.keysAndCardinalities[ik+0];result.keysAndCardinalities[k+1]=this.keysAndCardinalities[ik+1];card-=1;result.keysAndCardinalities[k+2]=card;result.keysAndCardinalities[k+3]=card>>8;i+=1;j+=1;}}return result;}intersection(that){if(this.isEmpty()||that.isEmpty()){return EMPTY_BITMAP;}if(this===RoaringBitmap.everything()){return that;}if(that===RoaringBitmap.everything()){return this;}let i=0;const il=this.containers.length;let j=0;const jl=that.containers.length;const result=new RoaringBitmap(null,0);result.keysAndCardinalities=new Uint8Array((il>jl?il:jl)*4);while(i=jl||(i=il||(jthatContainer.array.length?thisContainer.array.length:thatContainer.array.length,);let k=0;const kl=resultArray.length;while(k>8)&0xFF;k+=2;}result.containers.push(new RoaringBitmapArray(resultValues.length,resultArray,));}}if(card!==0){result.keysAndCardinalities[k+0]=this.keysAndCardinalities[ik+0];result.keysAndCardinalities[k+1]=this.keysAndCardinalities[ik+1];card-=1;result.keysAndCardinalities[k+2]=card;result.keysAndCardinalities[k+3]=card>>8;}i+=1;j+=1;}}return result;}contains(keyvalue){const key=keyvalue>>16;const value=keyvalue&0xFFFF;const mid=this.getContainerId(key);return mid===-1?false:this.containers[mid].contains(value);}remove(keyvalue){const key=keyvalue>>16;const value=keyvalue&0xFFFF;const mid=this.getContainerId(key);if(mid===-1){return this;}const container=this.containers[mid];if(!container.contains(value)){return this;}const newCardinality=(this.keysAndCardinalities[(mid*4)+2]|(this.keysAndCardinalities[(mid*4)+3]<<8));const l=this.containers.length;const m=l-(newCardinality===0?1:0);const result=new RoaringBitmap(null,0);result.keysAndCardinalities=new Uint8Array(m*4);let j=0;for(let i=0;i>8;const card=newCardinality-1;result.keysAndCardinalities[(j*4)+2]=card;result.keysAndCardinalities[(j*4)+3]=card>>8;const newContainer=new RoaringBitmapArray(newCardinality,new Uint8Array(newCardinality*2),);let newContainerSlot=0;for(const containerValue of container.values()){if(containerValue!==value){newContainer.array[newContainerSlot]=value&0xFF;newContainerSlot+=1;newContainer.array[newContainerSlot]=value>>8;newContainerSlot+=1;}}result.containers.push(newContainer);j+=1;}}else{result.keysAndCardinalities[(j*4)+0]=this.keysAndCardinalities[(i*4)+0];result.keysAndCardinalities[(j*4)+1]=this.keysAndCardinalities[(i*4)+1];result.keysAndCardinalities[(j*4)+2]=this.keysAndCardinalities[(i*4)+2];result.keysAndCardinalities[(j*4)+3]=this.keysAndCardinalities[(i*4)+3];result.containers.push(this.containers[i]);j+=1;}}return result;}getContainerId(key){let left=0;let right=this.containers.length-1;while(left<=right){const mid=Math.floor((left+right)/2);const x=this.keysAndCardinalities[(mid*4)]|(this.keysAndCardinalities[(mid*4)+1]<<8);if(xkey){right=mid-1;}else{return mid;}}return-1;}*entries(){const l=this.containers.length;for(let i=0;i>1;const i=mid*4;const start=this.array[i]|(this.array[i+1]<<8);const lenm1=this.array[i+2]|(this.array[i+3]<<8);if((start+lenm1)value){right=mid-1;}else{return true;}}return false;}*values(){let i=0;while(i>1;const i=mid*2;const x=this.array[i]|(this.array[i+1]<<8);if(xvalue){right=mid-1;}else{return true;}}return false;}*values(){let i=0;const l=this.cardinality*2;while(i>3]&(1<<(value&7)));}*values(){let i=0;const l=this.array.length<<3;while(i=this.values.length*9){const keys=this.keys;const values=this.values;const l=values.length;this.capacityClass+=1;const capacity=1<otherDistance){const otherKey=keys.slice(j,j+6);values[slot]=value;value=otherValue;keys[j+0]=key[start+0];keys[j+1]=key[start+1];keys[j+2]=key[start+2];keys[j+3]=key[start+3];keys[j+4]=key[start+4];keys[j+5]=key[start+5];key=otherKey;start=0;distance=otherDistance;}distance+=1;slot=(slot+1)&mask;}}}get(key){if(key.length!==6){throw"invalid key";}return this.getWithOffsetKey(key,0);}getWithOffsetKey(key,start){const mask=~(0xffffffff<otherDistance){break;}}slot=(slot+1)&mask;}return undefined;}}function bitCount(n){n=(~~n)-((n>>1)&0x55555555);n=(n&0x33333333)+((n>>2)&0x33333333);return((n+(n>>4)&0xF0F0F0F)*0x1010101)>>24;}class Uint8ArraySearchPattern{constructor(needle){this.needle=needle;this.skipTable=[];const m=needle.length;for(let i=0;i<256;i+=1){this.skipTable.push(m);}for(let i=0;i=m){for(let i=m-1;i>=0;i-=1){if(haystack[skip+i]!==needle[i]){skip+=skipTable[haystack[skip+m-1]];continue search;}}return true;}return false;}}function loadDatabase(hooks){const callbacks={rr_:function(data){const dataObj=JSON.parse(data);for(const colName of Object.keys(dataObj)){if(Object.hasOwn(dataObj[colName],"N")){const counts=[];const countsstring=dataObj[colName]["N"];let i=0;const l=countsstring.length;while(i>4)&0x0f));const id3=id2+(((nodeid[4]&0x0f)<<8)|nodeid[5]);leaves=RoaringBitmap.makeSingleton(id1).union(RoaringBitmap.makeSingleton(id2)).union(RoaringBitmap.makeSingleton(id3));}else{leaves=RoaringBitmap.makeSingleton((nodeid[2]<<24)|(nodeid[3]<<16)|(nodeid[4]<<8)|nodeid[5],);}if(isWhole){const data=(nodeid[0]&0x20)!==0?Uint8Array.of(((nodeid[0]&0x0f)<<4)|(nodeid[1]>>4)):EMPTY_UINT8;newPromise=Promise.resolve(new PrefixSearchTree(EMPTY_SEARCH_TREE_BRANCHES,EMPTY_SEARCH_TREE_BRANCHES,data,leaves,EMPTY_BITMAP,));}else{const data=(nodeid[0]&0xf0)===0x80?0:(((nodeid[0]&0x0f)<<4)|(nodeid[1]>>4));newPromise=Promise.resolve(new SuffixSearchTree(EMPTY_SEARCH_TREE_BRANCHES,data,leaves,));}}else{const hashHex=makeHexFromUint8Array(nodeid);newPromise=new Promise((resolve,reject)=>{const cb=registry.searchTreeLoadPromiseCallbacks.get(nodeid);if(cb){registry.searchTreeLoadPromiseCallbacks.set(nodeid,(err,data)=>{cb(err,data);if(data){resolve(data);}else{reject(err);}});}else{registry.searchTreeLoadPromiseCallbacks.set(nodeid,(err,data)=>{if(data){resolve(data);}else{reject(err);}});hooks.loadTreeByHash(hashHex);}});}registry.searchTreePromises.set(nodeid,newPromise);return newPromise;},dataLoadByNameAndHash:function(name,hash){const existingBucket=registry.dataColumnsBuckets.get(hash);if(existingBucket){return existingBucket;}const hashHex=makeHexFromUint8Array(hash);const newBucket=new Promise((resolve,reject)=>{const cb=registry.dataColumnLoadPromiseCallbacks.get(hash);if(cb){registry.dataColumnLoadPromiseCallbacks.set(hash,(err,data)=>{cb(err,data);if(data){resolve(data);}else{reject(err);}});}else{registry.dataColumnLoadPromiseCallbacks.set(hash,(err,data)=>{if(data){resolve(data);}else{reject(err);}});hooks.loadDataByNameAndHash(name,hashHex);}});registry.dataColumnsBuckets.set(hash,newBucket);return newBucket;},};class SearchTreeBranches{constructor(length,nodeids){this.nodeids=nodeids;this.subtrees=[];for(let i=0;i=this.keys[i]){throw new Error("HERE");}i+=1;}}*entries(){let i=0;const l=this.keys.length;while(i>1;if(this.keys[mid]k){right=mid-1;}else{return mid;}}return-1;}getKey(i){return this.keys[i];}getKeys(){return this.keys;}}const EMPTY_SEARCH_TREE_BRANCHES=new SearchTreeBranchesArray(EMPTY_UINT8,EMPTY_UINT8,);const SHORT_ALPHABITMAP_CHARS=[];for(let i=0x61;i<=0x7A;++i){if(i===0x76||i===0x71){continue;}SHORT_ALPHABITMAP_CHARS.push(i);}const LONG_ALPHABITMAP_CHARS=[0x31,0x32,0x33,0x34,0x35,0x36];for(let i=0x61;i<=0x7A;++i){LONG_ALPHABITMAP_CHARS.push(i);}function makeSearchTreeBranchesAlphaBitmapClass(alphabitmap_chars,width){const bitwidth=width*8;const cls=class SearchTreeBranchesAlphaBitmap extends SearchTreeBranches{constructor(bitmap,nodeids){super(nodeids.length/6,nodeids);if(nodeids.length/6!==bitCount(bitmap)){throw new Error(`mismatch ${bitmap} ${nodeids}`);}this.bitmap=bitmap;this.nodeids=nodeids;}*entries(){let i=0;let j=0;while(i=this.subtrees.length?-1:result;}getKey(branch_index){return this.getKeys()[branch_index];}getKeys(){const length=bitCount(this.bitmap);const result=new Uint8Array(length);let result_index=0;for(let alpha_index=0;alpha_index=6?new Lev2TParametricDescription(w):new Lev1TParametricDescription(w);const stack=[[Promise.resolve(this.trie(dataColumn,searchPattern)),0]];const n=levParams.n;while(stack.length!==0){const[triePromise,levState]=stack.pop();const trie=await triePromise;for(const byte of trie.keysExcludeSuffixOnly()){const levPos=levParams.getPosition(levState);const vector=levParams.getVector(name,byte,levPos,Math.min(w,levPos+(2*n)+1),);const newLevState=levParams.transition(levState,levPos,vector,);if(newLevState>=0){const child=trie.child(byte);if(child){stack.push([child,newLevState]);if(levParams.isAccept(newLevState)){yield child;}}}}}}getCurrentLeaves(){return this.leaves_whole.union(this.leaves_suffix);}}class PrefixTrie{constructor(tree,offset,dataColumn,searchPattern){this.tree=tree;this.offset=offset;this.dataColumn=dataColumn;this.searchPattern=searchPattern;}matches(){if(this.offset===this.tree.data.length){return this.tree.leaves_whole;}else{return EMPTY_BITMAP;}}async*substringMatches(){let layer=[Promise.resolve(this.tree)];while(layer.length){const current_layer=layer;layer=[];for await(const tree of current_layer){let rejected=null;let leaves=tree.getCurrentLeaves();for(const leaf of leaves.entries()){const haystack=await this.dataColumn.at(leaf);if(haystack===undefined||!this.searchPattern.matches(haystack)){if(!rejected){rejected=[];}rejected.push(leaf);}}if(rejected){if(leaves.cardinality()!==rejected.length){for(const rej of rejected){leaves=leaves.remove(rej);}yield leaves;}}else{yield leaves;}}const subnodes=new HashTable();for await(const nodeEncoded of current_layer){const node=nodeEncoded instanceof InlineNeighborsTree?nodeEncoded.decode():nodeEncoded;const branches=node.branches;const l=branches.subtrees.length;for(let i=0;i0&&backlog[backlogSlot].length>1].length){const parentSlot=(backlogSlot-1)>>1;const parent=backlog[parentSlot];backlog[parentSlot]=backlog[backlogSlot];backlog[backlogSlot]=parent;backlogSlot=parentSlot;}}while(backlog.length!==0){const backlogEntry=backlog[0];if(minLength!==null&&backlogEntry.length>minLength){break;}if(!backlogEntry.bitmap.isEmpty()){yield backlogEntry.bitmap;}backlog[0]=backlog[backlog.length-1];backlog.length-=1;let backlogSlot=0;const backlogLength=backlog.length;while(backlogSlot{return node.trie(this.dataColumn,this.searchPattern);})]);i+=1;}return nodes;}else{const codePoint=data[this.offset];const trie=new PrefixTrie(this.tree,this.offset+1,this.dataColumn,this.searchPattern,);return[[codePoint,Promise.resolve(trie)]];}}keysExcludeSuffixOnly(){const data=this.tree.data;if(this.offset===data.length){return this.tree.might_have_prefix_branches.getKeys();}else{return Uint8Array.of(data[this.offset]);}}childrenExcludeSuffixOnly(){const data=this.tree.data;if(this.offset===data.length){const nodes=[];let i=0;for(const[k,v]of this.tree.might_have_prefix_branches.entries()){let node;if(v){node=v;}else{const newnode=this.tree.might_have_prefix_branches.getNodeID(i);if(!newnode){throw new Error(`malformed tree; no node for key ${k}`);}node=registry.searchTreeLoadByNodeID(newnode);this.tree.might_have_prefix_branches.subtrees[i]=node;this.tree.branches.subtrees[this.tree.branches.getIndex(k)]=node;}nodes.push([k,node.then(node=>{return node.trie(this.dataColumn,this.searchPattern);})]);i+=1;}return nodes;}else{const codePoint=data[this.offset];const trie=new PrefixTrie(this.tree,this.offset+1,this.dataColumn,this.searchPattern,);return[[codePoint,Promise.resolve(trie)]];}}child(byte){if(this.offset===this.tree.data.length){const i=this.tree.branches.getIndex(byte);if(i!==-1){let branch=this.tree.branches.subtrees[i];if(branch===null){const newnode=this.tree.branches.getNodeID(i);if(!newnode){throw new Error(`malformed tree; no node for key ${byte}`);}branch=registry.searchTreeLoadByNodeID(newnode);this.tree.branches.subtrees[i]=branch;const mhpI=this.tree.might_have_prefix_branches.getIndex(byte);if(mhpI!==-1){this.tree.might_have_prefix_branches.subtrees[mhpI]=branch;}}return branch.then(branch=>branch.trie(this.dataColumn,this.searchPattern));}}else if(this.tree.data[this.offset]===byte){return Promise.resolve(new PrefixTrie(this.tree,this.offset+1,this.dataColumn,this.searchPattern,));}return null;}}class SuffixSearchTree{constructor(branches,dataLen,leaves_suffix,){this.branches=branches;this.dataLen=dataLen;this.leaves_suffix=leaves_suffix;}trie(dataColumn,searchPattern){return new SuffixTrie(this,0,dataColumn,searchPattern);}async search(name,dataColumn){if(typeof name==="string"){const utf8encoder=new TextEncoder();name=utf8encoder.encode(name);}const searchPattern=new Uint8ArraySearchPattern(name);let trie=this.trie(dataColumn,searchPattern);for(const datum of name){const newTrie=trie.child(datum);if(newTrie){trie=await newTrie;}else{return null;}}return trie;}async*searchLev(_name,_dataColumn){}getCurrentLeaves(){return this.leaves_suffix;}}class SuffixTrie{constructor(tree,offset,dataColumn,searchPattern){this.tree=tree;this.offset=offset;this.dataColumn=dataColumn;this.searchPattern=searchPattern;}matches(){return EMPTY_BITMAP;}async*substringMatches(){let layer=[Promise.resolve(this.tree)];while(layer.length){const current_layer=layer;layer=[];for await(const tree of current_layer){let rejected=null;let leaves=tree.getCurrentLeaves();for(const leaf of leaves.entries()){const haystack=await this.dataColumn.at(leaf);if(haystack===undefined||!this.searchPattern.matches(haystack)){if(!rejected){rejected=[];}rejected.push(leaf);}}if(rejected){if(leaves.cardinality()!==rejected.length){for(const rej of rejected){leaves=leaves.remove(rej);}yield leaves;}}else{yield leaves;}}const subnodes=new HashTable();for await(const nodeEncoded of current_layer){const node=nodeEncoded instanceof InlineNeighborsTree?nodeEncoded.decode():nodeEncoded;const branches=node.branches;const l=branches.subtrees.length;for(let i=0;ibranch.trie(this.dataColumn,this.searchPattern));}}else{return Promise.resolve(new SuffixTrie(this.tree,this.offset+1,this.dataColumn,this.searchPattern,));}return null;}}class InlineNeighborsTree{constructor(encoded,start,){this.encoded=encoded;this.start=start;}decode(){let i=this.start;const encoded=this.encoded;const has_branches=(encoded[i]&0x04)!==0;const is_suffixes_only=(encoded[i]&0x01)!==0;let leaves_count=((encoded[i]>>4)&0x07)+1;let leaves_is_run=(encoded[i]>>7)!==0;i+=1;let branch_count=0;if(has_branches){branch_count=encoded[i]+1;i+=1;}const dlen=encoded[i]&0x3f;if((encoded[i]&0x80)!==0){leaves_count=0;leaves_is_run=false;}i+=1;let data=EMPTY_UINT8;if(!is_suffixes_only&&dlen!==0){data=encoded.subarray(i,i+dlen);i+=dlen;}const leaf_value_upper=encoded[i]|(encoded[i+1]<<8);i+=2;const branch_nodes=[];for(let j=0;j>4)&0x07)+1;const branch_leaves_is_run=(encoded[i]>>7)!==0;i+=1;let branch_data=EMPTY_UINT8;if(!is_suffixes_only&&branch_dlen!==0){branch_data=encoded.subarray(i,i+branch_dlen);i+=branch_dlen;}const branch_leaves=new RoaringBitmap(null);branch_leaves.keysAndCardinalities=Uint8Array.of(leaf_value_upper&0xff,(leaf_value_upper>>8)&0xff,(branch_leaves_count-1)&0xff,((branch_leaves_count-1)>>8)&0xff,);if(branch_leaves_is_run){branch_leaves.containers=[new RoaringBitmapRun(1,Uint8Array.of(encoded[i],encoded[i+1],branch_leaves_count-1,0,),),];i+=2;}else{branch_leaves.containers=[new RoaringBitmapArray(branch_leaves_count,encoded.subarray(i,i+(branch_leaves_count*2)),),];i+=branch_leaves_count*2;}branch_nodes.push(Promise.resolve(is_suffixes_only?new SuffixSearchTree(EMPTY_SEARCH_TREE_BRANCHES,branch_dlen,branch_leaves,):new PrefixSearchTree(EMPTY_SEARCH_TREE_BRANCHES,EMPTY_SEARCH_TREE_BRANCHES,branch_data,branch_leaves,EMPTY_BITMAP,),));}const branches=branch_count===0?EMPTY_SEARCH_TREE_BRANCHES:new SearchTreeBranchesArray(encoded.subarray(i,i+branch_count),EMPTY_UINT8,);i+=branch_count;branches.subtrees=branch_nodes;let leaves=EMPTY_BITMAP;if(leaves_count!==0){leaves=new RoaringBitmap(null);leaves.keysAndCardinalities=Uint8Array.of(leaf_value_upper&0xff,(leaf_value_upper>>8)&0xff,(leaves_count-1)&0xff,((leaves_count-1)>>8)&0xff,);if(leaves_is_run){leaves.containers=[new RoaringBitmapRun(1,Uint8Array.of(encoded[i],encoded[i+1],leaves_count-1,0,),),];i+=2;}else{leaves.containers=[new RoaringBitmapArray(leaves_count,encoded.subarray(i,i+(leaves_count*2)),),];i+=leaves_count*2;}}return is_suffixes_only?new SuffixSearchTree(branches,dlen,leaves,):new PrefixSearchTree(branches,branches,data,leaves,EMPTY_BITMAP,);}trie(dataColumn,searchPattern){const tree=this.decode();return tree instanceof SuffixSearchTree?new SuffixTrie(tree,0,dataColumn,searchPattern):new PrefixTrie(tree,0,dataColumn,searchPattern);}search(name,dataColumn){return this.decode().search(name,dataColumn);}searchLev(name,dataColumn){return this.decode().searchLev(name,dataColumn);}getCurrentLeaves(){return this.decode().getCurrentLeaves();}}class DataColumn{constructor(counts,hashes,emptyset,name,searchTree){this.searchTree=searchTree;this.hashes=hashes;this.emptyset=emptyset;this.name=name;this.buckets=[];this.bucket_keys=[];const l=counts.length;let k=0;let totalLength=0;for(let i=0;i=this.bucket_keys.length){return undefined;}else{const start=this.bucket_keys[idx];const bucket=this.buckets[idx];const data=this.buckets[idx].data;if(data===null){return this.atAsyncFetch(id,start,bucket);}else{return data[id-start];}}}}async atAsyncFetch(id,start,bucket){const{hash,end}=bucket;const dataSansEmptysetOrig=await registry.dataLoadByNameAndHash(this.name,hash,);let data=bucket.data;if(data!==null){return data[id-start];}const dataSansEmptyset=[...dataSansEmptysetOrig];let dataWithEmptyset=null;let pos=start;let insertCount=0;while(pos=48&&c<=63){dataSansEmptyset.push(backrefs[c-48]);i+=1;}else{let n=0;while(c<96){n=(n<<4)|(c&0xF);i+=1;c=data[i];}n=(n<<4)|(c&0xF);i+=1;const item=data.subarray(i,i+n);dataSansEmptyset.push(item);i+=n;backrefs.unshift(item);if(backrefs.length>16){backrefs.pop();}}}cb(null,dataSansEmptyset);}}function makeSearchTreeFromBase64(inputBase64){const input=makeUint8ArrayFromBase64(inputBase64);let i=0;const l=input.length;const stash=new HashTable();const hash=Uint8Array.of(0,0,0,0,0,0,0,0);const truncatedHash=new Uint8Array(hash.buffer,2,6);const hash_history=[];const data_history=[];let canonical=EMPTY_UINT8;let tree=new PrefixSearchTree(EMPTY_SEARCH_TREE_BRANCHES,EMPTY_SEARCH_TREE_BRANCHES,EMPTY_UINT8,EMPTY_BITMAP,EMPTY_BITMAP,);function makeBranchesFromBinaryData(input,i,compression_tag,){const is_pure_suffixes_only_node=(compression_tag&0x01)!==0x00;const is_stack_compressed=(compression_tag&0x02)!==0;const is_long_compressed=(compression_tag&0x04)!==0;const all_children_are_compressed=(compression_tag&0xF0)===0xF0&&!is_long_compressed;const any_children_are_compressed=(compression_tag&0xF0)!==0x00||is_long_compressed;const start_point=i;let cplen;let cslen;let alphabitmap=null;if(is_pure_suffixes_only_node){cplen=0;cslen=input[i];i+=1;if(cslen>=0xc0){alphabitmap=SearchTreeBranchesLongAlphaBitmap;cslen=cslen&0x3F;}else if(cslen>=0x80){alphabitmap=SearchTreeBranchesShortAlphaBitmap;cslen=cslen&0x7F;}}else{cplen=input[i];i+=1;cslen=input[i];i+=1;if(cplen===0xff&&cslen===0xff){cplen=0x100;cslen=0;}else if(cplen>=0xc0&&cslen>=0xc0){alphabitmap=SearchTreeBranchesLongAlphaBitmap;cplen=cplen&0x3F;cslen=cslen&0x3F;}else if(cplen>=0x80&&cslen>=0x80){alphabitmap=SearchTreeBranchesShortAlphaBitmap;cplen=cplen&0x7F;cslen=cslen&0x7F;}}let j=0;let cpnodes;if(any_children_are_compressed){cpnodes=cplen===0?EMPTY_UINT8:new Uint8Array(cplen*6);while(j=cplen||(csicsbranches[csi])){branchset[j]=csbranches[csi];const joff=j*6;const csioff=csi*6;hashes[joff+0]=csnodes[csioff+0];hashes[joff+1]=csnodes[csioff+1];hashes[joff+2]=csnodes[csioff+2];hashes[joff+3]=csnodes[csioff+3];hashes[joff+4]=csnodes[csioff+4];hashes[joff+5]=csnodes[csioff+5];csi+=1;}else{branchset[j]=cpbranches[cpi];const joff=j*6;const cpioff=cpi*6;hashes[joff+0]=cpnodes[cpioff+0];hashes[joff+1]=cpnodes[cpioff+1];hashes[joff+2]=cpnodes[cpioff+2];hashes[joff+3]=cpnodes[cpioff+3];hashes[joff+4]=cpnodes[cpioff+4];hashes[joff+5]=cpnodes[cpioff+5];cpi+=1;}j+=1;}branches=new SearchTreeBranchesArray(branchset,hashes);}i+=cslen;}return{consumed_len_bytes:i-start_point,cpbranches,csbranches,cpnodes,csnodes,branches,might_have_prefix_branches,};}while(i>4)&0x07)+1;const leaves_is_run=no_leaves_flag===0&&((compression_tag>>4)&0x08)!==0;const branch_count=is_long_compressed?((compression_tag>>8)&0xff)+1:0;if(is_data_compressed){data=data_history[data_history.length-dlen-1];dlen=data.length;}else if(is_pure_suffixes_only_node){data=EMPTY_UINT8;}else{data=dlen===0?EMPTY_UINT8:new Uint8Array(input.buffer,i+input.byteOffset,dlen);i+=dlen;}const branches_start=i;i+=2;for(let j=0;j>4)&0x0f)+1;const branch_leaves_is_run=(input[i]>>7)!==0;i+=1;if(!is_pure_suffixes_only_node){i+=branch_dlen;}if(branch_leaves_is_run){i+=2;}else{i+=branch_leaves_count*2;}}i+=branch_count;if(leaves_is_run){i+=2;}else{i+=leaves_count*2;}if(is_data_compressed){const clen=(1+(is_long_compressed?1:0)+1+dlen+(i-branches_start));const canonical=new Uint8Array(clen);let ci=0;canonical[ci]=input[start]^ 0x08;ci+=1;if(is_long_compressed){canonical[ci]=input[start+ci];ci+=1;}canonical[ci]=dlen|no_leaves_flag|0x40;ci+=1;for(let j=0;j1){if(is_pure_suffixes_only_node){data=EMPTY_UINT8;}else if(is_data_compressed){data=data_history[data_history.length-dlen-1];dlen=data.length;}else{data=dlen===0?EMPTY_UINT8:new Uint8Array(input.buffer,i+input.byteOffset,dlen);i+=dlen;}const coffset=i;const{cpbranches,csbranches,cpnodes,csnodes,consumed_len_bytes:branches_consumed_len_bytes,branches,might_have_prefix_branches,}=makeBranchesFromBinaryData(input,i,compression_tag);i+=branches_consumed_len_bytes;let whole;let suffix;if(is_pure_suffixes_only_node){if(no_leaves_flag){whole=EMPTY_BITMAP;suffix=EMPTY_BITMAP;}else{suffix=input[i]===0?EMPTY_BITMAP1:new RoaringBitmap(input,i);i+=suffix.consumed_len_bytes;}tree=new SuffixSearchTree(branches,dlen,suffix,);const clen=((is_data_compressed?2:3)+csnodes.length+csbranches.length+suffix.consumed_len_bytes);if(canonical.length{registry.searchTreeRootCallback=(error,data)=>{if(data){resolve(data);}else{reject(error);}};hooks.loadRoot(callbacks);});}if(typeof window!=="undefined"){window.Stringdex={loadDatabase,};window.RoaringBitmap=RoaringBitmap;if(window.StringdexOnload){window.StringdexOnload.forEach(cb=>cb(window.Stringdex));}}else{module.exports.Stringdex={loadDatabase,};module.exports.RoaringBitmap=RoaringBitmap;}const makeUint8ArrayFromBase64=Uint8Array.fromBase64?Uint8Array.fromBase64:(string=>{const bytes_as_string=atob(string);const l=bytes_as_string.length;const bytes=new Uint8Array(l);for(let i=0;i{const alpha={"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,"a":10,"b":11,"A":10,"B":11,"c":12,"d":13,"C":12,"D":13,"e":14,"f":15,"E":14,"F":15,};const l=string.length>>1;const bytes=new Uint8Array(l);for(let i=0;iarray.toHex()):(array=>{const alpha=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f",];const l=array.length;const v=[];for(let i=0;i>4]);v.push(alpha[array[i]&0xf]);}return v.join("");});function siphashOfBytes(input,k0lo,k0hi,k1lo,k1hi,output){let v0lo=k0lo ^ 0x70736575;let v0hi=k0hi ^ 0x736f6d65;let v1lo=k1lo ^ 0x6e646f6d;let v1hi=k1hi ^ 0x646f7261;let v2lo=k0lo ^ 0x6e657261;let v2hi=k0hi ^ 0x6c796765;let v3lo=k1lo ^ 0x79746573;let v3hi=k1hi ^ 0x74656462;const inputLength=input.length;let inputI=0;const left=inputLength&0x7;let milo=0;let mihi=0;while(inputI>>8;output[5]=(v0lo ^ v1lo ^ v2lo ^ v3lo)>>>16;output[4]=(v0lo ^ v1lo ^ v2lo ^ v3lo)>>>24;output[3]=(v0hi ^ v1hi ^ v2hi ^ v3hi)&0xff;output[2]=(v0hi ^ v1hi ^ v2hi ^ v3hi)>>>8;output[1]=(v0hi ^ v1hi ^ v2hi ^ v3hi)>>>16;output[0]=(v0hi ^ v1hi ^ v2hi ^ v3hi)>>>24;function u8ToU64le(offset,length){const n0=offset>>0)+(v1lo>>>0)>0xffffffff)?1:0))|0;v0lo=(v0lo+v1lo)|0;let v1lo_=v1lo;let v1hi_=v1hi;v1lo=(v1lo_<<13)|(v1hi_>>>19);v1hi=(v1hi_<<13)|(v1lo_>>>19);v1lo ^=v0lo;v1hi ^=v0hi;const v0lo_=v0lo;const v0hi_=v0hi;v0lo=v0hi_;v0hi=v0lo_;v2hi=(v2hi+v3hi+(((v2lo>>>0)+(v3lo>>>0)>0xffffffff)?1:0))|0;v2lo=(v2lo+v3lo)|0;let v3lo_=v3lo;let v3hi_=v3hi;v3lo=(v3lo_<<16)|(v3hi_>>>16);v3hi=(v3hi_<<16)|(v3lo_>>>16);v3lo ^=v2lo;v3hi ^=v2hi;v0hi=(v0hi+v3hi+(((v0lo>>>0)+(v3lo>>>0)>0xffffffff)?1:0))|0;v0lo=(v0lo+v3lo)|0;v3lo_=v3lo;v3hi_=v3hi;v3lo=(v3lo_<<21)|(v3hi_>>>11);v3hi=(v3hi_<<21)|(v3lo_>>>11);v3lo ^=v0lo;v3hi ^=v0hi;v2hi=(v2hi+v1hi+(((v2lo>>>0)+(v1lo>>>0)>0xffffffff)?1:0))|0;v2lo=(v2lo+v1lo)|0;v1lo_=v1lo;v1hi_=v1hi;v1lo=(v1lo_<<17)|(v1hi_>>>15);v1hi=(v1hi_<<17)|(v1lo_>>>15);v1lo ^=v2lo;v1hi ^=v2hi;const v2lo_=v2lo;const v2hi_=v2hi;v2lo=v2hi_;v2hi=v2lo_;}}class ParametricDescription{constructor(w,n,minErrors){this.w=w;this.n=n;this.minErrors=minErrors;}isAccept(absState){const state=Math.floor(absState/(this.w+1));const offset=absState%(this.w+1);return this.w-offset+this.minErrors[state]<=this.n;}getPosition(absState){return absState%(this.w+1);}getVector(name,charCode,pos,end){let vector=0;for(let i=pos;i>5;const bitStart=bitLoc&31;if(bitStart+bitsPerValue<=32){return((data[dataLoc]>>bitStart)&this.MASKS[bitsPerValue-1]);}else{const part=32-bitStart;return ~~(((data[dataLoc]>>bitStart)&this.MASKS[part-1])+((data[1+dataLoc]&this.MASKS[bitsPerValue-part-1])<ConvDownsample1d",0],["impl StreamingModule for ConvTrUpsample1d",0],["impl StreamingModule for StreamableConv1d",0],["impl StreamingModule for StreamableConvTranspose1d",0],["impl StreamingModule for SeaNetDecoder",0],["impl StreamingModule for SeaNetEncoder",0],["impl StreamingModule for SeaNetResnetBlock",0],["impl StreamingModule for ProjectedTransformer",0],["impl StreamingModule for StreamingTransformer",0]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[2099]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/candle_core/trait.Module.js b/network-poc/target-native/doc/trait.impl/candle_core/trait.Module.js deleted file mode 100644 index 217c53b..0000000 --- a/network-poc/target-native/doc/trait.impl/candle_core/trait.Module.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl Module for Activation",0],["impl Module for Activation",0],["impl Module for Mlp",0],["impl Module for Norm",0],["impl Module for Activation",0],["impl Module for BeitVisionTransformer",0],["impl Module for BertLMPredictionHead",0],["impl Module for BertOnlyMLMHead",0],["impl Module for VisionModel",0],["impl Module for TextPooler",0],["impl Module for ChineseClipVisionEmbeddings",0],["impl Module for ChineseClipVisionTransformer",0],["impl Module for ClipTextTransformer",0],["impl Module for ClipVisionTransformer",0],["impl Module for Decoder",0],["impl Module for DecoderBlock",0],["impl Module for Encoder",0],["impl Module for EncoderBlock",0],["impl Module for ResidualUnit",0],["impl Module for Snake1d",0],["impl Module for DPTHead",0],["impl Module for DepthAnythingV2",0],["impl Module for FeatureFusionBlock",0],["impl Module for ResidualConvUnit",0],["impl Module for DinoVisionTransformer",0],["impl Module for DinoVisionTransformer",0],["impl Module for EfficientNet",0],["impl Module for Decoder",0],["impl Module for EncodecConv1d",0],["impl Module for EncodecConvTranspose1d",0],["impl Module for EncodecLSTM",0],["impl Module for EncodecResnetBlock",0],["impl Module for Encoder",0],["impl Module for EVA2VisionTransformer",0],["impl Module for AutoEncoder",0],["impl Module for Decoder",0],["impl Module for DiagonalGaussian",0],["impl Module for Encoder",0],["impl Module for EmbedNd",0],["impl Module for MlpEmbedder",0],["impl Module for MlpEmbedder",0],["impl Module for BertModel",0],["impl Module for IdentityMap",0],["impl Module for Model",0],["impl Module for ConvDownsample1d",0],["impl Module for ConvTrUpsample1d",0],["impl Module for NormConv1d",0],["impl Module for NormConvTranspose1d",0],["impl Module for StreamableConv1d",0],["impl Module for StreamableConvTranspose1d",0],["impl Module for SeaNetDecoder",0],["impl Module for SeaNetEncoder",0],["impl Module for SeaNetResnetBlock",0],["impl Module for LayerScale",0],["impl Module for RmsNorm",0],["impl Module for LayerNormNoAffine",0],["impl Module for PatchEmbedder",0],["impl Module for TimestepEmbedder",0],["impl Module for VectorEmbedder",0],["impl Module for Mlp",0],["impl Module for ModernBertClassifier",0],["impl Module for ModernBertDecoder",0],["impl Module for ModernBertHead",0],["impl Module for ModernBertMLP",0],["impl Module for Encoder",0],["impl Module for VisionEncoder",0],["impl Module for OpenClipTextTransformer",0],["impl Module for MultiModalProjector",0],["impl Module for MultiModalProjector",0],["impl Module for Model",0],["impl Module for VisionModel",0],["impl Module for TextPooler",0],["impl Module for Encoder",0],["impl Module for VisionEncoder",0],["impl Module for ImageClassificationModel",0],["impl Module for SemanticSegmentationModel",0],["impl Module for ImageEncoderViT",0],["impl Module for LayerNorm2d",0],["impl Module for MlpBlock",0],["impl Module for TinyViT",0],["impl Module for TextModel",0],["impl Module for TextTransformer",0],["impl Module for VisionModel",0],["impl Module for AttentionBlock",0],["impl Module for ClipTextTransformer",0],["impl Module for TimestepEmbedding",0],["impl Module for Timesteps",0],["impl Module for DownEncoderBlock2D",0],["impl Module for UpDecoderBlock2D",0],["impl Module for Embeddings",0],["impl Module for Linear",0],["impl Module for Encoder",0],["impl Module for Conv2d",0],["impl Module for Embedding",0],["impl Module for LayerNorm",0],["impl Module for Linear",0],["impl Module for QMatMul",0],["impl Module for RmsNorm",0],["impl Module for GlobalResponseNorm",0],["impl Module for LayerNormNoWeights",0],["impl Module for WLayerNorm",0],["impl Module for MixingResidualBlock",0],["impl Module for PaellaVQ",0],["impl Module for Embedding",0],["impl Module for Linear",0],["impl Module for RmsNorm",0]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[22322]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/candle_core/trait.ModuleT.js b/network-poc/target-native/doc/trait.impl/candle_core/trait.ModuleT.js deleted file mode 100644 index fa9a3ef..0000000 --- a/network-poc/target-native/doc/trait.impl/candle_core/trait.ModuleT.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl ModuleT for Vgg<'_>",0]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[197]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.BincountOp.js b/network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.BincountOp.js deleted file mode 100644 index 8845385..0000000 --- a/network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.BincountOp.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[26]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.NonZeroOp.js b/network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.NonZeroOp.js deleted file mode 100644 index 8845385..0000000 --- a/network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.NonZeroOp.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[26]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.SplitOp.js b/network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.SplitOp.js deleted file mode 100644 index 8845385..0000000 --- a/network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.SplitOp.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[26]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.TopKLastDimOp.js b/network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.TopKLastDimOp.js deleted file mode 100644 index 8845385..0000000 --- a/network-poc/target-native/doc/trait.impl/candle_transformers/models/deepseek2/trait.TopKLastDimOp.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[26]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/candle_transformers/models/flux/trait.WithForward.js b/network-poc/target-native/doc/trait.impl/candle_transformers/models/flux/trait.WithForward.js deleted file mode 100644 index 8845385..0000000 --- a/network-poc/target-native/doc/trait.impl/candle_transformers/models/flux/trait.WithForward.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[26]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/candle_transformers/models/mmdit/blocks/trait.JointBlock.js b/network-poc/target-native/doc/trait.impl/candle_transformers/models/mmdit/blocks/trait.JointBlock.js deleted file mode 100644 index 8845385..0000000 --- a/network-poc/target-native/doc/trait.impl/candle_transformers/models/mmdit/blocks/trait.JointBlock.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[26]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/candle_transformers/models/stable_diffusion/schedulers/trait.Scheduler.js b/network-poc/target-native/doc/trait.impl/candle_transformers/models/stable_diffusion/schedulers/trait.Scheduler.js deleted file mode 100644 index 8845385..0000000 --- a/network-poc/target-native/doc/trait.impl/candle_transformers/models/stable_diffusion/schedulers/trait.Scheduler.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[26]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/candle_transformers/models/stable_diffusion/schedulers/trait.SchedulerConfig.js b/network-poc/target-native/doc/trait.impl/candle_transformers/models/stable_diffusion/schedulers/trait.SchedulerConfig.js deleted file mode 100644 index 8845385..0000000 --- a/network-poc/target-native/doc/trait.impl/candle_transformers/models/stable_diffusion/schedulers/trait.SchedulerConfig.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[26]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/candle_transformers/models/whisper/audio/trait.Float.js b/network-poc/target-native/doc/trait.impl/candle_transformers/models/whisper/audio/trait.Float.js deleted file mode 100644 index 8845385..0000000 --- a/network-poc/target-native/doc/trait.impl/candle_transformers/models/whisper/audio/trait.Float.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[26]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/clone/trait.Clone.js b/network-poc/target-native/doc/trait.impl/core/clone/trait.Clone.js deleted file mode 100644 index a1c7261..0000000 --- a/network-poc/target-native/doc/trait.impl/core/clone/trait.Clone.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl Clone for Sampling",0],["impl Clone for HiddenAct",0],["impl Clone for PositionEmbeddingType",0],["impl Clone for Activation",0],["impl Clone for EncoderConfig",0],["impl Clone for PositionEmbeddingType",0],["impl Clone for EncoderConfig",0],["impl Clone for Activation",0],["impl Clone for HiddenAct",0],["impl Clone for DeepSeekV2RopeScaling",0],["impl Clone for ScaledRopeType",0],["impl Clone for NormType",0],["impl Clone for PadMode",0],["impl Clone for GraniteEosToks",0],["impl Clone for GraniteRopeType",0],["impl Clone for PositionEmbeddingType",0],["impl Clone for Llama3RopeType",0],["impl Clone for LlamaEosToks",0],["impl Clone for AttnKernelType",0],["impl Clone for NonLinearityType",0],["impl Clone for NormType",0],["impl Clone for Norm",0],["impl Clone for PadMode",0],["impl Clone for ResampleMethod",0],["impl Clone for NormType",0],["impl Clone for Mlp",0],["impl Clone for Norm",0],["impl Clone for PositionalEmbedding",0],["impl Clone for ClassifierPooling",0],["impl Clone for PositionEmbeddingType",0],["impl Clone for TemporalBlockType",0],["impl Clone for Activation",0],["impl Clone for DDPMVarianceType",0],["impl Clone for BetaSchedule",0],["impl Clone for PredictionType",0],["impl Clone for TimestepSpacing",0],["impl Clone for AlgorithmType",0],["impl Clone for CorrectorConfiguration",0],["impl Clone for FinalSigmasType",0],["impl Clone for SigmaSchedule",0],["impl Clone for SolverType",0],["impl Clone for TimestepSchedule",0],["impl Clone for EmbedDim",0],["impl Clone for ModelVariant",0],["impl Clone for Config",0],["impl Clone for LinearAttentionConfig",0],["impl Clone for LinearAttentionFeatureMapConfig",0],["impl Clone for Model",0],["impl Clone for SlidingWindowAttentionConfig",0],["impl Clone for BertEncoder",0],["impl Clone for BertLayer",0],["impl Clone for Config",0],["impl Clone for BlipForConditionalGeneration",0],["impl Clone for Config",0],["impl Clone for VisionConfig",0],["impl Clone for VisionModel",0],["impl Clone for Config",0],["impl Clone for TextLMHeadModel",0],["impl Clone for TextPooler",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for ChineseClipConfig",0],["impl Clone for ChineseClipModel",0],["impl Clone for ChineseClipTextConfig",0],["impl Clone for ChineseClipTextEmbeddings",0],["impl Clone for ChineseClipTextTransformer",0],["impl Clone for ChineseClipVisionConfig",0],["impl Clone for ChineseClipVisionEmbeddings",0],["impl Clone for ChineseClipVisionEncoder",0],["impl Clone for ChineseClipVisionTransformer",0],["impl Clone for ClipConfig",0],["impl Clone for ClipModel",0],["impl Clone for ClipEncoder",0],["impl Clone for ClipTextConfig",0],["impl Clone for ClipTextTransformer",0],["impl Clone for ClipVisionConfig",0],["impl Clone for ClipVisionTransformer",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for Config",0],["impl Clone for Decoder",0],["impl Clone for DecoderBlock",0],["impl Clone for Encoder",0],["impl Clone for EncoderBlock",0],["impl Clone for Model",0],["impl Clone for ResidualUnit",0],["impl Clone for ResidualVectorQuantizer",0],["impl Clone for Snake1d",0],["impl Clone for VectorQuantizer",0],["impl Clone for Config",0],["impl Clone for DeepSeekV2Config",0],["impl Clone for DeepSeekV2RotaryEmbedding",0],["impl Clone for Config",0],["impl Clone for MBConvConfig",0],["impl Clone for Config",0],["impl Clone for Config",0],["impl Clone for Decoder",0],["impl Clone for EncodecConv1d",0],["impl Clone for EncodecConvTranspose1d",0],["impl Clone for EncodecLSTM",0],["impl Clone for EncodecResnetBlock",0],["impl Clone for Encoder",0],["impl Clone for EuclideanCodebook",0],["impl Clone for ResidualVectorQuantizer",0],["impl Clone for VectorQuantization",0],["impl Clone for Config",0],["impl Clone for Falcon",0],["impl Clone for Config",0],["impl Clone for AutoEncoder",0],["impl Clone for Config",0],["impl Clone for Decoder",0],["impl Clone for DiagonalGaussian",0],["impl Clone for Encoder",0],["impl Clone for Config",0],["impl Clone for DoubleStreamBlock",0],["impl Clone for EmbedNd",0],["impl Clone for Flux",0],["impl Clone for LastLayer",0],["impl Clone for MlpEmbedder",0],["impl Clone for QkNorm",0],["impl Clone for SelfAttention",0],["impl Clone for SingleStreamBlock",0],["impl Clone for DoubleStreamBlock",0],["impl Clone for Flux",0],["impl Clone for LastLayer",0],["impl Clone for MlpEmbedder",0],["impl Clone for QkNorm",0],["impl Clone for SelfAttention",0],["impl Clone for SingleStreamBlock",0],["impl Clone for State",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for Cache",0],["impl Clone for Config",0],["impl Clone for Granite",0],["impl Clone for GraniteConfig",0],["impl Clone for GraniteRopeConfig",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for BertModel",0],["impl Clone for Config",0],["impl Clone for Cache",0],["impl Clone for Config",0],["impl Clone for Llama",0],["impl Clone for Cache",0],["impl Clone for Config",0],["impl Clone for Llama3RopeConfig",0],["impl Clone for Llama",0],["impl Clone for LlamaConfig",0],["impl Clone for HFGenerationConfig",0],["impl Clone for HFLLaVAConfig",0],["impl Clone for HFLLaVATextConfig",0],["impl Clone for HFLLaVAVisionConfig",0],["impl Clone for HFPreProcessorConfig",0],["impl Clone for LLaVAConfig",0],["impl Clone for Config",0],["impl Clone for MambaBlock",0],["impl Clone for Model",0],["impl Clone for ResidualBlock",0],["impl Clone for Config",0],["impl Clone for Decoder",0],["impl Clone for Encoder",0],["impl Clone for MTModel",0],["impl Clone for Config",0],["impl Clone for Config",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for ConvDownsample1d",0],["impl Clone for ConvTrUpsample1d",0],["impl Clone for NormConv1d",0],["impl Clone for NormConvTranspose1d",0],["impl Clone for StreamableConv1d",0],["impl Clone for StreamableConvTranspose1d",0],["impl Clone for Config",0],["impl Clone for Encodec",0],["impl Clone for EuclideanCodebook",0],["impl Clone for ResidualVectorQuantization",0],["impl Clone for ResidualVectorQuantizer",0],["impl Clone for SplitResidualVectorQuantizer",0],["impl Clone for VectorQuantization",0],["impl Clone for Config",0],["impl Clone for SeaNetDecoder",0],["impl Clone for SeaNetEncoder",0],["impl Clone for SeaNetResnetBlock",0],["impl Clone for Config",0],["impl Clone for LayerScale",0],["impl Clone for ProjectedTransformer",0],["impl Clone for RmsNorm",0],["impl Clone for RotaryEmbedding",0],["impl Clone for StreamingMultiheadAttention",0],["impl Clone for StreamingMultiheadCrossAttention",0],["impl Clone for StreamingTransformer",0],["impl Clone for StreamingTransformerLayer",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for MixFormerSequentialForCausalLM",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for MobileClipConfig",0],["impl Clone for MobileClipModel",0],["impl Clone for Config",0],["impl Clone for Config",0],["impl Clone for ClassifierConfig",0],["impl Clone for Config",0],["impl Clone for ModernBert",0],["impl Clone for ModernBertClassifier",0],["impl Clone for ModernBertDecoder",0],["impl Clone for ModernBertForMaskedLM",0],["impl Clone for ModernBertForSequenceClassification",0],["impl Clone for ModernBertHead",0],["impl Clone for ModernBertLayer",0],["impl Clone for ModernBertMLP",0],["impl Clone for Config",0],["impl Clone for Encoder",0],["impl Clone for Model",0],["impl Clone for VisionConfig",0],["impl Clone for VisionEncoder",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for Encoder",0],["impl Clone for OpenClipTextTransformer",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for MultiModalProjector",0],["impl Clone for Attention",0],["impl Clone for Config",0],["impl Clone for Decoder",0],["impl Clone for DecoderConfig",0],["impl Clone for DecoderLayer",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for RotaryEmbedding",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for MultiModalProjector",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for BlipForConditionalGeneration",0],["impl Clone for VisionModel",0],["impl Clone for TextLMHeadModel",0],["impl Clone for TextPooler",0],["impl Clone for QLlama",0],["impl Clone for ModelWeights",0],["impl Clone for Model",0],["impl Clone for Model",0],["impl Clone for MixFormerSequentialForCausalLM",0],["impl Clone for Encoder",0],["impl Clone for VisionEncoder",0],["impl Clone for Model",0],["impl Clone for ModelWeights",0],["impl Clone for ModelWeights",0],["impl Clone for Model",0],["impl Clone for Model",0],["impl Clone for Model",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for T5EncoderModel",0],["impl Clone for T5ForConditionalGeneration",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for ModelForCausalLM",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for ImageClassificationModel",0],["impl Clone for SemanticSegmentationModel",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for TextConfig",0],["impl Clone for TextModel",0],["impl Clone for TextTransformer",0],["impl Clone for VisionConfig",0],["impl Clone for VisionModel",0],["impl Clone for AttentionBlockConfig",0],["impl Clone for SpatialTransformerConfig",0],["impl Clone for Config",0],["impl Clone for DDIMScheduler",0],["impl Clone for DDIMSchedulerConfig",0],["impl Clone for DDPMSchedulerConfig",0],["impl Clone for EulerAncestralDiscreteScheduler",0],["impl Clone for EulerAncestralDiscreteSchedulerConfig",0],["impl Clone for ResnetBlock2DConfig",0],["impl Clone for StableDiffusionConfig",0],["impl Clone for BlockConfig",0],["impl Clone for UNet2DConditionModelConfig",0],["impl Clone for CrossAttnDownBlock2DConfig",0],["impl Clone for CrossAttnUpBlock2DConfig",0],["impl Clone for DownBlock2DConfig",0],["impl Clone for DownEncoderBlock2DConfig",0],["impl Clone for UNetMidBlock2DConfig",0],["impl Clone for UNetMidBlock2DCrossAttnConfig",0],["impl Clone for UpBlock2DConfig",0],["impl Clone for UpDecoderBlock2DConfig",0],["impl Clone for ExponentialSigmaSchedule",0],["impl Clone for KarrasSigmaSchedule",0],["impl Clone for UniPCSchedulerConfig",0],["impl Clone for AutoEncoderKLConfig",0],["impl Clone for Config",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for Config",0],["impl Clone for EmbedHead",0],["impl Clone for Embeddings",0],["impl Clone for Model",0],["impl Clone for ActivationWithOptionalGating",0],["impl Clone for Config",0],["impl Clone for Linear",0],["impl Clone for T5EncoderModel",0],["impl Clone for T5ForConditionalGeneration",0],["impl Clone for TrOCRConfig",0],["impl Clone for TrOCRDecoder",0],["impl Clone for TrOCREncoder",0],["impl Clone for TrOCRForCausalLM",0],["impl Clone for TrOCRModel",0],["impl Clone for Config",0],["impl Clone for Embeddings",0],["impl Clone for Encoder",0],["impl Clone for Model",0],["impl Clone for AudioEncoder",0],["impl Clone for TextDecoder",0],["impl Clone for Whisper",0],["impl Clone for AudioEncoder",0],["impl Clone for TextDecoder",0],["impl Clone for Whisper",0],["impl Clone for Config",0],["impl Clone for Conv2d",0],["impl Clone for Embedding",0],["impl Clone for LayerNorm",0],["impl Clone for Linear",0],["impl Clone for QMatMul",0],["impl Clone for RmsNorm",0],["impl Clone for DDPMWSchedulerConfig",0],["impl Clone for Config",0],["impl Clone for Config",0],["impl Clone for Model",0],["impl Clone for KeyPoint",0],["impl Clone for Embedding",0],["impl Clone for Linear",0],["impl Clone for RmsNorm",0],["impl Clone for VarBuilder",0],["impl<D: Clone> Clone for Bbox<D>",0]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[121315]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/cmp/trait.Eq.js b/network-poc/target-native/doc/trait.impl/core/cmp/trait.Eq.js deleted file mode 100644 index d5eff19..0000000 --- a/network-poc/target-native/doc/trait.impl/core/cmp/trait.Eq.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl Eq for HiddenAct",0],["impl Eq for PositionEmbeddingType",0],["impl Eq for HiddenAct",0],["impl Eq for NormType",0],["impl Eq for PadMode",0],["impl Eq for PositionEmbeddingType",0],["impl Eq for AttnKernelType",0],["impl Eq for NonLinearityType",0],["impl Eq for NormType",0],["impl Eq for Norm",0],["impl Eq for PadMode",0],["impl Eq for ResampleMethod",0],["impl Eq for NormType",0],["impl Eq for PositionalEmbedding",0],["impl Eq for PositionEmbeddingType",0],["impl Eq for DDPMVarianceType",0]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[5021]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/cmp/trait.PartialEq.js b/network-poc/target-native/doc/trait.impl/core/cmp/trait.PartialEq.js deleted file mode 100644 index 0c2119a..0000000 --- a/network-poc/target-native/doc/trait.impl/core/cmp/trait.PartialEq.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl PartialEq for Sampling",0],["impl PartialEq for HiddenAct",0],["impl PartialEq for PositionEmbeddingType",0],["impl PartialEq for HiddenAct",0],["impl PartialEq for NormType",0],["impl PartialEq for PadMode",0],["impl PartialEq for PositionEmbeddingType",0],["impl PartialEq for AttnKernelType",0],["impl PartialEq for NonLinearityType",0],["impl PartialEq for NormType",0],["impl PartialEq for Norm",0],["impl PartialEq for PadMode",0],["impl PartialEq for ResampleMethod",0],["impl PartialEq for NormType",0],["impl PartialEq for PositionalEmbedding",0],["impl PartialEq for ClassifierPooling",0],["impl PartialEq for PositionEmbeddingType",0],["impl PartialEq for DDPMVarianceType",0],["impl PartialEq for ModelVariant",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for ClassifierConfig",0],["impl PartialEq for Config",0],["impl PartialEq for VisionConfig",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for EmbedHead",0],["impl PartialEq for ActivationWithOptionalGating",0],["impl PartialEq for Config",0],["impl PartialEq for TrOCRConfig",0],["impl PartialEq for Config",0],["impl PartialEq for Config",0],["impl PartialEq for KeyPoint",0]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[14960]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/convert/trait.From.js b/network-poc/target-native/doc/trait.impl/core/convert/trait.From.js deleted file mode 100644 index dda0d56..0000000 --- a/network-poc/target-native/doc/trait.impl/core/convert/trait.From.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl From<String> for Activation",0]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[498]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/default/trait.Default.js b/network-poc/target-native/doc/trait.impl/core/default/trait.Default.js deleted file mode 100644 index 595ffd0..0000000 --- a/network-poc/target-native/doc/trait.impl/core/default/trait.Default.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl Default for PositionEmbeddingType",0],["impl Default for GraniteRopeType",0],["impl Default for Llama3RopeType",0],["impl Default for ClassifierPooling",0],["impl Default for DDPMVarianceType",0],["impl Default for TimestepSpacing",0],["impl Default for AlgorithmType",0],["impl Default for CorrectorConfiguration",0],["impl Default for FinalSigmasType",0],["impl Default for SigmaSchedule",0],["impl Default for SolverType",0],["impl Default for EmbedDim",0],["impl Default for ModelVariant",0],["impl Default for Config",0],["impl Default for ChineseClipTextConfig",0],["impl Default for ChineseClipVisionConfig",0],["impl Default for Config",0],["impl Default for Config",0],["impl Default for Config",0],["impl Default for Config",0],["impl Default for Config",0],["impl Default for GraniteRopeConfig",0],["impl Default for Llama3RopeConfig",0],["impl Default for Config",0],["impl Default for AttentionBlockConfig",0],["impl Default for SpatialTransformerConfig",0],["impl Default for DDIMSchedulerConfig",0],["impl Default for DDPMSchedulerConfig",0],["impl Default for EulerAncestralDiscreteSchedulerConfig",0],["impl Default for ResnetBlock2DConfig",0],["impl Default for UNet2DConditionModelConfig",0],["impl Default for CrossAttnDownBlock2DConfig",0],["impl Default for CrossAttnUpBlock2DConfig",0],["impl Default for DownBlock2DConfig",0],["impl Default for DownEncoderBlock2DConfig",0],["impl Default for UNetMidBlock2DConfig",0],["impl Default for UNetMidBlock2DCrossAttnConfig",0],["impl Default for UpBlock2DConfig",0],["impl Default for UpDecoderBlock2DConfig",0],["impl Default for ExponentialSigmaSchedule",0],["impl Default for KarrasSigmaSchedule",0],["impl Default for UniPCSchedulerConfig",0],["impl Default for AutoEncoderKLConfig",0],["impl Default for Config",0],["impl Default for EmbedHead",0],["impl Default for ActivationWithOptionalGating",0],["impl Default for Config",0],["impl Default for TrOCRConfig",0],["impl Default for DDPMWSchedulerConfig",0]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[18072]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/fmt/trait.Debug.js b/network-poc/target-native/doc/trait.impl/core/fmt/trait.Debug.js deleted file mode 100644 index dfe0fef..0000000 --- a/network-poc/target-native/doc/trait.impl/core/fmt/trait.Debug.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl Debug for Sampling",0],["impl Debug for HiddenAct",0],["impl Debug for PositionEmbeddingType",0],["impl Debug for Activation",0],["impl Debug for EncoderConfig",0],["impl Debug for PositionEmbeddingType",0],["impl Debug for EncoderConfig",0],["impl Debug for Activation",0],["impl Debug for HiddenAct",0],["impl Debug for DeepSeekV2RopeScaling",0],["impl Debug for ScaledRopeType",0],["impl Debug for NormType",0],["impl Debug for PadMode",0],["impl Debug for GraniteEosToks",0],["impl Debug for GraniteRopeType",0],["impl Debug for PositionEmbeddingType",0],["impl Debug for Llama3RopeType",0],["impl Debug for LlamaEosToks",0],["impl Debug for AttnKernelType",0],["impl Debug for NonLinearityType",0],["impl Debug for NormType",0],["impl Debug for Norm",0],["impl Debug for PadMode",0],["impl Debug for ResampleMethod",0],["impl Debug for NormType",0],["impl Debug for Mlp",0],["impl Debug for Norm",0],["impl Debug for PositionalEmbedding",0],["impl Debug for ClassifierPooling",0],["impl Debug for PositionEmbeddingType",0],["impl Debug for TemporalBlockType",0],["impl Debug for Activation",0],["impl Debug for DDPMVarianceType",0],["impl Debug for BetaSchedule",0],["impl Debug for PredictionType",0],["impl Debug for TimestepSpacing",0],["impl Debug for AlgorithmType",0],["impl Debug for CorrectorConfiguration",0],["impl Debug for FinalSigmasType",0],["impl Debug for SigmaSchedule",0],["impl Debug for SolverType",0],["impl Debug for TimestepSchedule",0],["impl Debug for EmbedDim",0],["impl Debug for ModelVariant",0],["impl Debug for Config",0],["impl Debug for LinearAttentionConfig",0],["impl Debug for LinearAttentionFeatureMapConfig",0],["impl Debug for Model",0],["impl Debug for SlidingWindowAttentionConfig",0],["impl Debug for BeitVisionTransformer",0],["impl Debug for Config",0],["impl Debug for Config",0],["impl Debug for BlipForConditionalGeneration",0],["impl Debug for Config",0],["impl Debug for VisionConfig",0],["impl Debug for VisionModel",0],["impl Debug for Config",0],["impl Debug for TextLMHeadModel",0],["impl Debug for TextPooler",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for ChineseClipConfig",0],["impl Debug for ChineseClipModel",0],["impl Debug for ChineseClipTextConfig",0],["impl Debug for ChineseClipTextEmbeddings",0],["impl Debug for ChineseClipTextTransformer",0],["impl Debug for ChineseClipVisionConfig",0],["impl Debug for ChineseClipVisionEmbeddings",0],["impl Debug for ChineseClipVisionEncoder",0],["impl Debug for ChineseClipVisionTransformer",0],["impl Debug for ClipConfig",0],["impl Debug for ClipModel",0],["impl Debug for ClipEncoder",0],["impl Debug for ClipTextConfig",0],["impl Debug for ClipTextTransformer",0],["impl Debug for ClipVisionConfig",0],["impl Debug for ClipVisionTransformer",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for Decoder",0],["impl Debug for DecoderBlock",0],["impl Debug for Encoder",0],["impl Debug for EncoderBlock",0],["impl Debug for Model",0],["impl Debug for ResidualUnit",0],["impl Debug for ResidualVectorQuantizer",0],["impl Debug for Snake1d",0],["impl Debug for VectorQuantizer",0],["impl Debug for Config",0],["impl Debug for NERItem",0],["impl Debug for TextClassificationItem",0],["impl Debug for DeepSeekV2Config",0],["impl Debug for DeepSeekV2RotaryEmbedding",0],["impl Debug for DinoVisionTransformer",0],["impl Debug for DinoVisionTransformer",0],["impl Debug for Config",0],["impl Debug for EfficientNet",0],["impl Debug for MBConvConfig",0],["impl Debug for Config",0],["impl Debug for Decoder",0],["impl Debug for EncodecConv1d",0],["impl Debug for EncodecConvTranspose1d",0],["impl Debug for EncodecLSTM",0],["impl Debug for EncodecResnetBlock",0],["impl Debug for Encoder",0],["impl Debug for EuclideanCodebook",0],["impl Debug for Model",0],["impl Debug for ResidualVectorQuantizer",0],["impl Debug for VectorQuantization",0],["impl Debug for EVA2VisionTransformer",0],["impl Debug for Config",0],["impl Debug for Falcon",0],["impl Debug for Config",0],["impl Debug for AutoEncoder",0],["impl Debug for Config",0],["impl Debug for Decoder",0],["impl Debug for DiagonalGaussian",0],["impl Debug for Encoder",0],["impl Debug for Config",0],["impl Debug for DoubleStreamBlock",0],["impl Debug for EmbedNd",0],["impl Debug for Flux",0],["impl Debug for LastLayer",0],["impl Debug for MlpEmbedder",0],["impl Debug for QkNorm",0],["impl Debug for SelfAttention",0],["impl Debug for SingleStreamBlock",0],["impl Debug for DoubleStreamBlock",0],["impl Debug for Flux",0],["impl Debug for LastLayer",0],["impl Debug for MlpEmbedder",0],["impl Debug for QkNorm",0],["impl Debug for SelfAttention",0],["impl Debug for SingleStreamBlock",0],["impl Debug for State",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for Cache",0],["impl Debug for Config",0],["impl Debug for Granite",0],["impl Debug for GraniteConfig",0],["impl Debug for GraniteRopeConfig",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for BertModel",0],["impl Debug for Config",0],["impl Debug for Cache",0],["impl Debug for Config",0],["impl Debug for Llama",0],["impl Debug for Cache",0],["impl Debug for Config",0],["impl Debug for Llama3RopeConfig",0],["impl Debug for Llama",0],["impl Debug for LlamaConfig",0],["impl Debug for HFGenerationConfig",0],["impl Debug for HFLLaVAConfig",0],["impl Debug for HFLLaVATextConfig",0],["impl Debug for HFLLaVAVisionConfig",0],["impl Debug for HFPreProcessorConfig",0],["impl Debug for LLaVAConfig",0],["impl Debug for Config",0],["impl Debug for MambaBlock",0],["impl Debug for Model",0],["impl Debug for ResidualBlock",0],["impl Debug for Config",0],["impl Debug for Decoder",0],["impl Debug for Encoder",0],["impl Debug for MTModel",0],["impl Debug for Config",0],["impl Debug for Config",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for ConvDownsample1d",0],["impl Debug for ConvTrUpsample1d",0],["impl Debug for NormConv1d",0],["impl Debug for NormConvTranspose1d",0],["impl Debug for StreamableConv1d",0],["impl Debug for StreamableConvTranspose1d",0],["impl Debug for Config",0],["impl Debug for Encodec",0],["impl Debug for EuclideanCodebook",0],["impl Debug for ResidualVectorQuantization",0],["impl Debug for ResidualVectorQuantizer",0],["impl Debug for SplitResidualVectorQuantizer",0],["impl Debug for VectorQuantization",0],["impl Debug for Config",0],["impl Debug for SeaNetDecoder",0],["impl Debug for SeaNetEncoder",0],["impl Debug for SeaNetResnetBlock",0],["impl Debug for Config",0],["impl Debug for LayerScale",0],["impl Debug for ProjectedTransformer",0],["impl Debug for RmsNorm",0],["impl Debug for RotaryEmbedding",0],["impl Debug for StreamingMultiheadAttention",0],["impl Debug for StreamingMultiheadCrossAttention",0],["impl Debug for StreamingTransformer",0],["impl Debug for StreamingTransformerLayer",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for MixFormerSequentialForCausalLM",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for MobileClipConfig",0],["impl Debug for MobileClipModel",0],["impl Debug for Config",0],["impl Debug for ClassifierConfig",0],["impl Debug for Config",0],["impl Debug for Config",0],["impl Debug for Encoder",0],["impl Debug for Model",0],["impl Debug for VisionConfig",0],["impl Debug for VisionEncoder",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for Model",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for Encoder",0],["impl Debug for OpenClipTextTransformer",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for MultiModalProjector",0],["impl Debug for Attention",0],["impl Debug for Config",0],["impl Debug for Decoder",0],["impl Debug for DecoderConfig",0],["impl Debug for DecoderLayer",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for RotaryEmbedding",0],["impl Debug for Config",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for MultiModalProjector",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for BlipForConditionalGeneration",0],["impl Debug for VisionModel",0],["impl Debug for TextLMHeadModel",0],["impl Debug for TextPooler",0],["impl Debug for QLlama",0],["impl Debug for ModelWeights",0],["impl Debug for Model",0],["impl Debug for Model",0],["impl Debug for MixFormerSequentialForCausalLM",0],["impl Debug for Encoder",0],["impl Debug for VisionEncoder",0],["impl Debug for Model",0],["impl Debug for ModelWeights",0],["impl Debug for ModelWeights",0],["impl Debug for Model",0],["impl Debug for Model",0],["impl Debug for Model",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for T5EncoderModel",0],["impl Debug for T5ForConditionalGeneration",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for ModelForCausalLM",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for ImageClassificationModel",0],["impl Debug for SemanticSegmentationModel",0],["impl Debug for ImageEncoderViT",0],["impl Debug for MaskDecoder",0],["impl Debug for PromptEncoder",0],["impl Debug for Sam",0],["impl Debug for LayerNorm2d",0],["impl Debug for MlpBlock",0],["impl Debug for TinyViT",0],["impl Debug for TwoWayTransformer",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for TextConfig",0],["impl Debug for TextModel",0],["impl Debug for TextTransformer",0],["impl Debug for VisionConfig",0],["impl Debug for VisionModel",0],["impl Debug for AttentionBlock",0],["impl Debug for AttentionBlockConfig",0],["impl Debug for CrossAttention",0],["impl Debug for SpatialTransformer",0],["impl Debug for SpatialTransformerConfig",0],["impl Debug for ClipTextTransformer",0],["impl Debug for Config",0],["impl Debug for DDIMScheduler",0],["impl Debug for DDIMSchedulerConfig",0],["impl Debug for DDPMSchedulerConfig",0],["impl Debug for TimestepEmbedding",0],["impl Debug for Timesteps",0],["impl Debug for EulerAncestralDiscreteScheduler",0],["impl Debug for EulerAncestralDiscreteSchedulerConfig",0],["impl Debug for ResnetBlock2D",0],["impl Debug for ResnetBlock2DConfig",0],["impl Debug for StableDiffusionConfig",0],["impl Debug for BlockConfig",0],["impl Debug for UNet2DConditionModel",0],["impl Debug for UNet2DConditionModelConfig",0],["impl Debug for CrossAttnDownBlock2D",0],["impl Debug for CrossAttnDownBlock2DConfig",0],["impl Debug for CrossAttnUpBlock2D",0],["impl Debug for CrossAttnUpBlock2DConfig",0],["impl Debug for DownBlock2D",0],["impl Debug for DownBlock2DConfig",0],["impl Debug for DownEncoderBlock2D",0],["impl Debug for DownEncoderBlock2DConfig",0],["impl Debug for UNetMidBlock2D",0],["impl Debug for UNetMidBlock2DConfig",0],["impl Debug for UNetMidBlock2DCrossAttn",0],["impl Debug for UNetMidBlock2DCrossAttnConfig",0],["impl Debug for UpBlock2D",0],["impl Debug for UpBlock2DConfig",0],["impl Debug for UpDecoderBlock2D",0],["impl Debug for UpDecoderBlock2DConfig",0],["impl Debug for ExponentialSigmaSchedule",0],["impl Debug for KarrasSigmaSchedule",0],["impl Debug for UniPCSchedulerConfig",0],["impl Debug for AutoEncoderKL",0],["impl Debug for AutoEncoderKLConfig",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for Config",0],["impl Debug for EmbedHead",0],["impl Debug for EmbeddingModel",0],["impl Debug for Embeddings",0],["impl Debug for Model",0],["impl Debug for ActivationWithOptionalGating",0],["impl Debug for Config",0],["impl Debug for Linear",0],["impl Debug for T5EncoderModel",0],["impl Debug for T5ForConditionalGeneration",0],["impl Debug for TrOCRConfig",0],["impl Debug for TrOCRDecoder",0],["impl Debug for TrOCREncoder",0],["impl Debug for TrOCRForCausalLM",0],["impl Debug for TrOCRModel",0],["impl Debug for Config",0],["impl Debug for Embeddings",0],["impl Debug for Encoder",0],["impl Debug for Model",0],["impl Debug for AudioEncoder",0],["impl Debug for TextDecoder",0],["impl Debug for Whisper",0],["impl Debug for AudioEncoder",0],["impl Debug for TextDecoder",0],["impl Debug for Whisper",0],["impl Debug for Config",0],["impl Debug for Conv2d",0],["impl Debug for Embedding",0],["impl Debug for LayerNorm",0],["impl Debug for Linear",0],["impl Debug for QMatMul",0],["impl Debug for RmsNorm",0],["impl Debug for Attention",0],["impl Debug for AttnBlock",0],["impl Debug for GlobalResponseNorm",0],["impl Debug for LayerNormNoWeights",0],["impl Debug for ResBlock",0],["impl Debug for TimestepBlock",0],["impl Debug for WLayerNorm",0],["impl Debug for DDPMWSchedulerConfig",0],["impl Debug for ResBlockStageB",0],["impl Debug for WDiffNeXt",0],["impl Debug for MixingResidualBlock",0],["impl Debug for PaellaVQ",0],["impl Debug for WPrior",0],["impl Debug for Config",0],["impl Debug for Config",0],["impl Debug for Model",0],["impl Debug for KeyPoint",0],["impl Debug for Embedding",0],["impl Debug for Linear",0],["impl Debug for RmsNorm",0],["impl<'a> Debug for Vgg<'a>",0],["impl<D: Debug> Debug for Bbox<D>",0]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[132121]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/hash/trait.Hash.js b/network-poc/target-native/doc/trait.impl/core/hash/trait.Hash.js deleted file mode 100644 index b506a1b..0000000 --- a/network-poc/target-native/doc/trait.impl/core/hash/trait.Hash.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl Hash for AttnKernelType",0],["impl Hash for NonLinearityType",0],["impl Hash for NormType",0]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[1006]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/marker/trait.Copy.js b/network-poc/target-native/doc/trait.impl/core/marker/trait.Copy.js deleted file mode 100644 index f455c48..0000000 --- a/network-poc/target-native/doc/trait.impl/core/marker/trait.Copy.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl Copy for HiddenAct",0],["impl Copy for PositionEmbeddingType",0],["impl Copy for Activation",0],["impl Copy for Activation",0],["impl Copy for HiddenAct",0],["impl Copy for NormType",0],["impl Copy for PadMode",0],["impl Copy for PositionEmbeddingType",0],["impl Copy for AttnKernelType",0],["impl Copy for NonLinearityType",0],["impl Copy for NormType",0],["impl Copy for Norm",0],["impl Copy for PadMode",0],["impl Copy for ResampleMethod",0],["impl Copy for NormType",0],["impl Copy for PositionalEmbedding",0],["impl Copy for ClassifierPooling",0],["impl Copy for PositionEmbeddingType",0],["impl Copy for TemporalBlockType",0],["impl Copy for Activation",0],["impl Copy for BetaSchedule",0],["impl Copy for PredictionType",0],["impl Copy for TimestepSpacing",0],["impl Copy for AlgorithmType",0],["impl Copy for FinalSigmasType",0],["impl Copy for SigmaSchedule",0],["impl Copy for SolverType",0],["impl Copy for EmbedDim",0],["impl Copy for ModelVariant",0],["impl Copy for MBConvConfig",0],["impl Copy for AttentionBlockConfig",0],["impl Copy for SpatialTransformerConfig",0],["impl Copy for DDIMSchedulerConfig",0],["impl Copy for EulerAncestralDiscreteSchedulerConfig",0],["impl Copy for ResnetBlock2DConfig",0],["impl Copy for BlockConfig",0],["impl Copy for CrossAttnDownBlock2DConfig",0],["impl Copy for CrossAttnUpBlock2DConfig",0],["impl Copy for DownBlock2DConfig",0],["impl Copy for DownEncoderBlock2DConfig",0],["impl Copy for UNetMidBlock2DConfig",0],["impl Copy for UNetMidBlock2DCrossAttnConfig",0],["impl Copy for UpBlock2DConfig",0],["impl Copy for UpDecoderBlock2DConfig",0],["impl Copy for ExponentialSigmaSchedule",0],["impl Copy for KarrasSigmaSchedule",0],["impl Copy for KeyPoint",0]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[16630]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/marker/trait.Freeze.js b/network-poc/target-native/doc/trait.impl/core/marker/trait.Freeze.js deleted file mode 100644 index dda85e0..0000000 --- a/network-poc/target-native/doc/trait.impl/core/marker/trait.Freeze.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl Freeze for Sampling",0,1,["candle_transformers::generation::Sampling"]],["impl Freeze for HiddenAct",0,1,["candle_transformers::models::bert::HiddenAct"]],["impl Freeze for PositionEmbeddingType",0,1,["candle_transformers::models::bert::PositionEmbeddingType"]],["impl Freeze for Activation",0,1,["candle_transformers::models::chinese_clip::Activation"]],["impl Freeze for EncoderConfig",0,1,["candle_transformers::models::chinese_clip::EncoderConfig"]],["impl Freeze for PositionEmbeddingType",0,1,["candle_transformers::models::chinese_clip::text_model::PositionEmbeddingType"]],["impl Freeze for EncoderConfig",0,1,["candle_transformers::models::clip::EncoderConfig"]],["impl Freeze for Activation",0,1,["candle_transformers::models::clip::text_model::Activation"]],["impl Freeze for HiddenAct",0,1,["candle_transformers::models::debertav2::HiddenAct"]],["impl Freeze for DeepSeekV2RopeScaling",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RopeScaling"]],["impl Freeze for ScaledRopeType",0,1,["candle_transformers::models::deepseek2::ScaledRopeType"]],["impl Freeze for NormType",0,1,["candle_transformers::models::encodec::NormType"]],["impl Freeze for PadMode",0,1,["candle_transformers::models::encodec::PadMode"]],["impl Freeze for GraniteEosToks",0,1,["candle_transformers::models::granite::GraniteEosToks"]],["impl Freeze for GraniteRopeType",0,1,["candle_transformers::models::granite::GraniteRopeType"]],["impl Freeze for PositionEmbeddingType",0,1,["candle_transformers::models::jina_bert::PositionEmbeddingType"]],["impl Freeze for Llama3RopeType",0,1,["candle_transformers::models::llama::Llama3RopeType"]],["impl Freeze for LlamaEosToks",0,1,["candle_transformers::models::llama::LlamaEosToks"]],["impl Freeze for AttnKernelType",0,1,["candle_transformers::models::metavoice::gpt::AttnKernelType"]],["impl Freeze for NonLinearityType",0,1,["candle_transformers::models::metavoice::gpt::NonLinearityType"]],["impl Freeze for NormType",0,1,["candle_transformers::models::metavoice::gpt::NormType"]],["impl Freeze for Norm",0,1,["candle_transformers::models::mimi::conv::Norm"]],["impl Freeze for PadMode",0,1,["candle_transformers::models::mimi::conv::PadMode"]],["impl Freeze for ResampleMethod",0,1,["candle_transformers::models::mimi::encodec::ResampleMethod"]],["impl Freeze for NormType",0,1,["candle_transformers::models::mimi::NormType"]],["impl Freeze for Mlp",0,1,["candle_transformers::models::mimi::transformer::Mlp"]],["impl Freeze for Norm",0,1,["candle_transformers::models::mimi::transformer::Norm"]],["impl Freeze for PositionalEmbedding",0,1,["candle_transformers::models::mimi::transformer::PositionalEmbedding"]],["impl Freeze for ClassifierPooling",0,1,["candle_transformers::models::modernbert::ClassifierPooling"]],["impl Freeze for PositionEmbeddingType",0,1,["candle_transformers::models::persimmon::PositionEmbeddingType"]],["impl Freeze for TemporalBlockType",0,1,["candle_transformers::models::recurrent_gemma::TemporalBlockType"]],["impl Freeze for Activation",0,1,["candle_transformers::models::stable_diffusion::clip::Activation"]],["impl Freeze for DDPMVarianceType",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMVarianceType"]],["impl Freeze for BetaSchedule",0,1,["candle_transformers::models::stable_diffusion::schedulers::BetaSchedule"]],["impl Freeze for PredictionType",0,1,["candle_transformers::models::stable_diffusion::schedulers::PredictionType"]],["impl Freeze for TimestepSpacing",0,1,["candle_transformers::models::stable_diffusion::schedulers::TimestepSpacing"]],["impl Freeze for AlgorithmType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::AlgorithmType"]],["impl Freeze for CorrectorConfiguration",0,1,["candle_transformers::models::stable_diffusion::uni_pc::CorrectorConfiguration"]],["impl Freeze for FinalSigmasType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::FinalSigmasType"]],["impl Freeze for SigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::SigmaSchedule"]],["impl Freeze for SolverType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::SolverType"]],["impl Freeze for TimestepSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::TimestepSchedule"]],["impl Freeze for EmbedDim",0,1,["candle_transformers::models::stella_en_v5::EmbedDim"]],["impl Freeze for ModelVariant",0,1,["candle_transformers::models::stella_en_v5::ModelVariant"]],["impl Freeze for Models",0,1,["candle_transformers::models::vgg::Models"]],["impl Freeze for LogitsProcessor",0,1,["candle_transformers::generation::LogitsProcessor"]],["impl Freeze for Config",0,1,["candle_transformers::models::based::Config"]],["impl Freeze for LinearAttentionConfig",0,1,["candle_transformers::models::based::LinearAttentionConfig"]],["impl Freeze for LinearAttentionFeatureMapConfig",0,1,["candle_transformers::models::based::LinearAttentionFeatureMapConfig"]],["impl Freeze for Model",0,1,["candle_transformers::models::based::Model"]],["impl Freeze for SlidingWindowAttentionConfig",0,1,["candle_transformers::models::based::SlidingWindowAttentionConfig"]],["impl Freeze for BeitVisionTransformer",0,1,["candle_transformers::models::beit::BeitVisionTransformer"]],["impl Freeze for BertEncoder",0,1,["candle_transformers::models::bert::BertEncoder"]],["impl Freeze for BertForMaskedLM",0,1,["candle_transformers::models::bert::BertForMaskedLM"]],["impl Freeze for BertLMPredictionHead",0,1,["candle_transformers::models::bert::BertLMPredictionHead"]],["impl Freeze for BertLayer",0,1,["candle_transformers::models::bert::BertLayer"]],["impl Freeze for BertModel",0,1,["candle_transformers::models::bert::BertModel"]],["impl Freeze for BertOnlyMLMHead",0,1,["candle_transformers::models::bert::BertOnlyMLMHead"]],["impl Freeze for Config",0,1,["candle_transformers::models::bert::Config"]],["impl Freeze for Config",0,1,["candle_transformers::models::bigcode::Config"]],["impl Freeze for GPTBigCode",0,1,["candle_transformers::models::bigcode::GPTBigCode"]],["impl Freeze for BlipForConditionalGeneration",0,1,["candle_transformers::models::blip::BlipForConditionalGeneration"]],["impl Freeze for Config",0,1,["candle_transformers::models::blip::Config"]],["impl Freeze for VisionConfig",0,1,["candle_transformers::models::blip::VisionConfig"]],["impl Freeze for VisionModel",0,1,["candle_transformers::models::blip::VisionModel"]],["impl Freeze for Config",0,1,["candle_transformers::models::blip_text::Config"]],["impl Freeze for TextLMHeadModel",0,1,["candle_transformers::models::blip_text::TextLMHeadModel"]],["impl Freeze for TextPooler",0,1,["candle_transformers::models::blip_text::TextPooler"]],["impl Freeze for Config",0,1,["candle_transformers::models::chatglm::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::chatglm::Model"]],["impl Freeze for ChineseClipConfig",0,1,["candle_transformers::models::chinese_clip::ChineseClipConfig"]],["impl Freeze for ChineseClipModel",0,1,["candle_transformers::models::chinese_clip::ChineseClipModel"]],["impl Freeze for ChineseClipTextConfig",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextConfig"]],["impl Freeze for ChineseClipTextEmbeddings",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextEmbeddings"]],["impl Freeze for ChineseClipTextTransformer",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextTransformer"]],["impl Freeze for ChineseClipVisionConfig",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionConfig"]],["impl Freeze for ChineseClipVisionEmbeddings",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionEmbeddings"]],["impl Freeze for ChineseClipVisionEncoder",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionEncoder"]],["impl Freeze for ChineseClipVisionTransformer",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionTransformer"]],["impl Freeze for ClipConfig",0,1,["candle_transformers::models::clip::ClipConfig"]],["impl Freeze for ClipModel",0,1,["candle_transformers::models::clip::ClipModel"]],["impl Freeze for ClipEncoder",0,1,["candle_transformers::models::clip::text_model::ClipEncoder"]],["impl Freeze for ClipTextConfig",0,1,["candle_transformers::models::clip::text_model::ClipTextConfig"]],["impl Freeze for ClipTextTransformer",0,1,["candle_transformers::models::clip::text_model::ClipTextTransformer"]],["impl Freeze for ClipVisionConfig",0,1,["candle_transformers::models::clip::vision_model::ClipVisionConfig"]],["impl Freeze for ClipVisionTransformer",0,1,["candle_transformers::models::clip::vision_model::ClipVisionTransformer"]],["impl Freeze for Config",0,1,["candle_transformers::models::codegeex4_9b::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::codegeex4_9b::Model"]],["impl Freeze for Model",0,1,["candle_transformers::models::colpali::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::convnext::Config"]],["impl Freeze for Config",0,1,["candle_transformers::models::dac::Config"]],["impl Freeze for Decoder",0,1,["candle_transformers::models::dac::Decoder"]],["impl Freeze for DecoderBlock",0,1,["candle_transformers::models::dac::DecoderBlock"]],["impl Freeze for Encoder",0,1,["candle_transformers::models::dac::Encoder"]],["impl Freeze for EncoderBlock",0,1,["candle_transformers::models::dac::EncoderBlock"]],["impl Freeze for Model",0,1,["candle_transformers::models::dac::Model"]],["impl Freeze for ResidualUnit",0,1,["candle_transformers::models::dac::ResidualUnit"]],["impl Freeze for ResidualVectorQuantizer",0,1,["candle_transformers::models::dac::ResidualVectorQuantizer"]],["impl Freeze for Snake1d",0,1,["candle_transformers::models::dac::Snake1d"]],["impl Freeze for VectorQuantizer",0,1,["candle_transformers::models::dac::VectorQuantizer"]],["impl Freeze for Config",0,1,["candle_transformers::models::debertav2::Config"]],["impl Freeze for ConvLayer",0,1,["candle_transformers::models::debertav2::ConvLayer"]],["impl Freeze for DebertaV2Attention",0,1,["candle_transformers::models::debertav2::DebertaV2Attention"]],["impl Freeze for DebertaV2ContextPooler",0,1,["candle_transformers::models::debertav2::DebertaV2ContextPooler"]],["impl Freeze for DebertaV2DisentangledSelfAttention",0,1,["candle_transformers::models::debertav2::DebertaV2DisentangledSelfAttention"]],["impl Freeze for DebertaV2Embeddings",0,1,["candle_transformers::models::debertav2::DebertaV2Embeddings"]],["impl Freeze for DebertaV2Encoder",0,1,["candle_transformers::models::debertav2::DebertaV2Encoder"]],["impl Freeze for DebertaV2Intermediate",0,1,["candle_transformers::models::debertav2::DebertaV2Intermediate"]],["impl Freeze for DebertaV2Layer",0,1,["candle_transformers::models::debertav2::DebertaV2Layer"]],["impl Freeze for DebertaV2Model",0,1,["candle_transformers::models::debertav2::DebertaV2Model"]],["impl Freeze for DebertaV2NERModel",0,1,["candle_transformers::models::debertav2::DebertaV2NERModel"]],["impl Freeze for DebertaV2Output",0,1,["candle_transformers::models::debertav2::DebertaV2Output"]],["impl Freeze for DebertaV2SelfOutput",0,1,["candle_transformers::models::debertav2::DebertaV2SelfOutput"]],["impl Freeze for DebertaV2SeqClassificationModel",0,1,["candle_transformers::models::debertav2::DebertaV2SeqClassificationModel"]],["impl Freeze for HiddenActLayer",0,1,["candle_transformers::models::debertav2::HiddenActLayer"]],["impl Freeze for NERItem",0,1,["candle_transformers::models::debertav2::NERItem"]],["impl Freeze for StableDropout",0,1,["candle_transformers::models::debertav2::StableDropout"]],["impl Freeze for TextClassificationItem",0,1,["candle_transformers::models::debertav2::TextClassificationItem"]],["impl Freeze for DeepSeekV2",0,1,["candle_transformers::models::deepseek2::DeepSeekV2"]],["impl Freeze for DeepSeekV2Config",0,1,["candle_transformers::models::deepseek2::DeepSeekV2Config"]],["impl Freeze for DeepSeekV2RopeConfig",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RopeConfig"]],["impl Freeze for DeepSeekV2RotaryEmbedding",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RotaryEmbedding"]],["impl Freeze for TopKOutput",0,1,["candle_transformers::models::deepseek2::TopKOutput"]],["impl Freeze for DPTHead",0,1,["candle_transformers::models::depth_anything_v2::DPTHead"]],["impl Freeze for DepthAnythingV2",0,1,["candle_transformers::models::depth_anything_v2::DepthAnythingV2"]],["impl Freeze for DepthAnythingV2Config",0,1,["candle_transformers::models::depth_anything_v2::DepthAnythingV2Config"]],["impl Freeze for FeatureFusionBlock",0,1,["candle_transformers::models::depth_anything_v2::FeatureFusionBlock"]],["impl Freeze for ResidualConvUnit",0,1,["candle_transformers::models::depth_anything_v2::ResidualConvUnit"]],["impl Freeze for Scratch",0,1,["candle_transformers::models::depth_anything_v2::Scratch"]],["impl Freeze for DinoVisionTransformer",0,1,["candle_transformers::models::dinov2::DinoVisionTransformer"]],["impl Freeze for DinoVisionTransformer",0,1,["candle_transformers::models::dinov2reg4::DinoVisionTransformer"]],["impl Freeze for Config",0,1,["candle_transformers::models::distilbert::Config"]],["impl Freeze for DistilBertModel",0,1,["candle_transformers::models::distilbert::DistilBertModel"]],["impl Freeze for EfficientNet",0,1,["candle_transformers::models::efficientnet::EfficientNet"]],["impl Freeze for MBConvConfig",0,1,["candle_transformers::models::efficientnet::MBConvConfig"]],["impl Freeze for Config",0,1,["candle_transformers::models::efficientvit::Config"]],["impl Freeze for Config",0,1,["candle_transformers::models::encodec::Config"]],["impl Freeze for Decoder",0,1,["candle_transformers::models::encodec::Decoder"]],["impl Freeze for EncodecConv1d",0,1,["candle_transformers::models::encodec::EncodecConv1d"]],["impl Freeze for EncodecConvTranspose1d",0,1,["candle_transformers::models::encodec::EncodecConvTranspose1d"]],["impl Freeze for EncodecLSTM",0,1,["candle_transformers::models::encodec::EncodecLSTM"]],["impl Freeze for EncodecResnetBlock",0,1,["candle_transformers::models::encodec::EncodecResnetBlock"]],["impl Freeze for Encoder",0,1,["candle_transformers::models::encodec::Encoder"]],["impl Freeze for EuclideanCodebook",0,1,["candle_transformers::models::encodec::EuclideanCodebook"]],["impl Freeze for Model",0,1,["candle_transformers::models::encodec::Model"]],["impl Freeze for ResidualVectorQuantizer",0,1,["candle_transformers::models::encodec::ResidualVectorQuantizer"]],["impl Freeze for VectorQuantization",0,1,["candle_transformers::models::encodec::VectorQuantization"]],["impl Freeze for EVA2VisionTransformer",0,1,["candle_transformers::models::eva2::EVA2VisionTransformer"]],["impl Freeze for Config",0,1,["candle_transformers::models::falcon::Config"]],["impl Freeze for Falcon",0,1,["candle_transformers::models::falcon::Falcon"]],["impl Freeze for Config",0,1,["candle_transformers::models::fastvit::Config"]],["impl Freeze for AutoEncoder",0,1,["candle_transformers::models::flux::autoencoder::AutoEncoder"]],["impl Freeze for Config",0,1,["candle_transformers::models::flux::autoencoder::Config"]],["impl Freeze for Decoder",0,1,["candle_transformers::models::flux::autoencoder::Decoder"]],["impl Freeze for DiagonalGaussian",0,1,["candle_transformers::models::flux::autoencoder::DiagonalGaussian"]],["impl Freeze for Encoder",0,1,["candle_transformers::models::flux::autoencoder::Encoder"]],["impl Freeze for Config",0,1,["candle_transformers::models::flux::model::Config"]],["impl Freeze for DoubleStreamBlock",0,1,["candle_transformers::models::flux::model::DoubleStreamBlock"]],["impl Freeze for EmbedNd",0,1,["candle_transformers::models::flux::model::EmbedNd"]],["impl Freeze for Flux",0,1,["candle_transformers::models::flux::model::Flux"]],["impl Freeze for LastLayer",0,1,["candle_transformers::models::flux::model::LastLayer"]],["impl Freeze for MlpEmbedder",0,1,["candle_transformers::models::flux::model::MlpEmbedder"]],["impl Freeze for QkNorm",0,1,["candle_transformers::models::flux::model::QkNorm"]],["impl Freeze for SelfAttention",0,1,["candle_transformers::models::flux::model::SelfAttention"]],["impl Freeze for SingleStreamBlock",0,1,["candle_transformers::models::flux::model::SingleStreamBlock"]],["impl Freeze for DoubleStreamBlock",0,1,["candle_transformers::models::flux::quantized_model::DoubleStreamBlock"]],["impl Freeze for Flux",0,1,["candle_transformers::models::flux::quantized_model::Flux"]],["impl Freeze for LastLayer",0,1,["candle_transformers::models::flux::quantized_model::LastLayer"]],["impl Freeze for MlpEmbedder",0,1,["candle_transformers::models::flux::quantized_model::MlpEmbedder"]],["impl Freeze for QkNorm",0,1,["candle_transformers::models::flux::quantized_model::QkNorm"]],["impl Freeze for SelfAttention",0,1,["candle_transformers::models::flux::quantized_model::SelfAttention"]],["impl Freeze for SingleStreamBlock",0,1,["candle_transformers::models::flux::quantized_model::SingleStreamBlock"]],["impl Freeze for State",0,1,["candle_transformers::models::flux::sampling::State"]],["impl Freeze for Config",0,1,["candle_transformers::models::gemma2::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::gemma2::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::gemma3::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::gemma3::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::gemma::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::gemma::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::glm4::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::glm4::Model"]],["impl Freeze for Cache",0,1,["candle_transformers::models::granite::Cache"]],["impl Freeze for Config",0,1,["candle_transformers::models::granite::Config"]],["impl Freeze for Granite",0,1,["candle_transformers::models::granite::Granite"]],["impl Freeze for GraniteConfig",0,1,["candle_transformers::models::granite::GraniteConfig"]],["impl Freeze for GraniteRopeConfig",0,1,["candle_transformers::models::granite::GraniteRopeConfig"]],["impl Freeze for Config",0,1,["candle_transformers::models::helium::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::helium::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::hiera::Config"]],["impl Freeze for BertModel",0,1,["candle_transformers::models::jina_bert::BertModel"]],["impl Freeze for Config",0,1,["candle_transformers::models::jina_bert::Config"]],["impl Freeze for Cache",0,1,["candle_transformers::models::llama2_c::Cache"]],["impl Freeze for Config",0,1,["candle_transformers::models::llama2_c::Config"]],["impl Freeze for Llama",0,1,["candle_transformers::models::llama2_c::Llama"]],["impl Freeze for TransformerWeights",0,1,["candle_transformers::models::llama2_c_weights::TransformerWeights"]],["impl Freeze for Cache",0,1,["candle_transformers::models::llama::Cache"]],["impl Freeze for Config",0,1,["candle_transformers::models::llama::Config"]],["impl Freeze for Llama3RopeConfig",0,1,["candle_transformers::models::llama::Llama3RopeConfig"]],["impl Freeze for Llama",0,1,["candle_transformers::models::llama::Llama"]],["impl Freeze for LlamaConfig",0,1,["candle_transformers::models::llama::LlamaConfig"]],["impl Freeze for HFGenerationConfig",0,1,["candle_transformers::models::llava::config::HFGenerationConfig"]],["impl Freeze for HFLLaVAConfig",0,1,["candle_transformers::models::llava::config::HFLLaVAConfig"]],["impl Freeze for HFLLaVATextConfig",0,1,["candle_transformers::models::llava::config::HFLLaVATextConfig"]],["impl Freeze for HFLLaVAVisionConfig",0,1,["candle_transformers::models::llava::config::HFLLaVAVisionConfig"]],["impl Freeze for HFPreProcessorConfig",0,1,["candle_transformers::models::llava::config::HFPreProcessorConfig"]],["impl Freeze for LLaVAConfig",0,1,["candle_transformers::models::llava::config::LLaVAConfig"]],["impl Freeze for ClipVisionTower",0,1,["candle_transformers::models::llava::ClipVisionTower"]],["impl Freeze for IdentityMap",0,1,["candle_transformers::models::llava::IdentityMap"]],["impl Freeze for LLaVA",0,1,["candle_transformers::models::llava::LLaVA"]],["impl Freeze for MMProjector",0,1,["candle_transformers::models::llava::MMProjector"]],["impl Freeze for Config",0,1,["candle_transformers::models::mamba::Config"]],["impl Freeze for MambaBlock",0,1,["candle_transformers::models::mamba::MambaBlock"]],["impl Freeze for Model",0,1,["candle_transformers::models::mamba::Model"]],["impl Freeze for ResidualBlock",0,1,["candle_transformers::models::mamba::ResidualBlock"]],["impl Freeze for State",0,1,["candle_transformers::models::mamba::State"]],["impl Freeze for Config",0,1,["candle_transformers::models::marian::Config"]],["impl Freeze for Decoder",0,1,["candle_transformers::models::marian::Decoder"]],["impl Freeze for Encoder",0,1,["candle_transformers::models::marian::Encoder"]],["impl Freeze for MTModel",0,1,["candle_transformers::models::marian::MTModel"]],["impl Freeze for FlattenedInterleavedEncodec2Codebook",0,1,["candle_transformers::models::metavoice::adapters::FlattenedInterleavedEncodec2Codebook"]],["impl Freeze for TiltedEncodec",0,1,["candle_transformers::models::metavoice::adapters::TiltedEncodec"]],["impl Freeze for Config",0,1,["candle_transformers::models::metavoice::gpt::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::metavoice::gpt::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::metavoice::speaker_encoder::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::metavoice::speaker_encoder::Model"]],["impl Freeze for BPE",0,1,["candle_transformers::models::metavoice::tokenizers::BPE"]],["impl Freeze for Config",0,1,["candle_transformers::models::metavoice::transformer::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::metavoice::transformer::Model"]],["impl Freeze for ConvDownsample1d",0,1,["candle_transformers::models::mimi::conv::ConvDownsample1d"]],["impl Freeze for ConvTrUpsample1d",0,1,["candle_transformers::models::mimi::conv::ConvTrUpsample1d"]],["impl Freeze for NormConv1d",0,1,["candle_transformers::models::mimi::conv::NormConv1d"]],["impl Freeze for NormConvTranspose1d",0,1,["candle_transformers::models::mimi::conv::NormConvTranspose1d"]],["impl Freeze for StreamableConv1d",0,1,["candle_transformers::models::mimi::conv::StreamableConv1d"]],["impl Freeze for StreamableConvTranspose1d",0,1,["candle_transformers::models::mimi::conv::StreamableConvTranspose1d"]],["impl Freeze for Config",0,1,["candle_transformers::models::mimi::encodec::Config"]],["impl Freeze for Encodec",0,1,["candle_transformers::models::mimi::encodec::Encodec"]],["impl Freeze for EuclideanCodebook",0,1,["candle_transformers::models::mimi::quantization::EuclideanCodebook"]],["impl Freeze for ResidualVectorQuantization",0,1,["candle_transformers::models::mimi::quantization::ResidualVectorQuantization"]],["impl Freeze for ResidualVectorQuantizer",0,1,["candle_transformers::models::mimi::quantization::ResidualVectorQuantizer"]],["impl Freeze for SplitResidualVectorQuantizer",0,1,["candle_transformers::models::mimi::quantization::SplitResidualVectorQuantizer"]],["impl Freeze for VectorQuantization",0,1,["candle_transformers::models::mimi::quantization::VectorQuantization"]],["impl Freeze for Config",0,1,["candle_transformers::models::mimi::seanet::Config"]],["impl Freeze for SeaNetDecoder",0,1,["candle_transformers::models::mimi::seanet::SeaNetDecoder"]],["impl Freeze for SeaNetEncoder",0,1,["candle_transformers::models::mimi::seanet::SeaNetEncoder"]],["impl Freeze for SeaNetResnetBlock",0,1,["candle_transformers::models::mimi::seanet::SeaNetResnetBlock"]],["impl Freeze for Config",0,1,["candle_transformers::models::mimi::transformer::Config"]],["impl Freeze for LayerScale",0,1,["candle_transformers::models::mimi::transformer::LayerScale"]],["impl Freeze for ProjectedTransformer",0,1,["candle_transformers::models::mimi::transformer::ProjectedTransformer"]],["impl Freeze for RmsNorm",0,1,["candle_transformers::models::mimi::transformer::RmsNorm"]],["impl Freeze for RotaryEmbedding",0,1,["candle_transformers::models::mimi::transformer::RotaryEmbedding"]],["impl Freeze for StreamingMultiheadAttention",0,1,["candle_transformers::models::mimi::transformer::StreamingMultiheadAttention"]],["impl Freeze for StreamingMultiheadCrossAttention",0,1,["candle_transformers::models::mimi::transformer::StreamingMultiheadCrossAttention"]],["impl Freeze for StreamingTransformer",0,1,["candle_transformers::models::mimi::transformer::StreamingTransformer"]],["impl Freeze for StreamingTransformerLayer",0,1,["candle_transformers::models::mimi::transformer::StreamingTransformerLayer"]],["impl Freeze for Config",0,1,["candle_transformers::models::mistral::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::mistral::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::mixformer::Config"]],["impl Freeze for MixFormerSequentialForCausalLM",0,1,["candle_transformers::models::mixformer::MixFormerSequentialForCausalLM"]],["impl Freeze for Config",0,1,["candle_transformers::models::mixtral::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::mixtral::Model"]],["impl Freeze for ContextQkvOnlyJointBlock",0,1,["candle_transformers::models::mmdit::blocks::ContextQkvOnlyJointBlock"]],["impl Freeze for DiTBlock",0,1,["candle_transformers::models::mmdit::blocks::DiTBlock"]],["impl Freeze for FinalLayer",0,1,["candle_transformers::models::mmdit::blocks::FinalLayer"]],["impl Freeze for LayerNormNoAffine",0,1,["candle_transformers::models::mmdit::blocks::LayerNormNoAffine"]],["impl Freeze for MMDiTJointBlock",0,1,["candle_transformers::models::mmdit::blocks::MMDiTJointBlock"]],["impl Freeze for MMDiTXJointBlock",0,1,["candle_transformers::models::mmdit::blocks::MMDiTXJointBlock"]],["impl Freeze for ModulateIntermediates",0,1,["candle_transformers::models::mmdit::blocks::ModulateIntermediates"]],["impl Freeze for QkvOnlyDiTBlock",0,1,["candle_transformers::models::mmdit::blocks::QkvOnlyDiTBlock"]],["impl Freeze for SelfAttnDiTBlock",0,1,["candle_transformers::models::mmdit::blocks::SelfAttnDiTBlock"]],["impl Freeze for SelfAttnModulateIntermediates",0,1,["candle_transformers::models::mmdit::blocks::SelfAttnModulateIntermediates"]],["impl Freeze for PatchEmbedder",0,1,["candle_transformers::models::mmdit::embedding::PatchEmbedder"]],["impl Freeze for PositionEmbedder",0,1,["candle_transformers::models::mmdit::embedding::PositionEmbedder"]],["impl Freeze for TimestepEmbedder",0,1,["candle_transformers::models::mmdit::embedding::TimestepEmbedder"]],["impl Freeze for Unpatchifier",0,1,["candle_transformers::models::mmdit::embedding::Unpatchifier"]],["impl Freeze for VectorEmbedder",0,1,["candle_transformers::models::mmdit::embedding::VectorEmbedder"]],["impl Freeze for Config",0,1,["candle_transformers::models::mmdit::model::Config"]],["impl Freeze for MMDiT",0,1,["candle_transformers::models::mmdit::model::MMDiT"]],["impl Freeze for MMDiTCore",0,1,["candle_transformers::models::mmdit::model::MMDiTCore"]],["impl Freeze for AttnProjections",0,1,["candle_transformers::models::mmdit::projections::AttnProjections"]],["impl Freeze for Mlp",0,1,["candle_transformers::models::mmdit::projections::Mlp"]],["impl Freeze for Qkv",0,1,["candle_transformers::models::mmdit::projections::Qkv"]],["impl Freeze for QkvOnlyAttnProjections",0,1,["candle_transformers::models::mmdit::projections::QkvOnlyAttnProjections"]],["impl Freeze for MobileClipConfig",0,1,["candle_transformers::models::mobileclip::MobileClipConfig"]],["impl Freeze for MobileClipModel",0,1,["candle_transformers::models::mobileclip::MobileClipModel"]],["impl Freeze for Config",0,1,["candle_transformers::models::mobilenetv4::Config"]],["impl Freeze for Config",0,1,["candle_transformers::models::mobileone::Config"]],["impl Freeze for ClassifierConfig",0,1,["candle_transformers::models::modernbert::ClassifierConfig"]],["impl Freeze for Config",0,1,["candle_transformers::models::modernbert::Config"]],["impl Freeze for ModernBert",0,1,["candle_transformers::models::modernbert::ModernBert"]],["impl Freeze for ModernBertClassifier",0,1,["candle_transformers::models::modernbert::ModernBertClassifier"]],["impl Freeze for ModernBertDecoder",0,1,["candle_transformers::models::modernbert::ModernBertDecoder"]],["impl Freeze for ModernBertForMaskedLM",0,1,["candle_transformers::models::modernbert::ModernBertForMaskedLM"]],["impl Freeze for ModernBertForSequenceClassification",0,1,["candle_transformers::models::modernbert::ModernBertForSequenceClassification"]],["impl Freeze for ModernBertHead",0,1,["candle_transformers::models::modernbert::ModernBertHead"]],["impl Freeze for ModernBertLayer",0,1,["candle_transformers::models::modernbert::ModernBertLayer"]],["impl Freeze for ModernBertMLP",0,1,["candle_transformers::models::modernbert::ModernBertMLP"]],["impl Freeze for Config",0,1,["candle_transformers::models::moondream::Config"]],["impl Freeze for Encoder",0,1,["candle_transformers::models::moondream::Encoder"]],["impl Freeze for Model",0,1,["candle_transformers::models::moondream::Model"]],["impl Freeze for VisionConfig",0,1,["candle_transformers::models::moondream::VisionConfig"]],["impl Freeze for VisionEncoder",0,1,["candle_transformers::models::moondream::VisionEncoder"]],["impl Freeze for Config",0,1,["candle_transformers::models::mpt::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::mpt::Model"]],["impl Freeze for Model",0,1,["candle_transformers::models::nvembed_v2::embedding::Model"]],["impl Freeze for Model",0,1,["candle_transformers::models::nvembed_v2::model::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::olmo::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::olmo::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::openclip::text_model::Config"]],["impl Freeze for Encoder",0,1,["candle_transformers::models::openclip::text_model::Encoder"]],["impl Freeze for OpenClipTextTransformer",0,1,["candle_transformers::models::openclip::text_model::OpenClipTextTransformer"]],["impl Freeze for Config",0,1,["candle_transformers::models::paligemma::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::paligemma::Model"]],["impl Freeze for MultiModalProjector",0,1,["candle_transformers::models::paligemma::MultiModalProjector"]],["impl Freeze for Attention",0,1,["candle_transformers::models::parler_tts::Attention"]],["impl Freeze for Config",0,1,["candle_transformers::models::parler_tts::Config"]],["impl Freeze for Decoder",0,1,["candle_transformers::models::parler_tts::Decoder"]],["impl Freeze for DecoderConfig",0,1,["candle_transformers::models::parler_tts::DecoderConfig"]],["impl Freeze for DecoderLayer",0,1,["candle_transformers::models::parler_tts::DecoderLayer"]],["impl Freeze for Model",0,1,["candle_transformers::models::parler_tts::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::persimmon::Config"]],["impl Freeze for Config",0,1,["candle_transformers::models::phi3::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::phi3::Model"]],["impl Freeze for RotaryEmbedding",0,1,["candle_transformers::models::phi3::RotaryEmbedding"]],["impl Freeze for Config",0,1,["candle_transformers::models::phi::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::phi::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::pixtral::llava::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::pixtral::llava::Model"]],["impl Freeze for MultiModalProjector",0,1,["candle_transformers::models::pixtral::llava::MultiModalProjector"]],["impl Freeze for Config",0,1,["candle_transformers::models::pixtral::vision_model::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::pixtral::vision_model::Model"]],["impl Freeze for BlipForConditionalGeneration",0,1,["candle_transformers::models::quantized_blip::BlipForConditionalGeneration"]],["impl Freeze for VisionModel",0,1,["candle_transformers::models::quantized_blip::VisionModel"]],["impl Freeze for TextLMHeadModel",0,1,["candle_transformers::models::quantized_blip_text::TextLMHeadModel"]],["impl Freeze for TextPooler",0,1,["candle_transformers::models::quantized_blip_text::TextPooler"]],["impl Freeze for QLlama",0,1,["candle_transformers::models::quantized_llama2_c::QLlama"]],["impl Freeze for ModelWeights",0,1,["candle_transformers::models::quantized_llama::ModelWeights"]],["impl Freeze for Model",0,1,["candle_transformers::models::quantized_metavoice::transformer::Model"]],["impl Freeze for Model",0,1,["candle_transformers::models::quantized_mistral::Model"]],["impl Freeze for MixFormerSequentialForCausalLM",0,1,["candle_transformers::models::quantized_mixformer::MixFormerSequentialForCausalLM"]],["impl Freeze for Encoder",0,1,["candle_transformers::models::quantized_moondream::Encoder"]],["impl Freeze for Model",0,1,["candle_transformers::models::quantized_moondream::Model"]],["impl Freeze for VisionEncoder",0,1,["candle_transformers::models::quantized_moondream::VisionEncoder"]],["impl Freeze for Model",0,1,["candle_transformers::models::quantized_mpt::Model"]],["impl Freeze for ModelWeights",0,1,["candle_transformers::models::quantized_phi3::ModelWeights"]],["impl Freeze for ModelWeights",0,1,["candle_transformers::models::quantized_phi::ModelWeights"]],["impl Freeze for ModelWeights",0,1,["candle_transformers::models::quantized_qwen2::ModelWeights"]],["impl Freeze for Model",0,1,["candle_transformers::models::quantized_recurrent_gemma::Model"]],["impl Freeze for Model",0,1,["candle_transformers::models::quantized_rwkv_v5::Model"]],["impl Freeze for Model",0,1,["candle_transformers::models::quantized_rwkv_v6::Model"]],["impl Freeze for Model",0,1,["candle_transformers::models::quantized_stable_lm::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::quantized_t5::Config"]],["impl Freeze for T5EncoderModel",0,1,["candle_transformers::models::quantized_t5::T5EncoderModel"]],["impl Freeze for T5ForConditionalGeneration",0,1,["candle_transformers::models::quantized_t5::T5ForConditionalGeneration"]],["impl Freeze for Config",0,1,["candle_transformers::models::qwen2::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::qwen2::Model"]],["impl Freeze for ModelForCausalLM",0,1,["candle_transformers::models::qwen2::ModelForCausalLM"]],["impl Freeze for Config",0,1,["candle_transformers::models::qwen2_moe::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::qwen2_moe::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::recurrent_gemma::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::recurrent_gemma::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::repvgg::Config"]],["impl Freeze for Config",0,1,["candle_transformers::models::rwkv_v5::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::rwkv_v5::Model"]],["impl Freeze for State",0,1,["candle_transformers::models::rwkv_v5::State"]],["impl Freeze for StatePerLayer",0,1,["candle_transformers::models::rwkv_v5::StatePerLayer"]],["impl Freeze for Tokenizer",0,1,["candle_transformers::models::rwkv_v5::Tokenizer"]],["impl Freeze for Model",0,1,["candle_transformers::models::rwkv_v6::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::segformer::Config"]],["impl Freeze for ImageClassificationModel",0,1,["candle_transformers::models::segformer::ImageClassificationModel"]],["impl Freeze for SemanticSegmentationModel",0,1,["candle_transformers::models::segformer::SemanticSegmentationModel"]],["impl Freeze for ImageEncoderViT",0,1,["candle_transformers::models::segment_anything::image_encoder::ImageEncoderViT"]],["impl Freeze for MaskDecoder",0,1,["candle_transformers::models::segment_anything::mask_decoder::MaskDecoder"]],["impl Freeze for PromptEncoder",0,1,["candle_transformers::models::segment_anything::prompt_encoder::PromptEncoder"]],["impl Freeze for Sam",0,1,["candle_transformers::models::segment_anything::sam::Sam"]],["impl Freeze for LayerNorm2d",0,1,["candle_transformers::models::segment_anything::LayerNorm2d"]],["impl Freeze for MlpBlock",0,1,["candle_transformers::models::segment_anything::MlpBlock"]],["impl Freeze for TinyViT",0,1,["candle_transformers::models::segment_anything::tiny_vit::TinyViT"]],["impl Freeze for TwoWayTransformer",0,1,["candle_transformers::models::segment_anything::transformer::TwoWayTransformer"]],["impl Freeze for Config",0,1,["candle_transformers::models::siglip::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::siglip::Model"]],["impl Freeze for TextConfig",0,1,["candle_transformers::models::siglip::TextConfig"]],["impl Freeze for TextModel",0,1,["candle_transformers::models::siglip::TextModel"]],["impl Freeze for TextTransformer",0,1,["candle_transformers::models::siglip::TextTransformer"]],["impl Freeze for VisionConfig",0,1,["candle_transformers::models::siglip::VisionConfig"]],["impl Freeze for VisionModel",0,1,["candle_transformers::models::siglip::VisionModel"]],["impl Freeze for AttentionBlock",0,1,["candle_transformers::models::stable_diffusion::attention::AttentionBlock"]],["impl Freeze for AttentionBlockConfig",0,1,["candle_transformers::models::stable_diffusion::attention::AttentionBlockConfig"]],["impl Freeze for CrossAttention",0,1,["candle_transformers::models::stable_diffusion::attention::CrossAttention"]],["impl Freeze for SpatialTransformer",0,1,["candle_transformers::models::stable_diffusion::attention::SpatialTransformer"]],["impl Freeze for SpatialTransformerConfig",0,1,["candle_transformers::models::stable_diffusion::attention::SpatialTransformerConfig"]],["impl Freeze for ClipTextTransformer",0,1,["candle_transformers::models::stable_diffusion::clip::ClipTextTransformer"]],["impl Freeze for Config",0,1,["candle_transformers::models::stable_diffusion::clip::Config"]],["impl Freeze for DDIMScheduler",0,1,["candle_transformers::models::stable_diffusion::ddim::DDIMScheduler"]],["impl Freeze for DDIMSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::ddim::DDIMSchedulerConfig"]],["impl Freeze for DDPMScheduler",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMScheduler"]],["impl Freeze for DDPMSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMSchedulerConfig"]],["impl Freeze for TimestepEmbedding",0,1,["candle_transformers::models::stable_diffusion::embeddings::TimestepEmbedding"]],["impl Freeze for Timesteps",0,1,["candle_transformers::models::stable_diffusion::embeddings::Timesteps"]],["impl Freeze for EulerAncestralDiscreteScheduler",0,1,["candle_transformers::models::stable_diffusion::euler_ancestral_discrete::EulerAncestralDiscreteScheduler"]],["impl Freeze for EulerAncestralDiscreteSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::euler_ancestral_discrete::EulerAncestralDiscreteSchedulerConfig"]],["impl Freeze for ResnetBlock2D",0,1,["candle_transformers::models::stable_diffusion::resnet::ResnetBlock2D"]],["impl Freeze for ResnetBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::resnet::ResnetBlock2DConfig"]],["impl Freeze for StableDiffusionConfig",0,1,["candle_transformers::models::stable_diffusion::StableDiffusionConfig"]],["impl Freeze for BlockConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d::BlockConfig"]],["impl Freeze for UNet2DConditionModel",0,1,["candle_transformers::models::stable_diffusion::unet_2d::UNet2DConditionModel"]],["impl Freeze for UNet2DConditionModelConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d::UNet2DConditionModelConfig"]],["impl Freeze for CrossAttnDownBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnDownBlock2D"]],["impl Freeze for CrossAttnDownBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnDownBlock2DConfig"]],["impl Freeze for CrossAttnUpBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnUpBlock2D"]],["impl Freeze for CrossAttnUpBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnUpBlock2DConfig"]],["impl Freeze for DownBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownBlock2D"]],["impl Freeze for DownBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownBlock2DConfig"]],["impl Freeze for DownEncoderBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownEncoderBlock2D"]],["impl Freeze for DownEncoderBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownEncoderBlock2DConfig"]],["impl Freeze for UNetMidBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2D"]],["impl Freeze for UNetMidBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DConfig"]],["impl Freeze for UNetMidBlock2DCrossAttn",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DCrossAttn"]],["impl Freeze for UNetMidBlock2DCrossAttnConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DCrossAttnConfig"]],["impl Freeze for UpBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpBlock2D"]],["impl Freeze for UpBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpBlock2DConfig"]],["impl Freeze for UpDecoderBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpDecoderBlock2D"]],["impl Freeze for UpDecoderBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpDecoderBlock2DConfig"]],["impl Freeze for EdmDpmMultistepScheduler",0,1,["candle_transformers::models::stable_diffusion::uni_pc::EdmDpmMultistepScheduler"]],["impl Freeze for ExponentialSigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::ExponentialSigmaSchedule"]],["impl Freeze for KarrasSigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::KarrasSigmaSchedule"]],["impl Freeze for UniPCSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::uni_pc::UniPCSchedulerConfig"]],["impl Freeze for AutoEncoderKL",0,1,["candle_transformers::models::stable_diffusion::vae::AutoEncoderKL"]],["impl Freeze for AutoEncoderKLConfig",0,1,["candle_transformers::models::stable_diffusion::vae::AutoEncoderKLConfig"]],["impl Freeze for DiagonalGaussianDistribution",0,1,["candle_transformers::models::stable_diffusion::vae::DiagonalGaussianDistribution"]],["impl Freeze for Config",0,1,["candle_transformers::models::stable_lm::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::stable_lm::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::starcoder2::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::starcoder2::Model"]],["impl Freeze for Config",0,1,["candle_transformers::models::stella_en_v5::Config"]],["impl Freeze for EmbedHead",0,1,["candle_transformers::models::stella_en_v5::EmbedHead"]],["impl Freeze for EmbeddingModel",0,1,["candle_transformers::models::stella_en_v5::EmbeddingModel"]],["impl Freeze for Embeddings",0,1,["candle_transformers::models::stella_en_v5::Embeddings"]],["impl Freeze for Model",0,1,["candle_transformers::models::stella_en_v5::Model"]],["impl Freeze for ActivationWithOptionalGating",0,1,["candle_transformers::models::t5::ActivationWithOptionalGating"]],["impl Freeze for Config",0,1,["candle_transformers::models::t5::Config"]],["impl Freeze for Linear",0,1,["candle_transformers::models::t5::Linear"]],["impl Freeze for T5EncoderModel",0,1,["candle_transformers::models::t5::T5EncoderModel"]],["impl Freeze for T5ForConditionalGeneration",0,1,["candle_transformers::models::t5::T5ForConditionalGeneration"]],["impl Freeze for TrOCRConfig",0,1,["candle_transformers::models::trocr::TrOCRConfig"]],["impl Freeze for TrOCRDecoder",0,1,["candle_transformers::models::trocr::TrOCRDecoder"]],["impl Freeze for TrOCREncoder",0,1,["candle_transformers::models::trocr::TrOCREncoder"]],["impl Freeze for TrOCRForCausalLM",0,1,["candle_transformers::models::trocr::TrOCRForCausalLM"]],["impl Freeze for TrOCRModel",0,1,["candle_transformers::models::trocr::TrOCRModel"]],["impl Freeze for Config",0,1,["candle_transformers::models::vit::Config"]],["impl Freeze for Embeddings",0,1,["candle_transformers::models::vit::Embeddings"]],["impl Freeze for Encoder",0,1,["candle_transformers::models::vit::Encoder"]],["impl Freeze for Model",0,1,["candle_transformers::models::vit::Model"]],["impl Freeze for AudioEncoder",0,1,["candle_transformers::models::whisper::model::AudioEncoder"]],["impl Freeze for TextDecoder",0,1,["candle_transformers::models::whisper::model::TextDecoder"]],["impl Freeze for Whisper",0,1,["candle_transformers::models::whisper::model::Whisper"]],["impl Freeze for AudioEncoder",0,1,["candle_transformers::models::whisper::quantized_model::AudioEncoder"]],["impl Freeze for TextDecoder",0,1,["candle_transformers::models::whisper::quantized_model::TextDecoder"]],["impl Freeze for Whisper",0,1,["candle_transformers::models::whisper::quantized_model::Whisper"]],["impl Freeze for Config",0,1,["candle_transformers::models::whisper::Config"]],["impl Freeze for Conv2d",0,1,["candle_transformers::models::with_tracing::Conv2d"]],["impl Freeze for Embedding",0,1,["candle_transformers::models::with_tracing::Embedding"]],["impl Freeze for LayerNorm",0,1,["candle_transformers::models::with_tracing::LayerNorm"]],["impl Freeze for Linear",0,1,["candle_transformers::models::with_tracing::Linear"]],["impl Freeze for QMatMul",0,1,["candle_transformers::models::with_tracing::QMatMul"]],["impl Freeze for RmsNorm",0,1,["candle_transformers::models::with_tracing::RmsNorm"]],["impl Freeze for Attention",0,1,["candle_transformers::models::wuerstchen::attention_processor::Attention"]],["impl Freeze for AttnBlock",0,1,["candle_transformers::models::wuerstchen::common::AttnBlock"]],["impl Freeze for GlobalResponseNorm",0,1,["candle_transformers::models::wuerstchen::common::GlobalResponseNorm"]],["impl Freeze for LayerNormNoWeights",0,1,["candle_transformers::models::wuerstchen::common::LayerNormNoWeights"]],["impl Freeze for ResBlock",0,1,["candle_transformers::models::wuerstchen::common::ResBlock"]],["impl Freeze for TimestepBlock",0,1,["candle_transformers::models::wuerstchen::common::TimestepBlock"]],["impl Freeze for WLayerNorm",0,1,["candle_transformers::models::wuerstchen::common::WLayerNorm"]],["impl Freeze for DDPMWScheduler",0,1,["candle_transformers::models::wuerstchen::ddpm::DDPMWScheduler"]],["impl Freeze for DDPMWSchedulerConfig",0,1,["candle_transformers::models::wuerstchen::ddpm::DDPMWSchedulerConfig"]],["impl Freeze for ResBlockStageB",0,1,["candle_transformers::models::wuerstchen::diffnext::ResBlockStageB"]],["impl Freeze for WDiffNeXt",0,1,["candle_transformers::models::wuerstchen::diffnext::WDiffNeXt"]],["impl Freeze for MixingResidualBlock",0,1,["candle_transformers::models::wuerstchen::paella_vq::MixingResidualBlock"]],["impl Freeze for PaellaVQ",0,1,["candle_transformers::models::wuerstchen::paella_vq::PaellaVQ"]],["impl Freeze for WPrior",0,1,["candle_transformers::models::wuerstchen::prior::WPrior"]],["impl Freeze for Config",0,1,["candle_transformers::models::xlm_roberta::Config"]],["impl Freeze for XLMRobertaForMaskedLM",0,1,["candle_transformers::models::xlm_roberta::XLMRobertaForMaskedLM"]],["impl Freeze for XLMRobertaForSequenceClassification",0,1,["candle_transformers::models::xlm_roberta::XLMRobertaForSequenceClassification"]],["impl Freeze for XLMRobertaModel",0,1,["candle_transformers::models::xlm_roberta::XLMRobertaModel"]],["impl Freeze for Config",0,1,["candle_transformers::models::yi::Config"]],["impl Freeze for Model",0,1,["candle_transformers::models::yi::Model"]],["impl Freeze for KeyPoint",0,1,["candle_transformers::object_detection::KeyPoint"]],["impl Freeze for Embedding",0,1,["candle_transformers::quantized_nn::Embedding"]],["impl Freeze for Linear",0,1,["candle_transformers::quantized_nn::Linear"]],["impl Freeze for RmsNorm",0,1,["candle_transformers::quantized_nn::RmsNorm"]],["impl Freeze for VarBuilder",0,1,["candle_transformers::quantized_var_builder::VarBuilder"]],["impl<'a> Freeze for Vgg<'a>",0,1,["candle_transformers::models::vgg::Vgg"]],["impl<D> Freeze for Bbox<D>
where\n D: Freeze,
",0,1,["candle_transformers::object_detection::Bbox"]]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[198916]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/marker/trait.Send.js b/network-poc/target-native/doc/trait.impl/core/marker/trait.Send.js deleted file mode 100644 index 99b568f..0000000 --- a/network-poc/target-native/doc/trait.impl/core/marker/trait.Send.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl !Send for DPTHead",1,1,["candle_transformers::models::depth_anything_v2::DPTHead"]],["impl !Send for DepthAnythingV2",1,1,["candle_transformers::models::depth_anything_v2::DepthAnythingV2"]],["impl !Send for Scratch",1,1,["candle_transformers::models::depth_anything_v2::Scratch"]],["impl !Send for LLaVA",1,1,["candle_transformers::models::llava::LLaVA"]],["impl !Send for MMProjector",1,1,["candle_transformers::models::llava::MMProjector"]],["impl !Send for ContextQkvOnlyJointBlock",1,1,["candle_transformers::models::mmdit::blocks::ContextQkvOnlyJointBlock"]],["impl !Send for DiTBlock",1,1,["candle_transformers::models::mmdit::blocks::DiTBlock"]],["impl !Send for FinalLayer",1,1,["candle_transformers::models::mmdit::blocks::FinalLayer"]],["impl !Send for MMDiTJointBlock",1,1,["candle_transformers::models::mmdit::blocks::MMDiTJointBlock"]],["impl !Send for MMDiTXJointBlock",1,1,["candle_transformers::models::mmdit::blocks::MMDiTXJointBlock"]],["impl !Send for QkvOnlyDiTBlock",1,1,["candle_transformers::models::mmdit::blocks::QkvOnlyDiTBlock"]],["impl !Send for SelfAttnDiTBlock",1,1,["candle_transformers::models::mmdit::blocks::SelfAttnDiTBlock"]],["impl !Send for TimestepEmbedder",1,1,["candle_transformers::models::mmdit::embedding::TimestepEmbedder"]],["impl !Send for VectorEmbedder",1,1,["candle_transformers::models::mmdit::embedding::VectorEmbedder"]],["impl !Send for MMDiT",1,1,["candle_transformers::models::mmdit::model::MMDiT"]],["impl !Send for MMDiTCore",1,1,["candle_transformers::models::mmdit::model::MMDiTCore"]],["impl Send for Sampling",0,1,["candle_transformers::generation::Sampling"]],["impl Send for HiddenAct",0,1,["candle_transformers::models::bert::HiddenAct"]],["impl Send for PositionEmbeddingType",0,1,["candle_transformers::models::bert::PositionEmbeddingType"]],["impl Send for Activation",0,1,["candle_transformers::models::chinese_clip::Activation"]],["impl Send for EncoderConfig",0,1,["candle_transformers::models::chinese_clip::EncoderConfig"]],["impl Send for PositionEmbeddingType",0,1,["candle_transformers::models::chinese_clip::text_model::PositionEmbeddingType"]],["impl Send for EncoderConfig",0,1,["candle_transformers::models::clip::EncoderConfig"]],["impl Send for Activation",0,1,["candle_transformers::models::clip::text_model::Activation"]],["impl Send for HiddenAct",0,1,["candle_transformers::models::debertav2::HiddenAct"]],["impl Send for DeepSeekV2RopeScaling",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RopeScaling"]],["impl Send for ScaledRopeType",0,1,["candle_transformers::models::deepseek2::ScaledRopeType"]],["impl Send for NormType",0,1,["candle_transformers::models::encodec::NormType"]],["impl Send for PadMode",0,1,["candle_transformers::models::encodec::PadMode"]],["impl Send for GraniteEosToks",0,1,["candle_transformers::models::granite::GraniteEosToks"]],["impl Send for GraniteRopeType",0,1,["candle_transformers::models::granite::GraniteRopeType"]],["impl Send for PositionEmbeddingType",0,1,["candle_transformers::models::jina_bert::PositionEmbeddingType"]],["impl Send for Llama3RopeType",0,1,["candle_transformers::models::llama::Llama3RopeType"]],["impl Send for LlamaEosToks",0,1,["candle_transformers::models::llama::LlamaEosToks"]],["impl Send for AttnKernelType",0,1,["candle_transformers::models::metavoice::gpt::AttnKernelType"]],["impl Send for NonLinearityType",0,1,["candle_transformers::models::metavoice::gpt::NonLinearityType"]],["impl Send for NormType",0,1,["candle_transformers::models::metavoice::gpt::NormType"]],["impl Send for Norm",0,1,["candle_transformers::models::mimi::conv::Norm"]],["impl Send for PadMode",0,1,["candle_transformers::models::mimi::conv::PadMode"]],["impl Send for ResampleMethod",0,1,["candle_transformers::models::mimi::encodec::ResampleMethod"]],["impl Send for NormType",0,1,["candle_transformers::models::mimi::NormType"]],["impl Send for Mlp",0,1,["candle_transformers::models::mimi::transformer::Mlp"]],["impl Send for Norm",0,1,["candle_transformers::models::mimi::transformer::Norm"]],["impl Send for PositionalEmbedding",0,1,["candle_transformers::models::mimi::transformer::PositionalEmbedding"]],["impl Send for ClassifierPooling",0,1,["candle_transformers::models::modernbert::ClassifierPooling"]],["impl Send for PositionEmbeddingType",0,1,["candle_transformers::models::persimmon::PositionEmbeddingType"]],["impl Send for TemporalBlockType",0,1,["candle_transformers::models::recurrent_gemma::TemporalBlockType"]],["impl Send for Activation",0,1,["candle_transformers::models::stable_diffusion::clip::Activation"]],["impl Send for DDPMVarianceType",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMVarianceType"]],["impl Send for BetaSchedule",0,1,["candle_transformers::models::stable_diffusion::schedulers::BetaSchedule"]],["impl Send for PredictionType",0,1,["candle_transformers::models::stable_diffusion::schedulers::PredictionType"]],["impl Send for TimestepSpacing",0,1,["candle_transformers::models::stable_diffusion::schedulers::TimestepSpacing"]],["impl Send for AlgorithmType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::AlgorithmType"]],["impl Send for CorrectorConfiguration",0,1,["candle_transformers::models::stable_diffusion::uni_pc::CorrectorConfiguration"]],["impl Send for FinalSigmasType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::FinalSigmasType"]],["impl Send for SigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::SigmaSchedule"]],["impl Send for SolverType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::SolverType"]],["impl Send for TimestepSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::TimestepSchedule"]],["impl Send for EmbedDim",0,1,["candle_transformers::models::stella_en_v5::EmbedDim"]],["impl Send for ModelVariant",0,1,["candle_transformers::models::stella_en_v5::ModelVariant"]],["impl Send for Models",0,1,["candle_transformers::models::vgg::Models"]],["impl Send for LogitsProcessor",0,1,["candle_transformers::generation::LogitsProcessor"]],["impl Send for Config",0,1,["candle_transformers::models::based::Config"]],["impl Send for LinearAttentionConfig",0,1,["candle_transformers::models::based::LinearAttentionConfig"]],["impl Send for LinearAttentionFeatureMapConfig",0,1,["candle_transformers::models::based::LinearAttentionFeatureMapConfig"]],["impl Send for Model",0,1,["candle_transformers::models::based::Model"]],["impl Send for SlidingWindowAttentionConfig",0,1,["candle_transformers::models::based::SlidingWindowAttentionConfig"]],["impl Send for BeitVisionTransformer",0,1,["candle_transformers::models::beit::BeitVisionTransformer"]],["impl Send for BertEncoder",0,1,["candle_transformers::models::bert::BertEncoder"]],["impl Send for BertForMaskedLM",0,1,["candle_transformers::models::bert::BertForMaskedLM"]],["impl Send for BertLMPredictionHead",0,1,["candle_transformers::models::bert::BertLMPredictionHead"]],["impl Send for BertLayer",0,1,["candle_transformers::models::bert::BertLayer"]],["impl Send for BertModel",0,1,["candle_transformers::models::bert::BertModel"]],["impl Send for BertOnlyMLMHead",0,1,["candle_transformers::models::bert::BertOnlyMLMHead"]],["impl Send for Config",0,1,["candle_transformers::models::bert::Config"]],["impl Send for Config",0,1,["candle_transformers::models::bigcode::Config"]],["impl Send for GPTBigCode",0,1,["candle_transformers::models::bigcode::GPTBigCode"]],["impl Send for BlipForConditionalGeneration",0,1,["candle_transformers::models::blip::BlipForConditionalGeneration"]],["impl Send for Config",0,1,["candle_transformers::models::blip::Config"]],["impl Send for VisionConfig",0,1,["candle_transformers::models::blip::VisionConfig"]],["impl Send for VisionModel",0,1,["candle_transformers::models::blip::VisionModel"]],["impl Send for Config",0,1,["candle_transformers::models::blip_text::Config"]],["impl Send for TextLMHeadModel",0,1,["candle_transformers::models::blip_text::TextLMHeadModel"]],["impl Send for TextPooler",0,1,["candle_transformers::models::blip_text::TextPooler"]],["impl Send for Config",0,1,["candle_transformers::models::chatglm::Config"]],["impl Send for Model",0,1,["candle_transformers::models::chatglm::Model"]],["impl Send for ChineseClipConfig",0,1,["candle_transformers::models::chinese_clip::ChineseClipConfig"]],["impl Send for ChineseClipModel",0,1,["candle_transformers::models::chinese_clip::ChineseClipModel"]],["impl Send for ChineseClipTextConfig",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextConfig"]],["impl Send for ChineseClipTextEmbeddings",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextEmbeddings"]],["impl Send for ChineseClipTextTransformer",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextTransformer"]],["impl Send for ChineseClipVisionConfig",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionConfig"]],["impl Send for ChineseClipVisionEmbeddings",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionEmbeddings"]],["impl Send for ChineseClipVisionEncoder",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionEncoder"]],["impl Send for ChineseClipVisionTransformer",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionTransformer"]],["impl Send for ClipConfig",0,1,["candle_transformers::models::clip::ClipConfig"]],["impl Send for ClipModel",0,1,["candle_transformers::models::clip::ClipModel"]],["impl Send for ClipEncoder",0,1,["candle_transformers::models::clip::text_model::ClipEncoder"]],["impl Send for ClipTextConfig",0,1,["candle_transformers::models::clip::text_model::ClipTextConfig"]],["impl Send for ClipTextTransformer",0,1,["candle_transformers::models::clip::text_model::ClipTextTransformer"]],["impl Send for ClipVisionConfig",0,1,["candle_transformers::models::clip::vision_model::ClipVisionConfig"]],["impl Send for ClipVisionTransformer",0,1,["candle_transformers::models::clip::vision_model::ClipVisionTransformer"]],["impl Send for Config",0,1,["candle_transformers::models::codegeex4_9b::Config"]],["impl Send for Model",0,1,["candle_transformers::models::codegeex4_9b::Model"]],["impl Send for Model",0,1,["candle_transformers::models::colpali::Model"]],["impl Send for Config",0,1,["candle_transformers::models::convnext::Config"]],["impl Send for Config",0,1,["candle_transformers::models::dac::Config"]],["impl Send for Decoder",0,1,["candle_transformers::models::dac::Decoder"]],["impl Send for DecoderBlock",0,1,["candle_transformers::models::dac::DecoderBlock"]],["impl Send for Encoder",0,1,["candle_transformers::models::dac::Encoder"]],["impl Send for EncoderBlock",0,1,["candle_transformers::models::dac::EncoderBlock"]],["impl Send for Model",0,1,["candle_transformers::models::dac::Model"]],["impl Send for ResidualUnit",0,1,["candle_transformers::models::dac::ResidualUnit"]],["impl Send for ResidualVectorQuantizer",0,1,["candle_transformers::models::dac::ResidualVectorQuantizer"]],["impl Send for Snake1d",0,1,["candle_transformers::models::dac::Snake1d"]],["impl Send for VectorQuantizer",0,1,["candle_transformers::models::dac::VectorQuantizer"]],["impl Send for Config",0,1,["candle_transformers::models::debertav2::Config"]],["impl Send for ConvLayer",0,1,["candle_transformers::models::debertav2::ConvLayer"]],["impl Send for DebertaV2Attention",0,1,["candle_transformers::models::debertav2::DebertaV2Attention"]],["impl Send for DebertaV2ContextPooler",0,1,["candle_transformers::models::debertav2::DebertaV2ContextPooler"]],["impl Send for DebertaV2DisentangledSelfAttention",0,1,["candle_transformers::models::debertav2::DebertaV2DisentangledSelfAttention"]],["impl Send for DebertaV2Embeddings",0,1,["candle_transformers::models::debertav2::DebertaV2Embeddings"]],["impl Send for DebertaV2Encoder",0,1,["candle_transformers::models::debertav2::DebertaV2Encoder"]],["impl Send for DebertaV2Intermediate",0,1,["candle_transformers::models::debertav2::DebertaV2Intermediate"]],["impl Send for DebertaV2Layer",0,1,["candle_transformers::models::debertav2::DebertaV2Layer"]],["impl Send for DebertaV2Model",0,1,["candle_transformers::models::debertav2::DebertaV2Model"]],["impl Send for DebertaV2NERModel",0,1,["candle_transformers::models::debertav2::DebertaV2NERModel"]],["impl Send for DebertaV2Output",0,1,["candle_transformers::models::debertav2::DebertaV2Output"]],["impl Send for DebertaV2SelfOutput",0,1,["candle_transformers::models::debertav2::DebertaV2SelfOutput"]],["impl Send for DebertaV2SeqClassificationModel",0,1,["candle_transformers::models::debertav2::DebertaV2SeqClassificationModel"]],["impl Send for HiddenActLayer",0,1,["candle_transformers::models::debertav2::HiddenActLayer"]],["impl Send for NERItem",0,1,["candle_transformers::models::debertav2::NERItem"]],["impl Send for StableDropout",0,1,["candle_transformers::models::debertav2::StableDropout"]],["impl Send for TextClassificationItem",0,1,["candle_transformers::models::debertav2::TextClassificationItem"]],["impl Send for DeepSeekV2",0,1,["candle_transformers::models::deepseek2::DeepSeekV2"]],["impl Send for DeepSeekV2Config",0,1,["candle_transformers::models::deepseek2::DeepSeekV2Config"]],["impl Send for DeepSeekV2RopeConfig",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RopeConfig"]],["impl Send for DeepSeekV2RotaryEmbedding",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RotaryEmbedding"]],["impl Send for TopKOutput",0,1,["candle_transformers::models::deepseek2::TopKOutput"]],["impl Send for DepthAnythingV2Config",0,1,["candle_transformers::models::depth_anything_v2::DepthAnythingV2Config"]],["impl Send for FeatureFusionBlock",0,1,["candle_transformers::models::depth_anything_v2::FeatureFusionBlock"]],["impl Send for ResidualConvUnit",0,1,["candle_transformers::models::depth_anything_v2::ResidualConvUnit"]],["impl Send for DinoVisionTransformer",0,1,["candle_transformers::models::dinov2::DinoVisionTransformer"]],["impl Send for DinoVisionTransformer",0,1,["candle_transformers::models::dinov2reg4::DinoVisionTransformer"]],["impl Send for Config",0,1,["candle_transformers::models::distilbert::Config"]],["impl Send for DistilBertModel",0,1,["candle_transformers::models::distilbert::DistilBertModel"]],["impl Send for EfficientNet",0,1,["candle_transformers::models::efficientnet::EfficientNet"]],["impl Send for MBConvConfig",0,1,["candle_transformers::models::efficientnet::MBConvConfig"]],["impl Send for Config",0,1,["candle_transformers::models::efficientvit::Config"]],["impl Send for Config",0,1,["candle_transformers::models::encodec::Config"]],["impl Send for Decoder",0,1,["candle_transformers::models::encodec::Decoder"]],["impl Send for EncodecConv1d",0,1,["candle_transformers::models::encodec::EncodecConv1d"]],["impl Send for EncodecConvTranspose1d",0,1,["candle_transformers::models::encodec::EncodecConvTranspose1d"]],["impl Send for EncodecLSTM",0,1,["candle_transformers::models::encodec::EncodecLSTM"]],["impl Send for EncodecResnetBlock",0,1,["candle_transformers::models::encodec::EncodecResnetBlock"]],["impl Send for Encoder",0,1,["candle_transformers::models::encodec::Encoder"]],["impl Send for EuclideanCodebook",0,1,["candle_transformers::models::encodec::EuclideanCodebook"]],["impl Send for Model",0,1,["candle_transformers::models::encodec::Model"]],["impl Send for ResidualVectorQuantizer",0,1,["candle_transformers::models::encodec::ResidualVectorQuantizer"]],["impl Send for VectorQuantization",0,1,["candle_transformers::models::encodec::VectorQuantization"]],["impl Send for EVA2VisionTransformer",0,1,["candle_transformers::models::eva2::EVA2VisionTransformer"]],["impl Send for Config",0,1,["candle_transformers::models::falcon::Config"]],["impl Send for Falcon",0,1,["candle_transformers::models::falcon::Falcon"]],["impl Send for Config",0,1,["candle_transformers::models::fastvit::Config"]],["impl Send for AutoEncoder",0,1,["candle_transformers::models::flux::autoencoder::AutoEncoder"]],["impl Send for Config",0,1,["candle_transformers::models::flux::autoencoder::Config"]],["impl Send for Decoder",0,1,["candle_transformers::models::flux::autoencoder::Decoder"]],["impl Send for DiagonalGaussian",0,1,["candle_transformers::models::flux::autoencoder::DiagonalGaussian"]],["impl Send for Encoder",0,1,["candle_transformers::models::flux::autoencoder::Encoder"]],["impl Send for Config",0,1,["candle_transformers::models::flux::model::Config"]],["impl Send for DoubleStreamBlock",0,1,["candle_transformers::models::flux::model::DoubleStreamBlock"]],["impl Send for EmbedNd",0,1,["candle_transformers::models::flux::model::EmbedNd"]],["impl Send for Flux",0,1,["candle_transformers::models::flux::model::Flux"]],["impl Send for LastLayer",0,1,["candle_transformers::models::flux::model::LastLayer"]],["impl Send for MlpEmbedder",0,1,["candle_transformers::models::flux::model::MlpEmbedder"]],["impl Send for QkNorm",0,1,["candle_transformers::models::flux::model::QkNorm"]],["impl Send for SelfAttention",0,1,["candle_transformers::models::flux::model::SelfAttention"]],["impl Send for SingleStreamBlock",0,1,["candle_transformers::models::flux::model::SingleStreamBlock"]],["impl Send for DoubleStreamBlock",0,1,["candle_transformers::models::flux::quantized_model::DoubleStreamBlock"]],["impl Send for Flux",0,1,["candle_transformers::models::flux::quantized_model::Flux"]],["impl Send for LastLayer",0,1,["candle_transformers::models::flux::quantized_model::LastLayer"]],["impl Send for MlpEmbedder",0,1,["candle_transformers::models::flux::quantized_model::MlpEmbedder"]],["impl Send for QkNorm",0,1,["candle_transformers::models::flux::quantized_model::QkNorm"]],["impl Send for SelfAttention",0,1,["candle_transformers::models::flux::quantized_model::SelfAttention"]],["impl Send for SingleStreamBlock",0,1,["candle_transformers::models::flux::quantized_model::SingleStreamBlock"]],["impl Send for State",0,1,["candle_transformers::models::flux::sampling::State"]],["impl Send for Config",0,1,["candle_transformers::models::gemma2::Config"]],["impl Send for Model",0,1,["candle_transformers::models::gemma2::Model"]],["impl Send for Config",0,1,["candle_transformers::models::gemma3::Config"]],["impl Send for Model",0,1,["candle_transformers::models::gemma3::Model"]],["impl Send for Config",0,1,["candle_transformers::models::gemma::Config"]],["impl Send for Model",0,1,["candle_transformers::models::gemma::Model"]],["impl Send for Config",0,1,["candle_transformers::models::glm4::Config"]],["impl Send for Model",0,1,["candle_transformers::models::glm4::Model"]],["impl Send for Cache",0,1,["candle_transformers::models::granite::Cache"]],["impl Send for Config",0,1,["candle_transformers::models::granite::Config"]],["impl Send for Granite",0,1,["candle_transformers::models::granite::Granite"]],["impl Send for GraniteConfig",0,1,["candle_transformers::models::granite::GraniteConfig"]],["impl Send for GraniteRopeConfig",0,1,["candle_transformers::models::granite::GraniteRopeConfig"]],["impl Send for Config",0,1,["candle_transformers::models::helium::Config"]],["impl Send for Model",0,1,["candle_transformers::models::helium::Model"]],["impl Send for Config",0,1,["candle_transformers::models::hiera::Config"]],["impl Send for BertModel",0,1,["candle_transformers::models::jina_bert::BertModel"]],["impl Send for Config",0,1,["candle_transformers::models::jina_bert::Config"]],["impl Send for Cache",0,1,["candle_transformers::models::llama2_c::Cache"]],["impl Send for Config",0,1,["candle_transformers::models::llama2_c::Config"]],["impl Send for Llama",0,1,["candle_transformers::models::llama2_c::Llama"]],["impl Send for TransformerWeights",0,1,["candle_transformers::models::llama2_c_weights::TransformerWeights"]],["impl Send for Cache",0,1,["candle_transformers::models::llama::Cache"]],["impl Send for Config",0,1,["candle_transformers::models::llama::Config"]],["impl Send for Llama3RopeConfig",0,1,["candle_transformers::models::llama::Llama3RopeConfig"]],["impl Send for Llama",0,1,["candle_transformers::models::llama::Llama"]],["impl Send for LlamaConfig",0,1,["candle_transformers::models::llama::LlamaConfig"]],["impl Send for HFGenerationConfig",0,1,["candle_transformers::models::llava::config::HFGenerationConfig"]],["impl Send for HFLLaVAConfig",0,1,["candle_transformers::models::llava::config::HFLLaVAConfig"]],["impl Send for HFLLaVATextConfig",0,1,["candle_transformers::models::llava::config::HFLLaVATextConfig"]],["impl Send for HFLLaVAVisionConfig",0,1,["candle_transformers::models::llava::config::HFLLaVAVisionConfig"]],["impl Send for HFPreProcessorConfig",0,1,["candle_transformers::models::llava::config::HFPreProcessorConfig"]],["impl Send for LLaVAConfig",0,1,["candle_transformers::models::llava::config::LLaVAConfig"]],["impl Send for ClipVisionTower",0,1,["candle_transformers::models::llava::ClipVisionTower"]],["impl Send for IdentityMap",0,1,["candle_transformers::models::llava::IdentityMap"]],["impl Send for Config",0,1,["candle_transformers::models::mamba::Config"]],["impl Send for MambaBlock",0,1,["candle_transformers::models::mamba::MambaBlock"]],["impl Send for Model",0,1,["candle_transformers::models::mamba::Model"]],["impl Send for ResidualBlock",0,1,["candle_transformers::models::mamba::ResidualBlock"]],["impl Send for State",0,1,["candle_transformers::models::mamba::State"]],["impl Send for Config",0,1,["candle_transformers::models::marian::Config"]],["impl Send for Decoder",0,1,["candle_transformers::models::marian::Decoder"]],["impl Send for Encoder",0,1,["candle_transformers::models::marian::Encoder"]],["impl Send for MTModel",0,1,["candle_transformers::models::marian::MTModel"]],["impl Send for FlattenedInterleavedEncodec2Codebook",0,1,["candle_transformers::models::metavoice::adapters::FlattenedInterleavedEncodec2Codebook"]],["impl Send for TiltedEncodec",0,1,["candle_transformers::models::metavoice::adapters::TiltedEncodec"]],["impl Send for Config",0,1,["candle_transformers::models::metavoice::gpt::Config"]],["impl Send for Model",0,1,["candle_transformers::models::metavoice::gpt::Model"]],["impl Send for Config",0,1,["candle_transformers::models::metavoice::speaker_encoder::Config"]],["impl Send for Model",0,1,["candle_transformers::models::metavoice::speaker_encoder::Model"]],["impl Send for BPE",0,1,["candle_transformers::models::metavoice::tokenizers::BPE"]],["impl Send for Config",0,1,["candle_transformers::models::metavoice::transformer::Config"]],["impl Send for Model",0,1,["candle_transformers::models::metavoice::transformer::Model"]],["impl Send for ConvDownsample1d",0,1,["candle_transformers::models::mimi::conv::ConvDownsample1d"]],["impl Send for ConvTrUpsample1d",0,1,["candle_transformers::models::mimi::conv::ConvTrUpsample1d"]],["impl Send for NormConv1d",0,1,["candle_transformers::models::mimi::conv::NormConv1d"]],["impl Send for NormConvTranspose1d",0,1,["candle_transformers::models::mimi::conv::NormConvTranspose1d"]],["impl Send for StreamableConv1d",0,1,["candle_transformers::models::mimi::conv::StreamableConv1d"]],["impl Send for StreamableConvTranspose1d",0,1,["candle_transformers::models::mimi::conv::StreamableConvTranspose1d"]],["impl Send for Config",0,1,["candle_transformers::models::mimi::encodec::Config"]],["impl Send for Encodec",0,1,["candle_transformers::models::mimi::encodec::Encodec"]],["impl Send for EuclideanCodebook",0,1,["candle_transformers::models::mimi::quantization::EuclideanCodebook"]],["impl Send for ResidualVectorQuantization",0,1,["candle_transformers::models::mimi::quantization::ResidualVectorQuantization"]],["impl Send for ResidualVectorQuantizer",0,1,["candle_transformers::models::mimi::quantization::ResidualVectorQuantizer"]],["impl Send for SplitResidualVectorQuantizer",0,1,["candle_transformers::models::mimi::quantization::SplitResidualVectorQuantizer"]],["impl Send for VectorQuantization",0,1,["candle_transformers::models::mimi::quantization::VectorQuantization"]],["impl Send for Config",0,1,["candle_transformers::models::mimi::seanet::Config"]],["impl Send for SeaNetDecoder",0,1,["candle_transformers::models::mimi::seanet::SeaNetDecoder"]],["impl Send for SeaNetEncoder",0,1,["candle_transformers::models::mimi::seanet::SeaNetEncoder"]],["impl Send for SeaNetResnetBlock",0,1,["candle_transformers::models::mimi::seanet::SeaNetResnetBlock"]],["impl Send for Config",0,1,["candle_transformers::models::mimi::transformer::Config"]],["impl Send for LayerScale",0,1,["candle_transformers::models::mimi::transformer::LayerScale"]],["impl Send for ProjectedTransformer",0,1,["candle_transformers::models::mimi::transformer::ProjectedTransformer"]],["impl Send for RmsNorm",0,1,["candle_transformers::models::mimi::transformer::RmsNorm"]],["impl Send for RotaryEmbedding",0,1,["candle_transformers::models::mimi::transformer::RotaryEmbedding"]],["impl Send for StreamingMultiheadAttention",0,1,["candle_transformers::models::mimi::transformer::StreamingMultiheadAttention"]],["impl Send for StreamingMultiheadCrossAttention",0,1,["candle_transformers::models::mimi::transformer::StreamingMultiheadCrossAttention"]],["impl Send for StreamingTransformer",0,1,["candle_transformers::models::mimi::transformer::StreamingTransformer"]],["impl Send for StreamingTransformerLayer",0,1,["candle_transformers::models::mimi::transformer::StreamingTransformerLayer"]],["impl Send for Config",0,1,["candle_transformers::models::mistral::Config"]],["impl Send for Model",0,1,["candle_transformers::models::mistral::Model"]],["impl Send for Config",0,1,["candle_transformers::models::mixformer::Config"]],["impl Send for MixFormerSequentialForCausalLM",0,1,["candle_transformers::models::mixformer::MixFormerSequentialForCausalLM"]],["impl Send for Config",0,1,["candle_transformers::models::mixtral::Config"]],["impl Send for Model",0,1,["candle_transformers::models::mixtral::Model"]],["impl Send for LayerNormNoAffine",0,1,["candle_transformers::models::mmdit::blocks::LayerNormNoAffine"]],["impl Send for ModulateIntermediates",0,1,["candle_transformers::models::mmdit::blocks::ModulateIntermediates"]],["impl Send for SelfAttnModulateIntermediates",0,1,["candle_transformers::models::mmdit::blocks::SelfAttnModulateIntermediates"]],["impl Send for PatchEmbedder",0,1,["candle_transformers::models::mmdit::embedding::PatchEmbedder"]],["impl Send for PositionEmbedder",0,1,["candle_transformers::models::mmdit::embedding::PositionEmbedder"]],["impl Send for Unpatchifier",0,1,["candle_transformers::models::mmdit::embedding::Unpatchifier"]],["impl Send for Config",0,1,["candle_transformers::models::mmdit::model::Config"]],["impl Send for AttnProjections",0,1,["candle_transformers::models::mmdit::projections::AttnProjections"]],["impl Send for Mlp",0,1,["candle_transformers::models::mmdit::projections::Mlp"]],["impl Send for Qkv",0,1,["candle_transformers::models::mmdit::projections::Qkv"]],["impl Send for QkvOnlyAttnProjections",0,1,["candle_transformers::models::mmdit::projections::QkvOnlyAttnProjections"]],["impl Send for MobileClipConfig",0,1,["candle_transformers::models::mobileclip::MobileClipConfig"]],["impl Send for MobileClipModel",0,1,["candle_transformers::models::mobileclip::MobileClipModel"]],["impl Send for Config",0,1,["candle_transformers::models::mobilenetv4::Config"]],["impl Send for Config",0,1,["candle_transformers::models::mobileone::Config"]],["impl Send for ClassifierConfig",0,1,["candle_transformers::models::modernbert::ClassifierConfig"]],["impl Send for Config",0,1,["candle_transformers::models::modernbert::Config"]],["impl Send for ModernBert",0,1,["candle_transformers::models::modernbert::ModernBert"]],["impl Send for ModernBertClassifier",0,1,["candle_transformers::models::modernbert::ModernBertClassifier"]],["impl Send for ModernBertDecoder",0,1,["candle_transformers::models::modernbert::ModernBertDecoder"]],["impl Send for ModernBertForMaskedLM",0,1,["candle_transformers::models::modernbert::ModernBertForMaskedLM"]],["impl Send for ModernBertForSequenceClassification",0,1,["candle_transformers::models::modernbert::ModernBertForSequenceClassification"]],["impl Send for ModernBertHead",0,1,["candle_transformers::models::modernbert::ModernBertHead"]],["impl Send for ModernBertLayer",0,1,["candle_transformers::models::modernbert::ModernBertLayer"]],["impl Send for ModernBertMLP",0,1,["candle_transformers::models::modernbert::ModernBertMLP"]],["impl Send for Config",0,1,["candle_transformers::models::moondream::Config"]],["impl Send for Encoder",0,1,["candle_transformers::models::moondream::Encoder"]],["impl Send for Model",0,1,["candle_transformers::models::moondream::Model"]],["impl Send for VisionConfig",0,1,["candle_transformers::models::moondream::VisionConfig"]],["impl Send for VisionEncoder",0,1,["candle_transformers::models::moondream::VisionEncoder"]],["impl Send for Config",0,1,["candle_transformers::models::mpt::Config"]],["impl Send for Model",0,1,["candle_transformers::models::mpt::Model"]],["impl Send for Model",0,1,["candle_transformers::models::nvembed_v2::embedding::Model"]],["impl Send for Model",0,1,["candle_transformers::models::nvembed_v2::model::Model"]],["impl Send for Config",0,1,["candle_transformers::models::olmo::Config"]],["impl Send for Model",0,1,["candle_transformers::models::olmo::Model"]],["impl Send for Config",0,1,["candle_transformers::models::openclip::text_model::Config"]],["impl Send for Encoder",0,1,["candle_transformers::models::openclip::text_model::Encoder"]],["impl Send for OpenClipTextTransformer",0,1,["candle_transformers::models::openclip::text_model::OpenClipTextTransformer"]],["impl Send for Config",0,1,["candle_transformers::models::paligemma::Config"]],["impl Send for Model",0,1,["candle_transformers::models::paligemma::Model"]],["impl Send for MultiModalProjector",0,1,["candle_transformers::models::paligemma::MultiModalProjector"]],["impl Send for Attention",0,1,["candle_transformers::models::parler_tts::Attention"]],["impl Send for Config",0,1,["candle_transformers::models::parler_tts::Config"]],["impl Send for Decoder",0,1,["candle_transformers::models::parler_tts::Decoder"]],["impl Send for DecoderConfig",0,1,["candle_transformers::models::parler_tts::DecoderConfig"]],["impl Send for DecoderLayer",0,1,["candle_transformers::models::parler_tts::DecoderLayer"]],["impl Send for Model",0,1,["candle_transformers::models::parler_tts::Model"]],["impl Send for Config",0,1,["candle_transformers::models::persimmon::Config"]],["impl Send for Config",0,1,["candle_transformers::models::phi3::Config"]],["impl Send for Model",0,1,["candle_transformers::models::phi3::Model"]],["impl Send for RotaryEmbedding",0,1,["candle_transformers::models::phi3::RotaryEmbedding"]],["impl Send for Config",0,1,["candle_transformers::models::phi::Config"]],["impl Send for Model",0,1,["candle_transformers::models::phi::Model"]],["impl Send for Config",0,1,["candle_transformers::models::pixtral::llava::Config"]],["impl Send for Model",0,1,["candle_transformers::models::pixtral::llava::Model"]],["impl Send for MultiModalProjector",0,1,["candle_transformers::models::pixtral::llava::MultiModalProjector"]],["impl Send for Config",0,1,["candle_transformers::models::pixtral::vision_model::Config"]],["impl Send for Model",0,1,["candle_transformers::models::pixtral::vision_model::Model"]],["impl Send for BlipForConditionalGeneration",0,1,["candle_transformers::models::quantized_blip::BlipForConditionalGeneration"]],["impl Send for VisionModel",0,1,["candle_transformers::models::quantized_blip::VisionModel"]],["impl Send for TextLMHeadModel",0,1,["candle_transformers::models::quantized_blip_text::TextLMHeadModel"]],["impl Send for TextPooler",0,1,["candle_transformers::models::quantized_blip_text::TextPooler"]],["impl Send for QLlama",0,1,["candle_transformers::models::quantized_llama2_c::QLlama"]],["impl Send for ModelWeights",0,1,["candle_transformers::models::quantized_llama::ModelWeights"]],["impl Send for Model",0,1,["candle_transformers::models::quantized_metavoice::transformer::Model"]],["impl Send for Model",0,1,["candle_transformers::models::quantized_mistral::Model"]],["impl Send for MixFormerSequentialForCausalLM",0,1,["candle_transformers::models::quantized_mixformer::MixFormerSequentialForCausalLM"]],["impl Send for Encoder",0,1,["candle_transformers::models::quantized_moondream::Encoder"]],["impl Send for Model",0,1,["candle_transformers::models::quantized_moondream::Model"]],["impl Send for VisionEncoder",0,1,["candle_transformers::models::quantized_moondream::VisionEncoder"]],["impl Send for Model",0,1,["candle_transformers::models::quantized_mpt::Model"]],["impl Send for ModelWeights",0,1,["candle_transformers::models::quantized_phi3::ModelWeights"]],["impl Send for ModelWeights",0,1,["candle_transformers::models::quantized_phi::ModelWeights"]],["impl Send for ModelWeights",0,1,["candle_transformers::models::quantized_qwen2::ModelWeights"]],["impl Send for Model",0,1,["candle_transformers::models::quantized_recurrent_gemma::Model"]],["impl Send for Model",0,1,["candle_transformers::models::quantized_rwkv_v5::Model"]],["impl Send for Model",0,1,["candle_transformers::models::quantized_rwkv_v6::Model"]],["impl Send for Model",0,1,["candle_transformers::models::quantized_stable_lm::Model"]],["impl Send for Config",0,1,["candle_transformers::models::quantized_t5::Config"]],["impl Send for T5EncoderModel",0,1,["candle_transformers::models::quantized_t5::T5EncoderModel"]],["impl Send for T5ForConditionalGeneration",0,1,["candle_transformers::models::quantized_t5::T5ForConditionalGeneration"]],["impl Send for Config",0,1,["candle_transformers::models::qwen2::Config"]],["impl Send for Model",0,1,["candle_transformers::models::qwen2::Model"]],["impl Send for ModelForCausalLM",0,1,["candle_transformers::models::qwen2::ModelForCausalLM"]],["impl Send for Config",0,1,["candle_transformers::models::qwen2_moe::Config"]],["impl Send for Model",0,1,["candle_transformers::models::qwen2_moe::Model"]],["impl Send for Config",0,1,["candle_transformers::models::recurrent_gemma::Config"]],["impl Send for Model",0,1,["candle_transformers::models::recurrent_gemma::Model"]],["impl Send for Config",0,1,["candle_transformers::models::repvgg::Config"]],["impl Send for Config",0,1,["candle_transformers::models::rwkv_v5::Config"]],["impl Send for Model",0,1,["candle_transformers::models::rwkv_v5::Model"]],["impl Send for State",0,1,["candle_transformers::models::rwkv_v5::State"]],["impl Send for StatePerLayer",0,1,["candle_transformers::models::rwkv_v5::StatePerLayer"]],["impl Send for Tokenizer",0,1,["candle_transformers::models::rwkv_v5::Tokenizer"]],["impl Send for Model",0,1,["candle_transformers::models::rwkv_v6::Model"]],["impl Send for Config",0,1,["candle_transformers::models::segformer::Config"]],["impl Send for ImageClassificationModel",0,1,["candle_transformers::models::segformer::ImageClassificationModel"]],["impl Send for SemanticSegmentationModel",0,1,["candle_transformers::models::segformer::SemanticSegmentationModel"]],["impl Send for ImageEncoderViT",0,1,["candle_transformers::models::segment_anything::image_encoder::ImageEncoderViT"]],["impl Send for MaskDecoder",0,1,["candle_transformers::models::segment_anything::mask_decoder::MaskDecoder"]],["impl Send for PromptEncoder",0,1,["candle_transformers::models::segment_anything::prompt_encoder::PromptEncoder"]],["impl Send for Sam",0,1,["candle_transformers::models::segment_anything::sam::Sam"]],["impl Send for LayerNorm2d",0,1,["candle_transformers::models::segment_anything::LayerNorm2d"]],["impl Send for MlpBlock",0,1,["candle_transformers::models::segment_anything::MlpBlock"]],["impl Send for TinyViT",0,1,["candle_transformers::models::segment_anything::tiny_vit::TinyViT"]],["impl Send for TwoWayTransformer",0,1,["candle_transformers::models::segment_anything::transformer::TwoWayTransformer"]],["impl Send for Config",0,1,["candle_transformers::models::siglip::Config"]],["impl Send for Model",0,1,["candle_transformers::models::siglip::Model"]],["impl Send for TextConfig",0,1,["candle_transformers::models::siglip::TextConfig"]],["impl Send for TextModel",0,1,["candle_transformers::models::siglip::TextModel"]],["impl Send for TextTransformer",0,1,["candle_transformers::models::siglip::TextTransformer"]],["impl Send for VisionConfig",0,1,["candle_transformers::models::siglip::VisionConfig"]],["impl Send for VisionModel",0,1,["candle_transformers::models::siglip::VisionModel"]],["impl Send for AttentionBlock",0,1,["candle_transformers::models::stable_diffusion::attention::AttentionBlock"]],["impl Send for AttentionBlockConfig",0,1,["candle_transformers::models::stable_diffusion::attention::AttentionBlockConfig"]],["impl Send for CrossAttention",0,1,["candle_transformers::models::stable_diffusion::attention::CrossAttention"]],["impl Send for SpatialTransformer",0,1,["candle_transformers::models::stable_diffusion::attention::SpatialTransformer"]],["impl Send for SpatialTransformerConfig",0,1,["candle_transformers::models::stable_diffusion::attention::SpatialTransformerConfig"]],["impl Send for ClipTextTransformer",0,1,["candle_transformers::models::stable_diffusion::clip::ClipTextTransformer"]],["impl Send for Config",0,1,["candle_transformers::models::stable_diffusion::clip::Config"]],["impl Send for DDIMScheduler",0,1,["candle_transformers::models::stable_diffusion::ddim::DDIMScheduler"]],["impl Send for DDIMSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::ddim::DDIMSchedulerConfig"]],["impl Send for DDPMScheduler",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMScheduler"]],["impl Send for DDPMSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMSchedulerConfig"]],["impl Send for TimestepEmbedding",0,1,["candle_transformers::models::stable_diffusion::embeddings::TimestepEmbedding"]],["impl Send for Timesteps",0,1,["candle_transformers::models::stable_diffusion::embeddings::Timesteps"]],["impl Send for EulerAncestralDiscreteScheduler",0,1,["candle_transformers::models::stable_diffusion::euler_ancestral_discrete::EulerAncestralDiscreteScheduler"]],["impl Send for EulerAncestralDiscreteSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::euler_ancestral_discrete::EulerAncestralDiscreteSchedulerConfig"]],["impl Send for ResnetBlock2D",0,1,["candle_transformers::models::stable_diffusion::resnet::ResnetBlock2D"]],["impl Send for ResnetBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::resnet::ResnetBlock2DConfig"]],["impl Send for StableDiffusionConfig",0,1,["candle_transformers::models::stable_diffusion::StableDiffusionConfig"]],["impl Send for BlockConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d::BlockConfig"]],["impl Send for UNet2DConditionModel",0,1,["candle_transformers::models::stable_diffusion::unet_2d::UNet2DConditionModel"]],["impl Send for UNet2DConditionModelConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d::UNet2DConditionModelConfig"]],["impl Send for CrossAttnDownBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnDownBlock2D"]],["impl Send for CrossAttnDownBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnDownBlock2DConfig"]],["impl Send for CrossAttnUpBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnUpBlock2D"]],["impl Send for CrossAttnUpBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnUpBlock2DConfig"]],["impl Send for DownBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownBlock2D"]],["impl Send for DownBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownBlock2DConfig"]],["impl Send for DownEncoderBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownEncoderBlock2D"]],["impl Send for DownEncoderBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownEncoderBlock2DConfig"]],["impl Send for UNetMidBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2D"]],["impl Send for UNetMidBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DConfig"]],["impl Send for UNetMidBlock2DCrossAttn",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DCrossAttn"]],["impl Send for UNetMidBlock2DCrossAttnConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DCrossAttnConfig"]],["impl Send for UpBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpBlock2D"]],["impl Send for UpBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpBlock2DConfig"]],["impl Send for UpDecoderBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpDecoderBlock2D"]],["impl Send for UpDecoderBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpDecoderBlock2DConfig"]],["impl Send for EdmDpmMultistepScheduler",0,1,["candle_transformers::models::stable_diffusion::uni_pc::EdmDpmMultistepScheduler"]],["impl Send for ExponentialSigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::ExponentialSigmaSchedule"]],["impl Send for KarrasSigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::KarrasSigmaSchedule"]],["impl Send for UniPCSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::uni_pc::UniPCSchedulerConfig"]],["impl Send for AutoEncoderKL",0,1,["candle_transformers::models::stable_diffusion::vae::AutoEncoderKL"]],["impl Send for AutoEncoderKLConfig",0,1,["candle_transformers::models::stable_diffusion::vae::AutoEncoderKLConfig"]],["impl Send for DiagonalGaussianDistribution",0,1,["candle_transformers::models::stable_diffusion::vae::DiagonalGaussianDistribution"]],["impl Send for Config",0,1,["candle_transformers::models::stable_lm::Config"]],["impl Send for Model",0,1,["candle_transformers::models::stable_lm::Model"]],["impl Send for Config",0,1,["candle_transformers::models::starcoder2::Config"]],["impl Send for Model",0,1,["candle_transformers::models::starcoder2::Model"]],["impl Send for Config",0,1,["candle_transformers::models::stella_en_v5::Config"]],["impl Send for EmbedHead",0,1,["candle_transformers::models::stella_en_v5::EmbedHead"]],["impl Send for EmbeddingModel",0,1,["candle_transformers::models::stella_en_v5::EmbeddingModel"]],["impl Send for Embeddings",0,1,["candle_transformers::models::stella_en_v5::Embeddings"]],["impl Send for Model",0,1,["candle_transformers::models::stella_en_v5::Model"]],["impl Send for ActivationWithOptionalGating",0,1,["candle_transformers::models::t5::ActivationWithOptionalGating"]],["impl Send for Config",0,1,["candle_transformers::models::t5::Config"]],["impl Send for Linear",0,1,["candle_transformers::models::t5::Linear"]],["impl Send for T5EncoderModel",0,1,["candle_transformers::models::t5::T5EncoderModel"]],["impl Send for T5ForConditionalGeneration",0,1,["candle_transformers::models::t5::T5ForConditionalGeneration"]],["impl Send for TrOCRConfig",0,1,["candle_transformers::models::trocr::TrOCRConfig"]],["impl Send for TrOCRDecoder",0,1,["candle_transformers::models::trocr::TrOCRDecoder"]],["impl Send for TrOCREncoder",0,1,["candle_transformers::models::trocr::TrOCREncoder"]],["impl Send for TrOCRForCausalLM",0,1,["candle_transformers::models::trocr::TrOCRForCausalLM"]],["impl Send for TrOCRModel",0,1,["candle_transformers::models::trocr::TrOCRModel"]],["impl Send for Config",0,1,["candle_transformers::models::vit::Config"]],["impl Send for Embeddings",0,1,["candle_transformers::models::vit::Embeddings"]],["impl Send for Encoder",0,1,["candle_transformers::models::vit::Encoder"]],["impl Send for Model",0,1,["candle_transformers::models::vit::Model"]],["impl Send for AudioEncoder",0,1,["candle_transformers::models::whisper::model::AudioEncoder"]],["impl Send for TextDecoder",0,1,["candle_transformers::models::whisper::model::TextDecoder"]],["impl Send for Whisper",0,1,["candle_transformers::models::whisper::model::Whisper"]],["impl Send for AudioEncoder",0,1,["candle_transformers::models::whisper::quantized_model::AudioEncoder"]],["impl Send for TextDecoder",0,1,["candle_transformers::models::whisper::quantized_model::TextDecoder"]],["impl Send for Whisper",0,1,["candle_transformers::models::whisper::quantized_model::Whisper"]],["impl Send for Config",0,1,["candle_transformers::models::whisper::Config"]],["impl Send for Conv2d",0,1,["candle_transformers::models::with_tracing::Conv2d"]],["impl Send for Embedding",0,1,["candle_transformers::models::with_tracing::Embedding"]],["impl Send for LayerNorm",0,1,["candle_transformers::models::with_tracing::LayerNorm"]],["impl Send for Linear",0,1,["candle_transformers::models::with_tracing::Linear"]],["impl Send for QMatMul",0,1,["candle_transformers::models::with_tracing::QMatMul"]],["impl Send for RmsNorm",0,1,["candle_transformers::models::with_tracing::RmsNorm"]],["impl Send for Attention",0,1,["candle_transformers::models::wuerstchen::attention_processor::Attention"]],["impl Send for AttnBlock",0,1,["candle_transformers::models::wuerstchen::common::AttnBlock"]],["impl Send for GlobalResponseNorm",0,1,["candle_transformers::models::wuerstchen::common::GlobalResponseNorm"]],["impl Send for LayerNormNoWeights",0,1,["candle_transformers::models::wuerstchen::common::LayerNormNoWeights"]],["impl Send for ResBlock",0,1,["candle_transformers::models::wuerstchen::common::ResBlock"]],["impl Send for TimestepBlock",0,1,["candle_transformers::models::wuerstchen::common::TimestepBlock"]],["impl Send for WLayerNorm",0,1,["candle_transformers::models::wuerstchen::common::WLayerNorm"]],["impl Send for DDPMWScheduler",0,1,["candle_transformers::models::wuerstchen::ddpm::DDPMWScheduler"]],["impl Send for DDPMWSchedulerConfig",0,1,["candle_transformers::models::wuerstchen::ddpm::DDPMWSchedulerConfig"]],["impl Send for ResBlockStageB",0,1,["candle_transformers::models::wuerstchen::diffnext::ResBlockStageB"]],["impl Send for WDiffNeXt",0,1,["candle_transformers::models::wuerstchen::diffnext::WDiffNeXt"]],["impl Send for MixingResidualBlock",0,1,["candle_transformers::models::wuerstchen::paella_vq::MixingResidualBlock"]],["impl Send for PaellaVQ",0,1,["candle_transformers::models::wuerstchen::paella_vq::PaellaVQ"]],["impl Send for WPrior",0,1,["candle_transformers::models::wuerstchen::prior::WPrior"]],["impl Send for Config",0,1,["candle_transformers::models::xlm_roberta::Config"]],["impl Send for XLMRobertaForMaskedLM",0,1,["candle_transformers::models::xlm_roberta::XLMRobertaForMaskedLM"]],["impl Send for XLMRobertaForSequenceClassification",0,1,["candle_transformers::models::xlm_roberta::XLMRobertaForSequenceClassification"]],["impl Send for XLMRobertaModel",0,1,["candle_transformers::models::xlm_roberta::XLMRobertaModel"]],["impl Send for Config",0,1,["candle_transformers::models::yi::Config"]],["impl Send for Model",0,1,["candle_transformers::models::yi::Model"]],["impl Send for KeyPoint",0,1,["candle_transformers::object_detection::KeyPoint"]],["impl Send for Embedding",0,1,["candle_transformers::quantized_nn::Embedding"]],["impl Send for Linear",0,1,["candle_transformers::quantized_nn::Linear"]],["impl Send for RmsNorm",0,1,["candle_transformers::quantized_nn::RmsNorm"]],["impl Send for VarBuilder",0,1,["candle_transformers::quantized_var_builder::VarBuilder"]],["impl<'a> Send for Vgg<'a>",0,1,["candle_transformers::models::vgg::Vgg"]],["impl<D> Send for Bbox<D>
where\n D: Send,
",0,1,["candle_transformers::object_detection::Bbox"]]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[195974]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/marker/trait.StructuralPartialEq.js b/network-poc/target-native/doc/trait.impl/core/marker/trait.StructuralPartialEq.js deleted file mode 100644 index 272dae6..0000000 --- a/network-poc/target-native/doc/trait.impl/core/marker/trait.StructuralPartialEq.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl StructuralPartialEq for Sampling",0],["impl StructuralPartialEq for HiddenAct",0],["impl StructuralPartialEq for PositionEmbeddingType",0],["impl StructuralPartialEq for HiddenAct",0],["impl StructuralPartialEq for NormType",0],["impl StructuralPartialEq for PadMode",0],["impl StructuralPartialEq for PositionEmbeddingType",0],["impl StructuralPartialEq for AttnKernelType",0],["impl StructuralPartialEq for NonLinearityType",0],["impl StructuralPartialEq for NormType",0],["impl StructuralPartialEq for Norm",0],["impl StructuralPartialEq for PadMode",0],["impl StructuralPartialEq for ResampleMethod",0],["impl StructuralPartialEq for NormType",0],["impl StructuralPartialEq for PositionalEmbedding",0],["impl StructuralPartialEq for ClassifierPooling",0],["impl StructuralPartialEq for PositionEmbeddingType",0],["impl StructuralPartialEq for DDPMVarianceType",0],["impl StructuralPartialEq for ModelVariant",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for ClassifierConfig",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for VisionConfig",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for EmbedHead",0],["impl StructuralPartialEq for ActivationWithOptionalGating",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for TrOCRConfig",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for Config",0],["impl StructuralPartialEq for KeyPoint",0]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[16616]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/marker/trait.Sync.js b/network-poc/target-native/doc/trait.impl/core/marker/trait.Sync.js deleted file mode 100644 index 6a222ab..0000000 --- a/network-poc/target-native/doc/trait.impl/core/marker/trait.Sync.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl !Sync for DPTHead",1,1,["candle_transformers::models::depth_anything_v2::DPTHead"]],["impl !Sync for DepthAnythingV2",1,1,["candle_transformers::models::depth_anything_v2::DepthAnythingV2"]],["impl !Sync for Scratch",1,1,["candle_transformers::models::depth_anything_v2::Scratch"]],["impl !Sync for LLaVA",1,1,["candle_transformers::models::llava::LLaVA"]],["impl !Sync for MMProjector",1,1,["candle_transformers::models::llava::MMProjector"]],["impl !Sync for ContextQkvOnlyJointBlock",1,1,["candle_transformers::models::mmdit::blocks::ContextQkvOnlyJointBlock"]],["impl !Sync for DiTBlock",1,1,["candle_transformers::models::mmdit::blocks::DiTBlock"]],["impl !Sync for FinalLayer",1,1,["candle_transformers::models::mmdit::blocks::FinalLayer"]],["impl !Sync for MMDiTJointBlock",1,1,["candle_transformers::models::mmdit::blocks::MMDiTJointBlock"]],["impl !Sync for MMDiTXJointBlock",1,1,["candle_transformers::models::mmdit::blocks::MMDiTXJointBlock"]],["impl !Sync for QkvOnlyDiTBlock",1,1,["candle_transformers::models::mmdit::blocks::QkvOnlyDiTBlock"]],["impl !Sync for SelfAttnDiTBlock",1,1,["candle_transformers::models::mmdit::blocks::SelfAttnDiTBlock"]],["impl !Sync for TimestepEmbedder",1,1,["candle_transformers::models::mmdit::embedding::TimestepEmbedder"]],["impl !Sync for VectorEmbedder",1,1,["candle_transformers::models::mmdit::embedding::VectorEmbedder"]],["impl !Sync for MMDiT",1,1,["candle_transformers::models::mmdit::model::MMDiT"]],["impl !Sync for MMDiTCore",1,1,["candle_transformers::models::mmdit::model::MMDiTCore"]],["impl Sync for Sampling",0,1,["candle_transformers::generation::Sampling"]],["impl Sync for HiddenAct",0,1,["candle_transformers::models::bert::HiddenAct"]],["impl Sync for PositionEmbeddingType",0,1,["candle_transformers::models::bert::PositionEmbeddingType"]],["impl Sync for Activation",0,1,["candle_transformers::models::chinese_clip::Activation"]],["impl Sync for EncoderConfig",0,1,["candle_transformers::models::chinese_clip::EncoderConfig"]],["impl Sync for PositionEmbeddingType",0,1,["candle_transformers::models::chinese_clip::text_model::PositionEmbeddingType"]],["impl Sync for EncoderConfig",0,1,["candle_transformers::models::clip::EncoderConfig"]],["impl Sync for Activation",0,1,["candle_transformers::models::clip::text_model::Activation"]],["impl Sync for HiddenAct",0,1,["candle_transformers::models::debertav2::HiddenAct"]],["impl Sync for DeepSeekV2RopeScaling",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RopeScaling"]],["impl Sync for ScaledRopeType",0,1,["candle_transformers::models::deepseek2::ScaledRopeType"]],["impl Sync for NormType",0,1,["candle_transformers::models::encodec::NormType"]],["impl Sync for PadMode",0,1,["candle_transformers::models::encodec::PadMode"]],["impl Sync for GraniteEosToks",0,1,["candle_transformers::models::granite::GraniteEosToks"]],["impl Sync for GraniteRopeType",0,1,["candle_transformers::models::granite::GraniteRopeType"]],["impl Sync for PositionEmbeddingType",0,1,["candle_transformers::models::jina_bert::PositionEmbeddingType"]],["impl Sync for Llama3RopeType",0,1,["candle_transformers::models::llama::Llama3RopeType"]],["impl Sync for LlamaEosToks",0,1,["candle_transformers::models::llama::LlamaEosToks"]],["impl Sync for AttnKernelType",0,1,["candle_transformers::models::metavoice::gpt::AttnKernelType"]],["impl Sync for NonLinearityType",0,1,["candle_transformers::models::metavoice::gpt::NonLinearityType"]],["impl Sync for NormType",0,1,["candle_transformers::models::metavoice::gpt::NormType"]],["impl Sync for Norm",0,1,["candle_transformers::models::mimi::conv::Norm"]],["impl Sync for PadMode",0,1,["candle_transformers::models::mimi::conv::PadMode"]],["impl Sync for ResampleMethod",0,1,["candle_transformers::models::mimi::encodec::ResampleMethod"]],["impl Sync for NormType",0,1,["candle_transformers::models::mimi::NormType"]],["impl Sync for Mlp",0,1,["candle_transformers::models::mimi::transformer::Mlp"]],["impl Sync for Norm",0,1,["candle_transformers::models::mimi::transformer::Norm"]],["impl Sync for PositionalEmbedding",0,1,["candle_transformers::models::mimi::transformer::PositionalEmbedding"]],["impl Sync for ClassifierPooling",0,1,["candle_transformers::models::modernbert::ClassifierPooling"]],["impl Sync for PositionEmbeddingType",0,1,["candle_transformers::models::persimmon::PositionEmbeddingType"]],["impl Sync for TemporalBlockType",0,1,["candle_transformers::models::recurrent_gemma::TemporalBlockType"]],["impl Sync for Activation",0,1,["candle_transformers::models::stable_diffusion::clip::Activation"]],["impl Sync for DDPMVarianceType",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMVarianceType"]],["impl Sync for BetaSchedule",0,1,["candle_transformers::models::stable_diffusion::schedulers::BetaSchedule"]],["impl Sync for PredictionType",0,1,["candle_transformers::models::stable_diffusion::schedulers::PredictionType"]],["impl Sync for TimestepSpacing",0,1,["candle_transformers::models::stable_diffusion::schedulers::TimestepSpacing"]],["impl Sync for AlgorithmType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::AlgorithmType"]],["impl Sync for CorrectorConfiguration",0,1,["candle_transformers::models::stable_diffusion::uni_pc::CorrectorConfiguration"]],["impl Sync for FinalSigmasType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::FinalSigmasType"]],["impl Sync for SigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::SigmaSchedule"]],["impl Sync for SolverType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::SolverType"]],["impl Sync for TimestepSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::TimestepSchedule"]],["impl Sync for EmbedDim",0,1,["candle_transformers::models::stella_en_v5::EmbedDim"]],["impl Sync for ModelVariant",0,1,["candle_transformers::models::stella_en_v5::ModelVariant"]],["impl Sync for Models",0,1,["candle_transformers::models::vgg::Models"]],["impl Sync for LogitsProcessor",0,1,["candle_transformers::generation::LogitsProcessor"]],["impl Sync for Config",0,1,["candle_transformers::models::based::Config"]],["impl Sync for LinearAttentionConfig",0,1,["candle_transformers::models::based::LinearAttentionConfig"]],["impl Sync for LinearAttentionFeatureMapConfig",0,1,["candle_transformers::models::based::LinearAttentionFeatureMapConfig"]],["impl Sync for Model",0,1,["candle_transformers::models::based::Model"]],["impl Sync for SlidingWindowAttentionConfig",0,1,["candle_transformers::models::based::SlidingWindowAttentionConfig"]],["impl Sync for BeitVisionTransformer",0,1,["candle_transformers::models::beit::BeitVisionTransformer"]],["impl Sync for BertEncoder",0,1,["candle_transformers::models::bert::BertEncoder"]],["impl Sync for BertForMaskedLM",0,1,["candle_transformers::models::bert::BertForMaskedLM"]],["impl Sync for BertLMPredictionHead",0,1,["candle_transformers::models::bert::BertLMPredictionHead"]],["impl Sync for BertLayer",0,1,["candle_transformers::models::bert::BertLayer"]],["impl Sync for BertModel",0,1,["candle_transformers::models::bert::BertModel"]],["impl Sync for BertOnlyMLMHead",0,1,["candle_transformers::models::bert::BertOnlyMLMHead"]],["impl Sync for Config",0,1,["candle_transformers::models::bert::Config"]],["impl Sync for Config",0,1,["candle_transformers::models::bigcode::Config"]],["impl Sync for GPTBigCode",0,1,["candle_transformers::models::bigcode::GPTBigCode"]],["impl Sync for BlipForConditionalGeneration",0,1,["candle_transformers::models::blip::BlipForConditionalGeneration"]],["impl Sync for Config",0,1,["candle_transformers::models::blip::Config"]],["impl Sync for VisionConfig",0,1,["candle_transformers::models::blip::VisionConfig"]],["impl Sync for VisionModel",0,1,["candle_transformers::models::blip::VisionModel"]],["impl Sync for Config",0,1,["candle_transformers::models::blip_text::Config"]],["impl Sync for TextLMHeadModel",0,1,["candle_transformers::models::blip_text::TextLMHeadModel"]],["impl Sync for TextPooler",0,1,["candle_transformers::models::blip_text::TextPooler"]],["impl Sync for Config",0,1,["candle_transformers::models::chatglm::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::chatglm::Model"]],["impl Sync for ChineseClipConfig",0,1,["candle_transformers::models::chinese_clip::ChineseClipConfig"]],["impl Sync for ChineseClipModel",0,1,["candle_transformers::models::chinese_clip::ChineseClipModel"]],["impl Sync for ChineseClipTextConfig",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextConfig"]],["impl Sync for ChineseClipTextEmbeddings",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextEmbeddings"]],["impl Sync for ChineseClipTextTransformer",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextTransformer"]],["impl Sync for ChineseClipVisionConfig",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionConfig"]],["impl Sync for ChineseClipVisionEmbeddings",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionEmbeddings"]],["impl Sync for ChineseClipVisionEncoder",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionEncoder"]],["impl Sync for ChineseClipVisionTransformer",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionTransformer"]],["impl Sync for ClipConfig",0,1,["candle_transformers::models::clip::ClipConfig"]],["impl Sync for ClipModel",0,1,["candle_transformers::models::clip::ClipModel"]],["impl Sync for ClipEncoder",0,1,["candle_transformers::models::clip::text_model::ClipEncoder"]],["impl Sync for ClipTextConfig",0,1,["candle_transformers::models::clip::text_model::ClipTextConfig"]],["impl Sync for ClipTextTransformer",0,1,["candle_transformers::models::clip::text_model::ClipTextTransformer"]],["impl Sync for ClipVisionConfig",0,1,["candle_transformers::models::clip::vision_model::ClipVisionConfig"]],["impl Sync for ClipVisionTransformer",0,1,["candle_transformers::models::clip::vision_model::ClipVisionTransformer"]],["impl Sync for Config",0,1,["candle_transformers::models::codegeex4_9b::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::codegeex4_9b::Model"]],["impl Sync for Model",0,1,["candle_transformers::models::colpali::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::convnext::Config"]],["impl Sync for Config",0,1,["candle_transformers::models::dac::Config"]],["impl Sync for Decoder",0,1,["candle_transformers::models::dac::Decoder"]],["impl Sync for DecoderBlock",0,1,["candle_transformers::models::dac::DecoderBlock"]],["impl Sync for Encoder",0,1,["candle_transformers::models::dac::Encoder"]],["impl Sync for EncoderBlock",0,1,["candle_transformers::models::dac::EncoderBlock"]],["impl Sync for Model",0,1,["candle_transformers::models::dac::Model"]],["impl Sync for ResidualUnit",0,1,["candle_transformers::models::dac::ResidualUnit"]],["impl Sync for ResidualVectorQuantizer",0,1,["candle_transformers::models::dac::ResidualVectorQuantizer"]],["impl Sync for Snake1d",0,1,["candle_transformers::models::dac::Snake1d"]],["impl Sync for VectorQuantizer",0,1,["candle_transformers::models::dac::VectorQuantizer"]],["impl Sync for Config",0,1,["candle_transformers::models::debertav2::Config"]],["impl Sync for ConvLayer",0,1,["candle_transformers::models::debertav2::ConvLayer"]],["impl Sync for DebertaV2Attention",0,1,["candle_transformers::models::debertav2::DebertaV2Attention"]],["impl Sync for DebertaV2ContextPooler",0,1,["candle_transformers::models::debertav2::DebertaV2ContextPooler"]],["impl Sync for DebertaV2DisentangledSelfAttention",0,1,["candle_transformers::models::debertav2::DebertaV2DisentangledSelfAttention"]],["impl Sync for DebertaV2Embeddings",0,1,["candle_transformers::models::debertav2::DebertaV2Embeddings"]],["impl Sync for DebertaV2Encoder",0,1,["candle_transformers::models::debertav2::DebertaV2Encoder"]],["impl Sync for DebertaV2Intermediate",0,1,["candle_transformers::models::debertav2::DebertaV2Intermediate"]],["impl Sync for DebertaV2Layer",0,1,["candle_transformers::models::debertav2::DebertaV2Layer"]],["impl Sync for DebertaV2Model",0,1,["candle_transformers::models::debertav2::DebertaV2Model"]],["impl Sync for DebertaV2NERModel",0,1,["candle_transformers::models::debertav2::DebertaV2NERModel"]],["impl Sync for DebertaV2Output",0,1,["candle_transformers::models::debertav2::DebertaV2Output"]],["impl Sync for DebertaV2SelfOutput",0,1,["candle_transformers::models::debertav2::DebertaV2SelfOutput"]],["impl Sync for DebertaV2SeqClassificationModel",0,1,["candle_transformers::models::debertav2::DebertaV2SeqClassificationModel"]],["impl Sync for HiddenActLayer",0,1,["candle_transformers::models::debertav2::HiddenActLayer"]],["impl Sync for NERItem",0,1,["candle_transformers::models::debertav2::NERItem"]],["impl Sync for StableDropout",0,1,["candle_transformers::models::debertav2::StableDropout"]],["impl Sync for TextClassificationItem",0,1,["candle_transformers::models::debertav2::TextClassificationItem"]],["impl Sync for DeepSeekV2",0,1,["candle_transformers::models::deepseek2::DeepSeekV2"]],["impl Sync for DeepSeekV2Config",0,1,["candle_transformers::models::deepseek2::DeepSeekV2Config"]],["impl Sync for DeepSeekV2RopeConfig",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RopeConfig"]],["impl Sync for DeepSeekV2RotaryEmbedding",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RotaryEmbedding"]],["impl Sync for TopKOutput",0,1,["candle_transformers::models::deepseek2::TopKOutput"]],["impl Sync for DepthAnythingV2Config",0,1,["candle_transformers::models::depth_anything_v2::DepthAnythingV2Config"]],["impl Sync for FeatureFusionBlock",0,1,["candle_transformers::models::depth_anything_v2::FeatureFusionBlock"]],["impl Sync for ResidualConvUnit",0,1,["candle_transformers::models::depth_anything_v2::ResidualConvUnit"]],["impl Sync for DinoVisionTransformer",0,1,["candle_transformers::models::dinov2::DinoVisionTransformer"]],["impl Sync for DinoVisionTransformer",0,1,["candle_transformers::models::dinov2reg4::DinoVisionTransformer"]],["impl Sync for Config",0,1,["candle_transformers::models::distilbert::Config"]],["impl Sync for DistilBertModel",0,1,["candle_transformers::models::distilbert::DistilBertModel"]],["impl Sync for EfficientNet",0,1,["candle_transformers::models::efficientnet::EfficientNet"]],["impl Sync for MBConvConfig",0,1,["candle_transformers::models::efficientnet::MBConvConfig"]],["impl Sync for Config",0,1,["candle_transformers::models::efficientvit::Config"]],["impl Sync for Config",0,1,["candle_transformers::models::encodec::Config"]],["impl Sync for Decoder",0,1,["candle_transformers::models::encodec::Decoder"]],["impl Sync for EncodecConv1d",0,1,["candle_transformers::models::encodec::EncodecConv1d"]],["impl Sync for EncodecConvTranspose1d",0,1,["candle_transformers::models::encodec::EncodecConvTranspose1d"]],["impl Sync for EncodecLSTM",0,1,["candle_transformers::models::encodec::EncodecLSTM"]],["impl Sync for EncodecResnetBlock",0,1,["candle_transformers::models::encodec::EncodecResnetBlock"]],["impl Sync for Encoder",0,1,["candle_transformers::models::encodec::Encoder"]],["impl Sync for EuclideanCodebook",0,1,["candle_transformers::models::encodec::EuclideanCodebook"]],["impl Sync for Model",0,1,["candle_transformers::models::encodec::Model"]],["impl Sync for ResidualVectorQuantizer",0,1,["candle_transformers::models::encodec::ResidualVectorQuantizer"]],["impl Sync for VectorQuantization",0,1,["candle_transformers::models::encodec::VectorQuantization"]],["impl Sync for EVA2VisionTransformer",0,1,["candle_transformers::models::eva2::EVA2VisionTransformer"]],["impl Sync for Config",0,1,["candle_transformers::models::falcon::Config"]],["impl Sync for Falcon",0,1,["candle_transformers::models::falcon::Falcon"]],["impl Sync for Config",0,1,["candle_transformers::models::fastvit::Config"]],["impl Sync for AutoEncoder",0,1,["candle_transformers::models::flux::autoencoder::AutoEncoder"]],["impl Sync for Config",0,1,["candle_transformers::models::flux::autoencoder::Config"]],["impl Sync for Decoder",0,1,["candle_transformers::models::flux::autoencoder::Decoder"]],["impl Sync for DiagonalGaussian",0,1,["candle_transformers::models::flux::autoencoder::DiagonalGaussian"]],["impl Sync for Encoder",0,1,["candle_transformers::models::flux::autoencoder::Encoder"]],["impl Sync for Config",0,1,["candle_transformers::models::flux::model::Config"]],["impl Sync for DoubleStreamBlock",0,1,["candle_transformers::models::flux::model::DoubleStreamBlock"]],["impl Sync for EmbedNd",0,1,["candle_transformers::models::flux::model::EmbedNd"]],["impl Sync for Flux",0,1,["candle_transformers::models::flux::model::Flux"]],["impl Sync for LastLayer",0,1,["candle_transformers::models::flux::model::LastLayer"]],["impl Sync for MlpEmbedder",0,1,["candle_transformers::models::flux::model::MlpEmbedder"]],["impl Sync for QkNorm",0,1,["candle_transformers::models::flux::model::QkNorm"]],["impl Sync for SelfAttention",0,1,["candle_transformers::models::flux::model::SelfAttention"]],["impl Sync for SingleStreamBlock",0,1,["candle_transformers::models::flux::model::SingleStreamBlock"]],["impl Sync for DoubleStreamBlock",0,1,["candle_transformers::models::flux::quantized_model::DoubleStreamBlock"]],["impl Sync for Flux",0,1,["candle_transformers::models::flux::quantized_model::Flux"]],["impl Sync for LastLayer",0,1,["candle_transformers::models::flux::quantized_model::LastLayer"]],["impl Sync for MlpEmbedder",0,1,["candle_transformers::models::flux::quantized_model::MlpEmbedder"]],["impl Sync for QkNorm",0,1,["candle_transformers::models::flux::quantized_model::QkNorm"]],["impl Sync for SelfAttention",0,1,["candle_transformers::models::flux::quantized_model::SelfAttention"]],["impl Sync for SingleStreamBlock",0,1,["candle_transformers::models::flux::quantized_model::SingleStreamBlock"]],["impl Sync for State",0,1,["candle_transformers::models::flux::sampling::State"]],["impl Sync for Config",0,1,["candle_transformers::models::gemma2::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::gemma2::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::gemma3::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::gemma3::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::gemma::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::gemma::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::glm4::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::glm4::Model"]],["impl Sync for Cache",0,1,["candle_transformers::models::granite::Cache"]],["impl Sync for Config",0,1,["candle_transformers::models::granite::Config"]],["impl Sync for Granite",0,1,["candle_transformers::models::granite::Granite"]],["impl Sync for GraniteConfig",0,1,["candle_transformers::models::granite::GraniteConfig"]],["impl Sync for GraniteRopeConfig",0,1,["candle_transformers::models::granite::GraniteRopeConfig"]],["impl Sync for Config",0,1,["candle_transformers::models::helium::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::helium::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::hiera::Config"]],["impl Sync for BertModel",0,1,["candle_transformers::models::jina_bert::BertModel"]],["impl Sync for Config",0,1,["candle_transformers::models::jina_bert::Config"]],["impl Sync for Cache",0,1,["candle_transformers::models::llama2_c::Cache"]],["impl Sync for Config",0,1,["candle_transformers::models::llama2_c::Config"]],["impl Sync for Llama",0,1,["candle_transformers::models::llama2_c::Llama"]],["impl Sync for TransformerWeights",0,1,["candle_transformers::models::llama2_c_weights::TransformerWeights"]],["impl Sync for Cache",0,1,["candle_transformers::models::llama::Cache"]],["impl Sync for Config",0,1,["candle_transformers::models::llama::Config"]],["impl Sync for Llama3RopeConfig",0,1,["candle_transformers::models::llama::Llama3RopeConfig"]],["impl Sync for Llama",0,1,["candle_transformers::models::llama::Llama"]],["impl Sync for LlamaConfig",0,1,["candle_transformers::models::llama::LlamaConfig"]],["impl Sync for HFGenerationConfig",0,1,["candle_transformers::models::llava::config::HFGenerationConfig"]],["impl Sync for HFLLaVAConfig",0,1,["candle_transformers::models::llava::config::HFLLaVAConfig"]],["impl Sync for HFLLaVATextConfig",0,1,["candle_transformers::models::llava::config::HFLLaVATextConfig"]],["impl Sync for HFLLaVAVisionConfig",0,1,["candle_transformers::models::llava::config::HFLLaVAVisionConfig"]],["impl Sync for HFPreProcessorConfig",0,1,["candle_transformers::models::llava::config::HFPreProcessorConfig"]],["impl Sync for LLaVAConfig",0,1,["candle_transformers::models::llava::config::LLaVAConfig"]],["impl Sync for ClipVisionTower",0,1,["candle_transformers::models::llava::ClipVisionTower"]],["impl Sync for IdentityMap",0,1,["candle_transformers::models::llava::IdentityMap"]],["impl Sync for Config",0,1,["candle_transformers::models::mamba::Config"]],["impl Sync for MambaBlock",0,1,["candle_transformers::models::mamba::MambaBlock"]],["impl Sync for Model",0,1,["candle_transformers::models::mamba::Model"]],["impl Sync for ResidualBlock",0,1,["candle_transformers::models::mamba::ResidualBlock"]],["impl Sync for State",0,1,["candle_transformers::models::mamba::State"]],["impl Sync for Config",0,1,["candle_transformers::models::marian::Config"]],["impl Sync for Decoder",0,1,["candle_transformers::models::marian::Decoder"]],["impl Sync for Encoder",0,1,["candle_transformers::models::marian::Encoder"]],["impl Sync for MTModel",0,1,["candle_transformers::models::marian::MTModel"]],["impl Sync for FlattenedInterleavedEncodec2Codebook",0,1,["candle_transformers::models::metavoice::adapters::FlattenedInterleavedEncodec2Codebook"]],["impl Sync for TiltedEncodec",0,1,["candle_transformers::models::metavoice::adapters::TiltedEncodec"]],["impl Sync for Config",0,1,["candle_transformers::models::metavoice::gpt::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::metavoice::gpt::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::metavoice::speaker_encoder::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::metavoice::speaker_encoder::Model"]],["impl Sync for BPE",0,1,["candle_transformers::models::metavoice::tokenizers::BPE"]],["impl Sync for Config",0,1,["candle_transformers::models::metavoice::transformer::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::metavoice::transformer::Model"]],["impl Sync for ConvDownsample1d",0,1,["candle_transformers::models::mimi::conv::ConvDownsample1d"]],["impl Sync for ConvTrUpsample1d",0,1,["candle_transformers::models::mimi::conv::ConvTrUpsample1d"]],["impl Sync for NormConv1d",0,1,["candle_transformers::models::mimi::conv::NormConv1d"]],["impl Sync for NormConvTranspose1d",0,1,["candle_transformers::models::mimi::conv::NormConvTranspose1d"]],["impl Sync for StreamableConv1d",0,1,["candle_transformers::models::mimi::conv::StreamableConv1d"]],["impl Sync for StreamableConvTranspose1d",0,1,["candle_transformers::models::mimi::conv::StreamableConvTranspose1d"]],["impl Sync for Config",0,1,["candle_transformers::models::mimi::encodec::Config"]],["impl Sync for Encodec",0,1,["candle_transformers::models::mimi::encodec::Encodec"]],["impl Sync for EuclideanCodebook",0,1,["candle_transformers::models::mimi::quantization::EuclideanCodebook"]],["impl Sync for ResidualVectorQuantization",0,1,["candle_transformers::models::mimi::quantization::ResidualVectorQuantization"]],["impl Sync for ResidualVectorQuantizer",0,1,["candle_transformers::models::mimi::quantization::ResidualVectorQuantizer"]],["impl Sync for SplitResidualVectorQuantizer",0,1,["candle_transformers::models::mimi::quantization::SplitResidualVectorQuantizer"]],["impl Sync for VectorQuantization",0,1,["candle_transformers::models::mimi::quantization::VectorQuantization"]],["impl Sync for Config",0,1,["candle_transformers::models::mimi::seanet::Config"]],["impl Sync for SeaNetDecoder",0,1,["candle_transformers::models::mimi::seanet::SeaNetDecoder"]],["impl Sync for SeaNetEncoder",0,1,["candle_transformers::models::mimi::seanet::SeaNetEncoder"]],["impl Sync for SeaNetResnetBlock",0,1,["candle_transformers::models::mimi::seanet::SeaNetResnetBlock"]],["impl Sync for Config",0,1,["candle_transformers::models::mimi::transformer::Config"]],["impl Sync for LayerScale",0,1,["candle_transformers::models::mimi::transformer::LayerScale"]],["impl Sync for ProjectedTransformer",0,1,["candle_transformers::models::mimi::transformer::ProjectedTransformer"]],["impl Sync for RmsNorm",0,1,["candle_transformers::models::mimi::transformer::RmsNorm"]],["impl Sync for RotaryEmbedding",0,1,["candle_transformers::models::mimi::transformer::RotaryEmbedding"]],["impl Sync for StreamingMultiheadAttention",0,1,["candle_transformers::models::mimi::transformer::StreamingMultiheadAttention"]],["impl Sync for StreamingMultiheadCrossAttention",0,1,["candle_transformers::models::mimi::transformer::StreamingMultiheadCrossAttention"]],["impl Sync for StreamingTransformer",0,1,["candle_transformers::models::mimi::transformer::StreamingTransformer"]],["impl Sync for StreamingTransformerLayer",0,1,["candle_transformers::models::mimi::transformer::StreamingTransformerLayer"]],["impl Sync for Config",0,1,["candle_transformers::models::mistral::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::mistral::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::mixformer::Config"]],["impl Sync for MixFormerSequentialForCausalLM",0,1,["candle_transformers::models::mixformer::MixFormerSequentialForCausalLM"]],["impl Sync for Config",0,1,["candle_transformers::models::mixtral::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::mixtral::Model"]],["impl Sync for LayerNormNoAffine",0,1,["candle_transformers::models::mmdit::blocks::LayerNormNoAffine"]],["impl Sync for ModulateIntermediates",0,1,["candle_transformers::models::mmdit::blocks::ModulateIntermediates"]],["impl Sync for SelfAttnModulateIntermediates",0,1,["candle_transformers::models::mmdit::blocks::SelfAttnModulateIntermediates"]],["impl Sync for PatchEmbedder",0,1,["candle_transformers::models::mmdit::embedding::PatchEmbedder"]],["impl Sync for PositionEmbedder",0,1,["candle_transformers::models::mmdit::embedding::PositionEmbedder"]],["impl Sync for Unpatchifier",0,1,["candle_transformers::models::mmdit::embedding::Unpatchifier"]],["impl Sync for Config",0,1,["candle_transformers::models::mmdit::model::Config"]],["impl Sync for AttnProjections",0,1,["candle_transformers::models::mmdit::projections::AttnProjections"]],["impl Sync for Mlp",0,1,["candle_transformers::models::mmdit::projections::Mlp"]],["impl Sync for Qkv",0,1,["candle_transformers::models::mmdit::projections::Qkv"]],["impl Sync for QkvOnlyAttnProjections",0,1,["candle_transformers::models::mmdit::projections::QkvOnlyAttnProjections"]],["impl Sync for MobileClipConfig",0,1,["candle_transformers::models::mobileclip::MobileClipConfig"]],["impl Sync for MobileClipModel",0,1,["candle_transformers::models::mobileclip::MobileClipModel"]],["impl Sync for Config",0,1,["candle_transformers::models::mobilenetv4::Config"]],["impl Sync for Config",0,1,["candle_transformers::models::mobileone::Config"]],["impl Sync for ClassifierConfig",0,1,["candle_transformers::models::modernbert::ClassifierConfig"]],["impl Sync for Config",0,1,["candle_transformers::models::modernbert::Config"]],["impl Sync for ModernBert",0,1,["candle_transformers::models::modernbert::ModernBert"]],["impl Sync for ModernBertClassifier",0,1,["candle_transformers::models::modernbert::ModernBertClassifier"]],["impl Sync for ModernBertDecoder",0,1,["candle_transformers::models::modernbert::ModernBertDecoder"]],["impl Sync for ModernBertForMaskedLM",0,1,["candle_transformers::models::modernbert::ModernBertForMaskedLM"]],["impl Sync for ModernBertForSequenceClassification",0,1,["candle_transformers::models::modernbert::ModernBertForSequenceClassification"]],["impl Sync for ModernBertHead",0,1,["candle_transformers::models::modernbert::ModernBertHead"]],["impl Sync for ModernBertLayer",0,1,["candle_transformers::models::modernbert::ModernBertLayer"]],["impl Sync for ModernBertMLP",0,1,["candle_transformers::models::modernbert::ModernBertMLP"]],["impl Sync for Config",0,1,["candle_transformers::models::moondream::Config"]],["impl Sync for Encoder",0,1,["candle_transformers::models::moondream::Encoder"]],["impl Sync for Model",0,1,["candle_transformers::models::moondream::Model"]],["impl Sync for VisionConfig",0,1,["candle_transformers::models::moondream::VisionConfig"]],["impl Sync for VisionEncoder",0,1,["candle_transformers::models::moondream::VisionEncoder"]],["impl Sync for Config",0,1,["candle_transformers::models::mpt::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::mpt::Model"]],["impl Sync for Model",0,1,["candle_transformers::models::nvembed_v2::embedding::Model"]],["impl Sync for Model",0,1,["candle_transformers::models::nvembed_v2::model::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::olmo::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::olmo::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::openclip::text_model::Config"]],["impl Sync for Encoder",0,1,["candle_transformers::models::openclip::text_model::Encoder"]],["impl Sync for OpenClipTextTransformer",0,1,["candle_transformers::models::openclip::text_model::OpenClipTextTransformer"]],["impl Sync for Config",0,1,["candle_transformers::models::paligemma::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::paligemma::Model"]],["impl Sync for MultiModalProjector",0,1,["candle_transformers::models::paligemma::MultiModalProjector"]],["impl Sync for Attention",0,1,["candle_transformers::models::parler_tts::Attention"]],["impl Sync for Config",0,1,["candle_transformers::models::parler_tts::Config"]],["impl Sync for Decoder",0,1,["candle_transformers::models::parler_tts::Decoder"]],["impl Sync for DecoderConfig",0,1,["candle_transformers::models::parler_tts::DecoderConfig"]],["impl Sync for DecoderLayer",0,1,["candle_transformers::models::parler_tts::DecoderLayer"]],["impl Sync for Model",0,1,["candle_transformers::models::parler_tts::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::persimmon::Config"]],["impl Sync for Config",0,1,["candle_transformers::models::phi3::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::phi3::Model"]],["impl Sync for RotaryEmbedding",0,1,["candle_transformers::models::phi3::RotaryEmbedding"]],["impl Sync for Config",0,1,["candle_transformers::models::phi::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::phi::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::pixtral::llava::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::pixtral::llava::Model"]],["impl Sync for MultiModalProjector",0,1,["candle_transformers::models::pixtral::llava::MultiModalProjector"]],["impl Sync for Config",0,1,["candle_transformers::models::pixtral::vision_model::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::pixtral::vision_model::Model"]],["impl Sync for BlipForConditionalGeneration",0,1,["candle_transformers::models::quantized_blip::BlipForConditionalGeneration"]],["impl Sync for VisionModel",0,1,["candle_transformers::models::quantized_blip::VisionModel"]],["impl Sync for TextLMHeadModel",0,1,["candle_transformers::models::quantized_blip_text::TextLMHeadModel"]],["impl Sync for TextPooler",0,1,["candle_transformers::models::quantized_blip_text::TextPooler"]],["impl Sync for QLlama",0,1,["candle_transformers::models::quantized_llama2_c::QLlama"]],["impl Sync for ModelWeights",0,1,["candle_transformers::models::quantized_llama::ModelWeights"]],["impl Sync for Model",0,1,["candle_transformers::models::quantized_metavoice::transformer::Model"]],["impl Sync for Model",0,1,["candle_transformers::models::quantized_mistral::Model"]],["impl Sync for MixFormerSequentialForCausalLM",0,1,["candle_transformers::models::quantized_mixformer::MixFormerSequentialForCausalLM"]],["impl Sync for Encoder",0,1,["candle_transformers::models::quantized_moondream::Encoder"]],["impl Sync for Model",0,1,["candle_transformers::models::quantized_moondream::Model"]],["impl Sync for VisionEncoder",0,1,["candle_transformers::models::quantized_moondream::VisionEncoder"]],["impl Sync for Model",0,1,["candle_transformers::models::quantized_mpt::Model"]],["impl Sync for ModelWeights",0,1,["candle_transformers::models::quantized_phi3::ModelWeights"]],["impl Sync for ModelWeights",0,1,["candle_transformers::models::quantized_phi::ModelWeights"]],["impl Sync for ModelWeights",0,1,["candle_transformers::models::quantized_qwen2::ModelWeights"]],["impl Sync for Model",0,1,["candle_transformers::models::quantized_recurrent_gemma::Model"]],["impl Sync for Model",0,1,["candle_transformers::models::quantized_rwkv_v5::Model"]],["impl Sync for Model",0,1,["candle_transformers::models::quantized_rwkv_v6::Model"]],["impl Sync for Model",0,1,["candle_transformers::models::quantized_stable_lm::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::quantized_t5::Config"]],["impl Sync for T5EncoderModel",0,1,["candle_transformers::models::quantized_t5::T5EncoderModel"]],["impl Sync for T5ForConditionalGeneration",0,1,["candle_transformers::models::quantized_t5::T5ForConditionalGeneration"]],["impl Sync for Config",0,1,["candle_transformers::models::qwen2::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::qwen2::Model"]],["impl Sync for ModelForCausalLM",0,1,["candle_transformers::models::qwen2::ModelForCausalLM"]],["impl Sync for Config",0,1,["candle_transformers::models::qwen2_moe::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::qwen2_moe::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::recurrent_gemma::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::recurrent_gemma::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::repvgg::Config"]],["impl Sync for Config",0,1,["candle_transformers::models::rwkv_v5::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::rwkv_v5::Model"]],["impl Sync for State",0,1,["candle_transformers::models::rwkv_v5::State"]],["impl Sync for StatePerLayer",0,1,["candle_transformers::models::rwkv_v5::StatePerLayer"]],["impl Sync for Tokenizer",0,1,["candle_transformers::models::rwkv_v5::Tokenizer"]],["impl Sync for Model",0,1,["candle_transformers::models::rwkv_v6::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::segformer::Config"]],["impl Sync for ImageClassificationModel",0,1,["candle_transformers::models::segformer::ImageClassificationModel"]],["impl Sync for SemanticSegmentationModel",0,1,["candle_transformers::models::segformer::SemanticSegmentationModel"]],["impl Sync for ImageEncoderViT",0,1,["candle_transformers::models::segment_anything::image_encoder::ImageEncoderViT"]],["impl Sync for MaskDecoder",0,1,["candle_transformers::models::segment_anything::mask_decoder::MaskDecoder"]],["impl Sync for PromptEncoder",0,1,["candle_transformers::models::segment_anything::prompt_encoder::PromptEncoder"]],["impl Sync for Sam",0,1,["candle_transformers::models::segment_anything::sam::Sam"]],["impl Sync for LayerNorm2d",0,1,["candle_transformers::models::segment_anything::LayerNorm2d"]],["impl Sync for MlpBlock",0,1,["candle_transformers::models::segment_anything::MlpBlock"]],["impl Sync for TinyViT",0,1,["candle_transformers::models::segment_anything::tiny_vit::TinyViT"]],["impl Sync for TwoWayTransformer",0,1,["candle_transformers::models::segment_anything::transformer::TwoWayTransformer"]],["impl Sync for Config",0,1,["candle_transformers::models::siglip::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::siglip::Model"]],["impl Sync for TextConfig",0,1,["candle_transformers::models::siglip::TextConfig"]],["impl Sync for TextModel",0,1,["candle_transformers::models::siglip::TextModel"]],["impl Sync for TextTransformer",0,1,["candle_transformers::models::siglip::TextTransformer"]],["impl Sync for VisionConfig",0,1,["candle_transformers::models::siglip::VisionConfig"]],["impl Sync for VisionModel",0,1,["candle_transformers::models::siglip::VisionModel"]],["impl Sync for AttentionBlock",0,1,["candle_transformers::models::stable_diffusion::attention::AttentionBlock"]],["impl Sync for AttentionBlockConfig",0,1,["candle_transformers::models::stable_diffusion::attention::AttentionBlockConfig"]],["impl Sync for CrossAttention",0,1,["candle_transformers::models::stable_diffusion::attention::CrossAttention"]],["impl Sync for SpatialTransformer",0,1,["candle_transformers::models::stable_diffusion::attention::SpatialTransformer"]],["impl Sync for SpatialTransformerConfig",0,1,["candle_transformers::models::stable_diffusion::attention::SpatialTransformerConfig"]],["impl Sync for ClipTextTransformer",0,1,["candle_transformers::models::stable_diffusion::clip::ClipTextTransformer"]],["impl Sync for Config",0,1,["candle_transformers::models::stable_diffusion::clip::Config"]],["impl Sync for DDIMScheduler",0,1,["candle_transformers::models::stable_diffusion::ddim::DDIMScheduler"]],["impl Sync for DDIMSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::ddim::DDIMSchedulerConfig"]],["impl Sync for DDPMScheduler",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMScheduler"]],["impl Sync for DDPMSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMSchedulerConfig"]],["impl Sync for TimestepEmbedding",0,1,["candle_transformers::models::stable_diffusion::embeddings::TimestepEmbedding"]],["impl Sync for Timesteps",0,1,["candle_transformers::models::stable_diffusion::embeddings::Timesteps"]],["impl Sync for EulerAncestralDiscreteScheduler",0,1,["candle_transformers::models::stable_diffusion::euler_ancestral_discrete::EulerAncestralDiscreteScheduler"]],["impl Sync for EulerAncestralDiscreteSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::euler_ancestral_discrete::EulerAncestralDiscreteSchedulerConfig"]],["impl Sync for ResnetBlock2D",0,1,["candle_transformers::models::stable_diffusion::resnet::ResnetBlock2D"]],["impl Sync for ResnetBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::resnet::ResnetBlock2DConfig"]],["impl Sync for StableDiffusionConfig",0,1,["candle_transformers::models::stable_diffusion::StableDiffusionConfig"]],["impl Sync for BlockConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d::BlockConfig"]],["impl Sync for UNet2DConditionModel",0,1,["candle_transformers::models::stable_diffusion::unet_2d::UNet2DConditionModel"]],["impl Sync for UNet2DConditionModelConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d::UNet2DConditionModelConfig"]],["impl Sync for CrossAttnDownBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnDownBlock2D"]],["impl Sync for CrossAttnDownBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnDownBlock2DConfig"]],["impl Sync for CrossAttnUpBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnUpBlock2D"]],["impl Sync for CrossAttnUpBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnUpBlock2DConfig"]],["impl Sync for DownBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownBlock2D"]],["impl Sync for DownBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownBlock2DConfig"]],["impl Sync for DownEncoderBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownEncoderBlock2D"]],["impl Sync for DownEncoderBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownEncoderBlock2DConfig"]],["impl Sync for UNetMidBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2D"]],["impl Sync for UNetMidBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DConfig"]],["impl Sync for UNetMidBlock2DCrossAttn",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DCrossAttn"]],["impl Sync for UNetMidBlock2DCrossAttnConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DCrossAttnConfig"]],["impl Sync for UpBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpBlock2D"]],["impl Sync for UpBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpBlock2DConfig"]],["impl Sync for UpDecoderBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpDecoderBlock2D"]],["impl Sync for UpDecoderBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpDecoderBlock2DConfig"]],["impl Sync for EdmDpmMultistepScheduler",0,1,["candle_transformers::models::stable_diffusion::uni_pc::EdmDpmMultistepScheduler"]],["impl Sync for ExponentialSigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::ExponentialSigmaSchedule"]],["impl Sync for KarrasSigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::KarrasSigmaSchedule"]],["impl Sync for UniPCSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::uni_pc::UniPCSchedulerConfig"]],["impl Sync for AutoEncoderKL",0,1,["candle_transformers::models::stable_diffusion::vae::AutoEncoderKL"]],["impl Sync for AutoEncoderKLConfig",0,1,["candle_transformers::models::stable_diffusion::vae::AutoEncoderKLConfig"]],["impl Sync for DiagonalGaussianDistribution",0,1,["candle_transformers::models::stable_diffusion::vae::DiagonalGaussianDistribution"]],["impl Sync for Config",0,1,["candle_transformers::models::stable_lm::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::stable_lm::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::starcoder2::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::starcoder2::Model"]],["impl Sync for Config",0,1,["candle_transformers::models::stella_en_v5::Config"]],["impl Sync for EmbedHead",0,1,["candle_transformers::models::stella_en_v5::EmbedHead"]],["impl Sync for EmbeddingModel",0,1,["candle_transformers::models::stella_en_v5::EmbeddingModel"]],["impl Sync for Embeddings",0,1,["candle_transformers::models::stella_en_v5::Embeddings"]],["impl Sync for Model",0,1,["candle_transformers::models::stella_en_v5::Model"]],["impl Sync for ActivationWithOptionalGating",0,1,["candle_transformers::models::t5::ActivationWithOptionalGating"]],["impl Sync for Config",0,1,["candle_transformers::models::t5::Config"]],["impl Sync for Linear",0,1,["candle_transformers::models::t5::Linear"]],["impl Sync for T5EncoderModel",0,1,["candle_transformers::models::t5::T5EncoderModel"]],["impl Sync for T5ForConditionalGeneration",0,1,["candle_transformers::models::t5::T5ForConditionalGeneration"]],["impl Sync for TrOCRConfig",0,1,["candle_transformers::models::trocr::TrOCRConfig"]],["impl Sync for TrOCRDecoder",0,1,["candle_transformers::models::trocr::TrOCRDecoder"]],["impl Sync for TrOCREncoder",0,1,["candle_transformers::models::trocr::TrOCREncoder"]],["impl Sync for TrOCRForCausalLM",0,1,["candle_transformers::models::trocr::TrOCRForCausalLM"]],["impl Sync for TrOCRModel",0,1,["candle_transformers::models::trocr::TrOCRModel"]],["impl Sync for Config",0,1,["candle_transformers::models::vit::Config"]],["impl Sync for Embeddings",0,1,["candle_transformers::models::vit::Embeddings"]],["impl Sync for Encoder",0,1,["candle_transformers::models::vit::Encoder"]],["impl Sync for Model",0,1,["candle_transformers::models::vit::Model"]],["impl Sync for AudioEncoder",0,1,["candle_transformers::models::whisper::model::AudioEncoder"]],["impl Sync for TextDecoder",0,1,["candle_transformers::models::whisper::model::TextDecoder"]],["impl Sync for Whisper",0,1,["candle_transformers::models::whisper::model::Whisper"]],["impl Sync for AudioEncoder",0,1,["candle_transformers::models::whisper::quantized_model::AudioEncoder"]],["impl Sync for TextDecoder",0,1,["candle_transformers::models::whisper::quantized_model::TextDecoder"]],["impl Sync for Whisper",0,1,["candle_transformers::models::whisper::quantized_model::Whisper"]],["impl Sync for Config",0,1,["candle_transformers::models::whisper::Config"]],["impl Sync for Conv2d",0,1,["candle_transformers::models::with_tracing::Conv2d"]],["impl Sync for Embedding",0,1,["candle_transformers::models::with_tracing::Embedding"]],["impl Sync for LayerNorm",0,1,["candle_transformers::models::with_tracing::LayerNorm"]],["impl Sync for Linear",0,1,["candle_transformers::models::with_tracing::Linear"]],["impl Sync for QMatMul",0,1,["candle_transformers::models::with_tracing::QMatMul"]],["impl Sync for RmsNorm",0,1,["candle_transformers::models::with_tracing::RmsNorm"]],["impl Sync for Attention",0,1,["candle_transformers::models::wuerstchen::attention_processor::Attention"]],["impl Sync for AttnBlock",0,1,["candle_transformers::models::wuerstchen::common::AttnBlock"]],["impl Sync for GlobalResponseNorm",0,1,["candle_transformers::models::wuerstchen::common::GlobalResponseNorm"]],["impl Sync for LayerNormNoWeights",0,1,["candle_transformers::models::wuerstchen::common::LayerNormNoWeights"]],["impl Sync for ResBlock",0,1,["candle_transformers::models::wuerstchen::common::ResBlock"]],["impl Sync for TimestepBlock",0,1,["candle_transformers::models::wuerstchen::common::TimestepBlock"]],["impl Sync for WLayerNorm",0,1,["candle_transformers::models::wuerstchen::common::WLayerNorm"]],["impl Sync for DDPMWScheduler",0,1,["candle_transformers::models::wuerstchen::ddpm::DDPMWScheduler"]],["impl Sync for DDPMWSchedulerConfig",0,1,["candle_transformers::models::wuerstchen::ddpm::DDPMWSchedulerConfig"]],["impl Sync for ResBlockStageB",0,1,["candle_transformers::models::wuerstchen::diffnext::ResBlockStageB"]],["impl Sync for WDiffNeXt",0,1,["candle_transformers::models::wuerstchen::diffnext::WDiffNeXt"]],["impl Sync for MixingResidualBlock",0,1,["candle_transformers::models::wuerstchen::paella_vq::MixingResidualBlock"]],["impl Sync for PaellaVQ",0,1,["candle_transformers::models::wuerstchen::paella_vq::PaellaVQ"]],["impl Sync for WPrior",0,1,["candle_transformers::models::wuerstchen::prior::WPrior"]],["impl Sync for Config",0,1,["candle_transformers::models::xlm_roberta::Config"]],["impl Sync for XLMRobertaForMaskedLM",0,1,["candle_transformers::models::xlm_roberta::XLMRobertaForMaskedLM"]],["impl Sync for XLMRobertaForSequenceClassification",0,1,["candle_transformers::models::xlm_roberta::XLMRobertaForSequenceClassification"]],["impl Sync for XLMRobertaModel",0,1,["candle_transformers::models::xlm_roberta::XLMRobertaModel"]],["impl Sync for Config",0,1,["candle_transformers::models::yi::Config"]],["impl Sync for Model",0,1,["candle_transformers::models::yi::Model"]],["impl Sync for KeyPoint",0,1,["candle_transformers::object_detection::KeyPoint"]],["impl Sync for Embedding",0,1,["candle_transformers::quantized_nn::Embedding"]],["impl Sync for Linear",0,1,["candle_transformers::quantized_nn::Linear"]],["impl Sync for RmsNorm",0,1,["candle_transformers::quantized_nn::RmsNorm"]],["impl Sync for VarBuilder",0,1,["candle_transformers::quantized_var_builder::VarBuilder"]],["impl<'a> Sync for Vgg<'a>",0,1,["candle_transformers::models::vgg::Vgg"]],["impl<D> Sync for Bbox<D>
where\n D: Sync,
",0,1,["candle_transformers::object_detection::Bbox"]]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[195974]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/marker/trait.Unpin.js b/network-poc/target-native/doc/trait.impl/core/marker/trait.Unpin.js deleted file mode 100644 index bf873b4..0000000 --- a/network-poc/target-native/doc/trait.impl/core/marker/trait.Unpin.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl Unpin for Sampling",0,1,["candle_transformers::generation::Sampling"]],["impl Unpin for HiddenAct",0,1,["candle_transformers::models::bert::HiddenAct"]],["impl Unpin for PositionEmbeddingType",0,1,["candle_transformers::models::bert::PositionEmbeddingType"]],["impl Unpin for Activation",0,1,["candle_transformers::models::chinese_clip::Activation"]],["impl Unpin for EncoderConfig",0,1,["candle_transformers::models::chinese_clip::EncoderConfig"]],["impl Unpin for PositionEmbeddingType",0,1,["candle_transformers::models::chinese_clip::text_model::PositionEmbeddingType"]],["impl Unpin for EncoderConfig",0,1,["candle_transformers::models::clip::EncoderConfig"]],["impl Unpin for Activation",0,1,["candle_transformers::models::clip::text_model::Activation"]],["impl Unpin for HiddenAct",0,1,["candle_transformers::models::debertav2::HiddenAct"]],["impl Unpin for DeepSeekV2RopeScaling",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RopeScaling"]],["impl Unpin for ScaledRopeType",0,1,["candle_transformers::models::deepseek2::ScaledRopeType"]],["impl Unpin for NormType",0,1,["candle_transformers::models::encodec::NormType"]],["impl Unpin for PadMode",0,1,["candle_transformers::models::encodec::PadMode"]],["impl Unpin for GraniteEosToks",0,1,["candle_transformers::models::granite::GraniteEosToks"]],["impl Unpin for GraniteRopeType",0,1,["candle_transformers::models::granite::GraniteRopeType"]],["impl Unpin for PositionEmbeddingType",0,1,["candle_transformers::models::jina_bert::PositionEmbeddingType"]],["impl Unpin for Llama3RopeType",0,1,["candle_transformers::models::llama::Llama3RopeType"]],["impl Unpin for LlamaEosToks",0,1,["candle_transformers::models::llama::LlamaEosToks"]],["impl Unpin for AttnKernelType",0,1,["candle_transformers::models::metavoice::gpt::AttnKernelType"]],["impl Unpin for NonLinearityType",0,1,["candle_transformers::models::metavoice::gpt::NonLinearityType"]],["impl Unpin for NormType",0,1,["candle_transformers::models::metavoice::gpt::NormType"]],["impl Unpin for Norm",0,1,["candle_transformers::models::mimi::conv::Norm"]],["impl Unpin for PadMode",0,1,["candle_transformers::models::mimi::conv::PadMode"]],["impl Unpin for ResampleMethod",0,1,["candle_transformers::models::mimi::encodec::ResampleMethod"]],["impl Unpin for NormType",0,1,["candle_transformers::models::mimi::NormType"]],["impl Unpin for Mlp",0,1,["candle_transformers::models::mimi::transformer::Mlp"]],["impl Unpin for Norm",0,1,["candle_transformers::models::mimi::transformer::Norm"]],["impl Unpin for PositionalEmbedding",0,1,["candle_transformers::models::mimi::transformer::PositionalEmbedding"]],["impl Unpin for ClassifierPooling",0,1,["candle_transformers::models::modernbert::ClassifierPooling"]],["impl Unpin for PositionEmbeddingType",0,1,["candle_transformers::models::persimmon::PositionEmbeddingType"]],["impl Unpin for TemporalBlockType",0,1,["candle_transformers::models::recurrent_gemma::TemporalBlockType"]],["impl Unpin for Activation",0,1,["candle_transformers::models::stable_diffusion::clip::Activation"]],["impl Unpin for DDPMVarianceType",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMVarianceType"]],["impl Unpin for BetaSchedule",0,1,["candle_transformers::models::stable_diffusion::schedulers::BetaSchedule"]],["impl Unpin for PredictionType",0,1,["candle_transformers::models::stable_diffusion::schedulers::PredictionType"]],["impl Unpin for TimestepSpacing",0,1,["candle_transformers::models::stable_diffusion::schedulers::TimestepSpacing"]],["impl Unpin for AlgorithmType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::AlgorithmType"]],["impl Unpin for CorrectorConfiguration",0,1,["candle_transformers::models::stable_diffusion::uni_pc::CorrectorConfiguration"]],["impl Unpin for FinalSigmasType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::FinalSigmasType"]],["impl Unpin for SigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::SigmaSchedule"]],["impl Unpin for SolverType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::SolverType"]],["impl Unpin for TimestepSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::TimestepSchedule"]],["impl Unpin for EmbedDim",0,1,["candle_transformers::models::stella_en_v5::EmbedDim"]],["impl Unpin for ModelVariant",0,1,["candle_transformers::models::stella_en_v5::ModelVariant"]],["impl Unpin for Models",0,1,["candle_transformers::models::vgg::Models"]],["impl Unpin for LogitsProcessor",0,1,["candle_transformers::generation::LogitsProcessor"]],["impl Unpin for Config",0,1,["candle_transformers::models::based::Config"]],["impl Unpin for LinearAttentionConfig",0,1,["candle_transformers::models::based::LinearAttentionConfig"]],["impl Unpin for LinearAttentionFeatureMapConfig",0,1,["candle_transformers::models::based::LinearAttentionFeatureMapConfig"]],["impl Unpin for Model",0,1,["candle_transformers::models::based::Model"]],["impl Unpin for SlidingWindowAttentionConfig",0,1,["candle_transformers::models::based::SlidingWindowAttentionConfig"]],["impl Unpin for BeitVisionTransformer",0,1,["candle_transformers::models::beit::BeitVisionTransformer"]],["impl Unpin for BertEncoder",0,1,["candle_transformers::models::bert::BertEncoder"]],["impl Unpin for BertForMaskedLM",0,1,["candle_transformers::models::bert::BertForMaskedLM"]],["impl Unpin for BertLMPredictionHead",0,1,["candle_transformers::models::bert::BertLMPredictionHead"]],["impl Unpin for BertLayer",0,1,["candle_transformers::models::bert::BertLayer"]],["impl Unpin for BertModel",0,1,["candle_transformers::models::bert::BertModel"]],["impl Unpin for BertOnlyMLMHead",0,1,["candle_transformers::models::bert::BertOnlyMLMHead"]],["impl Unpin for Config",0,1,["candle_transformers::models::bert::Config"]],["impl Unpin for Config",0,1,["candle_transformers::models::bigcode::Config"]],["impl Unpin for GPTBigCode",0,1,["candle_transformers::models::bigcode::GPTBigCode"]],["impl Unpin for BlipForConditionalGeneration",0,1,["candle_transformers::models::blip::BlipForConditionalGeneration"]],["impl Unpin for Config",0,1,["candle_transformers::models::blip::Config"]],["impl Unpin for VisionConfig",0,1,["candle_transformers::models::blip::VisionConfig"]],["impl Unpin for VisionModel",0,1,["candle_transformers::models::blip::VisionModel"]],["impl Unpin for Config",0,1,["candle_transformers::models::blip_text::Config"]],["impl Unpin for TextLMHeadModel",0,1,["candle_transformers::models::blip_text::TextLMHeadModel"]],["impl Unpin for TextPooler",0,1,["candle_transformers::models::blip_text::TextPooler"]],["impl Unpin for Config",0,1,["candle_transformers::models::chatglm::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::chatglm::Model"]],["impl Unpin for ChineseClipConfig",0,1,["candle_transformers::models::chinese_clip::ChineseClipConfig"]],["impl Unpin for ChineseClipModel",0,1,["candle_transformers::models::chinese_clip::ChineseClipModel"]],["impl Unpin for ChineseClipTextConfig",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextConfig"]],["impl Unpin for ChineseClipTextEmbeddings",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextEmbeddings"]],["impl Unpin for ChineseClipTextTransformer",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextTransformer"]],["impl Unpin for ChineseClipVisionConfig",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionConfig"]],["impl Unpin for ChineseClipVisionEmbeddings",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionEmbeddings"]],["impl Unpin for ChineseClipVisionEncoder",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionEncoder"]],["impl Unpin for ChineseClipVisionTransformer",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionTransformer"]],["impl Unpin for ClipConfig",0,1,["candle_transformers::models::clip::ClipConfig"]],["impl Unpin for ClipModel",0,1,["candle_transformers::models::clip::ClipModel"]],["impl Unpin for ClipEncoder",0,1,["candle_transformers::models::clip::text_model::ClipEncoder"]],["impl Unpin for ClipTextConfig",0,1,["candle_transformers::models::clip::text_model::ClipTextConfig"]],["impl Unpin for ClipTextTransformer",0,1,["candle_transformers::models::clip::text_model::ClipTextTransformer"]],["impl Unpin for ClipVisionConfig",0,1,["candle_transformers::models::clip::vision_model::ClipVisionConfig"]],["impl Unpin for ClipVisionTransformer",0,1,["candle_transformers::models::clip::vision_model::ClipVisionTransformer"]],["impl Unpin for Config",0,1,["candle_transformers::models::codegeex4_9b::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::codegeex4_9b::Model"]],["impl Unpin for Model",0,1,["candle_transformers::models::colpali::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::convnext::Config"]],["impl Unpin for Config",0,1,["candle_transformers::models::dac::Config"]],["impl Unpin for Decoder",0,1,["candle_transformers::models::dac::Decoder"]],["impl Unpin for DecoderBlock",0,1,["candle_transformers::models::dac::DecoderBlock"]],["impl Unpin for Encoder",0,1,["candle_transformers::models::dac::Encoder"]],["impl Unpin for EncoderBlock",0,1,["candle_transformers::models::dac::EncoderBlock"]],["impl Unpin for Model",0,1,["candle_transformers::models::dac::Model"]],["impl Unpin for ResidualUnit",0,1,["candle_transformers::models::dac::ResidualUnit"]],["impl Unpin for ResidualVectorQuantizer",0,1,["candle_transformers::models::dac::ResidualVectorQuantizer"]],["impl Unpin for Snake1d",0,1,["candle_transformers::models::dac::Snake1d"]],["impl Unpin for VectorQuantizer",0,1,["candle_transformers::models::dac::VectorQuantizer"]],["impl Unpin for Config",0,1,["candle_transformers::models::debertav2::Config"]],["impl Unpin for ConvLayer",0,1,["candle_transformers::models::debertav2::ConvLayer"]],["impl Unpin for DebertaV2Attention",0,1,["candle_transformers::models::debertav2::DebertaV2Attention"]],["impl Unpin for DebertaV2ContextPooler",0,1,["candle_transformers::models::debertav2::DebertaV2ContextPooler"]],["impl Unpin for DebertaV2DisentangledSelfAttention",0,1,["candle_transformers::models::debertav2::DebertaV2DisentangledSelfAttention"]],["impl Unpin for DebertaV2Embeddings",0,1,["candle_transformers::models::debertav2::DebertaV2Embeddings"]],["impl Unpin for DebertaV2Encoder",0,1,["candle_transformers::models::debertav2::DebertaV2Encoder"]],["impl Unpin for DebertaV2Intermediate",0,1,["candle_transformers::models::debertav2::DebertaV2Intermediate"]],["impl Unpin for DebertaV2Layer",0,1,["candle_transformers::models::debertav2::DebertaV2Layer"]],["impl Unpin for DebertaV2Model",0,1,["candle_transformers::models::debertav2::DebertaV2Model"]],["impl Unpin for DebertaV2NERModel",0,1,["candle_transformers::models::debertav2::DebertaV2NERModel"]],["impl Unpin for DebertaV2Output",0,1,["candle_transformers::models::debertav2::DebertaV2Output"]],["impl Unpin for DebertaV2SelfOutput",0,1,["candle_transformers::models::debertav2::DebertaV2SelfOutput"]],["impl Unpin for DebertaV2SeqClassificationModel",0,1,["candle_transformers::models::debertav2::DebertaV2SeqClassificationModel"]],["impl Unpin for HiddenActLayer",0,1,["candle_transformers::models::debertav2::HiddenActLayer"]],["impl Unpin for NERItem",0,1,["candle_transformers::models::debertav2::NERItem"]],["impl Unpin for StableDropout",0,1,["candle_transformers::models::debertav2::StableDropout"]],["impl Unpin for TextClassificationItem",0,1,["candle_transformers::models::debertav2::TextClassificationItem"]],["impl Unpin for DeepSeekV2",0,1,["candle_transformers::models::deepseek2::DeepSeekV2"]],["impl Unpin for DeepSeekV2Config",0,1,["candle_transformers::models::deepseek2::DeepSeekV2Config"]],["impl Unpin for DeepSeekV2RopeConfig",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RopeConfig"]],["impl Unpin for DeepSeekV2RotaryEmbedding",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RotaryEmbedding"]],["impl Unpin for TopKOutput",0,1,["candle_transformers::models::deepseek2::TopKOutput"]],["impl Unpin for DPTHead",0,1,["candle_transformers::models::depth_anything_v2::DPTHead"]],["impl Unpin for DepthAnythingV2",0,1,["candle_transformers::models::depth_anything_v2::DepthAnythingV2"]],["impl Unpin for DepthAnythingV2Config",0,1,["candle_transformers::models::depth_anything_v2::DepthAnythingV2Config"]],["impl Unpin for FeatureFusionBlock",0,1,["candle_transformers::models::depth_anything_v2::FeatureFusionBlock"]],["impl Unpin for ResidualConvUnit",0,1,["candle_transformers::models::depth_anything_v2::ResidualConvUnit"]],["impl Unpin for Scratch",0,1,["candle_transformers::models::depth_anything_v2::Scratch"]],["impl Unpin for DinoVisionTransformer",0,1,["candle_transformers::models::dinov2::DinoVisionTransformer"]],["impl Unpin for DinoVisionTransformer",0,1,["candle_transformers::models::dinov2reg4::DinoVisionTransformer"]],["impl Unpin for Config",0,1,["candle_transformers::models::distilbert::Config"]],["impl Unpin for DistilBertModel",0,1,["candle_transformers::models::distilbert::DistilBertModel"]],["impl Unpin for EfficientNet",0,1,["candle_transformers::models::efficientnet::EfficientNet"]],["impl Unpin for MBConvConfig",0,1,["candle_transformers::models::efficientnet::MBConvConfig"]],["impl Unpin for Config",0,1,["candle_transformers::models::efficientvit::Config"]],["impl Unpin for Config",0,1,["candle_transformers::models::encodec::Config"]],["impl Unpin for Decoder",0,1,["candle_transformers::models::encodec::Decoder"]],["impl Unpin for EncodecConv1d",0,1,["candle_transformers::models::encodec::EncodecConv1d"]],["impl Unpin for EncodecConvTranspose1d",0,1,["candle_transformers::models::encodec::EncodecConvTranspose1d"]],["impl Unpin for EncodecLSTM",0,1,["candle_transformers::models::encodec::EncodecLSTM"]],["impl Unpin for EncodecResnetBlock",0,1,["candle_transformers::models::encodec::EncodecResnetBlock"]],["impl Unpin for Encoder",0,1,["candle_transformers::models::encodec::Encoder"]],["impl Unpin for EuclideanCodebook",0,1,["candle_transformers::models::encodec::EuclideanCodebook"]],["impl Unpin for Model",0,1,["candle_transformers::models::encodec::Model"]],["impl Unpin for ResidualVectorQuantizer",0,1,["candle_transformers::models::encodec::ResidualVectorQuantizer"]],["impl Unpin for VectorQuantization",0,1,["candle_transformers::models::encodec::VectorQuantization"]],["impl Unpin for EVA2VisionTransformer",0,1,["candle_transformers::models::eva2::EVA2VisionTransformer"]],["impl Unpin for Config",0,1,["candle_transformers::models::falcon::Config"]],["impl Unpin for Falcon",0,1,["candle_transformers::models::falcon::Falcon"]],["impl Unpin for Config",0,1,["candle_transformers::models::fastvit::Config"]],["impl Unpin for AutoEncoder",0,1,["candle_transformers::models::flux::autoencoder::AutoEncoder"]],["impl Unpin for Config",0,1,["candle_transformers::models::flux::autoencoder::Config"]],["impl Unpin for Decoder",0,1,["candle_transformers::models::flux::autoencoder::Decoder"]],["impl Unpin for DiagonalGaussian",0,1,["candle_transformers::models::flux::autoencoder::DiagonalGaussian"]],["impl Unpin for Encoder",0,1,["candle_transformers::models::flux::autoencoder::Encoder"]],["impl Unpin for Config",0,1,["candle_transformers::models::flux::model::Config"]],["impl Unpin for DoubleStreamBlock",0,1,["candle_transformers::models::flux::model::DoubleStreamBlock"]],["impl Unpin for EmbedNd",0,1,["candle_transformers::models::flux::model::EmbedNd"]],["impl Unpin for Flux",0,1,["candle_transformers::models::flux::model::Flux"]],["impl Unpin for LastLayer",0,1,["candle_transformers::models::flux::model::LastLayer"]],["impl Unpin for MlpEmbedder",0,1,["candle_transformers::models::flux::model::MlpEmbedder"]],["impl Unpin for QkNorm",0,1,["candle_transformers::models::flux::model::QkNorm"]],["impl Unpin for SelfAttention",0,1,["candle_transformers::models::flux::model::SelfAttention"]],["impl Unpin for SingleStreamBlock",0,1,["candle_transformers::models::flux::model::SingleStreamBlock"]],["impl Unpin for DoubleStreamBlock",0,1,["candle_transformers::models::flux::quantized_model::DoubleStreamBlock"]],["impl Unpin for Flux",0,1,["candle_transformers::models::flux::quantized_model::Flux"]],["impl Unpin for LastLayer",0,1,["candle_transformers::models::flux::quantized_model::LastLayer"]],["impl Unpin for MlpEmbedder",0,1,["candle_transformers::models::flux::quantized_model::MlpEmbedder"]],["impl Unpin for QkNorm",0,1,["candle_transformers::models::flux::quantized_model::QkNorm"]],["impl Unpin for SelfAttention",0,1,["candle_transformers::models::flux::quantized_model::SelfAttention"]],["impl Unpin for SingleStreamBlock",0,1,["candle_transformers::models::flux::quantized_model::SingleStreamBlock"]],["impl Unpin for State",0,1,["candle_transformers::models::flux::sampling::State"]],["impl Unpin for Config",0,1,["candle_transformers::models::gemma2::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::gemma2::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::gemma3::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::gemma3::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::gemma::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::gemma::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::glm4::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::glm4::Model"]],["impl Unpin for Cache",0,1,["candle_transformers::models::granite::Cache"]],["impl Unpin for Config",0,1,["candle_transformers::models::granite::Config"]],["impl Unpin for Granite",0,1,["candle_transformers::models::granite::Granite"]],["impl Unpin for GraniteConfig",0,1,["candle_transformers::models::granite::GraniteConfig"]],["impl Unpin for GraniteRopeConfig",0,1,["candle_transformers::models::granite::GraniteRopeConfig"]],["impl Unpin for Config",0,1,["candle_transformers::models::helium::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::helium::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::hiera::Config"]],["impl Unpin for BertModel",0,1,["candle_transformers::models::jina_bert::BertModel"]],["impl Unpin for Config",0,1,["candle_transformers::models::jina_bert::Config"]],["impl Unpin for Cache",0,1,["candle_transformers::models::llama2_c::Cache"]],["impl Unpin for Config",0,1,["candle_transformers::models::llama2_c::Config"]],["impl Unpin for Llama",0,1,["candle_transformers::models::llama2_c::Llama"]],["impl Unpin for TransformerWeights",0,1,["candle_transformers::models::llama2_c_weights::TransformerWeights"]],["impl Unpin for Cache",0,1,["candle_transformers::models::llama::Cache"]],["impl Unpin for Config",0,1,["candle_transformers::models::llama::Config"]],["impl Unpin for Llama3RopeConfig",0,1,["candle_transformers::models::llama::Llama3RopeConfig"]],["impl Unpin for Llama",0,1,["candle_transformers::models::llama::Llama"]],["impl Unpin for LlamaConfig",0,1,["candle_transformers::models::llama::LlamaConfig"]],["impl Unpin for HFGenerationConfig",0,1,["candle_transformers::models::llava::config::HFGenerationConfig"]],["impl Unpin for HFLLaVAConfig",0,1,["candle_transformers::models::llava::config::HFLLaVAConfig"]],["impl Unpin for HFLLaVATextConfig",0,1,["candle_transformers::models::llava::config::HFLLaVATextConfig"]],["impl Unpin for HFLLaVAVisionConfig",0,1,["candle_transformers::models::llava::config::HFLLaVAVisionConfig"]],["impl Unpin for HFPreProcessorConfig",0,1,["candle_transformers::models::llava::config::HFPreProcessorConfig"]],["impl Unpin for LLaVAConfig",0,1,["candle_transformers::models::llava::config::LLaVAConfig"]],["impl Unpin for ClipVisionTower",0,1,["candle_transformers::models::llava::ClipVisionTower"]],["impl Unpin for IdentityMap",0,1,["candle_transformers::models::llava::IdentityMap"]],["impl Unpin for LLaVA",0,1,["candle_transformers::models::llava::LLaVA"]],["impl Unpin for MMProjector",0,1,["candle_transformers::models::llava::MMProjector"]],["impl Unpin for Config",0,1,["candle_transformers::models::mamba::Config"]],["impl Unpin for MambaBlock",0,1,["candle_transformers::models::mamba::MambaBlock"]],["impl Unpin for Model",0,1,["candle_transformers::models::mamba::Model"]],["impl Unpin for ResidualBlock",0,1,["candle_transformers::models::mamba::ResidualBlock"]],["impl Unpin for State",0,1,["candle_transformers::models::mamba::State"]],["impl Unpin for Config",0,1,["candle_transformers::models::marian::Config"]],["impl Unpin for Decoder",0,1,["candle_transformers::models::marian::Decoder"]],["impl Unpin for Encoder",0,1,["candle_transformers::models::marian::Encoder"]],["impl Unpin for MTModel",0,1,["candle_transformers::models::marian::MTModel"]],["impl Unpin for FlattenedInterleavedEncodec2Codebook",0,1,["candle_transformers::models::metavoice::adapters::FlattenedInterleavedEncodec2Codebook"]],["impl Unpin for TiltedEncodec",0,1,["candle_transformers::models::metavoice::adapters::TiltedEncodec"]],["impl Unpin for Config",0,1,["candle_transformers::models::metavoice::gpt::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::metavoice::gpt::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::metavoice::speaker_encoder::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::metavoice::speaker_encoder::Model"]],["impl Unpin for BPE",0,1,["candle_transformers::models::metavoice::tokenizers::BPE"]],["impl Unpin for Config",0,1,["candle_transformers::models::metavoice::transformer::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::metavoice::transformer::Model"]],["impl Unpin for ConvDownsample1d",0,1,["candle_transformers::models::mimi::conv::ConvDownsample1d"]],["impl Unpin for ConvTrUpsample1d",0,1,["candle_transformers::models::mimi::conv::ConvTrUpsample1d"]],["impl Unpin for NormConv1d",0,1,["candle_transformers::models::mimi::conv::NormConv1d"]],["impl Unpin for NormConvTranspose1d",0,1,["candle_transformers::models::mimi::conv::NormConvTranspose1d"]],["impl Unpin for StreamableConv1d",0,1,["candle_transformers::models::mimi::conv::StreamableConv1d"]],["impl Unpin for StreamableConvTranspose1d",0,1,["candle_transformers::models::mimi::conv::StreamableConvTranspose1d"]],["impl Unpin for Config",0,1,["candle_transformers::models::mimi::encodec::Config"]],["impl Unpin for Encodec",0,1,["candle_transformers::models::mimi::encodec::Encodec"]],["impl Unpin for EuclideanCodebook",0,1,["candle_transformers::models::mimi::quantization::EuclideanCodebook"]],["impl Unpin for ResidualVectorQuantization",0,1,["candle_transformers::models::mimi::quantization::ResidualVectorQuantization"]],["impl Unpin for ResidualVectorQuantizer",0,1,["candle_transformers::models::mimi::quantization::ResidualVectorQuantizer"]],["impl Unpin for SplitResidualVectorQuantizer",0,1,["candle_transformers::models::mimi::quantization::SplitResidualVectorQuantizer"]],["impl Unpin for VectorQuantization",0,1,["candle_transformers::models::mimi::quantization::VectorQuantization"]],["impl Unpin for Config",0,1,["candle_transformers::models::mimi::seanet::Config"]],["impl Unpin for SeaNetDecoder",0,1,["candle_transformers::models::mimi::seanet::SeaNetDecoder"]],["impl Unpin for SeaNetEncoder",0,1,["candle_transformers::models::mimi::seanet::SeaNetEncoder"]],["impl Unpin for SeaNetResnetBlock",0,1,["candle_transformers::models::mimi::seanet::SeaNetResnetBlock"]],["impl Unpin for Config",0,1,["candle_transformers::models::mimi::transformer::Config"]],["impl Unpin for LayerScale",0,1,["candle_transformers::models::mimi::transformer::LayerScale"]],["impl Unpin for ProjectedTransformer",0,1,["candle_transformers::models::mimi::transformer::ProjectedTransformer"]],["impl Unpin for RmsNorm",0,1,["candle_transformers::models::mimi::transformer::RmsNorm"]],["impl Unpin for RotaryEmbedding",0,1,["candle_transformers::models::mimi::transformer::RotaryEmbedding"]],["impl Unpin for StreamingMultiheadAttention",0,1,["candle_transformers::models::mimi::transformer::StreamingMultiheadAttention"]],["impl Unpin for StreamingMultiheadCrossAttention",0,1,["candle_transformers::models::mimi::transformer::StreamingMultiheadCrossAttention"]],["impl Unpin for StreamingTransformer",0,1,["candle_transformers::models::mimi::transformer::StreamingTransformer"]],["impl Unpin for StreamingTransformerLayer",0,1,["candle_transformers::models::mimi::transformer::StreamingTransformerLayer"]],["impl Unpin for Config",0,1,["candle_transformers::models::mistral::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::mistral::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::mixformer::Config"]],["impl Unpin for MixFormerSequentialForCausalLM",0,1,["candle_transformers::models::mixformer::MixFormerSequentialForCausalLM"]],["impl Unpin for Config",0,1,["candle_transformers::models::mixtral::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::mixtral::Model"]],["impl Unpin for ContextQkvOnlyJointBlock",0,1,["candle_transformers::models::mmdit::blocks::ContextQkvOnlyJointBlock"]],["impl Unpin for DiTBlock",0,1,["candle_transformers::models::mmdit::blocks::DiTBlock"]],["impl Unpin for FinalLayer",0,1,["candle_transformers::models::mmdit::blocks::FinalLayer"]],["impl Unpin for LayerNormNoAffine",0,1,["candle_transformers::models::mmdit::blocks::LayerNormNoAffine"]],["impl Unpin for MMDiTJointBlock",0,1,["candle_transformers::models::mmdit::blocks::MMDiTJointBlock"]],["impl Unpin for MMDiTXJointBlock",0,1,["candle_transformers::models::mmdit::blocks::MMDiTXJointBlock"]],["impl Unpin for ModulateIntermediates",0,1,["candle_transformers::models::mmdit::blocks::ModulateIntermediates"]],["impl Unpin for QkvOnlyDiTBlock",0,1,["candle_transformers::models::mmdit::blocks::QkvOnlyDiTBlock"]],["impl Unpin for SelfAttnDiTBlock",0,1,["candle_transformers::models::mmdit::blocks::SelfAttnDiTBlock"]],["impl Unpin for SelfAttnModulateIntermediates",0,1,["candle_transformers::models::mmdit::blocks::SelfAttnModulateIntermediates"]],["impl Unpin for PatchEmbedder",0,1,["candle_transformers::models::mmdit::embedding::PatchEmbedder"]],["impl Unpin for PositionEmbedder",0,1,["candle_transformers::models::mmdit::embedding::PositionEmbedder"]],["impl Unpin for TimestepEmbedder",0,1,["candle_transformers::models::mmdit::embedding::TimestepEmbedder"]],["impl Unpin for Unpatchifier",0,1,["candle_transformers::models::mmdit::embedding::Unpatchifier"]],["impl Unpin for VectorEmbedder",0,1,["candle_transformers::models::mmdit::embedding::VectorEmbedder"]],["impl Unpin for Config",0,1,["candle_transformers::models::mmdit::model::Config"]],["impl Unpin for MMDiT",0,1,["candle_transformers::models::mmdit::model::MMDiT"]],["impl Unpin for MMDiTCore",0,1,["candle_transformers::models::mmdit::model::MMDiTCore"]],["impl Unpin for AttnProjections",0,1,["candle_transformers::models::mmdit::projections::AttnProjections"]],["impl Unpin for Mlp",0,1,["candle_transformers::models::mmdit::projections::Mlp"]],["impl Unpin for Qkv",0,1,["candle_transformers::models::mmdit::projections::Qkv"]],["impl Unpin for QkvOnlyAttnProjections",0,1,["candle_transformers::models::mmdit::projections::QkvOnlyAttnProjections"]],["impl Unpin for MobileClipConfig",0,1,["candle_transformers::models::mobileclip::MobileClipConfig"]],["impl Unpin for MobileClipModel",0,1,["candle_transformers::models::mobileclip::MobileClipModel"]],["impl Unpin for Config",0,1,["candle_transformers::models::mobilenetv4::Config"]],["impl Unpin for Config",0,1,["candle_transformers::models::mobileone::Config"]],["impl Unpin for ClassifierConfig",0,1,["candle_transformers::models::modernbert::ClassifierConfig"]],["impl Unpin for Config",0,1,["candle_transformers::models::modernbert::Config"]],["impl Unpin for ModernBert",0,1,["candle_transformers::models::modernbert::ModernBert"]],["impl Unpin for ModernBertClassifier",0,1,["candle_transformers::models::modernbert::ModernBertClassifier"]],["impl Unpin for ModernBertDecoder",0,1,["candle_transformers::models::modernbert::ModernBertDecoder"]],["impl Unpin for ModernBertForMaskedLM",0,1,["candle_transformers::models::modernbert::ModernBertForMaskedLM"]],["impl Unpin for ModernBertForSequenceClassification",0,1,["candle_transformers::models::modernbert::ModernBertForSequenceClassification"]],["impl Unpin for ModernBertHead",0,1,["candle_transformers::models::modernbert::ModernBertHead"]],["impl Unpin for ModernBertLayer",0,1,["candle_transformers::models::modernbert::ModernBertLayer"]],["impl Unpin for ModernBertMLP",0,1,["candle_transformers::models::modernbert::ModernBertMLP"]],["impl Unpin for Config",0,1,["candle_transformers::models::moondream::Config"]],["impl Unpin for Encoder",0,1,["candle_transformers::models::moondream::Encoder"]],["impl Unpin for Model",0,1,["candle_transformers::models::moondream::Model"]],["impl Unpin for VisionConfig",0,1,["candle_transformers::models::moondream::VisionConfig"]],["impl Unpin for VisionEncoder",0,1,["candle_transformers::models::moondream::VisionEncoder"]],["impl Unpin for Config",0,1,["candle_transformers::models::mpt::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::mpt::Model"]],["impl Unpin for Model",0,1,["candle_transformers::models::nvembed_v2::embedding::Model"]],["impl Unpin for Model",0,1,["candle_transformers::models::nvembed_v2::model::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::olmo::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::olmo::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::openclip::text_model::Config"]],["impl Unpin for Encoder",0,1,["candle_transformers::models::openclip::text_model::Encoder"]],["impl Unpin for OpenClipTextTransformer",0,1,["candle_transformers::models::openclip::text_model::OpenClipTextTransformer"]],["impl Unpin for Config",0,1,["candle_transformers::models::paligemma::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::paligemma::Model"]],["impl Unpin for MultiModalProjector",0,1,["candle_transformers::models::paligemma::MultiModalProjector"]],["impl Unpin for Attention",0,1,["candle_transformers::models::parler_tts::Attention"]],["impl Unpin for Config",0,1,["candle_transformers::models::parler_tts::Config"]],["impl Unpin for Decoder",0,1,["candle_transformers::models::parler_tts::Decoder"]],["impl Unpin for DecoderConfig",0,1,["candle_transformers::models::parler_tts::DecoderConfig"]],["impl Unpin for DecoderLayer",0,1,["candle_transformers::models::parler_tts::DecoderLayer"]],["impl Unpin for Model",0,1,["candle_transformers::models::parler_tts::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::persimmon::Config"]],["impl Unpin for Config",0,1,["candle_transformers::models::phi3::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::phi3::Model"]],["impl Unpin for RotaryEmbedding",0,1,["candle_transformers::models::phi3::RotaryEmbedding"]],["impl Unpin for Config",0,1,["candle_transformers::models::phi::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::phi::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::pixtral::llava::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::pixtral::llava::Model"]],["impl Unpin for MultiModalProjector",0,1,["candle_transformers::models::pixtral::llava::MultiModalProjector"]],["impl Unpin for Config",0,1,["candle_transformers::models::pixtral::vision_model::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::pixtral::vision_model::Model"]],["impl Unpin for BlipForConditionalGeneration",0,1,["candle_transformers::models::quantized_blip::BlipForConditionalGeneration"]],["impl Unpin for VisionModel",0,1,["candle_transformers::models::quantized_blip::VisionModel"]],["impl Unpin for TextLMHeadModel",0,1,["candle_transformers::models::quantized_blip_text::TextLMHeadModel"]],["impl Unpin for TextPooler",0,1,["candle_transformers::models::quantized_blip_text::TextPooler"]],["impl Unpin for QLlama",0,1,["candle_transformers::models::quantized_llama2_c::QLlama"]],["impl Unpin for ModelWeights",0,1,["candle_transformers::models::quantized_llama::ModelWeights"]],["impl Unpin for Model",0,1,["candle_transformers::models::quantized_metavoice::transformer::Model"]],["impl Unpin for Model",0,1,["candle_transformers::models::quantized_mistral::Model"]],["impl Unpin for MixFormerSequentialForCausalLM",0,1,["candle_transformers::models::quantized_mixformer::MixFormerSequentialForCausalLM"]],["impl Unpin for Encoder",0,1,["candle_transformers::models::quantized_moondream::Encoder"]],["impl Unpin for Model",0,1,["candle_transformers::models::quantized_moondream::Model"]],["impl Unpin for VisionEncoder",0,1,["candle_transformers::models::quantized_moondream::VisionEncoder"]],["impl Unpin for Model",0,1,["candle_transformers::models::quantized_mpt::Model"]],["impl Unpin for ModelWeights",0,1,["candle_transformers::models::quantized_phi3::ModelWeights"]],["impl Unpin for ModelWeights",0,1,["candle_transformers::models::quantized_phi::ModelWeights"]],["impl Unpin for ModelWeights",0,1,["candle_transformers::models::quantized_qwen2::ModelWeights"]],["impl Unpin for Model",0,1,["candle_transformers::models::quantized_recurrent_gemma::Model"]],["impl Unpin for Model",0,1,["candle_transformers::models::quantized_rwkv_v5::Model"]],["impl Unpin for Model",0,1,["candle_transformers::models::quantized_rwkv_v6::Model"]],["impl Unpin for Model",0,1,["candle_transformers::models::quantized_stable_lm::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::quantized_t5::Config"]],["impl Unpin for T5EncoderModel",0,1,["candle_transformers::models::quantized_t5::T5EncoderModel"]],["impl Unpin for T5ForConditionalGeneration",0,1,["candle_transformers::models::quantized_t5::T5ForConditionalGeneration"]],["impl Unpin for Config",0,1,["candle_transformers::models::qwen2::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::qwen2::Model"]],["impl Unpin for ModelForCausalLM",0,1,["candle_transformers::models::qwen2::ModelForCausalLM"]],["impl Unpin for Config",0,1,["candle_transformers::models::qwen2_moe::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::qwen2_moe::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::recurrent_gemma::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::recurrent_gemma::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::repvgg::Config"]],["impl Unpin for Config",0,1,["candle_transformers::models::rwkv_v5::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::rwkv_v5::Model"]],["impl Unpin for State",0,1,["candle_transformers::models::rwkv_v5::State"]],["impl Unpin for StatePerLayer",0,1,["candle_transformers::models::rwkv_v5::StatePerLayer"]],["impl Unpin for Tokenizer",0,1,["candle_transformers::models::rwkv_v5::Tokenizer"]],["impl Unpin for Model",0,1,["candle_transformers::models::rwkv_v6::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::segformer::Config"]],["impl Unpin for ImageClassificationModel",0,1,["candle_transformers::models::segformer::ImageClassificationModel"]],["impl Unpin for SemanticSegmentationModel",0,1,["candle_transformers::models::segformer::SemanticSegmentationModel"]],["impl Unpin for ImageEncoderViT",0,1,["candle_transformers::models::segment_anything::image_encoder::ImageEncoderViT"]],["impl Unpin for MaskDecoder",0,1,["candle_transformers::models::segment_anything::mask_decoder::MaskDecoder"]],["impl Unpin for PromptEncoder",0,1,["candle_transformers::models::segment_anything::prompt_encoder::PromptEncoder"]],["impl Unpin for Sam",0,1,["candle_transformers::models::segment_anything::sam::Sam"]],["impl Unpin for LayerNorm2d",0,1,["candle_transformers::models::segment_anything::LayerNorm2d"]],["impl Unpin for MlpBlock",0,1,["candle_transformers::models::segment_anything::MlpBlock"]],["impl Unpin for TinyViT",0,1,["candle_transformers::models::segment_anything::tiny_vit::TinyViT"]],["impl Unpin for TwoWayTransformer",0,1,["candle_transformers::models::segment_anything::transformer::TwoWayTransformer"]],["impl Unpin for Config",0,1,["candle_transformers::models::siglip::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::siglip::Model"]],["impl Unpin for TextConfig",0,1,["candle_transformers::models::siglip::TextConfig"]],["impl Unpin for TextModel",0,1,["candle_transformers::models::siglip::TextModel"]],["impl Unpin for TextTransformer",0,1,["candle_transformers::models::siglip::TextTransformer"]],["impl Unpin for VisionConfig",0,1,["candle_transformers::models::siglip::VisionConfig"]],["impl Unpin for VisionModel",0,1,["candle_transformers::models::siglip::VisionModel"]],["impl Unpin for AttentionBlock",0,1,["candle_transformers::models::stable_diffusion::attention::AttentionBlock"]],["impl Unpin for AttentionBlockConfig",0,1,["candle_transformers::models::stable_diffusion::attention::AttentionBlockConfig"]],["impl Unpin for CrossAttention",0,1,["candle_transformers::models::stable_diffusion::attention::CrossAttention"]],["impl Unpin for SpatialTransformer",0,1,["candle_transformers::models::stable_diffusion::attention::SpatialTransformer"]],["impl Unpin for SpatialTransformerConfig",0,1,["candle_transformers::models::stable_diffusion::attention::SpatialTransformerConfig"]],["impl Unpin for ClipTextTransformer",0,1,["candle_transformers::models::stable_diffusion::clip::ClipTextTransformer"]],["impl Unpin for Config",0,1,["candle_transformers::models::stable_diffusion::clip::Config"]],["impl Unpin for DDIMScheduler",0,1,["candle_transformers::models::stable_diffusion::ddim::DDIMScheduler"]],["impl Unpin for DDIMSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::ddim::DDIMSchedulerConfig"]],["impl Unpin for DDPMScheduler",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMScheduler"]],["impl Unpin for DDPMSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMSchedulerConfig"]],["impl Unpin for TimestepEmbedding",0,1,["candle_transformers::models::stable_diffusion::embeddings::TimestepEmbedding"]],["impl Unpin for Timesteps",0,1,["candle_transformers::models::stable_diffusion::embeddings::Timesteps"]],["impl Unpin for EulerAncestralDiscreteScheduler",0,1,["candle_transformers::models::stable_diffusion::euler_ancestral_discrete::EulerAncestralDiscreteScheduler"]],["impl Unpin for EulerAncestralDiscreteSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::euler_ancestral_discrete::EulerAncestralDiscreteSchedulerConfig"]],["impl Unpin for ResnetBlock2D",0,1,["candle_transformers::models::stable_diffusion::resnet::ResnetBlock2D"]],["impl Unpin for ResnetBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::resnet::ResnetBlock2DConfig"]],["impl Unpin for StableDiffusionConfig",0,1,["candle_transformers::models::stable_diffusion::StableDiffusionConfig"]],["impl Unpin for BlockConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d::BlockConfig"]],["impl Unpin for UNet2DConditionModel",0,1,["candle_transformers::models::stable_diffusion::unet_2d::UNet2DConditionModel"]],["impl Unpin for UNet2DConditionModelConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d::UNet2DConditionModelConfig"]],["impl Unpin for CrossAttnDownBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnDownBlock2D"]],["impl Unpin for CrossAttnDownBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnDownBlock2DConfig"]],["impl Unpin for CrossAttnUpBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnUpBlock2D"]],["impl Unpin for CrossAttnUpBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnUpBlock2DConfig"]],["impl Unpin for DownBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownBlock2D"]],["impl Unpin for DownBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownBlock2DConfig"]],["impl Unpin for DownEncoderBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownEncoderBlock2D"]],["impl Unpin for DownEncoderBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownEncoderBlock2DConfig"]],["impl Unpin for UNetMidBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2D"]],["impl Unpin for UNetMidBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DConfig"]],["impl Unpin for UNetMidBlock2DCrossAttn",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DCrossAttn"]],["impl Unpin for UNetMidBlock2DCrossAttnConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DCrossAttnConfig"]],["impl Unpin for UpBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpBlock2D"]],["impl Unpin for UpBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpBlock2DConfig"]],["impl Unpin for UpDecoderBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpDecoderBlock2D"]],["impl Unpin for UpDecoderBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpDecoderBlock2DConfig"]],["impl Unpin for EdmDpmMultistepScheduler",0,1,["candle_transformers::models::stable_diffusion::uni_pc::EdmDpmMultistepScheduler"]],["impl Unpin for ExponentialSigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::ExponentialSigmaSchedule"]],["impl Unpin for KarrasSigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::KarrasSigmaSchedule"]],["impl Unpin for UniPCSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::uni_pc::UniPCSchedulerConfig"]],["impl Unpin for AutoEncoderKL",0,1,["candle_transformers::models::stable_diffusion::vae::AutoEncoderKL"]],["impl Unpin for AutoEncoderKLConfig",0,1,["candle_transformers::models::stable_diffusion::vae::AutoEncoderKLConfig"]],["impl Unpin for DiagonalGaussianDistribution",0,1,["candle_transformers::models::stable_diffusion::vae::DiagonalGaussianDistribution"]],["impl Unpin for Config",0,1,["candle_transformers::models::stable_lm::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::stable_lm::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::starcoder2::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::starcoder2::Model"]],["impl Unpin for Config",0,1,["candle_transformers::models::stella_en_v5::Config"]],["impl Unpin for EmbedHead",0,1,["candle_transformers::models::stella_en_v5::EmbedHead"]],["impl Unpin for EmbeddingModel",0,1,["candle_transformers::models::stella_en_v5::EmbeddingModel"]],["impl Unpin for Embeddings",0,1,["candle_transformers::models::stella_en_v5::Embeddings"]],["impl Unpin for Model",0,1,["candle_transformers::models::stella_en_v5::Model"]],["impl Unpin for ActivationWithOptionalGating",0,1,["candle_transformers::models::t5::ActivationWithOptionalGating"]],["impl Unpin for Config",0,1,["candle_transformers::models::t5::Config"]],["impl Unpin for Linear",0,1,["candle_transformers::models::t5::Linear"]],["impl Unpin for T5EncoderModel",0,1,["candle_transformers::models::t5::T5EncoderModel"]],["impl Unpin for T5ForConditionalGeneration",0,1,["candle_transformers::models::t5::T5ForConditionalGeneration"]],["impl Unpin for TrOCRConfig",0,1,["candle_transformers::models::trocr::TrOCRConfig"]],["impl Unpin for TrOCRDecoder",0,1,["candle_transformers::models::trocr::TrOCRDecoder"]],["impl Unpin for TrOCREncoder",0,1,["candle_transformers::models::trocr::TrOCREncoder"]],["impl Unpin for TrOCRForCausalLM",0,1,["candle_transformers::models::trocr::TrOCRForCausalLM"]],["impl Unpin for TrOCRModel",0,1,["candle_transformers::models::trocr::TrOCRModel"]],["impl Unpin for Config",0,1,["candle_transformers::models::vit::Config"]],["impl Unpin for Embeddings",0,1,["candle_transformers::models::vit::Embeddings"]],["impl Unpin for Encoder",0,1,["candle_transformers::models::vit::Encoder"]],["impl Unpin for Model",0,1,["candle_transformers::models::vit::Model"]],["impl Unpin for AudioEncoder",0,1,["candle_transformers::models::whisper::model::AudioEncoder"]],["impl Unpin for TextDecoder",0,1,["candle_transformers::models::whisper::model::TextDecoder"]],["impl Unpin for Whisper",0,1,["candle_transformers::models::whisper::model::Whisper"]],["impl Unpin for AudioEncoder",0,1,["candle_transformers::models::whisper::quantized_model::AudioEncoder"]],["impl Unpin for TextDecoder",0,1,["candle_transformers::models::whisper::quantized_model::TextDecoder"]],["impl Unpin for Whisper",0,1,["candle_transformers::models::whisper::quantized_model::Whisper"]],["impl Unpin for Config",0,1,["candle_transformers::models::whisper::Config"]],["impl Unpin for Conv2d",0,1,["candle_transformers::models::with_tracing::Conv2d"]],["impl Unpin for Embedding",0,1,["candle_transformers::models::with_tracing::Embedding"]],["impl Unpin for LayerNorm",0,1,["candle_transformers::models::with_tracing::LayerNorm"]],["impl Unpin for Linear",0,1,["candle_transformers::models::with_tracing::Linear"]],["impl Unpin for QMatMul",0,1,["candle_transformers::models::with_tracing::QMatMul"]],["impl Unpin for RmsNorm",0,1,["candle_transformers::models::with_tracing::RmsNorm"]],["impl Unpin for Attention",0,1,["candle_transformers::models::wuerstchen::attention_processor::Attention"]],["impl Unpin for AttnBlock",0,1,["candle_transformers::models::wuerstchen::common::AttnBlock"]],["impl Unpin for GlobalResponseNorm",0,1,["candle_transformers::models::wuerstchen::common::GlobalResponseNorm"]],["impl Unpin for LayerNormNoWeights",0,1,["candle_transformers::models::wuerstchen::common::LayerNormNoWeights"]],["impl Unpin for ResBlock",0,1,["candle_transformers::models::wuerstchen::common::ResBlock"]],["impl Unpin for TimestepBlock",0,1,["candle_transformers::models::wuerstchen::common::TimestepBlock"]],["impl Unpin for WLayerNorm",0,1,["candle_transformers::models::wuerstchen::common::WLayerNorm"]],["impl Unpin for DDPMWScheduler",0,1,["candle_transformers::models::wuerstchen::ddpm::DDPMWScheduler"]],["impl Unpin for DDPMWSchedulerConfig",0,1,["candle_transformers::models::wuerstchen::ddpm::DDPMWSchedulerConfig"]],["impl Unpin for ResBlockStageB",0,1,["candle_transformers::models::wuerstchen::diffnext::ResBlockStageB"]],["impl Unpin for WDiffNeXt",0,1,["candle_transformers::models::wuerstchen::diffnext::WDiffNeXt"]],["impl Unpin for MixingResidualBlock",0,1,["candle_transformers::models::wuerstchen::paella_vq::MixingResidualBlock"]],["impl Unpin for PaellaVQ",0,1,["candle_transformers::models::wuerstchen::paella_vq::PaellaVQ"]],["impl Unpin for WPrior",0,1,["candle_transformers::models::wuerstchen::prior::WPrior"]],["impl Unpin for Config",0,1,["candle_transformers::models::xlm_roberta::Config"]],["impl Unpin for XLMRobertaForMaskedLM",0,1,["candle_transformers::models::xlm_roberta::XLMRobertaForMaskedLM"]],["impl Unpin for XLMRobertaForSequenceClassification",0,1,["candle_transformers::models::xlm_roberta::XLMRobertaForSequenceClassification"]],["impl Unpin for XLMRobertaModel",0,1,["candle_transformers::models::xlm_roberta::XLMRobertaModel"]],["impl Unpin for Config",0,1,["candle_transformers::models::yi::Config"]],["impl Unpin for Model",0,1,["candle_transformers::models::yi::Model"]],["impl Unpin for KeyPoint",0,1,["candle_transformers::object_detection::KeyPoint"]],["impl Unpin for Embedding",0,1,["candle_transformers::quantized_nn::Embedding"]],["impl Unpin for Linear",0,1,["candle_transformers::quantized_nn::Linear"]],["impl Unpin for RmsNorm",0,1,["candle_transformers::quantized_nn::RmsNorm"]],["impl Unpin for VarBuilder",0,1,["candle_transformers::quantized_var_builder::VarBuilder"]],["impl<'a> Unpin for Vgg<'a>",0,1,["candle_transformers::models::vgg::Vgg"]],["impl<D> Unpin for Bbox<D>
where\n D: Unpin,
",0,1,["candle_transformers::object_detection::Bbox"]]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[197437]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/marker/trait.UnsafeUnpin.js b/network-poc/target-native/doc/trait.impl/core/marker/trait.UnsafeUnpin.js deleted file mode 100644 index 2d97f46..0000000 --- a/network-poc/target-native/doc/trait.impl/core/marker/trait.UnsafeUnpin.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl UnsafeUnpin for Sampling",0,1,["candle_transformers::generation::Sampling"]],["impl UnsafeUnpin for HiddenAct",0,1,["candle_transformers::models::bert::HiddenAct"]],["impl UnsafeUnpin for PositionEmbeddingType",0,1,["candle_transformers::models::bert::PositionEmbeddingType"]],["impl UnsafeUnpin for Activation",0,1,["candle_transformers::models::chinese_clip::Activation"]],["impl UnsafeUnpin for EncoderConfig",0,1,["candle_transformers::models::chinese_clip::EncoderConfig"]],["impl UnsafeUnpin for PositionEmbeddingType",0,1,["candle_transformers::models::chinese_clip::text_model::PositionEmbeddingType"]],["impl UnsafeUnpin for EncoderConfig",0,1,["candle_transformers::models::clip::EncoderConfig"]],["impl UnsafeUnpin for Activation",0,1,["candle_transformers::models::clip::text_model::Activation"]],["impl UnsafeUnpin for HiddenAct",0,1,["candle_transformers::models::debertav2::HiddenAct"]],["impl UnsafeUnpin for DeepSeekV2RopeScaling",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RopeScaling"]],["impl UnsafeUnpin for ScaledRopeType",0,1,["candle_transformers::models::deepseek2::ScaledRopeType"]],["impl UnsafeUnpin for NormType",0,1,["candle_transformers::models::encodec::NormType"]],["impl UnsafeUnpin for PadMode",0,1,["candle_transformers::models::encodec::PadMode"]],["impl UnsafeUnpin for GraniteEosToks",0,1,["candle_transformers::models::granite::GraniteEosToks"]],["impl UnsafeUnpin for GraniteRopeType",0,1,["candle_transformers::models::granite::GraniteRopeType"]],["impl UnsafeUnpin for PositionEmbeddingType",0,1,["candle_transformers::models::jina_bert::PositionEmbeddingType"]],["impl UnsafeUnpin for Llama3RopeType",0,1,["candle_transformers::models::llama::Llama3RopeType"]],["impl UnsafeUnpin for LlamaEosToks",0,1,["candle_transformers::models::llama::LlamaEosToks"]],["impl UnsafeUnpin for AttnKernelType",0,1,["candle_transformers::models::metavoice::gpt::AttnKernelType"]],["impl UnsafeUnpin for NonLinearityType",0,1,["candle_transformers::models::metavoice::gpt::NonLinearityType"]],["impl UnsafeUnpin for NormType",0,1,["candle_transformers::models::metavoice::gpt::NormType"]],["impl UnsafeUnpin for Norm",0,1,["candle_transformers::models::mimi::conv::Norm"]],["impl UnsafeUnpin for PadMode",0,1,["candle_transformers::models::mimi::conv::PadMode"]],["impl UnsafeUnpin for ResampleMethod",0,1,["candle_transformers::models::mimi::encodec::ResampleMethod"]],["impl UnsafeUnpin for NormType",0,1,["candle_transformers::models::mimi::NormType"]],["impl UnsafeUnpin for Mlp",0,1,["candle_transformers::models::mimi::transformer::Mlp"]],["impl UnsafeUnpin for Norm",0,1,["candle_transformers::models::mimi::transformer::Norm"]],["impl UnsafeUnpin for PositionalEmbedding",0,1,["candle_transformers::models::mimi::transformer::PositionalEmbedding"]],["impl UnsafeUnpin for ClassifierPooling",0,1,["candle_transformers::models::modernbert::ClassifierPooling"]],["impl UnsafeUnpin for PositionEmbeddingType",0,1,["candle_transformers::models::persimmon::PositionEmbeddingType"]],["impl UnsafeUnpin for TemporalBlockType",0,1,["candle_transformers::models::recurrent_gemma::TemporalBlockType"]],["impl UnsafeUnpin for Activation",0,1,["candle_transformers::models::stable_diffusion::clip::Activation"]],["impl UnsafeUnpin for DDPMVarianceType",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMVarianceType"]],["impl UnsafeUnpin for BetaSchedule",0,1,["candle_transformers::models::stable_diffusion::schedulers::BetaSchedule"]],["impl UnsafeUnpin for PredictionType",0,1,["candle_transformers::models::stable_diffusion::schedulers::PredictionType"]],["impl UnsafeUnpin for TimestepSpacing",0,1,["candle_transformers::models::stable_diffusion::schedulers::TimestepSpacing"]],["impl UnsafeUnpin for AlgorithmType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::AlgorithmType"]],["impl UnsafeUnpin for CorrectorConfiguration",0,1,["candle_transformers::models::stable_diffusion::uni_pc::CorrectorConfiguration"]],["impl UnsafeUnpin for FinalSigmasType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::FinalSigmasType"]],["impl UnsafeUnpin for SigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::SigmaSchedule"]],["impl UnsafeUnpin for SolverType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::SolverType"]],["impl UnsafeUnpin for TimestepSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::TimestepSchedule"]],["impl UnsafeUnpin for EmbedDim",0,1,["candle_transformers::models::stella_en_v5::EmbedDim"]],["impl UnsafeUnpin for ModelVariant",0,1,["candle_transformers::models::stella_en_v5::ModelVariant"]],["impl UnsafeUnpin for Models",0,1,["candle_transformers::models::vgg::Models"]],["impl UnsafeUnpin for LogitsProcessor",0,1,["candle_transformers::generation::LogitsProcessor"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::based::Config"]],["impl UnsafeUnpin for LinearAttentionConfig",0,1,["candle_transformers::models::based::LinearAttentionConfig"]],["impl UnsafeUnpin for LinearAttentionFeatureMapConfig",0,1,["candle_transformers::models::based::LinearAttentionFeatureMapConfig"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::based::Model"]],["impl UnsafeUnpin for SlidingWindowAttentionConfig",0,1,["candle_transformers::models::based::SlidingWindowAttentionConfig"]],["impl UnsafeUnpin for BeitVisionTransformer",0,1,["candle_transformers::models::beit::BeitVisionTransformer"]],["impl UnsafeUnpin for BertEncoder",0,1,["candle_transformers::models::bert::BertEncoder"]],["impl UnsafeUnpin for BertForMaskedLM",0,1,["candle_transformers::models::bert::BertForMaskedLM"]],["impl UnsafeUnpin for BertLMPredictionHead",0,1,["candle_transformers::models::bert::BertLMPredictionHead"]],["impl UnsafeUnpin for BertLayer",0,1,["candle_transformers::models::bert::BertLayer"]],["impl UnsafeUnpin for BertModel",0,1,["candle_transformers::models::bert::BertModel"]],["impl UnsafeUnpin for BertOnlyMLMHead",0,1,["candle_transformers::models::bert::BertOnlyMLMHead"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::bert::Config"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::bigcode::Config"]],["impl UnsafeUnpin for GPTBigCode",0,1,["candle_transformers::models::bigcode::GPTBigCode"]],["impl UnsafeUnpin for BlipForConditionalGeneration",0,1,["candle_transformers::models::blip::BlipForConditionalGeneration"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::blip::Config"]],["impl UnsafeUnpin for VisionConfig",0,1,["candle_transformers::models::blip::VisionConfig"]],["impl UnsafeUnpin for VisionModel",0,1,["candle_transformers::models::blip::VisionModel"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::blip_text::Config"]],["impl UnsafeUnpin for TextLMHeadModel",0,1,["candle_transformers::models::blip_text::TextLMHeadModel"]],["impl UnsafeUnpin for TextPooler",0,1,["candle_transformers::models::blip_text::TextPooler"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::chatglm::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::chatglm::Model"]],["impl UnsafeUnpin for ChineseClipConfig",0,1,["candle_transformers::models::chinese_clip::ChineseClipConfig"]],["impl UnsafeUnpin for ChineseClipModel",0,1,["candle_transformers::models::chinese_clip::ChineseClipModel"]],["impl UnsafeUnpin for ChineseClipTextConfig",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextConfig"]],["impl UnsafeUnpin for ChineseClipTextEmbeddings",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextEmbeddings"]],["impl UnsafeUnpin for ChineseClipTextTransformer",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextTransformer"]],["impl UnsafeUnpin for ChineseClipVisionConfig",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionConfig"]],["impl UnsafeUnpin for ChineseClipVisionEmbeddings",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionEmbeddings"]],["impl UnsafeUnpin for ChineseClipVisionEncoder",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionEncoder"]],["impl UnsafeUnpin for ChineseClipVisionTransformer",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionTransformer"]],["impl UnsafeUnpin for ClipConfig",0,1,["candle_transformers::models::clip::ClipConfig"]],["impl UnsafeUnpin for ClipModel",0,1,["candle_transformers::models::clip::ClipModel"]],["impl UnsafeUnpin for ClipEncoder",0,1,["candle_transformers::models::clip::text_model::ClipEncoder"]],["impl UnsafeUnpin for ClipTextConfig",0,1,["candle_transformers::models::clip::text_model::ClipTextConfig"]],["impl UnsafeUnpin for ClipTextTransformer",0,1,["candle_transformers::models::clip::text_model::ClipTextTransformer"]],["impl UnsafeUnpin for ClipVisionConfig",0,1,["candle_transformers::models::clip::vision_model::ClipVisionConfig"]],["impl UnsafeUnpin for ClipVisionTransformer",0,1,["candle_transformers::models::clip::vision_model::ClipVisionTransformer"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::codegeex4_9b::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::codegeex4_9b::Model"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::colpali::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::convnext::Config"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::dac::Config"]],["impl UnsafeUnpin for Decoder",0,1,["candle_transformers::models::dac::Decoder"]],["impl UnsafeUnpin for DecoderBlock",0,1,["candle_transformers::models::dac::DecoderBlock"]],["impl UnsafeUnpin for Encoder",0,1,["candle_transformers::models::dac::Encoder"]],["impl UnsafeUnpin for EncoderBlock",0,1,["candle_transformers::models::dac::EncoderBlock"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::dac::Model"]],["impl UnsafeUnpin for ResidualUnit",0,1,["candle_transformers::models::dac::ResidualUnit"]],["impl UnsafeUnpin for ResidualVectorQuantizer",0,1,["candle_transformers::models::dac::ResidualVectorQuantizer"]],["impl UnsafeUnpin for Snake1d",0,1,["candle_transformers::models::dac::Snake1d"]],["impl UnsafeUnpin for VectorQuantizer",0,1,["candle_transformers::models::dac::VectorQuantizer"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::debertav2::Config"]],["impl UnsafeUnpin for ConvLayer",0,1,["candle_transformers::models::debertav2::ConvLayer"]],["impl UnsafeUnpin for DebertaV2Attention",0,1,["candle_transformers::models::debertav2::DebertaV2Attention"]],["impl UnsafeUnpin for DebertaV2ContextPooler",0,1,["candle_transformers::models::debertav2::DebertaV2ContextPooler"]],["impl UnsafeUnpin for DebertaV2DisentangledSelfAttention",0,1,["candle_transformers::models::debertav2::DebertaV2DisentangledSelfAttention"]],["impl UnsafeUnpin for DebertaV2Embeddings",0,1,["candle_transformers::models::debertav2::DebertaV2Embeddings"]],["impl UnsafeUnpin for DebertaV2Encoder",0,1,["candle_transformers::models::debertav2::DebertaV2Encoder"]],["impl UnsafeUnpin for DebertaV2Intermediate",0,1,["candle_transformers::models::debertav2::DebertaV2Intermediate"]],["impl UnsafeUnpin for DebertaV2Layer",0,1,["candle_transformers::models::debertav2::DebertaV2Layer"]],["impl UnsafeUnpin for DebertaV2Model",0,1,["candle_transformers::models::debertav2::DebertaV2Model"]],["impl UnsafeUnpin for DebertaV2NERModel",0,1,["candle_transformers::models::debertav2::DebertaV2NERModel"]],["impl UnsafeUnpin for DebertaV2Output",0,1,["candle_transformers::models::debertav2::DebertaV2Output"]],["impl UnsafeUnpin for DebertaV2SelfOutput",0,1,["candle_transformers::models::debertav2::DebertaV2SelfOutput"]],["impl UnsafeUnpin for DebertaV2SeqClassificationModel",0,1,["candle_transformers::models::debertav2::DebertaV2SeqClassificationModel"]],["impl UnsafeUnpin for HiddenActLayer",0,1,["candle_transformers::models::debertav2::HiddenActLayer"]],["impl UnsafeUnpin for NERItem",0,1,["candle_transformers::models::debertav2::NERItem"]],["impl UnsafeUnpin for StableDropout",0,1,["candle_transformers::models::debertav2::StableDropout"]],["impl UnsafeUnpin for TextClassificationItem",0,1,["candle_transformers::models::debertav2::TextClassificationItem"]],["impl UnsafeUnpin for DeepSeekV2",0,1,["candle_transformers::models::deepseek2::DeepSeekV2"]],["impl UnsafeUnpin for DeepSeekV2Config",0,1,["candle_transformers::models::deepseek2::DeepSeekV2Config"]],["impl UnsafeUnpin for DeepSeekV2RopeConfig",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RopeConfig"]],["impl UnsafeUnpin for DeepSeekV2RotaryEmbedding",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RotaryEmbedding"]],["impl UnsafeUnpin for TopKOutput",0,1,["candle_transformers::models::deepseek2::TopKOutput"]],["impl UnsafeUnpin for DPTHead",0,1,["candle_transformers::models::depth_anything_v2::DPTHead"]],["impl UnsafeUnpin for DepthAnythingV2",0,1,["candle_transformers::models::depth_anything_v2::DepthAnythingV2"]],["impl UnsafeUnpin for DepthAnythingV2Config",0,1,["candle_transformers::models::depth_anything_v2::DepthAnythingV2Config"]],["impl UnsafeUnpin for FeatureFusionBlock",0,1,["candle_transformers::models::depth_anything_v2::FeatureFusionBlock"]],["impl UnsafeUnpin for ResidualConvUnit",0,1,["candle_transformers::models::depth_anything_v2::ResidualConvUnit"]],["impl UnsafeUnpin for Scratch",0,1,["candle_transformers::models::depth_anything_v2::Scratch"]],["impl UnsafeUnpin for DinoVisionTransformer",0,1,["candle_transformers::models::dinov2::DinoVisionTransformer"]],["impl UnsafeUnpin for DinoVisionTransformer",0,1,["candle_transformers::models::dinov2reg4::DinoVisionTransformer"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::distilbert::Config"]],["impl UnsafeUnpin for DistilBertModel",0,1,["candle_transformers::models::distilbert::DistilBertModel"]],["impl UnsafeUnpin for EfficientNet",0,1,["candle_transformers::models::efficientnet::EfficientNet"]],["impl UnsafeUnpin for MBConvConfig",0,1,["candle_transformers::models::efficientnet::MBConvConfig"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::efficientvit::Config"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::encodec::Config"]],["impl UnsafeUnpin for Decoder",0,1,["candle_transformers::models::encodec::Decoder"]],["impl UnsafeUnpin for EncodecConv1d",0,1,["candle_transformers::models::encodec::EncodecConv1d"]],["impl UnsafeUnpin for EncodecConvTranspose1d",0,1,["candle_transformers::models::encodec::EncodecConvTranspose1d"]],["impl UnsafeUnpin for EncodecLSTM",0,1,["candle_transformers::models::encodec::EncodecLSTM"]],["impl UnsafeUnpin for EncodecResnetBlock",0,1,["candle_transformers::models::encodec::EncodecResnetBlock"]],["impl UnsafeUnpin for Encoder",0,1,["candle_transformers::models::encodec::Encoder"]],["impl UnsafeUnpin for EuclideanCodebook",0,1,["candle_transformers::models::encodec::EuclideanCodebook"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::encodec::Model"]],["impl UnsafeUnpin for ResidualVectorQuantizer",0,1,["candle_transformers::models::encodec::ResidualVectorQuantizer"]],["impl UnsafeUnpin for VectorQuantization",0,1,["candle_transformers::models::encodec::VectorQuantization"]],["impl UnsafeUnpin for EVA2VisionTransformer",0,1,["candle_transformers::models::eva2::EVA2VisionTransformer"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::falcon::Config"]],["impl UnsafeUnpin for Falcon",0,1,["candle_transformers::models::falcon::Falcon"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::fastvit::Config"]],["impl UnsafeUnpin for AutoEncoder",0,1,["candle_transformers::models::flux::autoencoder::AutoEncoder"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::flux::autoencoder::Config"]],["impl UnsafeUnpin for Decoder",0,1,["candle_transformers::models::flux::autoencoder::Decoder"]],["impl UnsafeUnpin for DiagonalGaussian",0,1,["candle_transformers::models::flux::autoencoder::DiagonalGaussian"]],["impl UnsafeUnpin for Encoder",0,1,["candle_transformers::models::flux::autoencoder::Encoder"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::flux::model::Config"]],["impl UnsafeUnpin for DoubleStreamBlock",0,1,["candle_transformers::models::flux::model::DoubleStreamBlock"]],["impl UnsafeUnpin for EmbedNd",0,1,["candle_transformers::models::flux::model::EmbedNd"]],["impl UnsafeUnpin for Flux",0,1,["candle_transformers::models::flux::model::Flux"]],["impl UnsafeUnpin for LastLayer",0,1,["candle_transformers::models::flux::model::LastLayer"]],["impl UnsafeUnpin for MlpEmbedder",0,1,["candle_transformers::models::flux::model::MlpEmbedder"]],["impl UnsafeUnpin for QkNorm",0,1,["candle_transformers::models::flux::model::QkNorm"]],["impl UnsafeUnpin for SelfAttention",0,1,["candle_transformers::models::flux::model::SelfAttention"]],["impl UnsafeUnpin for SingleStreamBlock",0,1,["candle_transformers::models::flux::model::SingleStreamBlock"]],["impl UnsafeUnpin for DoubleStreamBlock",0,1,["candle_transformers::models::flux::quantized_model::DoubleStreamBlock"]],["impl UnsafeUnpin for Flux",0,1,["candle_transformers::models::flux::quantized_model::Flux"]],["impl UnsafeUnpin for LastLayer",0,1,["candle_transformers::models::flux::quantized_model::LastLayer"]],["impl UnsafeUnpin for MlpEmbedder",0,1,["candle_transformers::models::flux::quantized_model::MlpEmbedder"]],["impl UnsafeUnpin for QkNorm",0,1,["candle_transformers::models::flux::quantized_model::QkNorm"]],["impl UnsafeUnpin for SelfAttention",0,1,["candle_transformers::models::flux::quantized_model::SelfAttention"]],["impl UnsafeUnpin for SingleStreamBlock",0,1,["candle_transformers::models::flux::quantized_model::SingleStreamBlock"]],["impl UnsafeUnpin for State",0,1,["candle_transformers::models::flux::sampling::State"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::gemma2::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::gemma2::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::gemma3::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::gemma3::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::gemma::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::gemma::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::glm4::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::glm4::Model"]],["impl UnsafeUnpin for Cache",0,1,["candle_transformers::models::granite::Cache"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::granite::Config"]],["impl UnsafeUnpin for Granite",0,1,["candle_transformers::models::granite::Granite"]],["impl UnsafeUnpin for GraniteConfig",0,1,["candle_transformers::models::granite::GraniteConfig"]],["impl UnsafeUnpin for GraniteRopeConfig",0,1,["candle_transformers::models::granite::GraniteRopeConfig"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::helium::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::helium::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::hiera::Config"]],["impl UnsafeUnpin for BertModel",0,1,["candle_transformers::models::jina_bert::BertModel"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::jina_bert::Config"]],["impl UnsafeUnpin for Cache",0,1,["candle_transformers::models::llama2_c::Cache"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::llama2_c::Config"]],["impl UnsafeUnpin for Llama",0,1,["candle_transformers::models::llama2_c::Llama"]],["impl UnsafeUnpin for TransformerWeights",0,1,["candle_transformers::models::llama2_c_weights::TransformerWeights"]],["impl UnsafeUnpin for Cache",0,1,["candle_transformers::models::llama::Cache"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::llama::Config"]],["impl UnsafeUnpin for Llama3RopeConfig",0,1,["candle_transformers::models::llama::Llama3RopeConfig"]],["impl UnsafeUnpin for Llama",0,1,["candle_transformers::models::llama::Llama"]],["impl UnsafeUnpin for LlamaConfig",0,1,["candle_transformers::models::llama::LlamaConfig"]],["impl UnsafeUnpin for HFGenerationConfig",0,1,["candle_transformers::models::llava::config::HFGenerationConfig"]],["impl UnsafeUnpin for HFLLaVAConfig",0,1,["candle_transformers::models::llava::config::HFLLaVAConfig"]],["impl UnsafeUnpin for HFLLaVATextConfig",0,1,["candle_transformers::models::llava::config::HFLLaVATextConfig"]],["impl UnsafeUnpin for HFLLaVAVisionConfig",0,1,["candle_transformers::models::llava::config::HFLLaVAVisionConfig"]],["impl UnsafeUnpin for HFPreProcessorConfig",0,1,["candle_transformers::models::llava::config::HFPreProcessorConfig"]],["impl UnsafeUnpin for LLaVAConfig",0,1,["candle_transformers::models::llava::config::LLaVAConfig"]],["impl UnsafeUnpin for ClipVisionTower",0,1,["candle_transformers::models::llava::ClipVisionTower"]],["impl UnsafeUnpin for IdentityMap",0,1,["candle_transformers::models::llava::IdentityMap"]],["impl UnsafeUnpin for LLaVA",0,1,["candle_transformers::models::llava::LLaVA"]],["impl UnsafeUnpin for MMProjector",0,1,["candle_transformers::models::llava::MMProjector"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::mamba::Config"]],["impl UnsafeUnpin for MambaBlock",0,1,["candle_transformers::models::mamba::MambaBlock"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::mamba::Model"]],["impl UnsafeUnpin for ResidualBlock",0,1,["candle_transformers::models::mamba::ResidualBlock"]],["impl UnsafeUnpin for State",0,1,["candle_transformers::models::mamba::State"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::marian::Config"]],["impl UnsafeUnpin for Decoder",0,1,["candle_transformers::models::marian::Decoder"]],["impl UnsafeUnpin for Encoder",0,1,["candle_transformers::models::marian::Encoder"]],["impl UnsafeUnpin for MTModel",0,1,["candle_transformers::models::marian::MTModel"]],["impl UnsafeUnpin for FlattenedInterleavedEncodec2Codebook",0,1,["candle_transformers::models::metavoice::adapters::FlattenedInterleavedEncodec2Codebook"]],["impl UnsafeUnpin for TiltedEncodec",0,1,["candle_transformers::models::metavoice::adapters::TiltedEncodec"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::metavoice::gpt::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::metavoice::gpt::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::metavoice::speaker_encoder::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::metavoice::speaker_encoder::Model"]],["impl UnsafeUnpin for BPE",0,1,["candle_transformers::models::metavoice::tokenizers::BPE"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::metavoice::transformer::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::metavoice::transformer::Model"]],["impl UnsafeUnpin for ConvDownsample1d",0,1,["candle_transformers::models::mimi::conv::ConvDownsample1d"]],["impl UnsafeUnpin for ConvTrUpsample1d",0,1,["candle_transformers::models::mimi::conv::ConvTrUpsample1d"]],["impl UnsafeUnpin for NormConv1d",0,1,["candle_transformers::models::mimi::conv::NormConv1d"]],["impl UnsafeUnpin for NormConvTranspose1d",0,1,["candle_transformers::models::mimi::conv::NormConvTranspose1d"]],["impl UnsafeUnpin for StreamableConv1d",0,1,["candle_transformers::models::mimi::conv::StreamableConv1d"]],["impl UnsafeUnpin for StreamableConvTranspose1d",0,1,["candle_transformers::models::mimi::conv::StreamableConvTranspose1d"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::mimi::encodec::Config"]],["impl UnsafeUnpin for Encodec",0,1,["candle_transformers::models::mimi::encodec::Encodec"]],["impl UnsafeUnpin for EuclideanCodebook",0,1,["candle_transformers::models::mimi::quantization::EuclideanCodebook"]],["impl UnsafeUnpin for ResidualVectorQuantization",0,1,["candle_transformers::models::mimi::quantization::ResidualVectorQuantization"]],["impl UnsafeUnpin for ResidualVectorQuantizer",0,1,["candle_transformers::models::mimi::quantization::ResidualVectorQuantizer"]],["impl UnsafeUnpin for SplitResidualVectorQuantizer",0,1,["candle_transformers::models::mimi::quantization::SplitResidualVectorQuantizer"]],["impl UnsafeUnpin for VectorQuantization",0,1,["candle_transformers::models::mimi::quantization::VectorQuantization"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::mimi::seanet::Config"]],["impl UnsafeUnpin for SeaNetDecoder",0,1,["candle_transformers::models::mimi::seanet::SeaNetDecoder"]],["impl UnsafeUnpin for SeaNetEncoder",0,1,["candle_transformers::models::mimi::seanet::SeaNetEncoder"]],["impl UnsafeUnpin for SeaNetResnetBlock",0,1,["candle_transformers::models::mimi::seanet::SeaNetResnetBlock"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::mimi::transformer::Config"]],["impl UnsafeUnpin for LayerScale",0,1,["candle_transformers::models::mimi::transformer::LayerScale"]],["impl UnsafeUnpin for ProjectedTransformer",0,1,["candle_transformers::models::mimi::transformer::ProjectedTransformer"]],["impl UnsafeUnpin for RmsNorm",0,1,["candle_transformers::models::mimi::transformer::RmsNorm"]],["impl UnsafeUnpin for RotaryEmbedding",0,1,["candle_transformers::models::mimi::transformer::RotaryEmbedding"]],["impl UnsafeUnpin for StreamingMultiheadAttention",0,1,["candle_transformers::models::mimi::transformer::StreamingMultiheadAttention"]],["impl UnsafeUnpin for StreamingMultiheadCrossAttention",0,1,["candle_transformers::models::mimi::transformer::StreamingMultiheadCrossAttention"]],["impl UnsafeUnpin for StreamingTransformer",0,1,["candle_transformers::models::mimi::transformer::StreamingTransformer"]],["impl UnsafeUnpin for StreamingTransformerLayer",0,1,["candle_transformers::models::mimi::transformer::StreamingTransformerLayer"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::mistral::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::mistral::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::mixformer::Config"]],["impl UnsafeUnpin for MixFormerSequentialForCausalLM",0,1,["candle_transformers::models::mixformer::MixFormerSequentialForCausalLM"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::mixtral::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::mixtral::Model"]],["impl UnsafeUnpin for ContextQkvOnlyJointBlock",0,1,["candle_transformers::models::mmdit::blocks::ContextQkvOnlyJointBlock"]],["impl UnsafeUnpin for DiTBlock",0,1,["candle_transformers::models::mmdit::blocks::DiTBlock"]],["impl UnsafeUnpin for FinalLayer",0,1,["candle_transformers::models::mmdit::blocks::FinalLayer"]],["impl UnsafeUnpin for LayerNormNoAffine",0,1,["candle_transformers::models::mmdit::blocks::LayerNormNoAffine"]],["impl UnsafeUnpin for MMDiTJointBlock",0,1,["candle_transformers::models::mmdit::blocks::MMDiTJointBlock"]],["impl UnsafeUnpin for MMDiTXJointBlock",0,1,["candle_transformers::models::mmdit::blocks::MMDiTXJointBlock"]],["impl UnsafeUnpin for ModulateIntermediates",0,1,["candle_transformers::models::mmdit::blocks::ModulateIntermediates"]],["impl UnsafeUnpin for QkvOnlyDiTBlock",0,1,["candle_transformers::models::mmdit::blocks::QkvOnlyDiTBlock"]],["impl UnsafeUnpin for SelfAttnDiTBlock",0,1,["candle_transformers::models::mmdit::blocks::SelfAttnDiTBlock"]],["impl UnsafeUnpin for SelfAttnModulateIntermediates",0,1,["candle_transformers::models::mmdit::blocks::SelfAttnModulateIntermediates"]],["impl UnsafeUnpin for PatchEmbedder",0,1,["candle_transformers::models::mmdit::embedding::PatchEmbedder"]],["impl UnsafeUnpin for PositionEmbedder",0,1,["candle_transformers::models::mmdit::embedding::PositionEmbedder"]],["impl UnsafeUnpin for TimestepEmbedder",0,1,["candle_transformers::models::mmdit::embedding::TimestepEmbedder"]],["impl UnsafeUnpin for Unpatchifier",0,1,["candle_transformers::models::mmdit::embedding::Unpatchifier"]],["impl UnsafeUnpin for VectorEmbedder",0,1,["candle_transformers::models::mmdit::embedding::VectorEmbedder"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::mmdit::model::Config"]],["impl UnsafeUnpin for MMDiT",0,1,["candle_transformers::models::mmdit::model::MMDiT"]],["impl UnsafeUnpin for MMDiTCore",0,1,["candle_transformers::models::mmdit::model::MMDiTCore"]],["impl UnsafeUnpin for AttnProjections",0,1,["candle_transformers::models::mmdit::projections::AttnProjections"]],["impl UnsafeUnpin for Mlp",0,1,["candle_transformers::models::mmdit::projections::Mlp"]],["impl UnsafeUnpin for Qkv",0,1,["candle_transformers::models::mmdit::projections::Qkv"]],["impl UnsafeUnpin for QkvOnlyAttnProjections",0,1,["candle_transformers::models::mmdit::projections::QkvOnlyAttnProjections"]],["impl UnsafeUnpin for MobileClipConfig",0,1,["candle_transformers::models::mobileclip::MobileClipConfig"]],["impl UnsafeUnpin for MobileClipModel",0,1,["candle_transformers::models::mobileclip::MobileClipModel"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::mobilenetv4::Config"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::mobileone::Config"]],["impl UnsafeUnpin for ClassifierConfig",0,1,["candle_transformers::models::modernbert::ClassifierConfig"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::modernbert::Config"]],["impl UnsafeUnpin for ModernBert",0,1,["candle_transformers::models::modernbert::ModernBert"]],["impl UnsafeUnpin for ModernBertClassifier",0,1,["candle_transformers::models::modernbert::ModernBertClassifier"]],["impl UnsafeUnpin for ModernBertDecoder",0,1,["candle_transformers::models::modernbert::ModernBertDecoder"]],["impl UnsafeUnpin for ModernBertForMaskedLM",0,1,["candle_transformers::models::modernbert::ModernBertForMaskedLM"]],["impl UnsafeUnpin for ModernBertForSequenceClassification",0,1,["candle_transformers::models::modernbert::ModernBertForSequenceClassification"]],["impl UnsafeUnpin for ModernBertHead",0,1,["candle_transformers::models::modernbert::ModernBertHead"]],["impl UnsafeUnpin for ModernBertLayer",0,1,["candle_transformers::models::modernbert::ModernBertLayer"]],["impl UnsafeUnpin for ModernBertMLP",0,1,["candle_transformers::models::modernbert::ModernBertMLP"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::moondream::Config"]],["impl UnsafeUnpin for Encoder",0,1,["candle_transformers::models::moondream::Encoder"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::moondream::Model"]],["impl UnsafeUnpin for VisionConfig",0,1,["candle_transformers::models::moondream::VisionConfig"]],["impl UnsafeUnpin for VisionEncoder",0,1,["candle_transformers::models::moondream::VisionEncoder"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::mpt::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::mpt::Model"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::nvembed_v2::embedding::Model"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::nvembed_v2::model::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::olmo::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::olmo::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::openclip::text_model::Config"]],["impl UnsafeUnpin for Encoder",0,1,["candle_transformers::models::openclip::text_model::Encoder"]],["impl UnsafeUnpin for OpenClipTextTransformer",0,1,["candle_transformers::models::openclip::text_model::OpenClipTextTransformer"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::paligemma::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::paligemma::Model"]],["impl UnsafeUnpin for MultiModalProjector",0,1,["candle_transformers::models::paligemma::MultiModalProjector"]],["impl UnsafeUnpin for Attention",0,1,["candle_transformers::models::parler_tts::Attention"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::parler_tts::Config"]],["impl UnsafeUnpin for Decoder",0,1,["candle_transformers::models::parler_tts::Decoder"]],["impl UnsafeUnpin for DecoderConfig",0,1,["candle_transformers::models::parler_tts::DecoderConfig"]],["impl UnsafeUnpin for DecoderLayer",0,1,["candle_transformers::models::parler_tts::DecoderLayer"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::parler_tts::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::persimmon::Config"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::phi3::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::phi3::Model"]],["impl UnsafeUnpin for RotaryEmbedding",0,1,["candle_transformers::models::phi3::RotaryEmbedding"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::phi::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::phi::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::pixtral::llava::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::pixtral::llava::Model"]],["impl UnsafeUnpin for MultiModalProjector",0,1,["candle_transformers::models::pixtral::llava::MultiModalProjector"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::pixtral::vision_model::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::pixtral::vision_model::Model"]],["impl UnsafeUnpin for BlipForConditionalGeneration",0,1,["candle_transformers::models::quantized_blip::BlipForConditionalGeneration"]],["impl UnsafeUnpin for VisionModel",0,1,["candle_transformers::models::quantized_blip::VisionModel"]],["impl UnsafeUnpin for TextLMHeadModel",0,1,["candle_transformers::models::quantized_blip_text::TextLMHeadModel"]],["impl UnsafeUnpin for TextPooler",0,1,["candle_transformers::models::quantized_blip_text::TextPooler"]],["impl UnsafeUnpin for QLlama",0,1,["candle_transformers::models::quantized_llama2_c::QLlama"]],["impl UnsafeUnpin for ModelWeights",0,1,["candle_transformers::models::quantized_llama::ModelWeights"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::quantized_metavoice::transformer::Model"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::quantized_mistral::Model"]],["impl UnsafeUnpin for MixFormerSequentialForCausalLM",0,1,["candle_transformers::models::quantized_mixformer::MixFormerSequentialForCausalLM"]],["impl UnsafeUnpin for Encoder",0,1,["candle_transformers::models::quantized_moondream::Encoder"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::quantized_moondream::Model"]],["impl UnsafeUnpin for VisionEncoder",0,1,["candle_transformers::models::quantized_moondream::VisionEncoder"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::quantized_mpt::Model"]],["impl UnsafeUnpin for ModelWeights",0,1,["candle_transformers::models::quantized_phi3::ModelWeights"]],["impl UnsafeUnpin for ModelWeights",0,1,["candle_transformers::models::quantized_phi::ModelWeights"]],["impl UnsafeUnpin for ModelWeights",0,1,["candle_transformers::models::quantized_qwen2::ModelWeights"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::quantized_recurrent_gemma::Model"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::quantized_rwkv_v5::Model"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::quantized_rwkv_v6::Model"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::quantized_stable_lm::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::quantized_t5::Config"]],["impl UnsafeUnpin for T5EncoderModel",0,1,["candle_transformers::models::quantized_t5::T5EncoderModel"]],["impl UnsafeUnpin for T5ForConditionalGeneration",0,1,["candle_transformers::models::quantized_t5::T5ForConditionalGeneration"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::qwen2::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::qwen2::Model"]],["impl UnsafeUnpin for ModelForCausalLM",0,1,["candle_transformers::models::qwen2::ModelForCausalLM"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::qwen2_moe::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::qwen2_moe::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::recurrent_gemma::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::recurrent_gemma::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::repvgg::Config"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::rwkv_v5::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::rwkv_v5::Model"]],["impl UnsafeUnpin for State",0,1,["candle_transformers::models::rwkv_v5::State"]],["impl UnsafeUnpin for StatePerLayer",0,1,["candle_transformers::models::rwkv_v5::StatePerLayer"]],["impl UnsafeUnpin for Tokenizer",0,1,["candle_transformers::models::rwkv_v5::Tokenizer"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::rwkv_v6::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::segformer::Config"]],["impl UnsafeUnpin for ImageClassificationModel",0,1,["candle_transformers::models::segformer::ImageClassificationModel"]],["impl UnsafeUnpin for SemanticSegmentationModel",0,1,["candle_transformers::models::segformer::SemanticSegmentationModel"]],["impl UnsafeUnpin for ImageEncoderViT",0,1,["candle_transformers::models::segment_anything::image_encoder::ImageEncoderViT"]],["impl UnsafeUnpin for MaskDecoder",0,1,["candle_transformers::models::segment_anything::mask_decoder::MaskDecoder"]],["impl UnsafeUnpin for PromptEncoder",0,1,["candle_transformers::models::segment_anything::prompt_encoder::PromptEncoder"]],["impl UnsafeUnpin for Sam",0,1,["candle_transformers::models::segment_anything::sam::Sam"]],["impl UnsafeUnpin for LayerNorm2d",0,1,["candle_transformers::models::segment_anything::LayerNorm2d"]],["impl UnsafeUnpin for MlpBlock",0,1,["candle_transformers::models::segment_anything::MlpBlock"]],["impl UnsafeUnpin for TinyViT",0,1,["candle_transformers::models::segment_anything::tiny_vit::TinyViT"]],["impl UnsafeUnpin for TwoWayTransformer",0,1,["candle_transformers::models::segment_anything::transformer::TwoWayTransformer"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::siglip::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::siglip::Model"]],["impl UnsafeUnpin for TextConfig",0,1,["candle_transformers::models::siglip::TextConfig"]],["impl UnsafeUnpin for TextModel",0,1,["candle_transformers::models::siglip::TextModel"]],["impl UnsafeUnpin for TextTransformer",0,1,["candle_transformers::models::siglip::TextTransformer"]],["impl UnsafeUnpin for VisionConfig",0,1,["candle_transformers::models::siglip::VisionConfig"]],["impl UnsafeUnpin for VisionModel",0,1,["candle_transformers::models::siglip::VisionModel"]],["impl UnsafeUnpin for AttentionBlock",0,1,["candle_transformers::models::stable_diffusion::attention::AttentionBlock"]],["impl UnsafeUnpin for AttentionBlockConfig",0,1,["candle_transformers::models::stable_diffusion::attention::AttentionBlockConfig"]],["impl UnsafeUnpin for CrossAttention",0,1,["candle_transformers::models::stable_diffusion::attention::CrossAttention"]],["impl UnsafeUnpin for SpatialTransformer",0,1,["candle_transformers::models::stable_diffusion::attention::SpatialTransformer"]],["impl UnsafeUnpin for SpatialTransformerConfig",0,1,["candle_transformers::models::stable_diffusion::attention::SpatialTransformerConfig"]],["impl UnsafeUnpin for ClipTextTransformer",0,1,["candle_transformers::models::stable_diffusion::clip::ClipTextTransformer"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::stable_diffusion::clip::Config"]],["impl UnsafeUnpin for DDIMScheduler",0,1,["candle_transformers::models::stable_diffusion::ddim::DDIMScheduler"]],["impl UnsafeUnpin for DDIMSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::ddim::DDIMSchedulerConfig"]],["impl UnsafeUnpin for DDPMScheduler",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMScheduler"]],["impl UnsafeUnpin for DDPMSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMSchedulerConfig"]],["impl UnsafeUnpin for TimestepEmbedding",0,1,["candle_transformers::models::stable_diffusion::embeddings::TimestepEmbedding"]],["impl UnsafeUnpin for Timesteps",0,1,["candle_transformers::models::stable_diffusion::embeddings::Timesteps"]],["impl UnsafeUnpin for EulerAncestralDiscreteScheduler",0,1,["candle_transformers::models::stable_diffusion::euler_ancestral_discrete::EulerAncestralDiscreteScheduler"]],["impl UnsafeUnpin for EulerAncestralDiscreteSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::euler_ancestral_discrete::EulerAncestralDiscreteSchedulerConfig"]],["impl UnsafeUnpin for ResnetBlock2D",0,1,["candle_transformers::models::stable_diffusion::resnet::ResnetBlock2D"]],["impl UnsafeUnpin for ResnetBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::resnet::ResnetBlock2DConfig"]],["impl UnsafeUnpin for StableDiffusionConfig",0,1,["candle_transformers::models::stable_diffusion::StableDiffusionConfig"]],["impl UnsafeUnpin for BlockConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d::BlockConfig"]],["impl UnsafeUnpin for UNet2DConditionModel",0,1,["candle_transformers::models::stable_diffusion::unet_2d::UNet2DConditionModel"]],["impl UnsafeUnpin for UNet2DConditionModelConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d::UNet2DConditionModelConfig"]],["impl UnsafeUnpin for CrossAttnDownBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnDownBlock2D"]],["impl UnsafeUnpin for CrossAttnDownBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnDownBlock2DConfig"]],["impl UnsafeUnpin for CrossAttnUpBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnUpBlock2D"]],["impl UnsafeUnpin for CrossAttnUpBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnUpBlock2DConfig"]],["impl UnsafeUnpin for DownBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownBlock2D"]],["impl UnsafeUnpin for DownBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownBlock2DConfig"]],["impl UnsafeUnpin for DownEncoderBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownEncoderBlock2D"]],["impl UnsafeUnpin for DownEncoderBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownEncoderBlock2DConfig"]],["impl UnsafeUnpin for UNetMidBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2D"]],["impl UnsafeUnpin for UNetMidBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DConfig"]],["impl UnsafeUnpin for UNetMidBlock2DCrossAttn",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DCrossAttn"]],["impl UnsafeUnpin for UNetMidBlock2DCrossAttnConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DCrossAttnConfig"]],["impl UnsafeUnpin for UpBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpBlock2D"]],["impl UnsafeUnpin for UpBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpBlock2DConfig"]],["impl UnsafeUnpin for UpDecoderBlock2D",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpDecoderBlock2D"]],["impl UnsafeUnpin for UpDecoderBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpDecoderBlock2DConfig"]],["impl UnsafeUnpin for EdmDpmMultistepScheduler",0,1,["candle_transformers::models::stable_diffusion::uni_pc::EdmDpmMultistepScheduler"]],["impl UnsafeUnpin for ExponentialSigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::ExponentialSigmaSchedule"]],["impl UnsafeUnpin for KarrasSigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::KarrasSigmaSchedule"]],["impl UnsafeUnpin for UniPCSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::uni_pc::UniPCSchedulerConfig"]],["impl UnsafeUnpin for AutoEncoderKL",0,1,["candle_transformers::models::stable_diffusion::vae::AutoEncoderKL"]],["impl UnsafeUnpin for AutoEncoderKLConfig",0,1,["candle_transformers::models::stable_diffusion::vae::AutoEncoderKLConfig"]],["impl UnsafeUnpin for DiagonalGaussianDistribution",0,1,["candle_transformers::models::stable_diffusion::vae::DiagonalGaussianDistribution"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::stable_lm::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::stable_lm::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::starcoder2::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::starcoder2::Model"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::stella_en_v5::Config"]],["impl UnsafeUnpin for EmbedHead",0,1,["candle_transformers::models::stella_en_v5::EmbedHead"]],["impl UnsafeUnpin for EmbeddingModel",0,1,["candle_transformers::models::stella_en_v5::EmbeddingModel"]],["impl UnsafeUnpin for Embeddings",0,1,["candle_transformers::models::stella_en_v5::Embeddings"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::stella_en_v5::Model"]],["impl UnsafeUnpin for ActivationWithOptionalGating",0,1,["candle_transformers::models::t5::ActivationWithOptionalGating"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::t5::Config"]],["impl UnsafeUnpin for Linear",0,1,["candle_transformers::models::t5::Linear"]],["impl UnsafeUnpin for T5EncoderModel",0,1,["candle_transformers::models::t5::T5EncoderModel"]],["impl UnsafeUnpin for T5ForConditionalGeneration",0,1,["candle_transformers::models::t5::T5ForConditionalGeneration"]],["impl UnsafeUnpin for TrOCRConfig",0,1,["candle_transformers::models::trocr::TrOCRConfig"]],["impl UnsafeUnpin for TrOCRDecoder",0,1,["candle_transformers::models::trocr::TrOCRDecoder"]],["impl UnsafeUnpin for TrOCREncoder",0,1,["candle_transformers::models::trocr::TrOCREncoder"]],["impl UnsafeUnpin for TrOCRForCausalLM",0,1,["candle_transformers::models::trocr::TrOCRForCausalLM"]],["impl UnsafeUnpin for TrOCRModel",0,1,["candle_transformers::models::trocr::TrOCRModel"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::vit::Config"]],["impl UnsafeUnpin for Embeddings",0,1,["candle_transformers::models::vit::Embeddings"]],["impl UnsafeUnpin for Encoder",0,1,["candle_transformers::models::vit::Encoder"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::vit::Model"]],["impl UnsafeUnpin for AudioEncoder",0,1,["candle_transformers::models::whisper::model::AudioEncoder"]],["impl UnsafeUnpin for TextDecoder",0,1,["candle_transformers::models::whisper::model::TextDecoder"]],["impl UnsafeUnpin for Whisper",0,1,["candle_transformers::models::whisper::model::Whisper"]],["impl UnsafeUnpin for AudioEncoder",0,1,["candle_transformers::models::whisper::quantized_model::AudioEncoder"]],["impl UnsafeUnpin for TextDecoder",0,1,["candle_transformers::models::whisper::quantized_model::TextDecoder"]],["impl UnsafeUnpin for Whisper",0,1,["candle_transformers::models::whisper::quantized_model::Whisper"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::whisper::Config"]],["impl UnsafeUnpin for Conv2d",0,1,["candle_transformers::models::with_tracing::Conv2d"]],["impl UnsafeUnpin for Embedding",0,1,["candle_transformers::models::with_tracing::Embedding"]],["impl UnsafeUnpin for LayerNorm",0,1,["candle_transformers::models::with_tracing::LayerNorm"]],["impl UnsafeUnpin for Linear",0,1,["candle_transformers::models::with_tracing::Linear"]],["impl UnsafeUnpin for QMatMul",0,1,["candle_transformers::models::with_tracing::QMatMul"]],["impl UnsafeUnpin for RmsNorm",0,1,["candle_transformers::models::with_tracing::RmsNorm"]],["impl UnsafeUnpin for Attention",0,1,["candle_transformers::models::wuerstchen::attention_processor::Attention"]],["impl UnsafeUnpin for AttnBlock",0,1,["candle_transformers::models::wuerstchen::common::AttnBlock"]],["impl UnsafeUnpin for GlobalResponseNorm",0,1,["candle_transformers::models::wuerstchen::common::GlobalResponseNorm"]],["impl UnsafeUnpin for LayerNormNoWeights",0,1,["candle_transformers::models::wuerstchen::common::LayerNormNoWeights"]],["impl UnsafeUnpin for ResBlock",0,1,["candle_transformers::models::wuerstchen::common::ResBlock"]],["impl UnsafeUnpin for TimestepBlock",0,1,["candle_transformers::models::wuerstchen::common::TimestepBlock"]],["impl UnsafeUnpin for WLayerNorm",0,1,["candle_transformers::models::wuerstchen::common::WLayerNorm"]],["impl UnsafeUnpin for DDPMWScheduler",0,1,["candle_transformers::models::wuerstchen::ddpm::DDPMWScheduler"]],["impl UnsafeUnpin for DDPMWSchedulerConfig",0,1,["candle_transformers::models::wuerstchen::ddpm::DDPMWSchedulerConfig"]],["impl UnsafeUnpin for ResBlockStageB",0,1,["candle_transformers::models::wuerstchen::diffnext::ResBlockStageB"]],["impl UnsafeUnpin for WDiffNeXt",0,1,["candle_transformers::models::wuerstchen::diffnext::WDiffNeXt"]],["impl UnsafeUnpin for MixingResidualBlock",0,1,["candle_transformers::models::wuerstchen::paella_vq::MixingResidualBlock"]],["impl UnsafeUnpin for PaellaVQ",0,1,["candle_transformers::models::wuerstchen::paella_vq::PaellaVQ"]],["impl UnsafeUnpin for WPrior",0,1,["candle_transformers::models::wuerstchen::prior::WPrior"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::xlm_roberta::Config"]],["impl UnsafeUnpin for XLMRobertaForMaskedLM",0,1,["candle_transformers::models::xlm_roberta::XLMRobertaForMaskedLM"]],["impl UnsafeUnpin for XLMRobertaForSequenceClassification",0,1,["candle_transformers::models::xlm_roberta::XLMRobertaForSequenceClassification"]],["impl UnsafeUnpin for XLMRobertaModel",0,1,["candle_transformers::models::xlm_roberta::XLMRobertaModel"]],["impl UnsafeUnpin for Config",0,1,["candle_transformers::models::yi::Config"]],["impl UnsafeUnpin for Model",0,1,["candle_transformers::models::yi::Model"]],["impl UnsafeUnpin for KeyPoint",0,1,["candle_transformers::object_detection::KeyPoint"]],["impl UnsafeUnpin for Embedding",0,1,["candle_transformers::quantized_nn::Embedding"]],["impl UnsafeUnpin for Linear",0,1,["candle_transformers::quantized_nn::Linear"]],["impl UnsafeUnpin for RmsNorm",0,1,["candle_transformers::quantized_nn::RmsNorm"]],["impl UnsafeUnpin for VarBuilder",0,1,["candle_transformers::quantized_var_builder::VarBuilder"]],["impl<'a> UnsafeUnpin for Vgg<'a>",0,1,["candle_transformers::models::vgg::Vgg"]],["impl<D> UnsafeUnpin for Bbox<D>
where\n D: UnsafeUnpin,
",0,1,["candle_transformers::object_detection::Bbox"]]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[136305]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/network-poc/target-native/doc/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js deleted file mode 100644 index c07369b..0000000 --- a/network-poc/target-native/doc/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl !RefUnwindSafe for Mlp",1,1,["candle_transformers::models::mimi::transformer::Mlp"]],["impl !RefUnwindSafe for Norm",1,1,["candle_transformers::models::mimi::transformer::Norm"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::based::Model"]],["impl !RefUnwindSafe for BeitVisionTransformer",1,1,["candle_transformers::models::beit::BeitVisionTransformer"]],["impl !RefUnwindSafe for BertEncoder",1,1,["candle_transformers::models::bert::BertEncoder"]],["impl !RefUnwindSafe for BertForMaskedLM",1,1,["candle_transformers::models::bert::BertForMaskedLM"]],["impl !RefUnwindSafe for BertLMPredictionHead",1,1,["candle_transformers::models::bert::BertLMPredictionHead"]],["impl !RefUnwindSafe for BertLayer",1,1,["candle_transformers::models::bert::BertLayer"]],["impl !RefUnwindSafe for BertModel",1,1,["candle_transformers::models::bert::BertModel"]],["impl !RefUnwindSafe for BertOnlyMLMHead",1,1,["candle_transformers::models::bert::BertOnlyMLMHead"]],["impl !RefUnwindSafe for GPTBigCode",1,1,["candle_transformers::models::bigcode::GPTBigCode"]],["impl !RefUnwindSafe for BlipForConditionalGeneration",1,1,["candle_transformers::models::blip::BlipForConditionalGeneration"]],["impl !RefUnwindSafe for VisionModel",1,1,["candle_transformers::models::blip::VisionModel"]],["impl !RefUnwindSafe for TextLMHeadModel",1,1,["candle_transformers::models::blip_text::TextLMHeadModel"]],["impl !RefUnwindSafe for TextPooler",1,1,["candle_transformers::models::blip_text::TextPooler"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::chatglm::Model"]],["impl !RefUnwindSafe for ChineseClipModel",1,1,["candle_transformers::models::chinese_clip::ChineseClipModel"]],["impl !RefUnwindSafe for ChineseClipTextEmbeddings",1,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextEmbeddings"]],["impl !RefUnwindSafe for ChineseClipTextTransformer",1,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextTransformer"]],["impl !RefUnwindSafe for ChineseClipVisionEmbeddings",1,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionEmbeddings"]],["impl !RefUnwindSafe for ChineseClipVisionEncoder",1,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionEncoder"]],["impl !RefUnwindSafe for ChineseClipVisionTransformer",1,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionTransformer"]],["impl !RefUnwindSafe for ClipModel",1,1,["candle_transformers::models::clip::ClipModel"]],["impl !RefUnwindSafe for ClipEncoder",1,1,["candle_transformers::models::clip::text_model::ClipEncoder"]],["impl !RefUnwindSafe for ClipTextTransformer",1,1,["candle_transformers::models::clip::text_model::ClipTextTransformer"]],["impl !RefUnwindSafe for ClipVisionTransformer",1,1,["candle_transformers::models::clip::vision_model::ClipVisionTransformer"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::codegeex4_9b::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::colpali::Model"]],["impl !RefUnwindSafe for Decoder",1,1,["candle_transformers::models::dac::Decoder"]],["impl !RefUnwindSafe for DecoderBlock",1,1,["candle_transformers::models::dac::DecoderBlock"]],["impl !RefUnwindSafe for Encoder",1,1,["candle_transformers::models::dac::Encoder"]],["impl !RefUnwindSafe for EncoderBlock",1,1,["candle_transformers::models::dac::EncoderBlock"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::dac::Model"]],["impl !RefUnwindSafe for ResidualUnit",1,1,["candle_transformers::models::dac::ResidualUnit"]],["impl !RefUnwindSafe for ResidualVectorQuantizer",1,1,["candle_transformers::models::dac::ResidualVectorQuantizer"]],["impl !RefUnwindSafe for Snake1d",1,1,["candle_transformers::models::dac::Snake1d"]],["impl !RefUnwindSafe for VectorQuantizer",1,1,["candle_transformers::models::dac::VectorQuantizer"]],["impl !RefUnwindSafe for ConvLayer",1,1,["candle_transformers::models::debertav2::ConvLayer"]],["impl !RefUnwindSafe for DebertaV2Attention",1,1,["candle_transformers::models::debertav2::DebertaV2Attention"]],["impl !RefUnwindSafe for DebertaV2ContextPooler",1,1,["candle_transformers::models::debertav2::DebertaV2ContextPooler"]],["impl !RefUnwindSafe for DebertaV2DisentangledSelfAttention",1,1,["candle_transformers::models::debertav2::DebertaV2DisentangledSelfAttention"]],["impl !RefUnwindSafe for DebertaV2Embeddings",1,1,["candle_transformers::models::debertav2::DebertaV2Embeddings"]],["impl !RefUnwindSafe for DebertaV2Encoder",1,1,["candle_transformers::models::debertav2::DebertaV2Encoder"]],["impl !RefUnwindSafe for DebertaV2Intermediate",1,1,["candle_transformers::models::debertav2::DebertaV2Intermediate"]],["impl !RefUnwindSafe for DebertaV2Layer",1,1,["candle_transformers::models::debertav2::DebertaV2Layer"]],["impl !RefUnwindSafe for DebertaV2Model",1,1,["candle_transformers::models::debertav2::DebertaV2Model"]],["impl !RefUnwindSafe for DebertaV2NERModel",1,1,["candle_transformers::models::debertav2::DebertaV2NERModel"]],["impl !RefUnwindSafe for DebertaV2Output",1,1,["candle_transformers::models::debertav2::DebertaV2Output"]],["impl !RefUnwindSafe for DebertaV2SelfOutput",1,1,["candle_transformers::models::debertav2::DebertaV2SelfOutput"]],["impl !RefUnwindSafe for DebertaV2SeqClassificationModel",1,1,["candle_transformers::models::debertav2::DebertaV2SeqClassificationModel"]],["impl !RefUnwindSafe for HiddenActLayer",1,1,["candle_transformers::models::debertav2::HiddenActLayer"]],["impl !RefUnwindSafe for DeepSeekV2",1,1,["candle_transformers::models::deepseek2::DeepSeekV2"]],["impl !RefUnwindSafe for DeepSeekV2RotaryEmbedding",1,1,["candle_transformers::models::deepseek2::DeepSeekV2RotaryEmbedding"]],["impl !RefUnwindSafe for TopKOutput",1,1,["candle_transformers::models::deepseek2::TopKOutput"]],["impl !RefUnwindSafe for DPTHead",1,1,["candle_transformers::models::depth_anything_v2::DPTHead"]],["impl !RefUnwindSafe for DepthAnythingV2",1,1,["candle_transformers::models::depth_anything_v2::DepthAnythingV2"]],["impl !RefUnwindSafe for FeatureFusionBlock",1,1,["candle_transformers::models::depth_anything_v2::FeatureFusionBlock"]],["impl !RefUnwindSafe for ResidualConvUnit",1,1,["candle_transformers::models::depth_anything_v2::ResidualConvUnit"]],["impl !RefUnwindSafe for Scratch",1,1,["candle_transformers::models::depth_anything_v2::Scratch"]],["impl !RefUnwindSafe for DinoVisionTransformer",1,1,["candle_transformers::models::dinov2::DinoVisionTransformer"]],["impl !RefUnwindSafe for DinoVisionTransformer",1,1,["candle_transformers::models::dinov2reg4::DinoVisionTransformer"]],["impl !RefUnwindSafe for DistilBertModel",1,1,["candle_transformers::models::distilbert::DistilBertModel"]],["impl !RefUnwindSafe for EfficientNet",1,1,["candle_transformers::models::efficientnet::EfficientNet"]],["impl !RefUnwindSafe for Decoder",1,1,["candle_transformers::models::encodec::Decoder"]],["impl !RefUnwindSafe for EncodecConv1d",1,1,["candle_transformers::models::encodec::EncodecConv1d"]],["impl !RefUnwindSafe for EncodecConvTranspose1d",1,1,["candle_transformers::models::encodec::EncodecConvTranspose1d"]],["impl !RefUnwindSafe for EncodecLSTM",1,1,["candle_transformers::models::encodec::EncodecLSTM"]],["impl !RefUnwindSafe for EncodecResnetBlock",1,1,["candle_transformers::models::encodec::EncodecResnetBlock"]],["impl !RefUnwindSafe for Encoder",1,1,["candle_transformers::models::encodec::Encoder"]],["impl !RefUnwindSafe for EuclideanCodebook",1,1,["candle_transformers::models::encodec::EuclideanCodebook"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::encodec::Model"]],["impl !RefUnwindSafe for ResidualVectorQuantizer",1,1,["candle_transformers::models::encodec::ResidualVectorQuantizer"]],["impl !RefUnwindSafe for VectorQuantization",1,1,["candle_transformers::models::encodec::VectorQuantization"]],["impl !RefUnwindSafe for EVA2VisionTransformer",1,1,["candle_transformers::models::eva2::EVA2VisionTransformer"]],["impl !RefUnwindSafe for Falcon",1,1,["candle_transformers::models::falcon::Falcon"]],["impl !RefUnwindSafe for AutoEncoder",1,1,["candle_transformers::models::flux::autoencoder::AutoEncoder"]],["impl !RefUnwindSafe for Decoder",1,1,["candle_transformers::models::flux::autoencoder::Decoder"]],["impl !RefUnwindSafe for Encoder",1,1,["candle_transformers::models::flux::autoencoder::Encoder"]],["impl !RefUnwindSafe for DoubleStreamBlock",1,1,["candle_transformers::models::flux::model::DoubleStreamBlock"]],["impl !RefUnwindSafe for Flux",1,1,["candle_transformers::models::flux::model::Flux"]],["impl !RefUnwindSafe for LastLayer",1,1,["candle_transformers::models::flux::model::LastLayer"]],["impl !RefUnwindSafe for MlpEmbedder",1,1,["candle_transformers::models::flux::model::MlpEmbedder"]],["impl !RefUnwindSafe for QkNorm",1,1,["candle_transformers::models::flux::model::QkNorm"]],["impl !RefUnwindSafe for SelfAttention",1,1,["candle_transformers::models::flux::model::SelfAttention"]],["impl !RefUnwindSafe for SingleStreamBlock",1,1,["candle_transformers::models::flux::model::SingleStreamBlock"]],["impl !RefUnwindSafe for DoubleStreamBlock",1,1,["candle_transformers::models::flux::quantized_model::DoubleStreamBlock"]],["impl !RefUnwindSafe for Flux",1,1,["candle_transformers::models::flux::quantized_model::Flux"]],["impl !RefUnwindSafe for LastLayer",1,1,["candle_transformers::models::flux::quantized_model::LastLayer"]],["impl !RefUnwindSafe for MlpEmbedder",1,1,["candle_transformers::models::flux::quantized_model::MlpEmbedder"]],["impl !RefUnwindSafe for QkNorm",1,1,["candle_transformers::models::flux::quantized_model::QkNorm"]],["impl !RefUnwindSafe for SelfAttention",1,1,["candle_transformers::models::flux::quantized_model::SelfAttention"]],["impl !RefUnwindSafe for SingleStreamBlock",1,1,["candle_transformers::models::flux::quantized_model::SingleStreamBlock"]],["impl !RefUnwindSafe for State",1,1,["candle_transformers::models::flux::sampling::State"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::gemma2::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::gemma3::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::gemma::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::glm4::Model"]],["impl !RefUnwindSafe for Cache",1,1,["candle_transformers::models::granite::Cache"]],["impl !RefUnwindSafe for Granite",1,1,["candle_transformers::models::granite::Granite"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::helium::Model"]],["impl !RefUnwindSafe for BertModel",1,1,["candle_transformers::models::jina_bert::BertModel"]],["impl !RefUnwindSafe for Cache",1,1,["candle_transformers::models::llama2_c::Cache"]],["impl !RefUnwindSafe for Llama",1,1,["candle_transformers::models::llama2_c::Llama"]],["impl !RefUnwindSafe for TransformerWeights",1,1,["candle_transformers::models::llama2_c_weights::TransformerWeights"]],["impl !RefUnwindSafe for Cache",1,1,["candle_transformers::models::llama::Cache"]],["impl !RefUnwindSafe for Llama",1,1,["candle_transformers::models::llama::Llama"]],["impl !RefUnwindSafe for ClipVisionTower",1,1,["candle_transformers::models::llava::ClipVisionTower"]],["impl !RefUnwindSafe for LLaVA",1,1,["candle_transformers::models::llava::LLaVA"]],["impl !RefUnwindSafe for MMProjector",1,1,["candle_transformers::models::llava::MMProjector"]],["impl !RefUnwindSafe for MambaBlock",1,1,["candle_transformers::models::mamba::MambaBlock"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::mamba::Model"]],["impl !RefUnwindSafe for ResidualBlock",1,1,["candle_transformers::models::mamba::ResidualBlock"]],["impl !RefUnwindSafe for State",1,1,["candle_transformers::models::mamba::State"]],["impl !RefUnwindSafe for Decoder",1,1,["candle_transformers::models::marian::Decoder"]],["impl !RefUnwindSafe for Encoder",1,1,["candle_transformers::models::marian::Encoder"]],["impl !RefUnwindSafe for MTModel",1,1,["candle_transformers::models::marian::MTModel"]],["impl !RefUnwindSafe for FlattenedInterleavedEncodec2Codebook",1,1,["candle_transformers::models::metavoice::adapters::FlattenedInterleavedEncodec2Codebook"]],["impl !RefUnwindSafe for TiltedEncodec",1,1,["candle_transformers::models::metavoice::adapters::TiltedEncodec"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::metavoice::gpt::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::metavoice::speaker_encoder::Model"]],["impl !RefUnwindSafe for BPE",1,1,["candle_transformers::models::metavoice::tokenizers::BPE"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::metavoice::transformer::Model"]],["impl !RefUnwindSafe for ConvDownsample1d",1,1,["candle_transformers::models::mimi::conv::ConvDownsample1d"]],["impl !RefUnwindSafe for ConvTrUpsample1d",1,1,["candle_transformers::models::mimi::conv::ConvTrUpsample1d"]],["impl !RefUnwindSafe for NormConv1d",1,1,["candle_transformers::models::mimi::conv::NormConv1d"]],["impl !RefUnwindSafe for NormConvTranspose1d",1,1,["candle_transformers::models::mimi::conv::NormConvTranspose1d"]],["impl !RefUnwindSafe for StreamableConv1d",1,1,["candle_transformers::models::mimi::conv::StreamableConv1d"]],["impl !RefUnwindSafe for StreamableConvTranspose1d",1,1,["candle_transformers::models::mimi::conv::StreamableConvTranspose1d"]],["impl !RefUnwindSafe for Encodec",1,1,["candle_transformers::models::mimi::encodec::Encodec"]],["impl !RefUnwindSafe for EuclideanCodebook",1,1,["candle_transformers::models::mimi::quantization::EuclideanCodebook"]],["impl !RefUnwindSafe for ResidualVectorQuantization",1,1,["candle_transformers::models::mimi::quantization::ResidualVectorQuantization"]],["impl !RefUnwindSafe for ResidualVectorQuantizer",1,1,["candle_transformers::models::mimi::quantization::ResidualVectorQuantizer"]],["impl !RefUnwindSafe for SplitResidualVectorQuantizer",1,1,["candle_transformers::models::mimi::quantization::SplitResidualVectorQuantizer"]],["impl !RefUnwindSafe for VectorQuantization",1,1,["candle_transformers::models::mimi::quantization::VectorQuantization"]],["impl !RefUnwindSafe for SeaNetDecoder",1,1,["candle_transformers::models::mimi::seanet::SeaNetDecoder"]],["impl !RefUnwindSafe for SeaNetEncoder",1,1,["candle_transformers::models::mimi::seanet::SeaNetEncoder"]],["impl !RefUnwindSafe for SeaNetResnetBlock",1,1,["candle_transformers::models::mimi::seanet::SeaNetResnetBlock"]],["impl !RefUnwindSafe for LayerScale",1,1,["candle_transformers::models::mimi::transformer::LayerScale"]],["impl !RefUnwindSafe for ProjectedTransformer",1,1,["candle_transformers::models::mimi::transformer::ProjectedTransformer"]],["impl !RefUnwindSafe for RmsNorm",1,1,["candle_transformers::models::mimi::transformer::RmsNorm"]],["impl !RefUnwindSafe for RotaryEmbedding",1,1,["candle_transformers::models::mimi::transformer::RotaryEmbedding"]],["impl !RefUnwindSafe for StreamingMultiheadAttention",1,1,["candle_transformers::models::mimi::transformer::StreamingMultiheadAttention"]],["impl !RefUnwindSafe for StreamingMultiheadCrossAttention",1,1,["candle_transformers::models::mimi::transformer::StreamingMultiheadCrossAttention"]],["impl !RefUnwindSafe for StreamingTransformer",1,1,["candle_transformers::models::mimi::transformer::StreamingTransformer"]],["impl !RefUnwindSafe for StreamingTransformerLayer",1,1,["candle_transformers::models::mimi::transformer::StreamingTransformerLayer"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::mistral::Model"]],["impl !RefUnwindSafe for MixFormerSequentialForCausalLM",1,1,["candle_transformers::models::mixformer::MixFormerSequentialForCausalLM"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::mixtral::Model"]],["impl !RefUnwindSafe for ContextQkvOnlyJointBlock",1,1,["candle_transformers::models::mmdit::blocks::ContextQkvOnlyJointBlock"]],["impl !RefUnwindSafe for DiTBlock",1,1,["candle_transformers::models::mmdit::blocks::DiTBlock"]],["impl !RefUnwindSafe for FinalLayer",1,1,["candle_transformers::models::mmdit::blocks::FinalLayer"]],["impl !RefUnwindSafe for MMDiTJointBlock",1,1,["candle_transformers::models::mmdit::blocks::MMDiTJointBlock"]],["impl !RefUnwindSafe for MMDiTXJointBlock",1,1,["candle_transformers::models::mmdit::blocks::MMDiTXJointBlock"]],["impl !RefUnwindSafe for ModulateIntermediates",1,1,["candle_transformers::models::mmdit::blocks::ModulateIntermediates"]],["impl !RefUnwindSafe for QkvOnlyDiTBlock",1,1,["candle_transformers::models::mmdit::blocks::QkvOnlyDiTBlock"]],["impl !RefUnwindSafe for SelfAttnDiTBlock",1,1,["candle_transformers::models::mmdit::blocks::SelfAttnDiTBlock"]],["impl !RefUnwindSafe for SelfAttnModulateIntermediates",1,1,["candle_transformers::models::mmdit::blocks::SelfAttnModulateIntermediates"]],["impl !RefUnwindSafe for PatchEmbedder",1,1,["candle_transformers::models::mmdit::embedding::PatchEmbedder"]],["impl !RefUnwindSafe for PositionEmbedder",1,1,["candle_transformers::models::mmdit::embedding::PositionEmbedder"]],["impl !RefUnwindSafe for TimestepEmbedder",1,1,["candle_transformers::models::mmdit::embedding::TimestepEmbedder"]],["impl !RefUnwindSafe for VectorEmbedder",1,1,["candle_transformers::models::mmdit::embedding::VectorEmbedder"]],["impl !RefUnwindSafe for MMDiT",1,1,["candle_transformers::models::mmdit::model::MMDiT"]],["impl !RefUnwindSafe for MMDiTCore",1,1,["candle_transformers::models::mmdit::model::MMDiTCore"]],["impl !RefUnwindSafe for AttnProjections",1,1,["candle_transformers::models::mmdit::projections::AttnProjections"]],["impl !RefUnwindSafe for Mlp",1,1,["candle_transformers::models::mmdit::projections::Mlp"]],["impl !RefUnwindSafe for Qkv",1,1,["candle_transformers::models::mmdit::projections::Qkv"]],["impl !RefUnwindSafe for QkvOnlyAttnProjections",1,1,["candle_transformers::models::mmdit::projections::QkvOnlyAttnProjections"]],["impl !RefUnwindSafe for MobileClipModel",1,1,["candle_transformers::models::mobileclip::MobileClipModel"]],["impl !RefUnwindSafe for ModernBert",1,1,["candle_transformers::models::modernbert::ModernBert"]],["impl !RefUnwindSafe for ModernBertClassifier",1,1,["candle_transformers::models::modernbert::ModernBertClassifier"]],["impl !RefUnwindSafe for ModernBertDecoder",1,1,["candle_transformers::models::modernbert::ModernBertDecoder"]],["impl !RefUnwindSafe for ModernBertForMaskedLM",1,1,["candle_transformers::models::modernbert::ModernBertForMaskedLM"]],["impl !RefUnwindSafe for ModernBertForSequenceClassification",1,1,["candle_transformers::models::modernbert::ModernBertForSequenceClassification"]],["impl !RefUnwindSafe for ModernBertHead",1,1,["candle_transformers::models::modernbert::ModernBertHead"]],["impl !RefUnwindSafe for ModernBertLayer",1,1,["candle_transformers::models::modernbert::ModernBertLayer"]],["impl !RefUnwindSafe for ModernBertMLP",1,1,["candle_transformers::models::modernbert::ModernBertMLP"]],["impl !RefUnwindSafe for Encoder",1,1,["candle_transformers::models::moondream::Encoder"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::moondream::Model"]],["impl !RefUnwindSafe for VisionEncoder",1,1,["candle_transformers::models::moondream::VisionEncoder"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::mpt::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::nvembed_v2::embedding::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::nvembed_v2::model::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::olmo::Model"]],["impl !RefUnwindSafe for Encoder",1,1,["candle_transformers::models::openclip::text_model::Encoder"]],["impl !RefUnwindSafe for OpenClipTextTransformer",1,1,["candle_transformers::models::openclip::text_model::OpenClipTextTransformer"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::paligemma::Model"]],["impl !RefUnwindSafe for MultiModalProjector",1,1,["candle_transformers::models::paligemma::MultiModalProjector"]],["impl !RefUnwindSafe for Attention",1,1,["candle_transformers::models::parler_tts::Attention"]],["impl !RefUnwindSafe for Decoder",1,1,["candle_transformers::models::parler_tts::Decoder"]],["impl !RefUnwindSafe for DecoderLayer",1,1,["candle_transformers::models::parler_tts::DecoderLayer"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::parler_tts::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::phi3::Model"]],["impl !RefUnwindSafe for RotaryEmbedding",1,1,["candle_transformers::models::phi3::RotaryEmbedding"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::phi::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::pixtral::llava::Model"]],["impl !RefUnwindSafe for MultiModalProjector",1,1,["candle_transformers::models::pixtral::llava::MultiModalProjector"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::pixtral::vision_model::Model"]],["impl !RefUnwindSafe for BlipForConditionalGeneration",1,1,["candle_transformers::models::quantized_blip::BlipForConditionalGeneration"]],["impl !RefUnwindSafe for VisionModel",1,1,["candle_transformers::models::quantized_blip::VisionModel"]],["impl !RefUnwindSafe for TextLMHeadModel",1,1,["candle_transformers::models::quantized_blip_text::TextLMHeadModel"]],["impl !RefUnwindSafe for TextPooler",1,1,["candle_transformers::models::quantized_blip_text::TextPooler"]],["impl !RefUnwindSafe for QLlama",1,1,["candle_transformers::models::quantized_llama2_c::QLlama"]],["impl !RefUnwindSafe for ModelWeights",1,1,["candle_transformers::models::quantized_llama::ModelWeights"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::quantized_metavoice::transformer::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::quantized_mistral::Model"]],["impl !RefUnwindSafe for MixFormerSequentialForCausalLM",1,1,["candle_transformers::models::quantized_mixformer::MixFormerSequentialForCausalLM"]],["impl !RefUnwindSafe for Encoder",1,1,["candle_transformers::models::quantized_moondream::Encoder"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::quantized_moondream::Model"]],["impl !RefUnwindSafe for VisionEncoder",1,1,["candle_transformers::models::quantized_moondream::VisionEncoder"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::quantized_mpt::Model"]],["impl !RefUnwindSafe for ModelWeights",1,1,["candle_transformers::models::quantized_phi3::ModelWeights"]],["impl !RefUnwindSafe for ModelWeights",1,1,["candle_transformers::models::quantized_phi::ModelWeights"]],["impl !RefUnwindSafe for ModelWeights",1,1,["candle_transformers::models::quantized_qwen2::ModelWeights"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::quantized_recurrent_gemma::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::quantized_rwkv_v5::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::quantized_rwkv_v6::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::quantized_stable_lm::Model"]],["impl !RefUnwindSafe for T5EncoderModel",1,1,["candle_transformers::models::quantized_t5::T5EncoderModel"]],["impl !RefUnwindSafe for T5ForConditionalGeneration",1,1,["candle_transformers::models::quantized_t5::T5ForConditionalGeneration"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::qwen2::Model"]],["impl !RefUnwindSafe for ModelForCausalLM",1,1,["candle_transformers::models::qwen2::ModelForCausalLM"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::qwen2_moe::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::recurrent_gemma::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::rwkv_v5::Model"]],["impl !RefUnwindSafe for State",1,1,["candle_transformers::models::rwkv_v5::State"]],["impl !RefUnwindSafe for StatePerLayer",1,1,["candle_transformers::models::rwkv_v5::StatePerLayer"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::rwkv_v6::Model"]],["impl !RefUnwindSafe for ImageClassificationModel",1,1,["candle_transformers::models::segformer::ImageClassificationModel"]],["impl !RefUnwindSafe for SemanticSegmentationModel",1,1,["candle_transformers::models::segformer::SemanticSegmentationModel"]],["impl !RefUnwindSafe for ImageEncoderViT",1,1,["candle_transformers::models::segment_anything::image_encoder::ImageEncoderViT"]],["impl !RefUnwindSafe for MaskDecoder",1,1,["candle_transformers::models::segment_anything::mask_decoder::MaskDecoder"]],["impl !RefUnwindSafe for PromptEncoder",1,1,["candle_transformers::models::segment_anything::prompt_encoder::PromptEncoder"]],["impl !RefUnwindSafe for Sam",1,1,["candle_transformers::models::segment_anything::sam::Sam"]],["impl !RefUnwindSafe for LayerNorm2d",1,1,["candle_transformers::models::segment_anything::LayerNorm2d"]],["impl !RefUnwindSafe for MlpBlock",1,1,["candle_transformers::models::segment_anything::MlpBlock"]],["impl !RefUnwindSafe for TinyViT",1,1,["candle_transformers::models::segment_anything::tiny_vit::TinyViT"]],["impl !RefUnwindSafe for TwoWayTransformer",1,1,["candle_transformers::models::segment_anything::transformer::TwoWayTransformer"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::siglip::Model"]],["impl !RefUnwindSafe for TextModel",1,1,["candle_transformers::models::siglip::TextModel"]],["impl !RefUnwindSafe for TextTransformer",1,1,["candle_transformers::models::siglip::TextTransformer"]],["impl !RefUnwindSafe for VisionModel",1,1,["candle_transformers::models::siglip::VisionModel"]],["impl !RefUnwindSafe for AttentionBlock",1,1,["candle_transformers::models::stable_diffusion::attention::AttentionBlock"]],["impl !RefUnwindSafe for CrossAttention",1,1,["candle_transformers::models::stable_diffusion::attention::CrossAttention"]],["impl !RefUnwindSafe for SpatialTransformer",1,1,["candle_transformers::models::stable_diffusion::attention::SpatialTransformer"]],["impl !RefUnwindSafe for ClipTextTransformer",1,1,["candle_transformers::models::stable_diffusion::clip::ClipTextTransformer"]],["impl !RefUnwindSafe for TimestepEmbedding",1,1,["candle_transformers::models::stable_diffusion::embeddings::TimestepEmbedding"]],["impl !RefUnwindSafe for ResnetBlock2D",1,1,["candle_transformers::models::stable_diffusion::resnet::ResnetBlock2D"]],["impl !RefUnwindSafe for StableDiffusionConfig",1,1,["candle_transformers::models::stable_diffusion::StableDiffusionConfig"]],["impl !RefUnwindSafe for UNet2DConditionModel",1,1,["candle_transformers::models::stable_diffusion::unet_2d::UNet2DConditionModel"]],["impl !RefUnwindSafe for CrossAttnDownBlock2D",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnDownBlock2D"]],["impl !RefUnwindSafe for CrossAttnUpBlock2D",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnUpBlock2D"]],["impl !RefUnwindSafe for DownBlock2D",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownBlock2D"]],["impl !RefUnwindSafe for DownEncoderBlock2D",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownEncoderBlock2D"]],["impl !RefUnwindSafe for UNetMidBlock2D",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2D"]],["impl !RefUnwindSafe for UNetMidBlock2DCrossAttn",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DCrossAttn"]],["impl !RefUnwindSafe for UpBlock2D",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpBlock2D"]],["impl !RefUnwindSafe for UpDecoderBlock2D",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpDecoderBlock2D"]],["impl !RefUnwindSafe for EdmDpmMultistepScheduler",1,1,["candle_transformers::models::stable_diffusion::uni_pc::EdmDpmMultistepScheduler"]],["impl !RefUnwindSafe for AutoEncoderKL",1,1,["candle_transformers::models::stable_diffusion::vae::AutoEncoderKL"]],["impl !RefUnwindSafe for DiagonalGaussianDistribution",1,1,["candle_transformers::models::stable_diffusion::vae::DiagonalGaussianDistribution"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::stable_lm::Model"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::starcoder2::Model"]],["impl !RefUnwindSafe for EmbeddingModel",1,1,["candle_transformers::models::stella_en_v5::EmbeddingModel"]],["impl !RefUnwindSafe for Embeddings",1,1,["candle_transformers::models::stella_en_v5::Embeddings"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::stella_en_v5::Model"]],["impl !RefUnwindSafe for Linear",1,1,["candle_transformers::models::t5::Linear"]],["impl !RefUnwindSafe for T5EncoderModel",1,1,["candle_transformers::models::t5::T5EncoderModel"]],["impl !RefUnwindSafe for T5ForConditionalGeneration",1,1,["candle_transformers::models::t5::T5ForConditionalGeneration"]],["impl !RefUnwindSafe for TrOCRDecoder",1,1,["candle_transformers::models::trocr::TrOCRDecoder"]],["impl !RefUnwindSafe for TrOCREncoder",1,1,["candle_transformers::models::trocr::TrOCREncoder"]],["impl !RefUnwindSafe for TrOCRForCausalLM",1,1,["candle_transformers::models::trocr::TrOCRForCausalLM"]],["impl !RefUnwindSafe for TrOCRModel",1,1,["candle_transformers::models::trocr::TrOCRModel"]],["impl !RefUnwindSafe for Embeddings",1,1,["candle_transformers::models::vit::Embeddings"]],["impl !RefUnwindSafe for Encoder",1,1,["candle_transformers::models::vit::Encoder"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::vit::Model"]],["impl !RefUnwindSafe for AudioEncoder",1,1,["candle_transformers::models::whisper::model::AudioEncoder"]],["impl !RefUnwindSafe for TextDecoder",1,1,["candle_transformers::models::whisper::model::TextDecoder"]],["impl !RefUnwindSafe for Whisper",1,1,["candle_transformers::models::whisper::model::Whisper"]],["impl !RefUnwindSafe for AudioEncoder",1,1,["candle_transformers::models::whisper::quantized_model::AudioEncoder"]],["impl !RefUnwindSafe for TextDecoder",1,1,["candle_transformers::models::whisper::quantized_model::TextDecoder"]],["impl !RefUnwindSafe for Whisper",1,1,["candle_transformers::models::whisper::quantized_model::Whisper"]],["impl !RefUnwindSafe for Conv2d",1,1,["candle_transformers::models::with_tracing::Conv2d"]],["impl !RefUnwindSafe for Embedding",1,1,["candle_transformers::models::with_tracing::Embedding"]],["impl !RefUnwindSafe for LayerNorm",1,1,["candle_transformers::models::with_tracing::LayerNorm"]],["impl !RefUnwindSafe for Linear",1,1,["candle_transformers::models::with_tracing::Linear"]],["impl !RefUnwindSafe for QMatMul",1,1,["candle_transformers::models::with_tracing::QMatMul"]],["impl !RefUnwindSafe for RmsNorm",1,1,["candle_transformers::models::with_tracing::RmsNorm"]],["impl !RefUnwindSafe for Attention",1,1,["candle_transformers::models::wuerstchen::attention_processor::Attention"]],["impl !RefUnwindSafe for AttnBlock",1,1,["candle_transformers::models::wuerstchen::common::AttnBlock"]],["impl !RefUnwindSafe for GlobalResponseNorm",1,1,["candle_transformers::models::wuerstchen::common::GlobalResponseNorm"]],["impl !RefUnwindSafe for ResBlock",1,1,["candle_transformers::models::wuerstchen::common::ResBlock"]],["impl !RefUnwindSafe for TimestepBlock",1,1,["candle_transformers::models::wuerstchen::common::TimestepBlock"]],["impl !RefUnwindSafe for ResBlockStageB",1,1,["candle_transformers::models::wuerstchen::diffnext::ResBlockStageB"]],["impl !RefUnwindSafe for WDiffNeXt",1,1,["candle_transformers::models::wuerstchen::diffnext::WDiffNeXt"]],["impl !RefUnwindSafe for MixingResidualBlock",1,1,["candle_transformers::models::wuerstchen::paella_vq::MixingResidualBlock"]],["impl !RefUnwindSafe for PaellaVQ",1,1,["candle_transformers::models::wuerstchen::paella_vq::PaellaVQ"]],["impl !RefUnwindSafe for WPrior",1,1,["candle_transformers::models::wuerstchen::prior::WPrior"]],["impl !RefUnwindSafe for XLMRobertaForMaskedLM",1,1,["candle_transformers::models::xlm_roberta::XLMRobertaForMaskedLM"]],["impl !RefUnwindSafe for XLMRobertaForSequenceClassification",1,1,["candle_transformers::models::xlm_roberta::XLMRobertaForSequenceClassification"]],["impl !RefUnwindSafe for XLMRobertaModel",1,1,["candle_transformers::models::xlm_roberta::XLMRobertaModel"]],["impl !RefUnwindSafe for Model",1,1,["candle_transformers::models::yi::Model"]],["impl !RefUnwindSafe for Embedding",1,1,["candle_transformers::quantized_nn::Embedding"]],["impl !RefUnwindSafe for Linear",1,1,["candle_transformers::quantized_nn::Linear"]],["impl !RefUnwindSafe for RmsNorm",1,1,["candle_transformers::quantized_nn::RmsNorm"]],["impl !RefUnwindSafe for VarBuilder",1,1,["candle_transformers::quantized_var_builder::VarBuilder"]],["impl<'a> !RefUnwindSafe for Vgg<'a>",1,1,["candle_transformers::models::vgg::Vgg"]],["impl RefUnwindSafe for Sampling",0,1,["candle_transformers::generation::Sampling"]],["impl RefUnwindSafe for HiddenAct",0,1,["candle_transformers::models::bert::HiddenAct"]],["impl RefUnwindSafe for PositionEmbeddingType",0,1,["candle_transformers::models::bert::PositionEmbeddingType"]],["impl RefUnwindSafe for Activation",0,1,["candle_transformers::models::chinese_clip::Activation"]],["impl RefUnwindSafe for EncoderConfig",0,1,["candle_transformers::models::chinese_clip::EncoderConfig"]],["impl RefUnwindSafe for PositionEmbeddingType",0,1,["candle_transformers::models::chinese_clip::text_model::PositionEmbeddingType"]],["impl RefUnwindSafe for EncoderConfig",0,1,["candle_transformers::models::clip::EncoderConfig"]],["impl RefUnwindSafe for Activation",0,1,["candle_transformers::models::clip::text_model::Activation"]],["impl RefUnwindSafe for HiddenAct",0,1,["candle_transformers::models::debertav2::HiddenAct"]],["impl RefUnwindSafe for DeepSeekV2RopeScaling",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RopeScaling"]],["impl RefUnwindSafe for ScaledRopeType",0,1,["candle_transformers::models::deepseek2::ScaledRopeType"]],["impl RefUnwindSafe for NormType",0,1,["candle_transformers::models::encodec::NormType"]],["impl RefUnwindSafe for PadMode",0,1,["candle_transformers::models::encodec::PadMode"]],["impl RefUnwindSafe for GraniteEosToks",0,1,["candle_transformers::models::granite::GraniteEosToks"]],["impl RefUnwindSafe for GraniteRopeType",0,1,["candle_transformers::models::granite::GraniteRopeType"]],["impl RefUnwindSafe for PositionEmbeddingType",0,1,["candle_transformers::models::jina_bert::PositionEmbeddingType"]],["impl RefUnwindSafe for Llama3RopeType",0,1,["candle_transformers::models::llama::Llama3RopeType"]],["impl RefUnwindSafe for LlamaEosToks",0,1,["candle_transformers::models::llama::LlamaEosToks"]],["impl RefUnwindSafe for AttnKernelType",0,1,["candle_transformers::models::metavoice::gpt::AttnKernelType"]],["impl RefUnwindSafe for NonLinearityType",0,1,["candle_transformers::models::metavoice::gpt::NonLinearityType"]],["impl RefUnwindSafe for NormType",0,1,["candle_transformers::models::metavoice::gpt::NormType"]],["impl RefUnwindSafe for Norm",0,1,["candle_transformers::models::mimi::conv::Norm"]],["impl RefUnwindSafe for PadMode",0,1,["candle_transformers::models::mimi::conv::PadMode"]],["impl RefUnwindSafe for ResampleMethod",0,1,["candle_transformers::models::mimi::encodec::ResampleMethod"]],["impl RefUnwindSafe for NormType",0,1,["candle_transformers::models::mimi::NormType"]],["impl RefUnwindSafe for PositionalEmbedding",0,1,["candle_transformers::models::mimi::transformer::PositionalEmbedding"]],["impl RefUnwindSafe for ClassifierPooling",0,1,["candle_transformers::models::modernbert::ClassifierPooling"]],["impl RefUnwindSafe for PositionEmbeddingType",0,1,["candle_transformers::models::persimmon::PositionEmbeddingType"]],["impl RefUnwindSafe for TemporalBlockType",0,1,["candle_transformers::models::recurrent_gemma::TemporalBlockType"]],["impl RefUnwindSafe for Activation",0,1,["candle_transformers::models::stable_diffusion::clip::Activation"]],["impl RefUnwindSafe for DDPMVarianceType",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMVarianceType"]],["impl RefUnwindSafe for BetaSchedule",0,1,["candle_transformers::models::stable_diffusion::schedulers::BetaSchedule"]],["impl RefUnwindSafe for PredictionType",0,1,["candle_transformers::models::stable_diffusion::schedulers::PredictionType"]],["impl RefUnwindSafe for TimestepSpacing",0,1,["candle_transformers::models::stable_diffusion::schedulers::TimestepSpacing"]],["impl RefUnwindSafe for AlgorithmType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::AlgorithmType"]],["impl RefUnwindSafe for CorrectorConfiguration",0,1,["candle_transformers::models::stable_diffusion::uni_pc::CorrectorConfiguration"]],["impl RefUnwindSafe for FinalSigmasType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::FinalSigmasType"]],["impl RefUnwindSafe for SigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::SigmaSchedule"]],["impl RefUnwindSafe for SolverType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::SolverType"]],["impl RefUnwindSafe for TimestepSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::TimestepSchedule"]],["impl RefUnwindSafe for EmbedDim",0,1,["candle_transformers::models::stella_en_v5::EmbedDim"]],["impl RefUnwindSafe for ModelVariant",0,1,["candle_transformers::models::stella_en_v5::ModelVariant"]],["impl RefUnwindSafe for Models",0,1,["candle_transformers::models::vgg::Models"]],["impl RefUnwindSafe for LogitsProcessor",0,1,["candle_transformers::generation::LogitsProcessor"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::based::Config"]],["impl RefUnwindSafe for LinearAttentionConfig",0,1,["candle_transformers::models::based::LinearAttentionConfig"]],["impl RefUnwindSafe for LinearAttentionFeatureMapConfig",0,1,["candle_transformers::models::based::LinearAttentionFeatureMapConfig"]],["impl RefUnwindSafe for SlidingWindowAttentionConfig",0,1,["candle_transformers::models::based::SlidingWindowAttentionConfig"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::bert::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::bigcode::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::blip::Config"]],["impl RefUnwindSafe for VisionConfig",0,1,["candle_transformers::models::blip::VisionConfig"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::blip_text::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::chatglm::Config"]],["impl RefUnwindSafe for ChineseClipConfig",0,1,["candle_transformers::models::chinese_clip::ChineseClipConfig"]],["impl RefUnwindSafe for ChineseClipTextConfig",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextConfig"]],["impl RefUnwindSafe for ChineseClipVisionConfig",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionConfig"]],["impl RefUnwindSafe for ClipConfig",0,1,["candle_transformers::models::clip::ClipConfig"]],["impl RefUnwindSafe for ClipTextConfig",0,1,["candle_transformers::models::clip::text_model::ClipTextConfig"]],["impl RefUnwindSafe for ClipVisionConfig",0,1,["candle_transformers::models::clip::vision_model::ClipVisionConfig"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::codegeex4_9b::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::convnext::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::dac::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::debertav2::Config"]],["impl RefUnwindSafe for NERItem",0,1,["candle_transformers::models::debertav2::NERItem"]],["impl RefUnwindSafe for StableDropout",0,1,["candle_transformers::models::debertav2::StableDropout"]],["impl RefUnwindSafe for TextClassificationItem",0,1,["candle_transformers::models::debertav2::TextClassificationItem"]],["impl RefUnwindSafe for DeepSeekV2Config",0,1,["candle_transformers::models::deepseek2::DeepSeekV2Config"]],["impl RefUnwindSafe for DeepSeekV2RopeConfig",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RopeConfig"]],["impl RefUnwindSafe for DepthAnythingV2Config",0,1,["candle_transformers::models::depth_anything_v2::DepthAnythingV2Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::distilbert::Config"]],["impl RefUnwindSafe for MBConvConfig",0,1,["candle_transformers::models::efficientnet::MBConvConfig"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::efficientvit::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::encodec::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::falcon::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::fastvit::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::flux::autoencoder::Config"]],["impl RefUnwindSafe for DiagonalGaussian",0,1,["candle_transformers::models::flux::autoencoder::DiagonalGaussian"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::flux::model::Config"]],["impl RefUnwindSafe for EmbedNd",0,1,["candle_transformers::models::flux::model::EmbedNd"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::gemma2::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::gemma3::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::gemma::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::glm4::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::granite::Config"]],["impl RefUnwindSafe for GraniteConfig",0,1,["candle_transformers::models::granite::GraniteConfig"]],["impl RefUnwindSafe for GraniteRopeConfig",0,1,["candle_transformers::models::granite::GraniteRopeConfig"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::helium::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::hiera::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::jina_bert::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::llama2_c::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::llama::Config"]],["impl RefUnwindSafe for Llama3RopeConfig",0,1,["candle_transformers::models::llama::Llama3RopeConfig"]],["impl RefUnwindSafe for LlamaConfig",0,1,["candle_transformers::models::llama::LlamaConfig"]],["impl RefUnwindSafe for HFGenerationConfig",0,1,["candle_transformers::models::llava::config::HFGenerationConfig"]],["impl RefUnwindSafe for HFLLaVAConfig",0,1,["candle_transformers::models::llava::config::HFLLaVAConfig"]],["impl RefUnwindSafe for HFLLaVATextConfig",0,1,["candle_transformers::models::llava::config::HFLLaVATextConfig"]],["impl RefUnwindSafe for HFLLaVAVisionConfig",0,1,["candle_transformers::models::llava::config::HFLLaVAVisionConfig"]],["impl RefUnwindSafe for HFPreProcessorConfig",0,1,["candle_transformers::models::llava::config::HFPreProcessorConfig"]],["impl RefUnwindSafe for LLaVAConfig",0,1,["candle_transformers::models::llava::config::LLaVAConfig"]],["impl RefUnwindSafe for IdentityMap",0,1,["candle_transformers::models::llava::IdentityMap"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::mamba::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::marian::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::metavoice::gpt::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::metavoice::speaker_encoder::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::metavoice::transformer::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::mimi::encodec::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::mimi::seanet::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::mimi::transformer::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::mistral::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::mixformer::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::mixtral::Config"]],["impl RefUnwindSafe for LayerNormNoAffine",0,1,["candle_transformers::models::mmdit::blocks::LayerNormNoAffine"]],["impl RefUnwindSafe for Unpatchifier",0,1,["candle_transformers::models::mmdit::embedding::Unpatchifier"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::mmdit::model::Config"]],["impl RefUnwindSafe for MobileClipConfig",0,1,["candle_transformers::models::mobileclip::MobileClipConfig"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::mobilenetv4::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::mobileone::Config"]],["impl RefUnwindSafe for ClassifierConfig",0,1,["candle_transformers::models::modernbert::ClassifierConfig"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::modernbert::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::moondream::Config"]],["impl RefUnwindSafe for VisionConfig",0,1,["candle_transformers::models::moondream::VisionConfig"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::mpt::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::olmo::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::openclip::text_model::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::paligemma::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::parler_tts::Config"]],["impl RefUnwindSafe for DecoderConfig",0,1,["candle_transformers::models::parler_tts::DecoderConfig"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::persimmon::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::phi3::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::phi::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::pixtral::llava::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::pixtral::vision_model::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::quantized_t5::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::qwen2::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::qwen2_moe::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::recurrent_gemma::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::repvgg::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::rwkv_v5::Config"]],["impl RefUnwindSafe for Tokenizer",0,1,["candle_transformers::models::rwkv_v5::Tokenizer"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::segformer::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::siglip::Config"]],["impl RefUnwindSafe for TextConfig",0,1,["candle_transformers::models::siglip::TextConfig"]],["impl RefUnwindSafe for VisionConfig",0,1,["candle_transformers::models::siglip::VisionConfig"]],["impl RefUnwindSafe for AttentionBlockConfig",0,1,["candle_transformers::models::stable_diffusion::attention::AttentionBlockConfig"]],["impl RefUnwindSafe for SpatialTransformerConfig",0,1,["candle_transformers::models::stable_diffusion::attention::SpatialTransformerConfig"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::stable_diffusion::clip::Config"]],["impl RefUnwindSafe for DDIMScheduler",0,1,["candle_transformers::models::stable_diffusion::ddim::DDIMScheduler"]],["impl RefUnwindSafe for DDIMSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::ddim::DDIMSchedulerConfig"]],["impl RefUnwindSafe for DDPMScheduler",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMScheduler"]],["impl RefUnwindSafe for DDPMSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMSchedulerConfig"]],["impl RefUnwindSafe for Timesteps",0,1,["candle_transformers::models::stable_diffusion::embeddings::Timesteps"]],["impl RefUnwindSafe for EulerAncestralDiscreteScheduler",0,1,["candle_transformers::models::stable_diffusion::euler_ancestral_discrete::EulerAncestralDiscreteScheduler"]],["impl RefUnwindSafe for EulerAncestralDiscreteSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::euler_ancestral_discrete::EulerAncestralDiscreteSchedulerConfig"]],["impl RefUnwindSafe for ResnetBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::resnet::ResnetBlock2DConfig"]],["impl RefUnwindSafe for BlockConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d::BlockConfig"]],["impl RefUnwindSafe for UNet2DConditionModelConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d::UNet2DConditionModelConfig"]],["impl RefUnwindSafe for CrossAttnDownBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnDownBlock2DConfig"]],["impl RefUnwindSafe for CrossAttnUpBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnUpBlock2DConfig"]],["impl RefUnwindSafe for DownBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownBlock2DConfig"]],["impl RefUnwindSafe for DownEncoderBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownEncoderBlock2DConfig"]],["impl RefUnwindSafe for UNetMidBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DConfig"]],["impl RefUnwindSafe for UNetMidBlock2DCrossAttnConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DCrossAttnConfig"]],["impl RefUnwindSafe for UpBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpBlock2DConfig"]],["impl RefUnwindSafe for UpDecoderBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpDecoderBlock2DConfig"]],["impl RefUnwindSafe for ExponentialSigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::ExponentialSigmaSchedule"]],["impl RefUnwindSafe for KarrasSigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::KarrasSigmaSchedule"]],["impl RefUnwindSafe for UniPCSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::uni_pc::UniPCSchedulerConfig"]],["impl RefUnwindSafe for AutoEncoderKLConfig",0,1,["candle_transformers::models::stable_diffusion::vae::AutoEncoderKLConfig"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::stable_lm::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::starcoder2::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::stella_en_v5::Config"]],["impl RefUnwindSafe for EmbedHead",0,1,["candle_transformers::models::stella_en_v5::EmbedHead"]],["impl RefUnwindSafe for ActivationWithOptionalGating",0,1,["candle_transformers::models::t5::ActivationWithOptionalGating"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::t5::Config"]],["impl RefUnwindSafe for TrOCRConfig",0,1,["candle_transformers::models::trocr::TrOCRConfig"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::vit::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::whisper::Config"]],["impl RefUnwindSafe for LayerNormNoWeights",0,1,["candle_transformers::models::wuerstchen::common::LayerNormNoWeights"]],["impl RefUnwindSafe for WLayerNorm",0,1,["candle_transformers::models::wuerstchen::common::WLayerNorm"]],["impl RefUnwindSafe for DDPMWScheduler",0,1,["candle_transformers::models::wuerstchen::ddpm::DDPMWScheduler"]],["impl RefUnwindSafe for DDPMWSchedulerConfig",0,1,["candle_transformers::models::wuerstchen::ddpm::DDPMWSchedulerConfig"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::xlm_roberta::Config"]],["impl RefUnwindSafe for Config",0,1,["candle_transformers::models::yi::Config"]],["impl RefUnwindSafe for KeyPoint",0,1,["candle_transformers::object_detection::KeyPoint"]],["impl<D> RefUnwindSafe for Bbox<D>
where\n D: RefUnwindSafe,
",0,1,["candle_transformers::object_detection::Bbox"]]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[220914]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/network-poc/target-native/doc/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js deleted file mode 100644 index 4ddcc04..0000000 --- a/network-poc/target-native/doc/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl !UnwindSafe for Mlp",1,1,["candle_transformers::models::mimi::transformer::Mlp"]],["impl !UnwindSafe for Norm",1,1,["candle_transformers::models::mimi::transformer::Norm"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::based::Model"]],["impl !UnwindSafe for BeitVisionTransformer",1,1,["candle_transformers::models::beit::BeitVisionTransformer"]],["impl !UnwindSafe for BertEncoder",1,1,["candle_transformers::models::bert::BertEncoder"]],["impl !UnwindSafe for BertForMaskedLM",1,1,["candle_transformers::models::bert::BertForMaskedLM"]],["impl !UnwindSafe for BertLMPredictionHead",1,1,["candle_transformers::models::bert::BertLMPredictionHead"]],["impl !UnwindSafe for BertLayer",1,1,["candle_transformers::models::bert::BertLayer"]],["impl !UnwindSafe for BertModel",1,1,["candle_transformers::models::bert::BertModel"]],["impl !UnwindSafe for BertOnlyMLMHead",1,1,["candle_transformers::models::bert::BertOnlyMLMHead"]],["impl !UnwindSafe for GPTBigCode",1,1,["candle_transformers::models::bigcode::GPTBigCode"]],["impl !UnwindSafe for BlipForConditionalGeneration",1,1,["candle_transformers::models::blip::BlipForConditionalGeneration"]],["impl !UnwindSafe for VisionModel",1,1,["candle_transformers::models::blip::VisionModel"]],["impl !UnwindSafe for TextLMHeadModel",1,1,["candle_transformers::models::blip_text::TextLMHeadModel"]],["impl !UnwindSafe for TextPooler",1,1,["candle_transformers::models::blip_text::TextPooler"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::chatglm::Model"]],["impl !UnwindSafe for ChineseClipModel",1,1,["candle_transformers::models::chinese_clip::ChineseClipModel"]],["impl !UnwindSafe for ChineseClipTextEmbeddings",1,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextEmbeddings"]],["impl !UnwindSafe for ChineseClipTextTransformer",1,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextTransformer"]],["impl !UnwindSafe for ChineseClipVisionEmbeddings",1,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionEmbeddings"]],["impl !UnwindSafe for ChineseClipVisionEncoder",1,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionEncoder"]],["impl !UnwindSafe for ChineseClipVisionTransformer",1,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionTransformer"]],["impl !UnwindSafe for ClipModel",1,1,["candle_transformers::models::clip::ClipModel"]],["impl !UnwindSafe for ClipEncoder",1,1,["candle_transformers::models::clip::text_model::ClipEncoder"]],["impl !UnwindSafe for ClipTextTransformer",1,1,["candle_transformers::models::clip::text_model::ClipTextTransformer"]],["impl !UnwindSafe for ClipVisionTransformer",1,1,["candle_transformers::models::clip::vision_model::ClipVisionTransformer"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::codegeex4_9b::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::colpali::Model"]],["impl !UnwindSafe for Decoder",1,1,["candle_transformers::models::dac::Decoder"]],["impl !UnwindSafe for DecoderBlock",1,1,["candle_transformers::models::dac::DecoderBlock"]],["impl !UnwindSafe for Encoder",1,1,["candle_transformers::models::dac::Encoder"]],["impl !UnwindSafe for EncoderBlock",1,1,["candle_transformers::models::dac::EncoderBlock"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::dac::Model"]],["impl !UnwindSafe for ResidualUnit",1,1,["candle_transformers::models::dac::ResidualUnit"]],["impl !UnwindSafe for ResidualVectorQuantizer",1,1,["candle_transformers::models::dac::ResidualVectorQuantizer"]],["impl !UnwindSafe for Snake1d",1,1,["candle_transformers::models::dac::Snake1d"]],["impl !UnwindSafe for VectorQuantizer",1,1,["candle_transformers::models::dac::VectorQuantizer"]],["impl !UnwindSafe for ConvLayer",1,1,["candle_transformers::models::debertav2::ConvLayer"]],["impl !UnwindSafe for DebertaV2Attention",1,1,["candle_transformers::models::debertav2::DebertaV2Attention"]],["impl !UnwindSafe for DebertaV2ContextPooler",1,1,["candle_transformers::models::debertav2::DebertaV2ContextPooler"]],["impl !UnwindSafe for DebertaV2DisentangledSelfAttention",1,1,["candle_transformers::models::debertav2::DebertaV2DisentangledSelfAttention"]],["impl !UnwindSafe for DebertaV2Embeddings",1,1,["candle_transformers::models::debertav2::DebertaV2Embeddings"]],["impl !UnwindSafe for DebertaV2Encoder",1,1,["candle_transformers::models::debertav2::DebertaV2Encoder"]],["impl !UnwindSafe for DebertaV2Intermediate",1,1,["candle_transformers::models::debertav2::DebertaV2Intermediate"]],["impl !UnwindSafe for DebertaV2Layer",1,1,["candle_transformers::models::debertav2::DebertaV2Layer"]],["impl !UnwindSafe for DebertaV2Model",1,1,["candle_transformers::models::debertav2::DebertaV2Model"]],["impl !UnwindSafe for DebertaV2NERModel",1,1,["candle_transformers::models::debertav2::DebertaV2NERModel"]],["impl !UnwindSafe for DebertaV2Output",1,1,["candle_transformers::models::debertav2::DebertaV2Output"]],["impl !UnwindSafe for DebertaV2SelfOutput",1,1,["candle_transformers::models::debertav2::DebertaV2SelfOutput"]],["impl !UnwindSafe for DebertaV2SeqClassificationModel",1,1,["candle_transformers::models::debertav2::DebertaV2SeqClassificationModel"]],["impl !UnwindSafe for HiddenActLayer",1,1,["candle_transformers::models::debertav2::HiddenActLayer"]],["impl !UnwindSafe for DeepSeekV2",1,1,["candle_transformers::models::deepseek2::DeepSeekV2"]],["impl !UnwindSafe for DeepSeekV2RotaryEmbedding",1,1,["candle_transformers::models::deepseek2::DeepSeekV2RotaryEmbedding"]],["impl !UnwindSafe for TopKOutput",1,1,["candle_transformers::models::deepseek2::TopKOutput"]],["impl !UnwindSafe for DPTHead",1,1,["candle_transformers::models::depth_anything_v2::DPTHead"]],["impl !UnwindSafe for DepthAnythingV2",1,1,["candle_transformers::models::depth_anything_v2::DepthAnythingV2"]],["impl !UnwindSafe for FeatureFusionBlock",1,1,["candle_transformers::models::depth_anything_v2::FeatureFusionBlock"]],["impl !UnwindSafe for ResidualConvUnit",1,1,["candle_transformers::models::depth_anything_v2::ResidualConvUnit"]],["impl !UnwindSafe for Scratch",1,1,["candle_transformers::models::depth_anything_v2::Scratch"]],["impl !UnwindSafe for DinoVisionTransformer",1,1,["candle_transformers::models::dinov2::DinoVisionTransformer"]],["impl !UnwindSafe for DinoVisionTransformer",1,1,["candle_transformers::models::dinov2reg4::DinoVisionTransformer"]],["impl !UnwindSafe for DistilBertModel",1,1,["candle_transformers::models::distilbert::DistilBertModel"]],["impl !UnwindSafe for EfficientNet",1,1,["candle_transformers::models::efficientnet::EfficientNet"]],["impl !UnwindSafe for Decoder",1,1,["candle_transformers::models::encodec::Decoder"]],["impl !UnwindSafe for EncodecConv1d",1,1,["candle_transformers::models::encodec::EncodecConv1d"]],["impl !UnwindSafe for EncodecConvTranspose1d",1,1,["candle_transformers::models::encodec::EncodecConvTranspose1d"]],["impl !UnwindSafe for EncodecLSTM",1,1,["candle_transformers::models::encodec::EncodecLSTM"]],["impl !UnwindSafe for EncodecResnetBlock",1,1,["candle_transformers::models::encodec::EncodecResnetBlock"]],["impl !UnwindSafe for Encoder",1,1,["candle_transformers::models::encodec::Encoder"]],["impl !UnwindSafe for EuclideanCodebook",1,1,["candle_transformers::models::encodec::EuclideanCodebook"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::encodec::Model"]],["impl !UnwindSafe for ResidualVectorQuantizer",1,1,["candle_transformers::models::encodec::ResidualVectorQuantizer"]],["impl !UnwindSafe for VectorQuantization",1,1,["candle_transformers::models::encodec::VectorQuantization"]],["impl !UnwindSafe for EVA2VisionTransformer",1,1,["candle_transformers::models::eva2::EVA2VisionTransformer"]],["impl !UnwindSafe for Falcon",1,1,["candle_transformers::models::falcon::Falcon"]],["impl !UnwindSafe for AutoEncoder",1,1,["candle_transformers::models::flux::autoencoder::AutoEncoder"]],["impl !UnwindSafe for Decoder",1,1,["candle_transformers::models::flux::autoencoder::Decoder"]],["impl !UnwindSafe for Encoder",1,1,["candle_transformers::models::flux::autoencoder::Encoder"]],["impl !UnwindSafe for DoubleStreamBlock",1,1,["candle_transformers::models::flux::model::DoubleStreamBlock"]],["impl !UnwindSafe for Flux",1,1,["candle_transformers::models::flux::model::Flux"]],["impl !UnwindSafe for LastLayer",1,1,["candle_transformers::models::flux::model::LastLayer"]],["impl !UnwindSafe for MlpEmbedder",1,1,["candle_transformers::models::flux::model::MlpEmbedder"]],["impl !UnwindSafe for QkNorm",1,1,["candle_transformers::models::flux::model::QkNorm"]],["impl !UnwindSafe for SelfAttention",1,1,["candle_transformers::models::flux::model::SelfAttention"]],["impl !UnwindSafe for SingleStreamBlock",1,1,["candle_transformers::models::flux::model::SingleStreamBlock"]],["impl !UnwindSafe for DoubleStreamBlock",1,1,["candle_transformers::models::flux::quantized_model::DoubleStreamBlock"]],["impl !UnwindSafe for Flux",1,1,["candle_transformers::models::flux::quantized_model::Flux"]],["impl !UnwindSafe for LastLayer",1,1,["candle_transformers::models::flux::quantized_model::LastLayer"]],["impl !UnwindSafe for MlpEmbedder",1,1,["candle_transformers::models::flux::quantized_model::MlpEmbedder"]],["impl !UnwindSafe for QkNorm",1,1,["candle_transformers::models::flux::quantized_model::QkNorm"]],["impl !UnwindSafe for SelfAttention",1,1,["candle_transformers::models::flux::quantized_model::SelfAttention"]],["impl !UnwindSafe for SingleStreamBlock",1,1,["candle_transformers::models::flux::quantized_model::SingleStreamBlock"]],["impl !UnwindSafe for State",1,1,["candle_transformers::models::flux::sampling::State"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::gemma2::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::gemma3::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::gemma::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::glm4::Model"]],["impl !UnwindSafe for Cache",1,1,["candle_transformers::models::granite::Cache"]],["impl !UnwindSafe for Granite",1,1,["candle_transformers::models::granite::Granite"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::helium::Model"]],["impl !UnwindSafe for BertModel",1,1,["candle_transformers::models::jina_bert::BertModel"]],["impl !UnwindSafe for Cache",1,1,["candle_transformers::models::llama2_c::Cache"]],["impl !UnwindSafe for Llama",1,1,["candle_transformers::models::llama2_c::Llama"]],["impl !UnwindSafe for TransformerWeights",1,1,["candle_transformers::models::llama2_c_weights::TransformerWeights"]],["impl !UnwindSafe for Cache",1,1,["candle_transformers::models::llama::Cache"]],["impl !UnwindSafe for Llama",1,1,["candle_transformers::models::llama::Llama"]],["impl !UnwindSafe for ClipVisionTower",1,1,["candle_transformers::models::llava::ClipVisionTower"]],["impl !UnwindSafe for LLaVA",1,1,["candle_transformers::models::llava::LLaVA"]],["impl !UnwindSafe for MMProjector",1,1,["candle_transformers::models::llava::MMProjector"]],["impl !UnwindSafe for MambaBlock",1,1,["candle_transformers::models::mamba::MambaBlock"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::mamba::Model"]],["impl !UnwindSafe for ResidualBlock",1,1,["candle_transformers::models::mamba::ResidualBlock"]],["impl !UnwindSafe for State",1,1,["candle_transformers::models::mamba::State"]],["impl !UnwindSafe for Decoder",1,1,["candle_transformers::models::marian::Decoder"]],["impl !UnwindSafe for Encoder",1,1,["candle_transformers::models::marian::Encoder"]],["impl !UnwindSafe for MTModel",1,1,["candle_transformers::models::marian::MTModel"]],["impl !UnwindSafe for FlattenedInterleavedEncodec2Codebook",1,1,["candle_transformers::models::metavoice::adapters::FlattenedInterleavedEncodec2Codebook"]],["impl !UnwindSafe for TiltedEncodec",1,1,["candle_transformers::models::metavoice::adapters::TiltedEncodec"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::metavoice::gpt::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::metavoice::speaker_encoder::Model"]],["impl !UnwindSafe for BPE",1,1,["candle_transformers::models::metavoice::tokenizers::BPE"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::metavoice::transformer::Model"]],["impl !UnwindSafe for ConvDownsample1d",1,1,["candle_transformers::models::mimi::conv::ConvDownsample1d"]],["impl !UnwindSafe for ConvTrUpsample1d",1,1,["candle_transformers::models::mimi::conv::ConvTrUpsample1d"]],["impl !UnwindSafe for NormConv1d",1,1,["candle_transformers::models::mimi::conv::NormConv1d"]],["impl !UnwindSafe for NormConvTranspose1d",1,1,["candle_transformers::models::mimi::conv::NormConvTranspose1d"]],["impl !UnwindSafe for StreamableConv1d",1,1,["candle_transformers::models::mimi::conv::StreamableConv1d"]],["impl !UnwindSafe for StreamableConvTranspose1d",1,1,["candle_transformers::models::mimi::conv::StreamableConvTranspose1d"]],["impl !UnwindSafe for Encodec",1,1,["candle_transformers::models::mimi::encodec::Encodec"]],["impl !UnwindSafe for EuclideanCodebook",1,1,["candle_transformers::models::mimi::quantization::EuclideanCodebook"]],["impl !UnwindSafe for ResidualVectorQuantization",1,1,["candle_transformers::models::mimi::quantization::ResidualVectorQuantization"]],["impl !UnwindSafe for ResidualVectorQuantizer",1,1,["candle_transformers::models::mimi::quantization::ResidualVectorQuantizer"]],["impl !UnwindSafe for SplitResidualVectorQuantizer",1,1,["candle_transformers::models::mimi::quantization::SplitResidualVectorQuantizer"]],["impl !UnwindSafe for VectorQuantization",1,1,["candle_transformers::models::mimi::quantization::VectorQuantization"]],["impl !UnwindSafe for SeaNetDecoder",1,1,["candle_transformers::models::mimi::seanet::SeaNetDecoder"]],["impl !UnwindSafe for SeaNetEncoder",1,1,["candle_transformers::models::mimi::seanet::SeaNetEncoder"]],["impl !UnwindSafe for SeaNetResnetBlock",1,1,["candle_transformers::models::mimi::seanet::SeaNetResnetBlock"]],["impl !UnwindSafe for LayerScale",1,1,["candle_transformers::models::mimi::transformer::LayerScale"]],["impl !UnwindSafe for ProjectedTransformer",1,1,["candle_transformers::models::mimi::transformer::ProjectedTransformer"]],["impl !UnwindSafe for RmsNorm",1,1,["candle_transformers::models::mimi::transformer::RmsNorm"]],["impl !UnwindSafe for RotaryEmbedding",1,1,["candle_transformers::models::mimi::transformer::RotaryEmbedding"]],["impl !UnwindSafe for StreamingMultiheadAttention",1,1,["candle_transformers::models::mimi::transformer::StreamingMultiheadAttention"]],["impl !UnwindSafe for StreamingMultiheadCrossAttention",1,1,["candle_transformers::models::mimi::transformer::StreamingMultiheadCrossAttention"]],["impl !UnwindSafe for StreamingTransformer",1,1,["candle_transformers::models::mimi::transformer::StreamingTransformer"]],["impl !UnwindSafe for StreamingTransformerLayer",1,1,["candle_transformers::models::mimi::transformer::StreamingTransformerLayer"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::mistral::Model"]],["impl !UnwindSafe for MixFormerSequentialForCausalLM",1,1,["candle_transformers::models::mixformer::MixFormerSequentialForCausalLM"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::mixtral::Model"]],["impl !UnwindSafe for ContextQkvOnlyJointBlock",1,1,["candle_transformers::models::mmdit::blocks::ContextQkvOnlyJointBlock"]],["impl !UnwindSafe for DiTBlock",1,1,["candle_transformers::models::mmdit::blocks::DiTBlock"]],["impl !UnwindSafe for FinalLayer",1,1,["candle_transformers::models::mmdit::blocks::FinalLayer"]],["impl !UnwindSafe for MMDiTJointBlock",1,1,["candle_transformers::models::mmdit::blocks::MMDiTJointBlock"]],["impl !UnwindSafe for MMDiTXJointBlock",1,1,["candle_transformers::models::mmdit::blocks::MMDiTXJointBlock"]],["impl !UnwindSafe for ModulateIntermediates",1,1,["candle_transformers::models::mmdit::blocks::ModulateIntermediates"]],["impl !UnwindSafe for QkvOnlyDiTBlock",1,1,["candle_transformers::models::mmdit::blocks::QkvOnlyDiTBlock"]],["impl !UnwindSafe for SelfAttnDiTBlock",1,1,["candle_transformers::models::mmdit::blocks::SelfAttnDiTBlock"]],["impl !UnwindSafe for SelfAttnModulateIntermediates",1,1,["candle_transformers::models::mmdit::blocks::SelfAttnModulateIntermediates"]],["impl !UnwindSafe for PatchEmbedder",1,1,["candle_transformers::models::mmdit::embedding::PatchEmbedder"]],["impl !UnwindSafe for PositionEmbedder",1,1,["candle_transformers::models::mmdit::embedding::PositionEmbedder"]],["impl !UnwindSafe for TimestepEmbedder",1,1,["candle_transformers::models::mmdit::embedding::TimestepEmbedder"]],["impl !UnwindSafe for VectorEmbedder",1,1,["candle_transformers::models::mmdit::embedding::VectorEmbedder"]],["impl !UnwindSafe for MMDiT",1,1,["candle_transformers::models::mmdit::model::MMDiT"]],["impl !UnwindSafe for MMDiTCore",1,1,["candle_transformers::models::mmdit::model::MMDiTCore"]],["impl !UnwindSafe for AttnProjections",1,1,["candle_transformers::models::mmdit::projections::AttnProjections"]],["impl !UnwindSafe for Mlp",1,1,["candle_transformers::models::mmdit::projections::Mlp"]],["impl !UnwindSafe for Qkv",1,1,["candle_transformers::models::mmdit::projections::Qkv"]],["impl !UnwindSafe for QkvOnlyAttnProjections",1,1,["candle_transformers::models::mmdit::projections::QkvOnlyAttnProjections"]],["impl !UnwindSafe for MobileClipModel",1,1,["candle_transformers::models::mobileclip::MobileClipModel"]],["impl !UnwindSafe for ModernBert",1,1,["candle_transformers::models::modernbert::ModernBert"]],["impl !UnwindSafe for ModernBertClassifier",1,1,["candle_transformers::models::modernbert::ModernBertClassifier"]],["impl !UnwindSafe for ModernBertDecoder",1,1,["candle_transformers::models::modernbert::ModernBertDecoder"]],["impl !UnwindSafe for ModernBertForMaskedLM",1,1,["candle_transformers::models::modernbert::ModernBertForMaskedLM"]],["impl !UnwindSafe for ModernBertForSequenceClassification",1,1,["candle_transformers::models::modernbert::ModernBertForSequenceClassification"]],["impl !UnwindSafe for ModernBertHead",1,1,["candle_transformers::models::modernbert::ModernBertHead"]],["impl !UnwindSafe for ModernBertLayer",1,1,["candle_transformers::models::modernbert::ModernBertLayer"]],["impl !UnwindSafe for ModernBertMLP",1,1,["candle_transformers::models::modernbert::ModernBertMLP"]],["impl !UnwindSafe for Encoder",1,1,["candle_transformers::models::moondream::Encoder"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::moondream::Model"]],["impl !UnwindSafe for VisionEncoder",1,1,["candle_transformers::models::moondream::VisionEncoder"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::mpt::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::nvembed_v2::embedding::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::nvembed_v2::model::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::olmo::Model"]],["impl !UnwindSafe for Encoder",1,1,["candle_transformers::models::openclip::text_model::Encoder"]],["impl !UnwindSafe for OpenClipTextTransformer",1,1,["candle_transformers::models::openclip::text_model::OpenClipTextTransformer"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::paligemma::Model"]],["impl !UnwindSafe for MultiModalProjector",1,1,["candle_transformers::models::paligemma::MultiModalProjector"]],["impl !UnwindSafe for Attention",1,1,["candle_transformers::models::parler_tts::Attention"]],["impl !UnwindSafe for Decoder",1,1,["candle_transformers::models::parler_tts::Decoder"]],["impl !UnwindSafe for DecoderLayer",1,1,["candle_transformers::models::parler_tts::DecoderLayer"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::parler_tts::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::phi3::Model"]],["impl !UnwindSafe for RotaryEmbedding",1,1,["candle_transformers::models::phi3::RotaryEmbedding"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::phi::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::pixtral::llava::Model"]],["impl !UnwindSafe for MultiModalProjector",1,1,["candle_transformers::models::pixtral::llava::MultiModalProjector"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::pixtral::vision_model::Model"]],["impl !UnwindSafe for BlipForConditionalGeneration",1,1,["candle_transformers::models::quantized_blip::BlipForConditionalGeneration"]],["impl !UnwindSafe for VisionModel",1,1,["candle_transformers::models::quantized_blip::VisionModel"]],["impl !UnwindSafe for TextLMHeadModel",1,1,["candle_transformers::models::quantized_blip_text::TextLMHeadModel"]],["impl !UnwindSafe for TextPooler",1,1,["candle_transformers::models::quantized_blip_text::TextPooler"]],["impl !UnwindSafe for QLlama",1,1,["candle_transformers::models::quantized_llama2_c::QLlama"]],["impl !UnwindSafe for ModelWeights",1,1,["candle_transformers::models::quantized_llama::ModelWeights"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::quantized_metavoice::transformer::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::quantized_mistral::Model"]],["impl !UnwindSafe for MixFormerSequentialForCausalLM",1,1,["candle_transformers::models::quantized_mixformer::MixFormerSequentialForCausalLM"]],["impl !UnwindSafe for Encoder",1,1,["candle_transformers::models::quantized_moondream::Encoder"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::quantized_moondream::Model"]],["impl !UnwindSafe for VisionEncoder",1,1,["candle_transformers::models::quantized_moondream::VisionEncoder"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::quantized_mpt::Model"]],["impl !UnwindSafe for ModelWeights",1,1,["candle_transformers::models::quantized_phi3::ModelWeights"]],["impl !UnwindSafe for ModelWeights",1,1,["candle_transformers::models::quantized_phi::ModelWeights"]],["impl !UnwindSafe for ModelWeights",1,1,["candle_transformers::models::quantized_qwen2::ModelWeights"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::quantized_recurrent_gemma::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::quantized_rwkv_v5::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::quantized_rwkv_v6::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::quantized_stable_lm::Model"]],["impl !UnwindSafe for T5EncoderModel",1,1,["candle_transformers::models::quantized_t5::T5EncoderModel"]],["impl !UnwindSafe for T5ForConditionalGeneration",1,1,["candle_transformers::models::quantized_t5::T5ForConditionalGeneration"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::qwen2::Model"]],["impl !UnwindSafe for ModelForCausalLM",1,1,["candle_transformers::models::qwen2::ModelForCausalLM"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::qwen2_moe::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::recurrent_gemma::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::rwkv_v5::Model"]],["impl !UnwindSafe for State",1,1,["candle_transformers::models::rwkv_v5::State"]],["impl !UnwindSafe for StatePerLayer",1,1,["candle_transformers::models::rwkv_v5::StatePerLayer"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::rwkv_v6::Model"]],["impl !UnwindSafe for ImageClassificationModel",1,1,["candle_transformers::models::segformer::ImageClassificationModel"]],["impl !UnwindSafe for SemanticSegmentationModel",1,1,["candle_transformers::models::segformer::SemanticSegmentationModel"]],["impl !UnwindSafe for ImageEncoderViT",1,1,["candle_transformers::models::segment_anything::image_encoder::ImageEncoderViT"]],["impl !UnwindSafe for MaskDecoder",1,1,["candle_transformers::models::segment_anything::mask_decoder::MaskDecoder"]],["impl !UnwindSafe for PromptEncoder",1,1,["candle_transformers::models::segment_anything::prompt_encoder::PromptEncoder"]],["impl !UnwindSafe for Sam",1,1,["candle_transformers::models::segment_anything::sam::Sam"]],["impl !UnwindSafe for LayerNorm2d",1,1,["candle_transformers::models::segment_anything::LayerNorm2d"]],["impl !UnwindSafe for MlpBlock",1,1,["candle_transformers::models::segment_anything::MlpBlock"]],["impl !UnwindSafe for TinyViT",1,1,["candle_transformers::models::segment_anything::tiny_vit::TinyViT"]],["impl !UnwindSafe for TwoWayTransformer",1,1,["candle_transformers::models::segment_anything::transformer::TwoWayTransformer"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::siglip::Model"]],["impl !UnwindSafe for TextModel",1,1,["candle_transformers::models::siglip::TextModel"]],["impl !UnwindSafe for TextTransformer",1,1,["candle_transformers::models::siglip::TextTransformer"]],["impl !UnwindSafe for VisionModel",1,1,["candle_transformers::models::siglip::VisionModel"]],["impl !UnwindSafe for AttentionBlock",1,1,["candle_transformers::models::stable_diffusion::attention::AttentionBlock"]],["impl !UnwindSafe for CrossAttention",1,1,["candle_transformers::models::stable_diffusion::attention::CrossAttention"]],["impl !UnwindSafe for SpatialTransformer",1,1,["candle_transformers::models::stable_diffusion::attention::SpatialTransformer"]],["impl !UnwindSafe for ClipTextTransformer",1,1,["candle_transformers::models::stable_diffusion::clip::ClipTextTransformer"]],["impl !UnwindSafe for TimestepEmbedding",1,1,["candle_transformers::models::stable_diffusion::embeddings::TimestepEmbedding"]],["impl !UnwindSafe for ResnetBlock2D",1,1,["candle_transformers::models::stable_diffusion::resnet::ResnetBlock2D"]],["impl !UnwindSafe for StableDiffusionConfig",1,1,["candle_transformers::models::stable_diffusion::StableDiffusionConfig"]],["impl !UnwindSafe for UNet2DConditionModel",1,1,["candle_transformers::models::stable_diffusion::unet_2d::UNet2DConditionModel"]],["impl !UnwindSafe for CrossAttnDownBlock2D",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnDownBlock2D"]],["impl !UnwindSafe for CrossAttnUpBlock2D",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnUpBlock2D"]],["impl !UnwindSafe for DownBlock2D",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownBlock2D"]],["impl !UnwindSafe for DownEncoderBlock2D",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownEncoderBlock2D"]],["impl !UnwindSafe for UNetMidBlock2D",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2D"]],["impl !UnwindSafe for UNetMidBlock2DCrossAttn",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DCrossAttn"]],["impl !UnwindSafe for UpBlock2D",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpBlock2D"]],["impl !UnwindSafe for UpDecoderBlock2D",1,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpDecoderBlock2D"]],["impl !UnwindSafe for EdmDpmMultistepScheduler",1,1,["candle_transformers::models::stable_diffusion::uni_pc::EdmDpmMultistepScheduler"]],["impl !UnwindSafe for AutoEncoderKL",1,1,["candle_transformers::models::stable_diffusion::vae::AutoEncoderKL"]],["impl !UnwindSafe for DiagonalGaussianDistribution",1,1,["candle_transformers::models::stable_diffusion::vae::DiagonalGaussianDistribution"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::stable_lm::Model"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::starcoder2::Model"]],["impl !UnwindSafe for EmbeddingModel",1,1,["candle_transformers::models::stella_en_v5::EmbeddingModel"]],["impl !UnwindSafe for Embeddings",1,1,["candle_transformers::models::stella_en_v5::Embeddings"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::stella_en_v5::Model"]],["impl !UnwindSafe for Linear",1,1,["candle_transformers::models::t5::Linear"]],["impl !UnwindSafe for T5EncoderModel",1,1,["candle_transformers::models::t5::T5EncoderModel"]],["impl !UnwindSafe for T5ForConditionalGeneration",1,1,["candle_transformers::models::t5::T5ForConditionalGeneration"]],["impl !UnwindSafe for TrOCRDecoder",1,1,["candle_transformers::models::trocr::TrOCRDecoder"]],["impl !UnwindSafe for TrOCREncoder",1,1,["candle_transformers::models::trocr::TrOCREncoder"]],["impl !UnwindSafe for TrOCRForCausalLM",1,1,["candle_transformers::models::trocr::TrOCRForCausalLM"]],["impl !UnwindSafe for TrOCRModel",1,1,["candle_transformers::models::trocr::TrOCRModel"]],["impl !UnwindSafe for Embeddings",1,1,["candle_transformers::models::vit::Embeddings"]],["impl !UnwindSafe for Encoder",1,1,["candle_transformers::models::vit::Encoder"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::vit::Model"]],["impl !UnwindSafe for AudioEncoder",1,1,["candle_transformers::models::whisper::model::AudioEncoder"]],["impl !UnwindSafe for TextDecoder",1,1,["candle_transformers::models::whisper::model::TextDecoder"]],["impl !UnwindSafe for Whisper",1,1,["candle_transformers::models::whisper::model::Whisper"]],["impl !UnwindSafe for AudioEncoder",1,1,["candle_transformers::models::whisper::quantized_model::AudioEncoder"]],["impl !UnwindSafe for TextDecoder",1,1,["candle_transformers::models::whisper::quantized_model::TextDecoder"]],["impl !UnwindSafe for Whisper",1,1,["candle_transformers::models::whisper::quantized_model::Whisper"]],["impl !UnwindSafe for Conv2d",1,1,["candle_transformers::models::with_tracing::Conv2d"]],["impl !UnwindSafe for Embedding",1,1,["candle_transformers::models::with_tracing::Embedding"]],["impl !UnwindSafe for LayerNorm",1,1,["candle_transformers::models::with_tracing::LayerNorm"]],["impl !UnwindSafe for Linear",1,1,["candle_transformers::models::with_tracing::Linear"]],["impl !UnwindSafe for QMatMul",1,1,["candle_transformers::models::with_tracing::QMatMul"]],["impl !UnwindSafe for RmsNorm",1,1,["candle_transformers::models::with_tracing::RmsNorm"]],["impl !UnwindSafe for Attention",1,1,["candle_transformers::models::wuerstchen::attention_processor::Attention"]],["impl !UnwindSafe for AttnBlock",1,1,["candle_transformers::models::wuerstchen::common::AttnBlock"]],["impl !UnwindSafe for GlobalResponseNorm",1,1,["candle_transformers::models::wuerstchen::common::GlobalResponseNorm"]],["impl !UnwindSafe for ResBlock",1,1,["candle_transformers::models::wuerstchen::common::ResBlock"]],["impl !UnwindSafe for TimestepBlock",1,1,["candle_transformers::models::wuerstchen::common::TimestepBlock"]],["impl !UnwindSafe for ResBlockStageB",1,1,["candle_transformers::models::wuerstchen::diffnext::ResBlockStageB"]],["impl !UnwindSafe for WDiffNeXt",1,1,["candle_transformers::models::wuerstchen::diffnext::WDiffNeXt"]],["impl !UnwindSafe for MixingResidualBlock",1,1,["candle_transformers::models::wuerstchen::paella_vq::MixingResidualBlock"]],["impl !UnwindSafe for PaellaVQ",1,1,["candle_transformers::models::wuerstchen::paella_vq::PaellaVQ"]],["impl !UnwindSafe for WPrior",1,1,["candle_transformers::models::wuerstchen::prior::WPrior"]],["impl !UnwindSafe for XLMRobertaForMaskedLM",1,1,["candle_transformers::models::xlm_roberta::XLMRobertaForMaskedLM"]],["impl !UnwindSafe for XLMRobertaForSequenceClassification",1,1,["candle_transformers::models::xlm_roberta::XLMRobertaForSequenceClassification"]],["impl !UnwindSafe for XLMRobertaModel",1,1,["candle_transformers::models::xlm_roberta::XLMRobertaModel"]],["impl !UnwindSafe for Model",1,1,["candle_transformers::models::yi::Model"]],["impl !UnwindSafe for Embedding",1,1,["candle_transformers::quantized_nn::Embedding"]],["impl !UnwindSafe for Linear",1,1,["candle_transformers::quantized_nn::Linear"]],["impl !UnwindSafe for RmsNorm",1,1,["candle_transformers::quantized_nn::RmsNorm"]],["impl !UnwindSafe for VarBuilder",1,1,["candle_transformers::quantized_var_builder::VarBuilder"]],["impl<'a> !UnwindSafe for Vgg<'a>",1,1,["candle_transformers::models::vgg::Vgg"]],["impl UnwindSafe for Sampling",0,1,["candle_transformers::generation::Sampling"]],["impl UnwindSafe for HiddenAct",0,1,["candle_transformers::models::bert::HiddenAct"]],["impl UnwindSafe for PositionEmbeddingType",0,1,["candle_transformers::models::bert::PositionEmbeddingType"]],["impl UnwindSafe for Activation",0,1,["candle_transformers::models::chinese_clip::Activation"]],["impl UnwindSafe for EncoderConfig",0,1,["candle_transformers::models::chinese_clip::EncoderConfig"]],["impl UnwindSafe for PositionEmbeddingType",0,1,["candle_transformers::models::chinese_clip::text_model::PositionEmbeddingType"]],["impl UnwindSafe for EncoderConfig",0,1,["candle_transformers::models::clip::EncoderConfig"]],["impl UnwindSafe for Activation",0,1,["candle_transformers::models::clip::text_model::Activation"]],["impl UnwindSafe for HiddenAct",0,1,["candle_transformers::models::debertav2::HiddenAct"]],["impl UnwindSafe for DeepSeekV2RopeScaling",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RopeScaling"]],["impl UnwindSafe for ScaledRopeType",0,1,["candle_transformers::models::deepseek2::ScaledRopeType"]],["impl UnwindSafe for NormType",0,1,["candle_transformers::models::encodec::NormType"]],["impl UnwindSafe for PadMode",0,1,["candle_transformers::models::encodec::PadMode"]],["impl UnwindSafe for GraniteEosToks",0,1,["candle_transformers::models::granite::GraniteEosToks"]],["impl UnwindSafe for GraniteRopeType",0,1,["candle_transformers::models::granite::GraniteRopeType"]],["impl UnwindSafe for PositionEmbeddingType",0,1,["candle_transformers::models::jina_bert::PositionEmbeddingType"]],["impl UnwindSafe for Llama3RopeType",0,1,["candle_transformers::models::llama::Llama3RopeType"]],["impl UnwindSafe for LlamaEosToks",0,1,["candle_transformers::models::llama::LlamaEosToks"]],["impl UnwindSafe for AttnKernelType",0,1,["candle_transformers::models::metavoice::gpt::AttnKernelType"]],["impl UnwindSafe for NonLinearityType",0,1,["candle_transformers::models::metavoice::gpt::NonLinearityType"]],["impl UnwindSafe for NormType",0,1,["candle_transformers::models::metavoice::gpt::NormType"]],["impl UnwindSafe for Norm",0,1,["candle_transformers::models::mimi::conv::Norm"]],["impl UnwindSafe for PadMode",0,1,["candle_transformers::models::mimi::conv::PadMode"]],["impl UnwindSafe for ResampleMethod",0,1,["candle_transformers::models::mimi::encodec::ResampleMethod"]],["impl UnwindSafe for NormType",0,1,["candle_transformers::models::mimi::NormType"]],["impl UnwindSafe for PositionalEmbedding",0,1,["candle_transformers::models::mimi::transformer::PositionalEmbedding"]],["impl UnwindSafe for ClassifierPooling",0,1,["candle_transformers::models::modernbert::ClassifierPooling"]],["impl UnwindSafe for PositionEmbeddingType",0,1,["candle_transformers::models::persimmon::PositionEmbeddingType"]],["impl UnwindSafe for TemporalBlockType",0,1,["candle_transformers::models::recurrent_gemma::TemporalBlockType"]],["impl UnwindSafe for Activation",0,1,["candle_transformers::models::stable_diffusion::clip::Activation"]],["impl UnwindSafe for DDPMVarianceType",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMVarianceType"]],["impl UnwindSafe for BetaSchedule",0,1,["candle_transformers::models::stable_diffusion::schedulers::BetaSchedule"]],["impl UnwindSafe for PredictionType",0,1,["candle_transformers::models::stable_diffusion::schedulers::PredictionType"]],["impl UnwindSafe for TimestepSpacing",0,1,["candle_transformers::models::stable_diffusion::schedulers::TimestepSpacing"]],["impl UnwindSafe for AlgorithmType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::AlgorithmType"]],["impl UnwindSafe for CorrectorConfiguration",0,1,["candle_transformers::models::stable_diffusion::uni_pc::CorrectorConfiguration"]],["impl UnwindSafe for FinalSigmasType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::FinalSigmasType"]],["impl UnwindSafe for SigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::SigmaSchedule"]],["impl UnwindSafe for SolverType",0,1,["candle_transformers::models::stable_diffusion::uni_pc::SolverType"]],["impl UnwindSafe for TimestepSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::TimestepSchedule"]],["impl UnwindSafe for EmbedDim",0,1,["candle_transformers::models::stella_en_v5::EmbedDim"]],["impl UnwindSafe for ModelVariant",0,1,["candle_transformers::models::stella_en_v5::ModelVariant"]],["impl UnwindSafe for Models",0,1,["candle_transformers::models::vgg::Models"]],["impl UnwindSafe for LogitsProcessor",0,1,["candle_transformers::generation::LogitsProcessor"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::based::Config"]],["impl UnwindSafe for LinearAttentionConfig",0,1,["candle_transformers::models::based::LinearAttentionConfig"]],["impl UnwindSafe for LinearAttentionFeatureMapConfig",0,1,["candle_transformers::models::based::LinearAttentionFeatureMapConfig"]],["impl UnwindSafe for SlidingWindowAttentionConfig",0,1,["candle_transformers::models::based::SlidingWindowAttentionConfig"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::bert::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::bigcode::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::blip::Config"]],["impl UnwindSafe for VisionConfig",0,1,["candle_transformers::models::blip::VisionConfig"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::blip_text::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::chatglm::Config"]],["impl UnwindSafe for ChineseClipConfig",0,1,["candle_transformers::models::chinese_clip::ChineseClipConfig"]],["impl UnwindSafe for ChineseClipTextConfig",0,1,["candle_transformers::models::chinese_clip::text_model::ChineseClipTextConfig"]],["impl UnwindSafe for ChineseClipVisionConfig",0,1,["candle_transformers::models::chinese_clip::vision_model::ChineseClipVisionConfig"]],["impl UnwindSafe for ClipConfig",0,1,["candle_transformers::models::clip::ClipConfig"]],["impl UnwindSafe for ClipTextConfig",0,1,["candle_transformers::models::clip::text_model::ClipTextConfig"]],["impl UnwindSafe for ClipVisionConfig",0,1,["candle_transformers::models::clip::vision_model::ClipVisionConfig"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::codegeex4_9b::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::convnext::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::dac::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::debertav2::Config"]],["impl UnwindSafe for NERItem",0,1,["candle_transformers::models::debertav2::NERItem"]],["impl UnwindSafe for StableDropout",0,1,["candle_transformers::models::debertav2::StableDropout"]],["impl UnwindSafe for TextClassificationItem",0,1,["candle_transformers::models::debertav2::TextClassificationItem"]],["impl UnwindSafe for DeepSeekV2Config",0,1,["candle_transformers::models::deepseek2::DeepSeekV2Config"]],["impl UnwindSafe for DeepSeekV2RopeConfig",0,1,["candle_transformers::models::deepseek2::DeepSeekV2RopeConfig"]],["impl UnwindSafe for DepthAnythingV2Config",0,1,["candle_transformers::models::depth_anything_v2::DepthAnythingV2Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::distilbert::Config"]],["impl UnwindSafe for MBConvConfig",0,1,["candle_transformers::models::efficientnet::MBConvConfig"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::efficientvit::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::encodec::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::falcon::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::fastvit::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::flux::autoencoder::Config"]],["impl UnwindSafe for DiagonalGaussian",0,1,["candle_transformers::models::flux::autoencoder::DiagonalGaussian"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::flux::model::Config"]],["impl UnwindSafe for EmbedNd",0,1,["candle_transformers::models::flux::model::EmbedNd"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::gemma2::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::gemma3::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::gemma::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::glm4::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::granite::Config"]],["impl UnwindSafe for GraniteConfig",0,1,["candle_transformers::models::granite::GraniteConfig"]],["impl UnwindSafe for GraniteRopeConfig",0,1,["candle_transformers::models::granite::GraniteRopeConfig"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::helium::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::hiera::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::jina_bert::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::llama2_c::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::llama::Config"]],["impl UnwindSafe for Llama3RopeConfig",0,1,["candle_transformers::models::llama::Llama3RopeConfig"]],["impl UnwindSafe for LlamaConfig",0,1,["candle_transformers::models::llama::LlamaConfig"]],["impl UnwindSafe for HFGenerationConfig",0,1,["candle_transformers::models::llava::config::HFGenerationConfig"]],["impl UnwindSafe for HFLLaVAConfig",0,1,["candle_transformers::models::llava::config::HFLLaVAConfig"]],["impl UnwindSafe for HFLLaVATextConfig",0,1,["candle_transformers::models::llava::config::HFLLaVATextConfig"]],["impl UnwindSafe for HFLLaVAVisionConfig",0,1,["candle_transformers::models::llava::config::HFLLaVAVisionConfig"]],["impl UnwindSafe for HFPreProcessorConfig",0,1,["candle_transformers::models::llava::config::HFPreProcessorConfig"]],["impl UnwindSafe for LLaVAConfig",0,1,["candle_transformers::models::llava::config::LLaVAConfig"]],["impl UnwindSafe for IdentityMap",0,1,["candle_transformers::models::llava::IdentityMap"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::mamba::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::marian::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::metavoice::gpt::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::metavoice::speaker_encoder::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::metavoice::transformer::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::mimi::encodec::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::mimi::seanet::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::mimi::transformer::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::mistral::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::mixformer::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::mixtral::Config"]],["impl UnwindSafe for LayerNormNoAffine",0,1,["candle_transformers::models::mmdit::blocks::LayerNormNoAffine"]],["impl UnwindSafe for Unpatchifier",0,1,["candle_transformers::models::mmdit::embedding::Unpatchifier"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::mmdit::model::Config"]],["impl UnwindSafe for MobileClipConfig",0,1,["candle_transformers::models::mobileclip::MobileClipConfig"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::mobilenetv4::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::mobileone::Config"]],["impl UnwindSafe for ClassifierConfig",0,1,["candle_transformers::models::modernbert::ClassifierConfig"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::modernbert::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::moondream::Config"]],["impl UnwindSafe for VisionConfig",0,1,["candle_transformers::models::moondream::VisionConfig"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::mpt::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::olmo::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::openclip::text_model::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::paligemma::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::parler_tts::Config"]],["impl UnwindSafe for DecoderConfig",0,1,["candle_transformers::models::parler_tts::DecoderConfig"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::persimmon::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::phi3::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::phi::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::pixtral::llava::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::pixtral::vision_model::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::quantized_t5::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::qwen2::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::qwen2_moe::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::recurrent_gemma::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::repvgg::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::rwkv_v5::Config"]],["impl UnwindSafe for Tokenizer",0,1,["candle_transformers::models::rwkv_v5::Tokenizer"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::segformer::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::siglip::Config"]],["impl UnwindSafe for TextConfig",0,1,["candle_transformers::models::siglip::TextConfig"]],["impl UnwindSafe for VisionConfig",0,1,["candle_transformers::models::siglip::VisionConfig"]],["impl UnwindSafe for AttentionBlockConfig",0,1,["candle_transformers::models::stable_diffusion::attention::AttentionBlockConfig"]],["impl UnwindSafe for SpatialTransformerConfig",0,1,["candle_transformers::models::stable_diffusion::attention::SpatialTransformerConfig"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::stable_diffusion::clip::Config"]],["impl UnwindSafe for DDIMScheduler",0,1,["candle_transformers::models::stable_diffusion::ddim::DDIMScheduler"]],["impl UnwindSafe for DDIMSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::ddim::DDIMSchedulerConfig"]],["impl UnwindSafe for DDPMScheduler",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMScheduler"]],["impl UnwindSafe for DDPMSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::ddpm::DDPMSchedulerConfig"]],["impl UnwindSafe for Timesteps",0,1,["candle_transformers::models::stable_diffusion::embeddings::Timesteps"]],["impl UnwindSafe for EulerAncestralDiscreteScheduler",0,1,["candle_transformers::models::stable_diffusion::euler_ancestral_discrete::EulerAncestralDiscreteScheduler"]],["impl UnwindSafe for EulerAncestralDiscreteSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::euler_ancestral_discrete::EulerAncestralDiscreteSchedulerConfig"]],["impl UnwindSafe for ResnetBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::resnet::ResnetBlock2DConfig"]],["impl UnwindSafe for BlockConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d::BlockConfig"]],["impl UnwindSafe for UNet2DConditionModelConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d::UNet2DConditionModelConfig"]],["impl UnwindSafe for CrossAttnDownBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnDownBlock2DConfig"]],["impl UnwindSafe for CrossAttnUpBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::CrossAttnUpBlock2DConfig"]],["impl UnwindSafe for DownBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownBlock2DConfig"]],["impl UnwindSafe for DownEncoderBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::DownEncoderBlock2DConfig"]],["impl UnwindSafe for UNetMidBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DConfig"]],["impl UnwindSafe for UNetMidBlock2DCrossAttnConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UNetMidBlock2DCrossAttnConfig"]],["impl UnwindSafe for UpBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpBlock2DConfig"]],["impl UnwindSafe for UpDecoderBlock2DConfig",0,1,["candle_transformers::models::stable_diffusion::unet_2d_blocks::UpDecoderBlock2DConfig"]],["impl UnwindSafe for ExponentialSigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::ExponentialSigmaSchedule"]],["impl UnwindSafe for KarrasSigmaSchedule",0,1,["candle_transformers::models::stable_diffusion::uni_pc::KarrasSigmaSchedule"]],["impl UnwindSafe for UniPCSchedulerConfig",0,1,["candle_transformers::models::stable_diffusion::uni_pc::UniPCSchedulerConfig"]],["impl UnwindSafe for AutoEncoderKLConfig",0,1,["candle_transformers::models::stable_diffusion::vae::AutoEncoderKLConfig"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::stable_lm::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::starcoder2::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::stella_en_v5::Config"]],["impl UnwindSafe for EmbedHead",0,1,["candle_transformers::models::stella_en_v5::EmbedHead"]],["impl UnwindSafe for ActivationWithOptionalGating",0,1,["candle_transformers::models::t5::ActivationWithOptionalGating"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::t5::Config"]],["impl UnwindSafe for TrOCRConfig",0,1,["candle_transformers::models::trocr::TrOCRConfig"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::vit::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::whisper::Config"]],["impl UnwindSafe for LayerNormNoWeights",0,1,["candle_transformers::models::wuerstchen::common::LayerNormNoWeights"]],["impl UnwindSafe for WLayerNorm",0,1,["candle_transformers::models::wuerstchen::common::WLayerNorm"]],["impl UnwindSafe for DDPMWScheduler",0,1,["candle_transformers::models::wuerstchen::ddpm::DDPMWScheduler"]],["impl UnwindSafe for DDPMWSchedulerConfig",0,1,["candle_transformers::models::wuerstchen::ddpm::DDPMWSchedulerConfig"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::xlm_roberta::Config"]],["impl UnwindSafe for Config",0,1,["candle_transformers::models::yi::Config"]],["impl UnwindSafe for KeyPoint",0,1,["candle_transformers::object_detection::KeyPoint"]],["impl<D> UnwindSafe for Bbox<D>
where\n D: UnwindSafe,
",0,1,["candle_transformers::object_detection::Bbox"]]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[216477]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/serde_core/de/trait.Deserialize.js b/network-poc/target-native/doc/trait.impl/serde_core/de/trait.Deserialize.js deleted file mode 100644 index 1cdfc92..0000000 --- a/network-poc/target-native/doc/trait.impl/serde_core/de/trait.Deserialize.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl<'de> Deserialize<'de> for HiddenAct",0],["impl<'de> Deserialize<'de> for PositionEmbeddingType",0],["impl<'de> Deserialize<'de> for HiddenAct",0],["impl<'de> Deserialize<'de> for DeepSeekV2RopeScaling",0],["impl<'de> Deserialize<'de> for ScaledRopeType",0],["impl<'de> Deserialize<'de> for NormType",0],["impl<'de> Deserialize<'de> for PadMode",0],["impl<'de> Deserialize<'de> for GraniteEosToks",0],["impl<'de> Deserialize<'de> for GraniteRopeType",0],["impl<'de> Deserialize<'de> for PositionEmbeddingType",0],["impl<'de> Deserialize<'de> for Llama3RopeType",0],["impl<'de> Deserialize<'de> for LlamaEosToks",0],["impl<'de> Deserialize<'de> for ClassifierPooling",0],["impl<'de> Deserialize<'de> for PositionEmbeddingType",0],["impl<'de> Deserialize<'de> for TemporalBlockType",0],["impl<'de> Deserialize<'de> for ModelVariant",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for LinearAttentionConfig",0],["impl<'de> Deserialize<'de> for LinearAttentionFeatureMapConfig",0],["impl<'de> Deserialize<'de> for SlidingWindowAttentionConfig",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for VisionConfig",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for DeepSeekV2Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for GraniteConfig",0],["impl<'de> Deserialize<'de> for GraniteRopeConfig",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Llama3RopeConfig",0],["impl<'de> Deserialize<'de> for LlamaConfig",0],["impl<'de> Deserialize<'de> for HFGenerationConfig",0],["impl<'de> Deserialize<'de> for HFLLaVAConfig",0],["impl<'de> Deserialize<'de> for HFLLaVATextConfig",0],["impl<'de> Deserialize<'de> for HFLLaVAVisionConfig",0],["impl<'de> Deserialize<'de> for HFPreProcessorConfig",0],["impl<'de> Deserialize<'de> for LLaVAConfig",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for ClassifierConfig",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for VisionConfig",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for DecoderConfig",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for TextConfig",0],["impl<'de> Deserialize<'de> for VisionConfig",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for EmbedHead",0],["impl<'de> Deserialize<'de> for ActivationWithOptionalGating",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for TrOCRConfig",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0],["impl<'de> Deserialize<'de> for Config",0]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[32321]} \ No newline at end of file diff --git a/network-poc/target-native/doc/trait.impl/serde_core/ser/trait.Serialize.js b/network-poc/target-native/doc/trait.impl/serde_core/ser/trait.Serialize.js deleted file mode 100644 index 12775e9..0000000 --- a/network-poc/target-native/doc/trait.impl/serde_core/ser/trait.Serialize.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - const implementors = Object.fromEntries([["candle_transformers",[["impl Serialize for Config",0],["impl Serialize for HFGenerationConfig",0],["impl Serialize for HFLLaVAConfig",0],["impl Serialize for HFLLaVATextConfig",0],["impl Serialize for HFLLaVAVisionConfig",0],["impl Serialize for HFPreProcessorConfig",0],["impl Serialize for LLaVAConfig",0]]]]); - if (window.register_implementors) { - window.register_implementors(implementors); - } else { - window.pending_implementors = implementors; - } -})() -//{"start":59,"fragment_lengths":[2566]} \ No newline at end of file diff --git a/network-poc/target-native/doc/type.impl/candle_transformers/models/blip/struct.Config.js b/network-poc/target-native/doc/type.impl/candle_transformers/models/blip/struct.Config.js deleted file mode 100644 index 7cc7eba..0000000 --- a/network-poc/target-native/doc/type.impl/candle_transformers/models/blip/struct.Config.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - var type_impls = Object.fromEntries([["candle_transformers",[["
Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
","Clone","candle_transformers::models::quantized_blip::Config"],["
Source§

impl Config

",0,"candle_transformers::models::quantized_blip::Config"],["
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
","Debug","candle_transformers::models::quantized_blip::Config"],["
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where\n __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
","Deserialize<'de>","candle_transformers::models::quantized_blip::Config"]]]]); - if (window.register_type_impls) { - window.register_type_impls(type_impls); - } else { - window.pending_type_impls = type_impls; - } -})() -//{"start":55,"fragment_lengths":[6823]} \ No newline at end of file diff --git a/network-poc/target-native/doc/type.impl/candle_transformers/models/blip/struct.VisionConfig.js b/network-poc/target-native/doc/type.impl/candle_transformers/models/blip/struct.VisionConfig.js deleted file mode 100644 index a2271dd..0000000 --- a/network-poc/target-native/doc/type.impl/candle_transformers/models/blip/struct.VisionConfig.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - var type_impls = Object.fromEntries([["candle_transformers",[["
Source§

impl Clone for VisionConfig

Source§

fn clone(&self) -> VisionConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
","Clone","candle_transformers::models::quantized_blip::VisionConfig"],["
Source§

impl Debug for VisionConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
","Debug","candle_transformers::models::quantized_blip::VisionConfig"],["
Source§

impl<'de> Deserialize<'de> for VisionConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where\n __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
","Deserialize<'de>","candle_transformers::models::quantized_blip::VisionConfig"]]]]); - if (window.register_type_impls) { - window.register_type_impls(type_impls); - } else { - window.pending_type_impls = type_impls; - } -})() -//{"start":55,"fragment_lengths":[6092]} \ No newline at end of file diff --git a/network-poc/target-native/doc/type.impl/candle_transformers/models/blip_text/struct.Config.js b/network-poc/target-native/doc/type.impl/candle_transformers/models/blip_text/struct.Config.js deleted file mode 100644 index 11514ce..0000000 --- a/network-poc/target-native/doc/type.impl/candle_transformers/models/blip_text/struct.Config.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - var type_impls = Object.fromEntries([["candle_transformers",[["
Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
","Clone","candle_transformers::models::quantized_blip_text::Config"],["
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
","Debug","candle_transformers::models::quantized_blip_text::Config"],["
Source§

impl<'de> Deserialize<'de> for Config

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where\n __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
","Deserialize<'de>","candle_transformers::models::quantized_blip_text::Config"]]]]); - if (window.register_type_impls) { - window.register_type_impls(type_impls); - } else { - window.pending_type_impls = type_impls; - } -})() -//{"start":55,"fragment_lengths":[6051]} \ No newline at end of file diff --git a/network-poc/target-native/doc/type.impl/std/collections/hash/map/struct.HashMap.js b/network-poc/target-native/doc/type.impl/std/collections/hash/map/struct.HashMap.js deleted file mode 100644 index 0cbe1b7..0000000 --- a/network-poc/target-native/doc/type.impl/std/collections/hash/map/struct.HashMap.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - var type_impls = Object.fromEntries([["candle_transformers",[["
1.0.0 · Source§

impl<K, V, S, A> Clone for HashMap<K, V, S, A>
where\n K: Clone,\n V: Clone,\n S: Clone,\n A: Allocator + Clone,

Source§

fn clone(&self) -> HashMap<K, V, S, A>

Returns a duplicate of the value. Read more
Source§

fn clone_from(&mut self, source: &HashMap<K, V, S, A>)

Performs copy-assignment from source. Read more
","Clone","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
1.0.0 · Source§

impl<K, V, S, A> Debug for HashMap<K, V, S, A>
where\n K: Debug,\n V: Debug,\n A: Allocator,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
","Debug","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
1.0.0 (const: unstable) · Source§

impl<K, V, S> Default for HashMap<K, V, S>
where\n S: Default,

Source§

fn default() -> HashMap<K, V, S>

Creates an empty HashMap<K, V, S>, with the Default value for the hasher.

\n
","Default","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
Source§

impl<'de, K, V, S> Deserialize<'de> for HashMap<K, V, S>
where\n K: Deserialize<'de> + Eq + Hash,\n V: Deserialize<'de>,\n S: BuildHasher + Default,

Available on crate feature std only.
Source§

fn deserialize<D>(\n deserializer: D,\n) -> Result<HashMap<K, V, S>, <D as Deserializer<'de>>::Error>
where\n D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
","Deserialize<'de>","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
1.4.0 · Source§

impl<'a, K, V, S, A> Extend<(&'a K, &'a V)> for HashMap<K, V, S, A>
where\n K: Eq + Hash + Copy,\n V: Copy,\n S: BuildHasher,\n A: Allocator,

Source§

fn extend<T>(&mut self, iter: T)
where\n T: IntoIterator<Item = (&'a K, &'a V)>,

Extends a collection with the contents of an iterator. Read more
Source§

fn extend_one(&mut self, _: (&'a K, &'a V))

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
Source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend<(&'a K, &'a V)>","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
1.0.0 · Source§

impl<K, V, S, A> Extend<(K, V)> for HashMap<K, V, S, A>
where\n K: Eq + Hash,\n S: BuildHasher,\n A: Allocator,

Inserts all new key-values from the iterator and replaces values with existing\nkeys with new values returned from the iterator.

\n
Source§

fn extend<T>(&mut self, iter: T)
where\n T: IntoIterator<Item = (K, V)>,

Extends a collection with the contents of an iterator. Read more
Source§

fn extend_one(&mut self, _: (K, V))

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
Source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend<(K, V)>","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
1.56.0 · Source§

impl<K, V, const N: usize> From<[(K, V); N]> for HashMap<K, V>
where\n K: Eq + Hash,

Source§

fn from(arr: [(K, V); N]) -> HashMap<K, V>

Converts a [(K, V); N] into a HashMap<K, V>.

\n

If any entries in the array have equal keys,\nall but one of the corresponding values will be dropped.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet map1 = HashMap::from([(1, 2), (3, 4)]);\nlet map2: HashMap<_, _> = [(1, 2), (3, 4)].into();\nassert_eq!(map1, map2);
","From<[(K, V); N]>","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
1.0.0 · Source§

impl<K, V, S> FromIterator<(K, V)> for HashMap<K, V, S>
where\n K: Eq + Hash,\n S: BuildHasher + Default,

Source§

fn from_iter<T>(iter: T) -> HashMap<K, V, S>
where\n T: IntoIterator<Item = (K, V)>,

Constructs a HashMap<K, V> from an iterator of key-value pairs.

\n

If the iterator produces any pairs with equal keys,\nall but one of the corresponding values will be dropped.

\n
","FromIterator<(K, V)>","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
§

impl<K, V, S> FromParallelIterator<(K, V)> for HashMap<K, V, S>
where\n K: Eq + Hash + Send,\n V: Send,\n S: BuildHasher + Default + Send,

Collects (key, value) pairs from a parallel iterator into a\nhashmap. If multiple pairs correspond to the same key, then the\nones produced earlier in the parallel iterator will be\noverwritten, just as with a sequential iterator.

\n
§

fn from_par_iter<I>(par_iter: I) -> HashMap<K, V, S>
where\n I: IntoParallelIterator<Item = (K, V)>,

Creates an instance of the collection from the parallel iterator par_iter. Read more
","FromParallelIterator<(K, V)>","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
Source§

impl<K, V> HashMap<K, V>

1.0.0 · Source

pub fn new() -> HashMap<K, V>

Creates an empty HashMap.

\n

The hash map is initially created with a capacity of 0, so it will not allocate until it\nis first inserted into.

\n
§Examples
\n
use std::collections::HashMap;\nlet mut map: HashMap<&str, i32> = HashMap::new();
1.0.0 · Source

pub fn with_capacity(capacity: usize) -> HashMap<K, V>

Creates an empty HashMap with at least the specified capacity.

\n

The hash map will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is zero, the hash map will not allocate.

\n
§Examples
\n
use std::collections::HashMap;\nlet mut map: HashMap<&str, i32> = HashMap::with_capacity(10);
",0,"candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
Source§

impl<K, V, A> HashMap<K, V, RandomState, A>
where\n A: Allocator,

Source

pub fn new_in(alloc: A) -> HashMap<K, V, RandomState, A>

🔬This is a nightly-only experimental API. (allocator_api)

Creates an empty HashMap using the given allocator.

\n

The hash map is initially created with a capacity of 0, so it will not allocate until it\nis first inserted into.

\n
§Examples
\n
use std::collections::HashMap;\nlet mut map: HashMap<&str, i32> = HashMap::new();
Source

pub fn with_capacity_in(\n capacity: usize,\n alloc: A,\n) -> HashMap<K, V, RandomState, A>

🔬This is a nightly-only experimental API. (allocator_api)

Creates an empty HashMap with at least the specified capacity using\nthe given allocator.

\n

The hash map will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is zero, the hash map will not allocate.

\n
§Examples
\n
use std::collections::HashMap;\nlet mut map: HashMap<&str, i32> = HashMap::with_capacity(10);
",0,"candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
Source§

impl<K, V, S> HashMap<K, V, S>

1.7.0 (const: 1.85.0) · Source

pub const fn with_hasher(hash_builder: S) -> HashMap<K, V, S>

Creates an empty HashMap which will use the given hash builder to hash\nkeys.

\n

The created map has the default initial capacity.

\n

Warning: hash_builder is normally randomly generated, and\nis designed to allow HashMaps to be resistant to attacks that\ncause many collisions and very poor performance. Setting it\nmanually using this function can expose a DoS attack vector.

\n

The hash_builder passed should implement the BuildHasher trait for\nthe HashMap to be useful, see its documentation for details.

\n
§Examples
\n
use std::collections::HashMap;\nuse std::hash::RandomState;\n\nlet s = RandomState::new();\nlet mut map = HashMap::with_hasher(s);\nmap.insert(1, 2);
1.7.0 · Source

pub fn with_capacity_and_hasher(capacity: usize, hasher: S) -> HashMap<K, V, S>

Creates an empty HashMap with at least the specified capacity, using\nhasher to hash the keys.

\n

The hash map will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is zero, the hash map will not allocate.

\n

Warning: hasher is normally randomly generated, and\nis designed to allow HashMaps to be resistant to attacks that\ncause many collisions and very poor performance. Setting it\nmanually using this function can expose a DoS attack vector.

\n

The hasher passed should implement the BuildHasher trait for\nthe HashMap to be useful, see its documentation for details.

\n
§Examples
\n
use std::collections::HashMap;\nuse std::hash::RandomState;\n\nlet s = RandomState::new();\nlet mut map = HashMap::with_capacity_and_hasher(10, s);\nmap.insert(1, 2);
",0,"candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
Source§

impl<K, V, S, A> HashMap<K, V, S, A>
where\n A: Allocator,

Source

pub fn with_hasher_in(hash_builder: S, alloc: A) -> HashMap<K, V, S, A>

🔬This is a nightly-only experimental API. (allocator_api)

Creates an empty HashMap which will use the given hash builder and\nallocator.

\n

The created map has the default initial capacity.

\n

Warning: hash_builder is normally randomly generated, and\nis designed to allow HashMaps to be resistant to attacks that\ncause many collisions and very poor performance. Setting it\nmanually using this function can expose a DoS attack vector.

\n

The hash_builder passed should implement the BuildHasher trait for\nthe HashMap to be useful, see its documentation for details.

\n
Source

pub fn with_capacity_and_hasher_in(\n capacity: usize,\n hash_builder: S,\n alloc: A,\n) -> HashMap<K, V, S, A>

🔬This is a nightly-only experimental API. (allocator_api)

Creates an empty HashMap with at least the specified capacity, using\nhasher to hash the keys and alloc to allocate memory.

\n

The hash map will be able to hold at least capacity elements without\nreallocating. This method is allowed to allocate for more elements than\ncapacity. If capacity is zero, the hash map will not allocate.

\n

Warning: hasher is normally randomly generated, and\nis designed to allow HashMaps to be resistant to attacks that\ncause many collisions and very poor performance. Setting it\nmanually using this function can expose a DoS attack vector.

\n

The hasher passed should implement the BuildHasher trait for\nthe HashMap to be useful, see its documentation for details.

\n
1.0.0 · Source

pub fn capacity(&self) -> usize

Returns the number of elements the map can hold without reallocating.

\n

This number is a lower bound; the HashMap<K, V> might be able to hold\nmore, but is guaranteed to be able to hold at least this many.

\n
§Examples
\n
use std::collections::HashMap;\nlet map: HashMap<i32, i32> = HashMap::with_capacity(100);\nassert!(map.capacity() >= 100);
1.0.0 · Source

pub fn keys(&self) -> Keys<'_, K, V>

An iterator visiting all keys in arbitrary order.\nThe iterator element type is &'a K.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet map = HashMap::from([\n    (\"a\", 1),\n    (\"b\", 2),\n    (\"c\", 3),\n]);\n\nfor key in map.keys() {\n    println!(\"{key}\");\n}
§Performance
\n

In the current implementation, iterating over keys takes O(capacity) time\ninstead of O(len) because it internally visits empty buckets too.

\n
1.54.0 · Source

pub fn into_keys(self) -> IntoKeys<K, V, A>

Creates a consuming iterator visiting all the keys in arbitrary order.\nThe map cannot be used after calling this.\nThe iterator element type is K.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet map = HashMap::from([\n    (\"a\", 1),\n    (\"b\", 2),\n    (\"c\", 3),\n]);\n\nlet mut vec: Vec<&str> = map.into_keys().collect();\n// The `IntoKeys` iterator produces keys in arbitrary order, so the\n// keys must be sorted to test them against a sorted array.\nvec.sort_unstable();\nassert_eq!(vec, [\"a\", \"b\", \"c\"]);
§Performance
\n

In the current implementation, iterating over keys takes O(capacity) time\ninstead of O(len) because it internally visits empty buckets too.

\n
1.0.0 · Source

pub fn values(&self) -> Values<'_, K, V>

An iterator visiting all values in arbitrary order.\nThe iterator element type is &'a V.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet map = HashMap::from([\n    (\"a\", 1),\n    (\"b\", 2),\n    (\"c\", 3),\n]);\n\nfor val in map.values() {\n    println!(\"{val}\");\n}
§Performance
\n

In the current implementation, iterating over values takes O(capacity) time\ninstead of O(len) because it internally visits empty buckets too.

\n
1.10.0 · Source

pub fn values_mut(&mut self) -> ValuesMut<'_, K, V>

An iterator visiting all values mutably in arbitrary order.\nThe iterator element type is &'a mut V.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut map = HashMap::from([\n    (\"a\", 1),\n    (\"b\", 2),\n    (\"c\", 3),\n]);\n\nfor val in map.values_mut() {\n    *val = *val + 10;\n}\n\nfor val in map.values() {\n    println!(\"{val}\");\n}
§Performance
\n

In the current implementation, iterating over values takes O(capacity) time\ninstead of O(len) because it internally visits empty buckets too.

\n
1.54.0 · Source

pub fn into_values(self) -> IntoValues<K, V, A>

Creates a consuming iterator visiting all the values in arbitrary order.\nThe map cannot be used after calling this.\nThe iterator element type is V.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet map = HashMap::from([\n    (\"a\", 1),\n    (\"b\", 2),\n    (\"c\", 3),\n]);\n\nlet mut vec: Vec<i32> = map.into_values().collect();\n// The `IntoValues` iterator produces values in arbitrary order, so\n// the values must be sorted to test them against a sorted array.\nvec.sort_unstable();\nassert_eq!(vec, [1, 2, 3]);
§Performance
\n

In the current implementation, iterating over values takes O(capacity) time\ninstead of O(len) because it internally visits empty buckets too.

\n
1.0.0 · Source

pub fn iter(&self) -> Iter<'_, K, V>

An iterator visiting all key-value pairs in arbitrary order.\nThe iterator element type is (&'a K, &'a V).

\n
§Examples
\n
use std::collections::HashMap;\n\nlet map = HashMap::from([\n    (\"a\", 1),\n    (\"b\", 2),\n    (\"c\", 3),\n]);\n\nfor (key, val) in map.iter() {\n    println!(\"key: {key} val: {val}\");\n}
§Performance
\n

In the current implementation, iterating over map takes O(capacity) time\ninstead of O(len) because it internally visits empty buckets too.

\n
1.0.0 · Source

pub fn iter_mut(&mut self) -> IterMut<'_, K, V>

An iterator visiting all key-value pairs in arbitrary order,\nwith mutable references to the values.\nThe iterator element type is (&'a K, &'a mut V).

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut map = HashMap::from([\n    (\"a\", 1),\n    (\"b\", 2),\n    (\"c\", 3),\n]);\n\n// Update all values\nfor (_, val) in map.iter_mut() {\n    *val *= 2;\n}\n\nfor (key, val) in &map {\n    println!(\"key: {key} val: {val}\");\n}
§Performance
\n

In the current implementation, iterating over map takes O(capacity) time\ninstead of O(len) because it internally visits empty buckets too.

\n
1.0.0 · Source

pub fn len(&self) -> usize

Returns the number of elements in the map.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut a = HashMap::new();\nassert_eq!(a.len(), 0);\na.insert(1, \"a\");\nassert_eq!(a.len(), 1);
1.0.0 · Source

pub fn is_empty(&self) -> bool

Returns true if the map contains no elements.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut a = HashMap::new();\nassert!(a.is_empty());\na.insert(1, \"a\");\nassert!(!a.is_empty());
1.6.0 · Source

pub fn drain(&mut self) -> Drain<'_, K, V, A>

Clears the map, returning all key-value pairs as an iterator. Keeps the\nallocated memory for reuse.

\n

If the returned iterator is dropped before being fully consumed, it\ndrops the remaining key-value pairs. The returned iterator keeps a\nmutable borrow on the map to optimize its implementation.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut a = HashMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\n\nfor (k, v) in a.drain().take(1) {\n    assert!(k == 1 || k == 2);\n    assert!(v == \"a\" || v == \"b\");\n}\n\nassert!(a.is_empty());
1.88.0 · Source

pub fn extract_if<F>(&mut self, pred: F) -> ExtractIf<'_, K, V, F, A>
where\n F: FnMut(&K, &mut V) -> bool,

Creates an iterator which uses a closure to determine if an element (key-value pair) should be removed.

\n

If the closure returns true, the element is removed from the map and\nyielded. If the closure returns false, or panics, the element remains\nin the map and will not be yielded.

\n

The iterator also lets you mutate the value of each element in the\nclosure, regardless of whether you choose to keep or remove it.

\n

If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating\nor the iteration short-circuits, then the remaining elements will be retained.\nUse retain with a negated predicate if you do not need the returned iterator.

\n
§Examples
\n

Splitting a map into even and odd keys, reusing the original map:

\n\n
use std::collections::HashMap;\n\nlet mut map: HashMap<i32, i32> = (0..8).map(|x| (x, x)).collect();\nlet extracted: HashMap<i32, i32> = map.extract_if(|k, _v| k % 2 == 0).collect();\n\nlet mut evens = extracted.keys().copied().collect::<Vec<_>>();\nlet mut odds = map.keys().copied().collect::<Vec<_>>();\nevens.sort();\nodds.sort();\n\nassert_eq!(evens, vec![0, 2, 4, 6]);\nassert_eq!(odds, vec![1, 3, 5, 7]);
1.18.0 · Source

pub fn retain<F>(&mut self, f: F)
where\n F: FnMut(&K, &mut V) -> bool,

Retains only the elements specified by the predicate.

\n

In other words, remove all pairs (k, v) for which f(&k, &mut v) returns false.\nThe elements are visited in unsorted (and unspecified) order.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut map: HashMap<i32, i32> = (0..8).map(|x| (x, x*10)).collect();\nmap.retain(|&k, _| k % 2 == 0);\nassert_eq!(map.len(), 4);
§Performance
\n

In the current implementation, this operation takes O(capacity) time\ninstead of O(len) because it internally visits empty buckets too.

\n
1.0.0 · Source

pub fn clear(&mut self)

Clears the map, removing all key-value pairs. Keeps the allocated memory\nfor reuse.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut a = HashMap::new();\na.insert(1, \"a\");\na.clear();\nassert!(a.is_empty());
1.9.0 · Source

pub fn hasher(&self) -> &S

Returns a reference to the map’s BuildHasher.

\n
§Examples
\n
use std::collections::HashMap;\nuse std::hash::RandomState;\n\nlet hasher = RandomState::new();\nlet map: HashMap<i32, i32> = HashMap::with_hasher(hasher);\nlet hasher: &RandomState = map.hasher();
",0,"candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
Source§

impl<K, V, S, A> HashMap<K, V, S, A>
where\n K: Eq + Hash,\n S: BuildHasher,\n A: Allocator,

1.0.0 · Source

pub fn reserve(&mut self, additional: usize)

Reserves capacity for at least additional more elements to be inserted\nin the HashMap. The collection may reserve more space to speculatively\navoid frequent reallocations. After calling reserve,\ncapacity will be greater than or equal to self.len() + additional.\nDoes nothing if capacity is already sufficient.

\n
§Panics
\n

Panics if the new allocation size overflows usize.

\n
§Examples
\n
use std::collections::HashMap;\nlet mut map: HashMap<&str, i32> = HashMap::new();\nmap.reserve(10);
1.57.0 · Source

pub fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError>

Tries to reserve capacity for at least additional more elements to be inserted\nin the HashMap. The collection may reserve more space to speculatively\navoid frequent reallocations. After calling try_reserve,\ncapacity will be greater than or equal to self.len() + additional if\nit returns Ok(()).\nDoes nothing if capacity is already sufficient.

\n
§Errors
\n

If the capacity overflows, or the allocator reports a failure, then an error\nis returned.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut map: HashMap<&str, isize> = HashMap::new();\nmap.try_reserve(10).expect(\"why is the test harness OOMing on a handful of bytes?\");
1.0.0 · Source

pub fn shrink_to_fit(&mut self)

Shrinks the capacity of the map as much as possible. It will drop\ndown as much as possible while maintaining the internal rules\nand possibly leaving some space in accordance with the resize policy.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut map: HashMap<i32, i32> = HashMap::with_capacity(100);\nmap.insert(1, 2);\nmap.insert(3, 4);\nassert!(map.capacity() >= 100);\nmap.shrink_to_fit();\nassert!(map.capacity() >= 2);
1.56.0 · Source

pub fn shrink_to(&mut self, min_capacity: usize)

Shrinks the capacity of the map with a lower limit. It will drop\ndown no lower than the supplied limit while maintaining the internal rules\nand possibly leaving some space in accordance with the resize policy.

\n

If the current capacity is less than the lower limit, this is a no-op.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut map: HashMap<i32, i32> = HashMap::with_capacity(100);\nmap.insert(1, 2);\nmap.insert(3, 4);\nassert!(map.capacity() >= 100);\nmap.shrink_to(10);\nassert!(map.capacity() >= 10);\nmap.shrink_to(0);\nassert!(map.capacity() >= 2);
1.0.0 · Source

pub fn entry(&mut self, key: K) -> Entry<'_, K, V, A>

Gets the given key’s corresponding entry in the map for in-place manipulation.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut letters = HashMap::new();\n\nfor ch in \"a short treatise on fungi\".chars() {\n    letters.entry(ch).and_modify(|counter| *counter += 1).or_insert(1);\n}\n\nassert_eq!(letters[&'s'], 2);\nassert_eq!(letters[&'t'], 3);\nassert_eq!(letters[&'u'], 1);\nassert_eq!(letters.get(&'y'), None);
1.0.0 · Source

pub fn get<Q>(&self, k: &Q) -> Option<&V>
where\n K: Borrow<Q>,\n Q: Hash + Eq + ?Sized,

Returns a reference to the value corresponding to the key.

\n

The key may be any borrowed form of the map’s key type, but\nHash and Eq on the borrowed form must match those for\nthe key type.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut map = HashMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get(&1), Some(&\"a\"));\nassert_eq!(map.get(&2), None);
1.40.0 · Source

pub fn get_key_value<Q>(&self, k: &Q) -> Option<(&K, &V)>
where\n K: Borrow<Q>,\n Q: Hash + Eq + ?Sized,

Returns the key-value pair corresponding to the supplied key. This is\npotentially useful:

\n
    \n
  • for key types where non-identical keys can be considered equal;
  • \n
  • for getting the &K stored key value from a borrowed &Q lookup key; or
  • \n
  • for getting a reference to a key with the same lifetime as the collection.
  • \n
\n

The supplied key may be any borrowed form of the map’s key type, but\nHash and Eq on the borrowed form must match those for\nthe key type.

\n
§Examples
\n
use std::collections::HashMap;\nuse std::hash::{Hash, Hasher};\n\n#[derive(Clone, Copy, Debug)]\nstruct S {\n    id: u32,\n    name: &'static str, // ignored by equality and hashing operations\n}\n\nimpl PartialEq for S {\n    fn eq(&self, other: &S) -> bool {\n        self.id == other.id\n    }\n}\n\nimpl Eq for S {}\n\nimpl Hash for S {\n    fn hash<H: Hasher>(&self, state: &mut H) {\n        self.id.hash(state);\n    }\n}\n\nlet j_a = S { id: 1, name: \"Jessica\" };\nlet j_b = S { id: 1, name: \"Jess\" };\nlet p = S { id: 2, name: \"Paul\" };\nassert_eq!(j_a, j_b);\n\nlet mut map = HashMap::new();\nmap.insert(j_a, \"Paris\");\nassert_eq!(map.get_key_value(&j_a), Some((&j_a, &\"Paris\")));\nassert_eq!(map.get_key_value(&j_b), Some((&j_a, &\"Paris\"))); // the notable case\nassert_eq!(map.get_key_value(&p), None);
1.86.0 · Source

pub fn get_disjoint_mut<Q, const N: usize>(\n &mut self,\n ks: [&Q; N],\n) -> [Option<&mut V>; N]
where\n K: Borrow<Q>,\n Q: Hash + Eq + ?Sized,

Attempts to get mutable references to N values in the map at once.

\n

Returns an array of length N with the results of each query. For soundness, at most one\nmutable reference will be returned to any value. None will be used if the key is missing.

\n

This method performs a check to ensure there are no duplicate keys, which currently has a time-complexity of O(n^2),\nso be careful when passing many keys.

\n
§Panics
\n

Panics if any keys are overlapping.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut libraries = HashMap::new();\nlibraries.insert(\"Bodleian Library\".to_string(), 1602);\nlibraries.insert(\"Athenæum\".to_string(), 1807);\nlibraries.insert(\"Herzogin-Anna-Amalia-Bibliothek\".to_string(), 1691);\nlibraries.insert(\"Library of Congress\".to_string(), 1800);\n\n// Get Athenæum and Bodleian Library\nlet [Some(a), Some(b)] = libraries.get_disjoint_mut([\n    \"Athenæum\",\n    \"Bodleian Library\",\n]) else { panic!() };\n\n// Assert values of Athenæum and Library of Congress\nlet got = libraries.get_disjoint_mut([\n    \"Athenæum\",\n    \"Library of Congress\",\n]);\nassert_eq!(\n    got,\n    [\n        Some(&mut 1807),\n        Some(&mut 1800),\n    ],\n);\n\n// Missing keys result in None\nlet got = libraries.get_disjoint_mut([\n    \"Athenæum\",\n    \"New York Public Library\",\n]);\nassert_eq!(\n    got,\n    [\n        Some(&mut 1807),\n        None\n    ]\n);
\n
use std::collections::HashMap;\n\nlet mut libraries = HashMap::new();\nlibraries.insert(\"Athenæum\".to_string(), 1807);\n\n// Duplicate keys panic!\nlet got = libraries.get_disjoint_mut([\n    \"Athenæum\",\n    \"Athenæum\",\n]);
1.86.0 · Source

pub unsafe fn get_disjoint_unchecked_mut<Q, const N: usize>(\n &mut self,\n ks: [&Q; N],\n) -> [Option<&mut V>; N]
where\n K: Borrow<Q>,\n Q: Hash + Eq + ?Sized,

Attempts to get mutable references to N values in the map at once, without validating that\nthe values are unique.

\n

Returns an array of length N with the results of each query. None will be used if\nthe key is missing.

\n

For a safe alternative see get_disjoint_mut.

\n
§Safety
\n

Calling this method with overlapping keys is undefined behavior even if the resulting\nreferences are not used.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut libraries = HashMap::new();\nlibraries.insert(\"Bodleian Library\".to_string(), 1602);\nlibraries.insert(\"Athenæum\".to_string(), 1807);\nlibraries.insert(\"Herzogin-Anna-Amalia-Bibliothek\".to_string(), 1691);\nlibraries.insert(\"Library of Congress\".to_string(), 1800);\n\n// SAFETY: The keys do not overlap.\nlet [Some(a), Some(b)] = (unsafe { libraries.get_disjoint_unchecked_mut([\n    \"Athenæum\",\n    \"Bodleian Library\",\n]) }) else { panic!() };\n\n// SAFETY: The keys do not overlap.\nlet got = unsafe { libraries.get_disjoint_unchecked_mut([\n    \"Athenæum\",\n    \"Library of Congress\",\n]) };\nassert_eq!(\n    got,\n    [\n        Some(&mut 1807),\n        Some(&mut 1800),\n    ],\n);\n\n// SAFETY: The keys do not overlap.\nlet got = unsafe { libraries.get_disjoint_unchecked_mut([\n    \"Athenæum\",\n    \"New York Public Library\",\n]) };\n// Missing keys result in None\nassert_eq!(got, [Some(&mut 1807), None]);
1.0.0 · Source

pub fn contains_key<Q>(&self, k: &Q) -> bool
where\n K: Borrow<Q>,\n Q: Hash + Eq + ?Sized,

Returns true if the map contains a value for the specified key.

\n

The key may be any borrowed form of the map’s key type, but\nHash and Eq on the borrowed form must match those for\nthe key type.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut map = HashMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.contains_key(&1), true);\nassert_eq!(map.contains_key(&2), false);
1.0.0 · Source

pub fn get_mut<Q>(&mut self, k: &Q) -> Option<&mut V>
where\n K: Borrow<Q>,\n Q: Hash + Eq + ?Sized,

Returns a mutable reference to the value corresponding to the key.

\n

The key may be any borrowed form of the map’s key type, but\nHash and Eq on the borrowed form must match those for\nthe key type.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut map = HashMap::new();\nmap.insert(1, \"a\");\nif let Some(x) = map.get_mut(&1) {\n    *x = \"b\";\n}\nassert_eq!(map[&1], \"b\");
1.0.0 · Source

pub fn insert(&mut self, k: K, v: V) -> Option<V>

Inserts a key-value pair into the map.

\n

If the map did not have this key present, None is returned.

\n

If the map did have this key present, the value is updated, and the old\nvalue is returned. The key is not updated, though; this matters for\ntypes that can be == without being identical. See the module-level\ndocumentation for more.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut map = HashMap::new();\nassert_eq!(map.insert(37, \"a\"), None);\nassert_eq!(map.is_empty(), false);\n\nmap.insert(37, \"b\");\nassert_eq!(map.insert(37, \"c\"), Some(\"b\"));\nassert_eq!(map[&37], \"c\");
Source

pub fn try_insert(\n &mut self,\n key: K,\n value: V,\n) -> Result<&mut V, OccupiedError<'_, K, V, A>>

🔬This is a nightly-only experimental API. (map_try_insert)

Tries to insert a key-value pair into the map, and returns\na mutable reference to the value in the entry.

\n

If the map already had this key present, nothing is updated, and\nan error containing the occupied entry and the value is returned.

\n
§Examples
\n

Basic usage:

\n\n
#![feature(map_try_insert)]\n\nuse std::collections::HashMap;\n\nlet mut map = HashMap::new();\nassert_eq!(map.try_insert(37, \"a\").unwrap(), &\"a\");\n\nlet err = map.try_insert(37, \"b\").unwrap_err();\nassert_eq!(err.entry.key(), &37);\nassert_eq!(err.entry.get(), &\"a\");\nassert_eq!(err.value, \"b\");
1.0.0 · Source

pub fn remove<Q>(&mut self, k: &Q) -> Option<V>
where\n K: Borrow<Q>,\n Q: Hash + Eq + ?Sized,

Removes a key from the map, returning the value at the key if the key\nwas previously in the map.

\n

The key may be any borrowed form of the map’s key type, but\nHash and Eq on the borrowed form must match those for\nthe key type.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut map = HashMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove(&1), Some(\"a\"));\nassert_eq!(map.remove(&1), None);
1.27.0 · Source

pub fn remove_entry<Q>(&mut self, k: &Q) -> Option<(K, V)>
where\n K: Borrow<Q>,\n Q: Hash + Eq + ?Sized,

Removes a key from the map, returning the stored key and value if the\nkey was previously in the map.

\n

The key may be any borrowed form of the map’s key type, but\nHash and Eq on the borrowed form must match those for\nthe key type.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet mut map = HashMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove_entry(&1), Some((1, \"a\")));\nassert_eq!(map.remove(&1), None);
",0,"candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
1.0.0 · Source§

impl<K, Q, V, S, A> Index<&Q> for HashMap<K, V, S, A>
where\n K: Eq + Hash + Borrow<Q>,\n Q: Eq + Hash + ?Sized,\n S: BuildHasher,\n A: Allocator,

Source§

fn index(&self, key: &Q) -> &V

Returns a reference to the value corresponding to the supplied key.

\n
§Panics
\n

Panics if the key is not present in the HashMap.

\n
Source§

type Output = V

The returned type after indexing.
","Index<&Q>","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
Source§

impl<'de, K, V, S, E> IntoDeserializer<'de, E> for HashMap<K, V, S>
where\n K: IntoDeserializer<'de, E> + Eq + Hash,\n V: IntoDeserializer<'de, E>,\n S: BuildHasher,\n E: Error,

Available on crate feature std only.
Source§

type Deserializer = MapDeserializer<'de, <HashMap<K, V, S> as IntoIterator>::IntoIter, E>

The type of the deserializer being converted into.
Source§

fn into_deserializer(\n self,\n) -> <HashMap<K, V, S> as IntoDeserializer<'de, E>>::Deserializer

Convert this value into a deserializer.
","IntoDeserializer<'de, E>","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
1.0.0 · Source§

impl<K, V, S, A> IntoIterator for HashMap<K, V, S, A>
where\n A: Allocator,

Source§

fn into_iter(self) -> IntoIter<K, V, A>

Creates a consuming iterator, that is, one that moves each key-value\npair out of the map in arbitrary order. The map cannot be used after\ncalling this.

\n
§Examples
\n
use std::collections::HashMap;\n\nlet map = HashMap::from([\n    (\"a\", 1),\n    (\"b\", 2),\n    (\"c\", 3),\n]);\n\n// Not possible with .iter()\nlet vec: Vec<(&str, i32)> = map.into_iter().collect();
Source§

type Item = (K, V)

The type of the elements being iterated over.
Source§

type IntoIter = IntoIter<K, V, A>

Which kind of iterator are we turning this into?
","IntoIterator","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
§

impl<K, V, S> IntoParallelIterator for HashMap<K, V, S>
where\n K: Send,\n V: Send,

§

type Item = <HashMap<K, V, S> as IntoIterator>::Item

The type of item that the parallel iterator will produce.
§

type Iter = IntoIter<K, V>

The parallel iterator type that will be created.
§

fn into_par_iter(self) -> <HashMap<K, V, S> as IntoParallelIterator>::Iter

Converts self into a parallel iterator. Read more
","IntoParallelIterator","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
§

impl<'a, K, V, S> ParallelExtend<(&'a K, &'a V)> for HashMap<K, V, S>
where\n K: 'a + Copy + Eq + Hash + Send + Sync,\n V: 'a + Copy + Send + Sync,\n S: BuildHasher + Send,

Extends a hash map with copied items from a parallel iterator.

\n
§

fn par_extend<I>(&mut self, par_iter: I)
where\n I: IntoParallelIterator<Item = (&'a K, &'a V)>,

Extends an instance of the collection with the elements drawn\nfrom the parallel iterator par_iter. Read more
","ParallelExtend<(&'a K, &'a V)>","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
§

impl<K, V, S> ParallelExtend<(K, V)> for HashMap<K, V, S>
where\n K: Eq + Hash + Send,\n V: Send,\n S: BuildHasher + Send,

Extends a hash map with items from a parallel iterator.

\n
§

fn par_extend<I>(&mut self, par_iter: I)
where\n I: IntoParallelIterator<Item = (K, V)>,

Extends an instance of the collection with the elements drawn\nfrom the parallel iterator par_iter. Read more
","ParallelExtend<(K, V)>","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
1.0.0 · Source§

impl<K, V, S, A> PartialEq for HashMap<K, V, S, A>
where\n K: Eq + Hash,\n V: PartialEq,\n S: BuildHasher,\n A: Allocator,

Source§

fn eq(&self, other: &HashMap<K, V, S, A>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient,\nand should not be overridden without very good reason.
","PartialEq","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
Source§

impl<K, V, H> Serialize for HashMap<K, V, H>
where\n K: Serialize,\n V: Serialize,

Available on crate feature std only.
Source§

fn serialize<S>(\n &self,\n serializer: S,\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where\n S: Serializer,

Serialize this value into the given Serde serializer. Read more
","Serialize","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
1.0.0 · Source§

impl<K, V, S, A> Eq for HashMap<K, V, S, A>
where\n K: Eq + Hash,\n V: Eq,\n S: BuildHasher,\n A: Allocator,

","Eq","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"],["
1.36.0 · Source§

impl<K, V, S> UnwindSafe for HashMap<K, V, S>
where\n K: UnwindSafe,\n V: UnwindSafe,\n S: UnwindSafe,

","UnwindSafe","candle_transformers::models::debertav2::Id2Label","candle_transformers::models::debertav2::Label2Id"]]]]); - if (window.register_type_impls) { - window.register_type_impls(type_impls); - } else { - window.pending_type_impls = type_impls; - } -})() -//{"start":55,"fragment_lengths":[151649]} \ No newline at end of file